Аугментация данных — это процесс искусственного расширения обучающего набора данных с целью повышения качества обучения нейронной сети. В контексте Brain.js, которая является библиотекой для построения и обучения нейронных сетей на JavaScript, аугментация помогает справляться с проблемой малого объёма данных и повышает устойчивость модели к шуму и вариативности входных данных.
1. Расширение набора данных В классических сценариях, когда имеется ограниченный набор примеров, можно создавать новые вариации исходных данных. В Brain.js это особенно актуально для сетей, работающих с числовыми массивами, изображениями или текстом, представленным в виде векторов.
2. Создание синтетических примеров Синтетические данные создаются с помощью преобразований существующих примеров. Основные методы включают:
3. Балансировка классов Если исходный набор данных имеет дисбаланс между категориями (например, один класс встречается чаще), аугментация позволяет увеличить количество примеров для редких классов, что повышает точность классификации.
Добавление шума к входным данным
const brain = require('brain.js');
const net = new brain.NeuralNetwork();
function addNoise(input, intensity = 0.05) {
return input.map(value => value + (Math.random() * 2 - 1) * intensity);
}
const trainingData = [
{ input: [0.1, 0.5, 0.2], output: [1] },
{ input: [0.3, 0.7, 0.9], output: [0] }
];
const augmentedData = trainingData.map(item => ({
input: addNoise(item.input),
output: item.output
}));
net.train([...trainingData, ...augmentedData]);
В этом примере создаются новые обучающие примеры с небольшим случайным изменением значений входов, что увеличивает устойчивость сети к шуму.
Масштабирование и нормализация
Масштабирование входов помогает сети быстрее сходиться и улучшает точность. В Brain.js все входные значения обычно нормализуются в диапазоне от 0 до 1, но при аугментации можно создавать случайные вариации внутри допустимого диапазона:
function scaleInput(input, factor = 0.1) {
return input.map(value => Math.min(Math.max(value * (1 + (Math.random() * 2 - 1) * factor), 0), 1));
}
const scaledData = trainingData.map(item => ({
input: scaleInput(item.input),
output: item.output
}));
Вариации для последовательных данных
Для рекуррентных сетей (RNN, LSTM) важно разнообразие последовательностей:
const originalSequence = [0.1, 0.2, 0.3, 0.4, 0.5];
function shuffleSequence(seq) {
return seq.map(value => value + (Math.random() * 0.02 - 0.01));
}
const augmentedSequences = Array.from({ length: 5 }, () => ({
input: shuffleSequence(originalSequence),
output: [1]
}));
Такое смещение элементов позволяет модели лучше распознавать закономерности в последовательностях с небольшими вариациями.
Аугментация данных в Brain.js позволяет создавать более устойчивые и точные модели, особенно когда набор данных ограничен. Использование различных техник синтетического расширения данных становится ключевым инструментом для повышения эффективности обучения нейронных сетей на JavaScript.