Как получить реальный непрерывный выход из нейронной сети?

13

В большинстве примеров нейронных сетей, которые я видел до сих пор, сеть используется для классификации, а узлы трансформируются сигмоидальной функцией. Тем не менее, я хотел бы использовать нейронную сеть для вывода непрерывного реального значения (реально выходной сигнал обычно находится в диапазоне от -5 до +5).

Мои вопросы:

1. Should I still scale the input features using feature scaling? What range?
2. What transformation function should I use in place of the sigmoid?

Я ищу изначально реализовать его PyBrain, который описывает эти типы слоев .

Итак, я думаю, что у меня должно быть 3 слоя для начала (входной, скрытый и выходной), которые являются линейными слоями? Это разумный способ? Или же я мог бы «растянуть» сигмовидную функцию в диапазоне от -5 до 5?

пользователь
источник
1
Конечно, вы можете использовать сигмовидную . Например, начать с логистической функции, умножить на 10, вычесть 5 ...[,][5,5]
cbeleites поддерживает Монику
Есть ли конкретная причина, по которой вы избегаете использовать два скрытых слоя? Казалось бы, это самый простой способ получить реальный непрерывный вывод из нейронной сети. «Любая функция может быть аппроксимирована с произвольной точностью сетью с двумя скрытыми слоями» (упоминается в примечаниях к слайду с текстом машинного обучения Митчелла 26: cs.cmu.edu/afs/cs.cmu.edu/project/theo-20/ www / mlbook / ch4.pdf )
Крис Симокат
@ChrisSimokat: Нет, но большая часть того, что я читал до сих пор, предлагает один скрытый слой в качестве разумной отправной точки. Может ли сеть одного скрытого слоя не приближаться к какой-либо функции?
Пользователь
1
@ChrisSimokat: Может быть, я что-то упускаю, но я подумал, что один скрытый слой не равен «персептрону одного слоя», нет?
Пользователь
1
Нет, ты ничего не пропустил. Я просто, по-видимому, недостаточно внимательно читал об этом.
Крис Симокат

Ответы:

12

1 . Должен ли я по-прежнему масштабировать входные объекты, используя масштабирование объектов? Какой диапазон?

Масштабирование не делает ничего хуже. Прочтите этот ответ в FAQ по нейронной сети Sarle: Тема: Должен ли я нормализовать / стандартизировать / изменить масштаб данных? ,

2 . Какую функцию преобразования я должен использовать вместо сигмовидной кишки?

[0,1][1,1][5,5]

альфа
источник
Как правильно масштабировать выход нейронной сети до диапазона [-5,5]?
Пользователь
3
e[a,b][c,d]eaba(dc)+c
2
Но поскольку сигмоид является нелинейным, при равномерном распределении, определяющем значение сигмоиды, мы, вероятно, получим что-то близкое к 1 или близкое к 0. Это означает, что мы должны научить нашу сеть более тщательно подбирать значения в середине. Является ли сигмоид + скейлинг действительно хорошим выбором?
Smarty77
0

Отказ от ответственности: представленный подход неосуществим для непрерывных значений, но я верю, что он имеет некоторый вес при принятии решений по проекту. Smarty77 поднимает вопрос об использовании измененной сигмовидной функции. По своей сути, сигмовидная функция создает вероятность, которая описывает частоту успешных выборок (т.е. 95 из 100 фотографий с этими характеристиками являются «собачьими»). Описанный конечный результат является двоичным, и тренинг с использованием «бинарной кросс-энтропии» описывает процесс разделения диаметрально противоположных результатов, который по своей сути препятствует результатам в среднем диапазоне. Континуум выходных данных предназначен только для масштабирования, основанного на количестве выборок (т. Е. Результат 0,9761 означает, что 9761 из 10000 выборок, отображающих эти или подобные триаты, являются «собаками»), но каждый результат сам по себе должен рассматриваться как двоичный, а не как произвольно гранулированный. Как таковой, он не должен быть принят и применен как реальное число и может быть неприменим здесь. Хотя я не уверен в использовании сети, я бы нормализовал выходной вектор сам по себе. Это можно сделать с помощью softmax. Это также потребует наличия 11 линейных выходов (бинов) из сети (по одному для каждого выхода от -5 до +5), по одному для каждого класса. Это обеспечит ценность для любого «мусорного ведра», являющегося правильным ответом. Эту архитектуру можно было бы обучить с использованием однократного кодирования, где 1 указывает на правильную ячейку. Результат интерпретируется таким образом, как жадная стратегия или вероятностная выборка. Однако, чтобы превратить его в непрерывную переменную, гарантированность каждого индекса может использоваться в качестве веса для размещения маркера на числовой строке (аналогично поведению сигмовидной единицы), но это также подчеркивает главную проблему: если сеть достаточно уверена, результат равен -2 или +3, но абсолютно уверены, что это ничто иное, +1 жизнеспособный результат? Спасибо за ваше внимание. Удачи с проектом.

Роберт Хилдрет
источник