Векторное представление данных является фундаментальной концепцией в машинном обучении и нейросетях, в том числе при работе с библиотекой Brain.js в JavaScript. Основная идея заключается в преобразовании информации в числовой формат, который может быть интерпретирован нейронной сетью. Каждое наблюдение, объект или сигнал представляется в виде вектора — одномерного массива чисел.
Вектор в контексте Brain.js — это массив чисел в диапазоне от 0 до 1 (для большинства нейронных сетей) или от -1 до 1, в зависимости от используемой функции активации. Такой формат необходим, поскольку нейросети оперируют математическими вычислениями, а не текстом или сложными структурами данных.
Например, для представления цвета в RGB можно использовать вектор:
const colorVector = [0.5, 0.7, 0.2]; // Соответствует RGB (128, 179, 51)
Каждое значение нормализуется к диапазону [0,1], что
обеспечивает стабильность обучения.
Категориальные признаки, такие как “красный”, “синий”, “зелёный”, требуют one-hot кодирования:
const colors = {
red: [1, 0, 0],
green: [0, 1, 0],
blue: [0, 0, 1]
};
Такой подход позволяет нейросети различать категории без введения порядковой зависимости, которая могла бы исказить результаты.
Текстовые данные в Brain.js преобразуются в векторы через кодирование символов или слов. Для символов применяется метод one-hot для каждого символа:
const alphabet = 'abc';
const charToVector = char => {
return alphabet.split('').map(c => c === char ? 1 : 0);
};
charToVector('b'); // [0, 1, 0]
Для слов или фраз можно использовать суммирование или усреднение векторов символов, что создаёт компактное числовое представление текста.
Числовые признаки могут быть использованы напрямую, но их нормализация критична для корректной работы сети:
const normalize = (value, min, max) => (value - min) / (max - min);
const age = normalize(25, 0, 100); // 0.25
Нормализация предотвращает дисбаланс весов в сети и ускоряет сходимость.
Создание простой сети и использование векторных данных:
const brain = require('brain.js');
const net = new brain.NeuralNetwork();
const trainingData = [
{ input: [0, 0], output: [0] },
{ input: [0, 1], output: [1] },
{ input: [1, 0], output: [1] },
{ input: [1, 1], output: [0] }
];
net.train(trainingData);
const output = net.run([1, 0]); // Ожидаемый результат: около 1
В этом примере входные данные [0,1] — векторы бинарных
признаков, а сеть обучается распознавать логическую операцию XOR.
[0,1] или [-1,1].Brain.js позволяет строить многослойные перцептроны, где каждый входной вектор последовательно проходит через слои сети:
Пример с конфигурацией слоёв:
const net = new brain.NeuralNetwork({
hiddenLayers: [4, 3], // два скрытых слоя с 4 и 3 нейронами
activation: 'sigmoid'
});
Каждое число в векторе входного слоя участвует в вычислении взвешенной суммы, после чего применяется функция активации, что позволяет сети выявлять сложные зависимости в данных.
Векторное представление данных обеспечивает нейросети способность работать с разными типами информации: числовой, категориальной, текстовой и даже визуальной. Правильная подготовка векторов напрямую влияет на точность и скорость обучения, а также на способность сети обобщать знания на новых примерах.
В Brain.js векторы — это основной интерфейс между данными и вычислительными слоями нейронной сети, без которого обучение и предсказания невозможны.