Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Як нормалізація шару стабілізує трансформери | Побудова компонентів Transformer
Трансформери для обробки природної мови

bookЯк нормалізація шару стабілізує трансформери

Свайпніть щоб показати меню

Сучасні моделі глибокого навчання використовують методи нормалізації для ефективного та точного навчання. У сфері обробки природної мови (NLP), де вхідні послідовності можуть відрізнятися за довжиною та структурою, нормалізація особливо важлива для стабілізації процесу навчання. Два поширені методи нормалізації — це нормалізація по батчу та нормалізація по шару, але вони мають різне призначення та підходять для різних типів даних.

Нормалізація по батчу
expand arrow

Нормалізація по батчу обчислює середнє значення та дисперсію кожної ознаки по всьому батчу вхідних даних. Такий підхід добре працює для задач комп'ютерного зору, де кожне зображення в батчі зазвичай має однаковий розмір і структуру. Однак у NLP-задачах, особливо з послідовностями змінної довжини, нормалізація по батчу може створювати небажані залежності між зразками в батчі та не завжди коректно працює з різною довжиною послідовностей.

Нормалізація по шару
expand arrow

Нормалізація по шару, навпаки, нормалізує ознаки в межах кожної окремої точки даних (наприклад, кожного токену в реченні) незалежно від інших точок у батчі. Це робить її значно більш придатною для NLP та моделювання послідовностей. Стандартизуючи сумарні входи до нейрона в межах шару, нормалізація по шару забезпечує однаковий масштаб представлення кожного токена незалежно від його позиції чи складу батчу. Це допомагає трансформерам стабільно навчатися та ефективніше представляти текст, особливо при роботі з довгими або складними реченнями.

123456789101112131415161718192021
import numpy as np def layer_norm(x, epsilon=1e-5): """ Applies layer normalization to a 2D numpy array x. Each row is normalized independently. """ mean = np.mean(x, axis=1, keepdims=True) variance = np.var(x, axis=1, keepdims=True) normalized = (x - mean) / np.sqrt(variance + epsilon) # Optional: learnable scale and bias (gamma and beta) gamma = np.ones_like(mean) beta = np.zeros_like(mean) return gamma * normalized + beta # Example: normalize a batch of 3 token embeddings (rows) embeddings = np.array([[2.0, 4.0, 6.0], [1.0, 3.0, 5.0], [0.0, 0.0, 0.0]]) normalized_embeddings = layer_norm(embeddings) print(normalized_embeddings)
copy

Уявіть кожен рядок у вашому вхідному масиві як унікальне векторне представлення токена — як персонажа в оповіданні, кожен із власними особливостями. Функція layer_norm надає кожному токену рівні умови, коригуючи його значення так, щоб вони були зосереджені навколо нуля та мали однаковий масштаб. Вона обчислює середнє значення та дисперсію для кожного рядка, а потім трансформує значення так, щоб жоден токен не виділявся надто сильно чи не зникав на фоні. Така незалежна нормалізація означає, що незалежно від довжини послідовності чи складу пакета, ознаки кожного токена збалансовані та готові до інтерпретації моделлю. Цей підхід забезпечує стабільне та ефективне навчання моделі, особливо при роботі з непередбачуваними довжинами та структурами, які зустрічаються у реальних NLP-даних.

question mark

Чому для NLP-трансформерів віддають перевагу нормалізації шару, а не нормалізації пакета?

Виберіть правильну відповідь

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 4

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 2. Розділ 4
some-alt