Mind.js предоставляет удобный механизм для создания и управления нейросетевыми структурами через понятие узлов и связей между ними. Связи играют ключевую роль, так как именно через них передаются сигналы, формируется обучение и реализуется логика сети.
Узел — базовая единица структуры Mind.js, представляющая либо входной сигнал, либо промежуточное вычисление, либо выход сети. Создание узла выполняется с помощью конструктора:
const { Node } = require('mindjs');
let inputNode = new Node('input');
let hiddenNode = new Node('hidden');
let outputNode = new Node('output');
Каждому узлу можно присвоить тип, который определяет его роль в сети, а также дополнительные параметры, такие как функция активации или начальное значение веса.
Установка связей между узлами осуществляется через метод
connect. Связь — это направленное соединение, по которому
передаются данные от исходного узла к целевому.
inputNode.connect(hiddenNode, { weight: 0.5 });
hiddenNode.connect(outputNode, { weight: 1.2 });
Параметры связи включают:
weight — вес связи, определяющий силу передачи
сигнала.bias — смещение (необязательный параметр для некоторых
архитектур).activation — функция активации на уровне связи (редко
используется, обычно определяется на уровне узла).Mind.js позволяет создавать двунаправленные связи, а также различать типы передачи:
hiddenNode.connect(inputNode, { weight: -0.3, bidirectional: true });
Ключевой момент: двунаправленные связи создают две отдельные направленные связи, каждая со своим весом. Это позволяет симулировать обратное распространение или резонансные эффекты в сети.
Для сложных сетей удобна массовая установка связей. Mind.js поддерживает создание массивов узлов и автоматическое соединение их между собой:
let layer1 = [new Node('hidden1'), new Node('hidden2')];
let layer2 = [new Node('hidden3'), new Node('hidden4')];
layer1.forEach(source => {
layer2.forEach(target => {
source.connect(target, { weight: Math.random() });
});
});
Этот подход позволяет строить многослойные сети с минимальным кодом и гибко настраивать веса начальной инициализации.
Связи можно изменять в процессе работы сети. Методы
updateWeight и disconnect позволяют
корректировать структуру без пересоздания узлов:
hiddenNode.connections[0].updateWeight(0.8);
hiddenNode.disconnect(outputNode);
updateWeight(value) — меняет текущий вес связи на новое
значение.disconnect(targetNode) — разрывает связь с указанным
узлом.Для предотвращения дублирования соединений и контроля структуры сети
используется метод isConnected:
if (!inputNode.isConnected(hiddenNode)) {
inputNode.connect(hiddenNode, { weight: 0.7 });
}
Метод возвращает true, если связь уже существует, и
false в противном случае.
Для анализа сети полезно строить графические представления. Mind.js поддерживает экспорт структуры узлов и связей в JSON:
let networkStructure = {
nodes: [inputNode, ...layer1, ...layer2, outputNode].map(node => node.toJSON()),
connections: inputNode.getAllConnections().map(conn => conn.toJSON())
};
JSON-структура содержит ключевые свойства узлов (id,
type, value) и связей (source,
target, weight), что позволяет интегрировать
визуализацию с любыми графическими библиотеками.
Установка весов и направлений связей напрямую влияет на алгоритмы обучения. Mind.js использует веса связей для обратного распространения ошибки и для вычисления сигнала активации. При изменении весов во время обучения важно учитывать:
Управление связями в Mind.js сочетает простоту кода и мощность настройки, позволяя строить как небольшие демонстрационные модели, так и сложные многослойные сети с сотнями узлов.