Подтвердить что ты не робот

Непрерывный выход в Neural Networks

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

Спасибо

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 2

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

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

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

Ответ 3

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