Як нормалізація шару стабілізує трансформери
Свайпніть щоб показати меню
Сучасні моделі глибокого навчання використовують методи нормалізації для ефективного та точного навчання. У сфері обробки природної мови (NLP), де вхідні послідовності можуть відрізнятися за довжиною та структурою, нормалізація особливо важлива для стабілізації процесу навчання. Два поширені методи нормалізації — це нормалізація по батчу та нормалізація по шару, але вони мають різне призначення та підходять для різних типів даних.
Нормалізація по батчу обчислює середнє значення та дисперсію кожної ознаки по всьому батчу вхідних даних. Такий підхід добре працює для задач комп'ютерного зору, де кожне зображення в батчі зазвичай має однаковий розмір і структуру. Однак у NLP-задачах, особливо з послідовностями змінної довжини, нормалізація по батчу може створювати небажані залежності між зразками в батчі та не завжди коректно працює з різною довжиною послідовностей.
Нормалізація по шару, навпаки, нормалізує ознаки в межах кожної окремої точки даних (наприклад, кожного токену в реченні) незалежно від інших точок у батчі. Це робить її значно більш придатною для NLP та моделювання послідовностей. Стандартизуючи сумарні входи до нейрона в межах шару, нормалізація по шару забезпечує однаковий масштаб представлення кожного токена незалежно від його позиції чи складу батчу. Це допомагає трансформерам стабільно навчатися та ефективніше представляти текст, особливо при роботі з довгими або складними реченнями.
123456789101112131415161718192021import 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)
Уявіть кожен рядок у вашому вхідному масиві як унікальне векторне представлення токена — як персонажа в оповіданні, кожен із власними особливостями. Функція layer_norm надає кожному токену рівні умови, коригуючи його значення так, щоб вони були зосереджені навколо нуля та мали однаковий масштаб. Вона обчислює середнє значення та дисперсію для кожного рядка, а потім трансформує значення так, щоб жоден токен не виділявся надто сильно чи не зникав на фоні. Така незалежна нормалізація означає, що незалежно від довжини послідовності чи складу пакета, ознаки кожного токена збалансовані та готові до інтерпретації моделлю. Цей підхід забезпечує стабільне та ефективне навчання моделі, особливо при роботі з непередбачуваними довжинами та структурами, які зустрічаються у реальних NLP-даних.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат