Инициализация весов является фундаментальной частью построения нейронных сетей. Она напрямую влияет на скорость сходимости модели и стабильность обучения. В Keras.js, как и в Keras для Python, поддерживается множество стандартных и настраиваемых инициализаторов весов, позволяющих контролировать распределение начальных значений параметров сети.
Инициализаторы определяют способ задания начальных значений весов и смещений слоя. Правильная инициализация помогает избежать проблем, таких как:
Keras.js наследует концепцию распределений и функций из оригинальной библиотеки Keras, обеспечивая совместимость моделей, обученных на Python, для запуска в браузере на JavaScript.
Keras.js поддерживает несколько встроенных методов инициализации,
которые применяются через свойство kernelInitializer (для
весов) и biasInitializer (для смещений) слоя.
1. Zeros Все веса и смещения устанавливаются равными нулю. Используется редко, так как одинаковые веса для всех нейронов приводят к симметричному обновлению градиентов.
2. Ones Все веса равны единице. Практическое применение ограничено случаями, когда требуется задать единичные значения как базу для дальнейшей оптимизации.
3. RandomUniform Веса инициализируются случайными
числами из равномерного распределения в заданном диапазоне
[minval, maxval].
const layer = {
type: 'Dense',
units: 64,
kernelInitializer: { class_name: 'RandomUniform', config: { minval: -0.05, maxval: 0.05 } }
};
4. RandomNormal Инициализация весов из нормального
распределения с заданными средним mean и стандартным
отклонением stddev.
5. HeNormal и HeUniform Инициализация по Хе (He), оптимизированная для слоев с активацией ReLU. Распределение весов масштабируется в зависимости от числа входных нейронов:
HeNormal – нормальное распределениеHeUniform – равномерное распределениеЭти методы позволяют избежать затухания градиентов при обучении глубоких сетей.
6. GlorotNormal и GlorotUniform (Xavier) Инициализация по Ксавьеру подходит для tanh и sigmoid активаций. Весы выбираются так, чтобы дисперсия сигналов оставалась примерно одинаковой на входе и выходе слоя:
const denseLayer = {
type: 'Dense',
units: 128,
kernelInitializer: { class_name: 'GlorotNormal', config: {} }
};
Keras.js позволяет создавать свои инициализаторы, задавая функцию генерации значений. Основная структура пользовательского инициализатора включает:
apply(shape) для генерации тензора заданной
формы.Пример простого инициализатора, генерирующего веса в диапазоне [-0.1, 0.1]:
function customInitializer(shape) {
const values = [];
const size = shape.reduce((a, b) => a * b, 1);
for (let i = 0; i < size; i++) {
values.push(Math.random() * 0.2 - 0.1);
}
return new Float32Array(values);
}
Этот инициализатор можно назначить конкретному слою через
kernelInitializer.
biasInitializer).Правильный выбор инициализатора обеспечивает более быструю сходимость и стабильность обучения, особенно в глубоких сетях.
class_name
и config, что обеспечивает совместимость с сохраненными
моделями Keras.Инициализация весов в Keras.js — это точный инструмент, позволяющий контролировать стартовые условия обучения сети, минимизировать проблемы с градиентами и повышать эффективность тренировки нейронных моделей прямо в браузере.