Статистические основы оценки качества модели

Библиотека Synaptic представляет собой нейросетевой фреймворк на JavaScript, позволяющий создавать, обучать и тестировать нейронные сети различной сложности. В основе лежат нейроны, слои и сети, которые можно комбинировать для построения как простых, так и сложных архитектур.

  • Neuron — базовый строительный блок сети. Каждый нейрон имеет веса (weights), смещение (bias) и функцию активации (activation function).
  • Layer — объединение нейронов в логические блоки. Слои могут быть полносвязными (fully connected), рекуррентными или иметь другие виды соединений.
  • Network — конечная структура, объединяющая слои и определяющая путь распространения сигналов и обратного распространения ошибок.

Создание и обучение сети

Создание сети начинается с инициализации слоев и задания количества нейронов в каждом из них:

const { Layer, Network, Trainer } = require('synaptic');

const inputLayer = new Layer(3);
const hiddenLayer = new Layer(4);
const outputLayer = new Layer(2);

inputLayer.project(hiddenLayer);
hiddenLayer.project(outputLayer);

const myNetwork = new Network({
    input: inputLayer,
    hidden: [hiddenLayer],
    output: outputLayer
});

Обучение сети производится с помощью Trainer, который реализует различные алгоритмы обучения, включая backpropagation. В процессе обучения сеть подстраивает веса и смещения нейронов под данные обучающей выборки.

const trainer = new Trainer(myNetwork);

trainer.train([
    { input: [0,0,1], output: [0,1] },
    { input: [1,0,0], output: [1,0] }
], {
    rate: 0.1,
    iterations: 20000,
    error: 0.005,
    shuffle: true
});

Методы оценки качества модели

Ключевым этапом при работе с нейронными сетями является оценка качества модели. В Synaptic нет встроенных статистических функций, поэтому необходимо самостоятельно реализовывать метрики оценки.

Ошибка среднеквадратичная (Mean Squared Error, MSE)

MSE показывает средний квадрат отклонения предсказанного значения от реального. Для сети с несколькими выходами вычисляется как среднее по всем выходам и всем примерам.

function meanSquaredError(network, testData) {
    let totalError = 0;
    testData.forEach(sample => {
        const output = network.activate(sample.input);
        output.forEach((val, i) => {
            const error = sample.output[i] - val;
            totalError += error * error;
        });
    });
    return totalError / testData.length;
}

Точность классификации (Accuracy)

Для задач классификации используется метрика точности. Она измеряет долю правильных предсказаний относительно общего числа примеров.

function accuracy(network, testData) {
    let correct = 0;
    testData.forEach(sample => {
        const output = network.activate(sample.input);
        const predicted = output.map(v => v >= 0.5 ? 1 : 0);
        if(predicted.toString() === sample.output.toString()) correct++;
    });
    return correct / testData.length;
}

Кросс-энтропийная ошибка (Cross-Entropy)

Эта метрика подходит для задач многоклассовой классификации. Она учитывает вероятность предсказаний сети и фактические метки.

function crossEntropy(network, testData) {
    let total = 0;
    testData.forEach(sample => {
        const output = network.activate(sample.input);
        output.forEach((p, i) => {
            const y = sample.output[i];
            total += -y * Math.log(p + 1e-12) - (1 - y) * Math.log(1 - p + 1e-12);
        });
    });
    return total / testData.length;
}

Разделение данных и контроль переобучения

Переобучение (overfitting) возникает, когда сеть идеально подстраивается под тренировочные данные, но плохо обобщает на новые. Для его предотвращения данные делятся на три множества:

  • Training set — используется для обучения сети.
  • Validation set — применяется для мониторинга обучения и настройки гиперпараметров.
  • Test set — служит для финальной оценки качества модели.

В Synaptic разделение выполняется вручную:

const trainData = data.slice(0, Math.floor(data.length * 0.7));
const validationData = data.slice(Math.floor(data.length * 0.7), Math.floor(data.length * 0.85));
const testData = data.slice(Math.floor(data.length * 0.85));

Визуализация и анализ результатов

Для анализа поведения сети полезно строить графики изменения ошибок по эпохам и кривые точности. Даже без встроенных инструментов Synaptic, данные можно экспортировать и визуализировать средствами JavaScript, например, с помощью библиотек Chart.js или D3.js. Визуализация помогает выявлять признаки переобучения и недообучения, а также оптимизировать скорость обучения и структуру сети.

Итеративная оптимизация

Оптимизация сети — непрерывный процесс. В Synaptic можно варьировать:

  • Learning rate (скорость обучения) — контролирует величину изменения весов.
  • Количество скрытых нейронов и слоев — влияет на способность сети к обобщению.
  • Функцию активации нейронов — сигмоида, tanh или ReLU.

Комбинация этих параметров и тщательный анализ метрик качества позволяют создавать эффективные модели, способные справляться с реальными данными.