Параметр binaryThresh

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


Определение и назначение

binaryThresh — это число в диапазоне от 0 до 1, задающее границу для бинаризации выходного сигнала нейрона.

  • Если значение нейрона выше binaryThresh, результат интерпретируется как 1.
  • Если значение нейрона ниже binaryThresh, результат интерпретируется как 0.

По умолчанию этот параметр установлен в 0.5, что соответствует стандартной практике бинаризации: значения больше половины считаются «истинными», а меньше — «ложными».


Использование в конфигурации сети

При создании сети параметр передается через объект конфигурации:

const brain = require('brain.js');

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

Объяснение конфигурации:

  • binaryThresh: 0.6 — выходной нейрон будет считать значение >= 0.6 как 1, а < 0.6 как 0.
  • hiddenLayers — массив с количеством нейронов в каждом скрытом слое.
  • activation — функция активации, по умолчанию sigmoid, совместимая с бинаризацией.

Влияние на результаты

Значение binaryThresh напрямую влияет на точность классификации:

  1. Слишком низкий порог (например, 0.3)

    • Практически любое положительное значение нейрона будет интерпретировано как 1.
    • Может приводить к ложным срабатываниям в бинарных задачах.
  2. Слишком высокий порог (например, 0.8)

    • Только очень высокие значения будут считаться 1.
    • Может приводить к пропуску истинных положительных случаев.

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


Пример применения для классификации

Для задачи определения, является ли число четным (0 — нечетное, 1 — четное):

const net = new brain.NeuralNetwork({ binaryThresh: 0.7 });

net.train([
  { input: { num: 0 }, output: { even: 1 } },
  { input: { num: 1 }, output: { even: 0 } },
  { input: { num: 2 }, output: { even: 1 } },
  { input: { num: 3 }, output: { even: 0 } }
]);

const output = net.run({ num: 2 }); // вернет примерно 1, если результат > 0.7
console.log(output);

В этом примере порог 0.7 гарантирует, что только высокие значения выхода сети будут считаться «четным числом».


Взаимодействие с функцией активации

Параметр binaryThresh наиболее логично работает с функциями активации, которые возвращают значения в диапазоне 0–1:

  • sigmoid — возвращает значения от 0 до 1, хорошо сочетается с бинаризацией.
  • softmax — чаще используется для многоклассовой классификации и может потребовать отдельной интерпретации выходов.

Функции активации, возвращающие отрицательные значения (tanh), не подходят для прямого использования binaryThresh.


Рекомендации по настройке

  • Начинать с 0.5, если данные сбалансированы.
  • Для чувствительных задач с перекосом классов можно подбирать порог индивидуально.
  • В задачах с нечеткой бинаризацией экспериментировать с диапазоном 0.4–0.7.
  • При использовании обучения с несколькими выходами, порог можно менять для каждого выхода отдельно, но стандартная конфигурация Brain.js применяет один binaryThresh ко всем выходам.

Заключение по сути

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