Дообучение (англ. retraining) — это процесс обновления уже обученной нейронной сети с новыми данными, не создавая модель с нуля. В Brain.js этот подход позволяет сохранять уже накопленные знания сети и адаптировать её к изменяющимся условиям.
Модели в Brain.js могут быть сохранены и восстановлены с помощью
методов .toJSON() и .fromJSON(). Это ключевой
элемент для организации дообучения.
const brain = require('brain.js');
const net = new brain.NeuralNetwork();
// Обучение на начальном наборе данных
net.train([
{ input: { red: 1, green: 0, blue: 0 }, output: { color: 1 } },
{ input: { red: 0, green: 1, blue: 0 }, output: { color: 0 } }
]);
// Сохранение состояния сети
const savedModel = net.toJSON();
// Восстановление модели
const restoredNet = new brain.NeuralNetwork();
restoredNet.fromJSON(savedModel);
Важно: toJSON() сохраняет структуру
сети, веса и смещения нейронов. Это позволяет восстановить модель в
точности такой же, какой она была после обучения, и продолжить
тренировку на новых данных.
Для эффективного дообучения необходимо убедиться, что новые данные соответствуют формату исходного обучения:
input) должны иметь те
же ключи и нормализованное представление.output) должны быть
совместимы с ранее использованной схемой кодирования.Пример корректной подготовки новых данных:
const additionalData = [
{ input: { red: 0, green: 0, blue: 1 }, output: { color: 0.5 } },
{ input: { red: 1, green: 1, blue: 0 }, output: { color: 0.8 } }
];
После восстановления модели можно продолжить обучение с новым набором
данных. В Brain.js метод .train() позволяет указать
дополнительные параметры для более точной настройки:
iterations — количество циклов обучения.learningRate — скорость обучения.log — функция логирования прогресса.Пример:
restoredNet.train(additionalData, {
iterations: 2000,
learningRate: 0.01,
log: true,
logPeriod: 100
});
Особенности дообучения:
Для предотвращения потери информации старые данные можно объединять с новыми:
const combinedData = [
{ input: { red: 1, green: 0, blue: 0 }, output: { color: 1 } },
{ input: { red: 0, green: 1, blue: 0 }, output: { color: 0 } },
...additionalData
];
restoredNet.train(combinedData, { iterations: 3000, learningRate: 0.01 });
Такой подход гарантирует, что сеть не забудет исходные паттерны и одновременно адаптируется к новым ситуациям.
Brain.js поддерживает LSTM (Long Short-Term Memory), что полезно для последовательных данных, таких как текст. Принципы дообучения схожи:
const lstm = new brain.recurrent.LSTMNetwork();
// Изначальное обучение
lstm.train([
{ input: 'Привет', output: 'Здравствуйте' },
{ input: 'Как дела?', output: 'Хорошо' }
]);
const savedLSTM = lstm.toJSON();
// Дообучение на новых примерах
const newConversations = [
{ input: 'Доброе утро', output: 'Доброе утро!' },
{ input: 'Пока', output: 'До свидания' }
];
const lstmRestored = new brain.recurrent.LSTMNetwork();
lstmRestored.fromJSON(savedLSTM);
lstmRestored.train(newConversations, { iterations: 1000 });
Особенности LSTM: При дообучении текстовых данных важно сохранять совместимость с исходной кодировкой символов, чтобы сеть не теряла способность распознавать ранее обученные последовательности.
Оптимизация процесса дообучения включает:
learningRate) —
небольшие значения предотвращают переобучение новых данных.iterations) —
баланс между точностью на новых данных и сохранением старых знаний.log и
logPeriod) — отслеживание изменения функции потерь
на каждом этапе.Эти параметры позволяют гибко управлять обучением, предотвращая разрушение ранее изученных паттернов.
Дообучение в Brain.js обеспечивает плавную эволюцию нейросети, позволяя адаптироваться к изменяющимся условиям и расширять функциональность без полного пересоздания модели.