Взвешенные связи

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


Инициализация весов

При создании нейронной сети с помощью Mind.js веса могут задаваться случайным образом или через предварительно определённые значения. Использование случайной инициализации предотвращает симметрию между нейронами, что важно для успешного обучения.

Пример случайной инициализации в Mind.js:

const { NeuralNetwork } = require('mind');

const net = new NeuralNetwork({
  hiddenLayers: [3],
  learningRate: 0.05
});

// Веса внутри сети создаются автоматически при первом обучении

Mind.js использует нормальное распределение для генерации начальных весов, что обеспечивает их близость к нулю и позволяет быстрее сходиться во время тренировки.


Принцип работы взвешенных связей

Каждое соединение между нейронами имеет вес w, который умножается на значение входа x. Сумма произведений весов на входы формирует сигнал для нейрона следующего слоя:

[ y = f(_{i} w_i x_i + b)]

где:

  • w_i — вес для i-го входа,
  • x_i — значение i-го входа,
  • b — смещение (bias),
  • f — активационная функция.

В Mind.js смещение также рассматривается как вес, привязанный к постоянному входу, равному 1.


Адаптация весов в процессе обучения

Обучение нейронной сети заключается в постепенной корректировке весов для минимизации ошибки. Mind.js использует метод обратного распространения ошибки (backpropagation), где каждый вес корректируется в зависимости от частной производной функции ошибки по отношению к нему:

[ w = - ]

где:

  • η — коэффициент обучения (learningRate),
  • E — функция ошибки.

Mind.js автоматически обновляет веса при вызове метода train:

net.train([{ input: [0, 1], output: [1] }], {
  iterations: 20000,
  errorThresh: 0.005,
  log: true,
  learningRate: 0.05
});

Регулировка влияния весов

Mind.js позволяет управлять весами через:

  • learningRate — скорость корректировки весов;
  • momentum — коэффициент, сглаживающий изменения веса для предотвращения застревания в локальных минимумах;
  • инициализация вручную — прямое присвоение значений весам для специфических задач.

Пример ручной установки весов:

net.fromJSON({
  sizes: [2, 3, 1],
  layers: {
    0: { 0: { bias: 0.1, weights: { 0: 0.5, 1: -0.4 } } },
    1: { 0: { bias: -0.2, weights: { 0: 0.3, 1: 0.8, 2: -0.5 } } }
  }
});

Влияние взвешенных связей на производительность сети

  • Большие веса усиливают влияние соответствующих входов на выход, но могут привести к нестабильности при использовании функций активации с ограниченным диапазоном, например, сигмоиды.
  • Малые веса уменьшают влияние входов, способствуя стабильности, но замедляют обучение.
  • Нулевой вес полностью исключает вход из расчёта, что эквивалентно отсутствию связи.

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


Визуализация и отладка весов

Mind.js предоставляет возможность извлечения весов для анализа:

const json = net.toJSON();
console.log(json.layers);

Это позволяет исследовать распределение весов, выявлять слишком большие или слишком маленькие значения и корректировать гиперпараметры сети.


Взвешенные связи формируют основу вычислительной мощности нейронной сети в Mind.js. Их правильная инициализация, адаптация и анализ напрямую определяют способность сети к обучению и качеству предсказаний.