Fine-tuning в Keras.js предполагает дообучение уже существующей модели на новых данных. Ключевым аспектом успешного дообучения является правильная настройка learning rate (скорости обучения). Неправильное значение может привести либо к слишком медленной адаптации модели, либо к разрушению уже выученных весов.
Скорость обучения определяет величину шага, с которым обновляются веса модели в процессе обратного распространения ошибки. Основные принципы:
При fine-tuning оптимально использовать меньшую скорость обучения, чем при обучении модели с нуля. Обычно берут значения в диапазоне от 1e-5 до 1e-4, в зависимости от глубины сети и объема новых данных.
Keras.js работает с моделями, экспортированными из Python Keras в формате JSON и бинарных весов. Поскольку Keras.js выполняется на JavaScript, обновление весов происходит через встроенные функции обратного распространения с использованием оптимизаторов, аналогичных тем, что применяются в Keras на Python.
Пример настройки оптимизатора:
import { SGD } from 'keras-js';
// Создание оптимизатора с низкой скоростью обучения
const optimizer = new SGD({ learningRate: 0.0001, momentum: 0.9 });
learningRate — ключевой параметр для fine-tuning.momentum помогает ускорить сходимость и уменьшает
колебания на плато функции потерь.В современных подходах к fine-tuning часто применяют разные learning rate для разных слоев сети:
Пример реализации в Keras.js:
model.layers.forEach((layer, index) => {
if (index < freezeIndex) {
layer.trainable = false; // фиксируем нижние слои
} else {
layer.optimizer.learningRate = 0.0005; // более высокая скорость для верхних слоев
}
});
Keras.js поддерживает основные оптимизаторы с адаптивной подстройкой скорости обучения:
learningRate
меньше стандартного 0.001.Пример использования Adam:
import { Adam } from 'keras-js';
const optimizer = new Adam({ learningRate: 0.00005, beta1: 0.9, beta2: 0.999 });
Пример экспоненциального снижения:
function getLearningRate(epoch) {
const initialLR = 0.0001;
const decayRate = 0.95;
return initialLR * Math.pow(decayRate, epoch);
}
// Обновление оптимизатора на каждой эпохе
optimizer.learningRate = getLearningRate(currentEpoch);
Слишком высокая скорость обучения на малом наборе данных может привести к сильному переобучению, так как модель будет быстро «подгонять» веса под шум новых данных. Малое значение learning rate обеспечивает более стабильное и постепенное дообучение, сохраняя обобщающую способность исходной модели.
Соблюдение этих принципов позволяет добиться максимально эффективного fine-tuning моделей в Keras.js, сохраняя точность и обобщающие способности при адаптации к новым задачам.