В библиотеке Synaptic learning rate (скорость обучения) задаётся
через параметр learningRate при обучении сети методом
обратного распространения ошибки. Значение этого параметра определяет,
насколько сильно корректируются веса нейронной сети на каждой итерации
обучения. Управление learning rate является критически важным для
сходимости сети и скорости обучения.
network.train(trainingSet, {
rate: 0.1, // learning rate
iterations: 20000,
error: 0.005,
shuffle: true,
log: 1000
});
В этом примере rate: 0.1 задаёт базовую скорость
обучения. Простая константная скорость подходит для небольших или
стабильных задач, но в более сложных сценариях часто требуется
динамическая корректировка learning rate.
Одна из распространённых стратегий — уменьшение learning rate
по мере обучения. Цель — позволить сети сначала быстро
адаптироваться, а затем более точно уточнять веса. В Synaptic это
реализуется вручную через циклы обучения и изменение параметра
rate.
Пример:
let rate = 0.5;
for (let i = 0; i < 10000; i++) {
network.activate(inputData);
network.propagate(rate, targetOutput);
// Линейное уменьшение learning rate
rate *= 0.999;
}
Ключевой момент: слишком резкое уменьшение learning rate может замедлить обучение, а слишком медленное — привести к колебаниям и нестабильности.
Для более контролируемого снижения используется пошаговое уменьшение. Здесь learning rate фиксируется на определённом значении несколько итераций, а затем уменьшается на ступень:
let initialRate = 0.5;
let steps = [5000, 10000, 15000]; // итерации, после которых уменьшается rate
let rates = [0.5, 0.1, 0.01, 0.001];
for (let i = 0; i < 20000; i++) {
network.activate(inputData);
network.propagate(rates[0], targetOutput);
if (i >= steps[0]) rates[0] = rates[1];
if (i >= steps[1]) rates[0] = rates[2];
if (i >= steps[2]) rates[0] = rates[3];
}
Пошаговое снижение подходит для задач, где требуется стабильная сходимость на финальных этапах обучения.
Адаптивное изменение learning rate основано на мониторинге ошибки. Если ошибка уменьшается медленно или колеблется, learning rate корректируется автоматически:
let rate = 0.3;
let prevError = Infinity;
for (let i = 0; i < 10000; i++) {
let output = network.activate(inputData);
let error = network.propagate(rate, targetOutput);
if (error > prevError) {
rate *= 0.9; // уменьшение, если ошибка растёт
} else {
rate *= 1.01; // небольшое увеличение при успешной сходимости
}
prevError = error;
}
Адаптивная стратегия позволяет избегать застревания в локальных минимумах и повышает стабильность обучения.
Часто на практике используют комбинированные подходы: начальное быстрое обучение с высоким learning rate, затем пошаговое или адаптивное уменьшение. Такой подход повышает скорость обучения на начальных этапах и точность на финальных:
let rate = 0.5;
let prevError = Infinity;
for (let i = 0; i < 20000; i++) {
let output = network.activate(inputData);
let error = network.propagate(rate, targetOutput);
// Адаптивная корректировка
if (error > prevError) rate *= 0.95;
// Пошаговое снижение
if (i === 10000) rate = 0.05;
prevError = error;
}
rate.Хотите, я могу сделать отдельный раздел с реальными примерами обучения сети XOR с разными стратегиями изменения learning rate — это будет практическая иллюстрация всех подходов.