Непрерывный вывод в нейронных сетях - PullRequest
25 голосов
/ 01 декабря 2009

Как настроить нейронные сети таким образом, чтобы они принимали и выводили непрерывный диапазон значений вместо дискретных? Из того, что я помню, когда занимался в классе нейронных сетей пару лет назад, функция активации была бы сигмоидальной, что давало бы значение от 0 до 1. Если я хочу, чтобы моя нейронная сеть приводила к реальному скаляру, что мне следует делать ? Я подумал, может быть, если бы я хотел значение от 0 до 10, я мог бы просто умножить значение на 10? Что если у меня отрицательные значения? Это то, что люди обычно делают, или есть какой-то другой способ? Что насчет ввода?

Спасибо

Ответы [ 3 ]

28 голосов
/ 01 декабря 2009

Большая часть работы в области нейроэволюции связана с использованием нейронных сетей с непрерывными входами и выходами.

Существует несколько общих подходов:

  • Один узел на значение
    • Функции линейной активации - как уже отмечали другие, вы можете использовать несигмоидальные функции активации на выходных узлах, если вас беспокоит ограниченный диапазон сигмоидальных функций. Однако это может привести к тому, что ваш вывод станет произвольно большим, что может вызвать проблемы во время обучения.
    • Функции активации сигмоида - простое масштабирование сигмоидного выхода (или смещение и масштабирование, если вы хотите отрицательные значения) является распространенным подходом в нейроэволюции. Тем не менее, стоит убедиться, что ваша сигмоидальная функция не слишком крутая: активная функция активации означает, что «полезный» диапазон значений мал, что приводит к тому, что вес сети будет небольшим. (Это в основном проблема с генетическими алгоритмами, которые используют стратегию модификации с фиксированным весом, которая не работает хорошо, когда требуются малые веса.)

regular sigmoid
(источник: natekohl.net )
steep sigmoid
(источник: natekohl.net )

  • Несколько узлов на значение - распространение одного непрерывного значения на несколько узлов является общей стратегией представления непрерывных входных данных. Преимущество заключается в предоставлении большего количества «возможностей» для сети, за счет увеличения размера сети.
    • Binning - распределить один вход по нескольким узлам (например, сети RBF , где каждый узел является базисной функцией с отдельным центром, который будет частично активирован входом). Вы получаете некоторые преимущества дискретных входов без потери плавного представления.
    • Двоичное представление - разделите одно непрерывное значение на 2 N кусков, затем передайте это значение в сеть в виде двоичного шаблона на N узлов. Этот подход компактен, но довольно хрупок и приводит к тому, что входные данные изменяются непостоянно.
6 голосов
/ 01 декабря 2009

Нет правил, которые требуют, чтобы вывод (*) был какой-то конкретной функцией . Фактически нам обычно нужно добавить некоторые арифметические операции в конце функции как таковой, реализованной в данном узле, чтобы масштабировать и иным образом приводить вывод к определенной форме.

Преимущество работы с выходами "все или ничего" и / или нормализованным выходом от 0,0 до 1,0 заключается в том, что это облегчает отслеживание событий, а также позволяет избежать проблем переполнения и т. Д.

(*) «Выход» здесь может пониматься как выход данного узла (нейрона) в сети или узла сети в целом.
Как указал Марк Бесси, вход [в сеть в целом] и выход [сети] обычно получают некоторую фильтрацию / преобразование. Как указывалось в этом ответе и в комментарии Марка, может быть предпочтительнее иметь нормализованные / стандартные узлы в «скрытых» слоях сети и применять некоторую нормализацию / преобразование / дискретизацию, необходимые для ввода и / или для вывода сеть; Такая практика, однако, является лишь вопросом практичности, а не обязательным требованием нейронных сетей в целом.

3 голосов
/ 01 декабря 2009

Обычно вам необходимо выполнить некоторую фильтрацию (преобразование уровня и т. Д.) Как на входе, так и на выходе. Очевидно, что фильтрация входных данных изменит внутреннее состояние, поэтому необходимо уделить некоторое внимание тому, чтобы не потерять сигнал, на котором вы пытаетесь тренироваться.

...