Векторное представление данных

Векторное представление данных является фундаментальной концепцией в машинном обучении и нейросетях, в том числе при работе с библиотекой 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

Нормализация предотвращает дисбаланс весов в сети и ускоряет сходимость.


Примеры использования в Brain.js

Создание простой сети и использование векторных данных:

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].
  • Согласованность формата: все векторы должны иметь одинаковую длину.
  • Сложные объекты: для изображений используется разбиение на пиксели и нормализация каждого канала (RGB).
  • One-hot кодирование категорий: минимизирует ошибки обучения, исключая искажения порядком.
  • Снижение размерности: большие векторы могут замедлять обучение; применяются методы отбора признаков или PCA перед подачей в сеть.

Векторы в многослойных сетях

Brain.js позволяет строить многослойные перцептроны, где каждый входной вектор последовательно проходит через слои сети:

  1. Входной слой принимает вектор фиксированной длины.
  2. Скрытые слои преобразуют его, используя веса и функции активации.
  3. Выходной слой выдаёт результат в виде вектора, соответствующего предсказанным значениям.

Пример с конфигурацией слоёв:

const net = new brain.NeuralNetwork({
  hiddenLayers: [4, 3], // два скрытых слоя с 4 и 3 нейронами
  activation: 'sigmoid'
});

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


Итоговое значение векторов

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

В Brain.js векторы — это основной интерфейс между данными и вычислительными слоями нейронной сети, без которого обучение и предсказания невозможны.