Нормализация слоёв в нейронных сетях является важным инструментом для ускорения обучения и стабилизации процесса оптимизации. В Keras.js, JavaScript-версии Keras, реализованы ключевые подходы к нормализации: BatchNormalization и LayerNormalization, каждый из которых имеет свои особенности и применимость в зависимости от архитектуры сети и характера данных.
BatchNormalization (BN) применяется для нормализации входов каждого слоя по мини-батчу. Основная идея заключается в том, чтобы смещать и масштабировать активации слоя так, чтобы они имели нулевое среднее и единичную дисперсию в рамках одного батча.
Основные свойства BN:
Параметры в Keras.js:
axis: определяет ось, вдоль которой производится
нормализация. Для плотных слоёв обычно axis=-1, для
сверточных — ось каналов.momentum: коэффициент для скользящей средней
вычисленных статистик при обучении. Стандартное значение 0.99.epsilon: маленькое число для предотвращения деления на
ноль при вычислении стандартного отклонения.center и scale: флаги для добавления
обучаемого сдвига (β) и масштаба (γ).Пример применения BN в Keras.js:
const model = new KerasJS.Model({
layers: [
{ class_name: 'Dense', config: { units: 128, activation: 'relu' } },
{ class_name: 'BatchNormalization', config: { axis: -1, momentum: 0.99, epsilon: 1e-3 } },
{ class_name: 'Dense', config: { units: 10, activation: 'softmax' } }
]
});
Особенности использования:
LayerNormalization (LN) нормализует входные значения слоя по всем нейронам одного примера, а не по батчу. Это делает LN особенно полезным для рекуррентных сетей и ситуаций, когда размер батча мал или варьируется.
Основные характеристики LN:
Параметры в Keras.js:
axis: ось или оси, по которым производится
нормализация. Обычно axis=-1 для плотных слоёв.epsilon: предотвращает деление на ноль.center и scale: добавление обучаемых
параметров β и γ.Пример применения LN в Keras.js:
const model = new KerasJS.Model({
layers: [
{ class_name: 'Dense', config: { units: 128, activation: 'relu' } },
{ class_name: 'LayerNormalization', config: { axis: -1, epsilon: 1e-5 } },
{ class_name: 'Dense', config: { units: 10, activation: 'softmax' } }
]
});
Особенности использования:
| Параметр | BatchNormalization | LayerNormalization |
|---|---|---|
| Нормализация по | Батчу | Примеру |
| Зависимость от размера батча | Да | Нет |
| Тип архитектуры | CNN, плотные сети | RNN, Transformer, малые батчи |
| Регуляризация | Слабая | Нет |
| Стабильность на малых батчах | Низкая | Высокая |
Выводы по применению:
axis, так как
неверная ось приведёт к ошибкам в вычислении статистик.epsilon для предотвращения численных
нестабильностей, особенно при глубоком обучении.Эти слои нормализации позволяют существенно улучшить стабильность и скорость обучения нейронных сетей в Keras.js, обеспечивая гибкость при работе с различными архитектурами и размерами батчей.