Вопрос

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

Спасибо

Это было полезно?

Решение

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

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

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

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

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

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top