Вероятность и нейронные сети

Действительно ли это - хорошая практика для использования сигмовидный или выходные слои tanh в Нейронных сетях непосредственно для оценки вероятностей?

т.е. вероятность данного входа для появления является выводом сигмовидной функции в NN

Править
Я хотел использовать нейронную сеть, чтобы изучить и предсказать вероятность данного входа для появления.. Можно рассмотреть вход как кортеж State1-Action-State2. Следовательно вывод NN является вероятностью, что State2 происходит при применении Действия с State1..

Я Надеюсь, который действительно очищает вещи..

Править
Когда учебный NN, я делаю случайное Действие с State1 и наблюдаю результирующий State2; затем преподавайте NN, что входной State1-Action-State2 должен привести к выводу 1.0

16
задан Betamoo 7 May 2010 в 11:25
поделиться

3 ответа

Во-первых, пара небольших замечаний по обычной лексике MLP (может помочь при поиске в интернете и т.д.): 'sigmoid' и 'tanh' - это не "выходные слои", а функции, обычно называемые "функциями активации". Возвращаемое значение функции активации действительно является выходом каждого слоя, но сами они не являются выходными слоями (и не вычисляют вероятности).

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

Термин "сигмоидальная", вероятно, связан с характерной формой функции - значения возврата (y) ограничены между двумя асимптотическими значениями независимо от значения x. Выход функции обычно нормируется так, чтобы эти два значения были равны -1 и 1 (или 0 и 1). (Такое поведение выхода, кстати, явно вдохновлено биологическим нейроном, который либо срабатывает (+1), либо нет (-1)). Взглянув на ключевые свойства сигмоидальных функций, можно понять, почему они идеально подходят в качестве функций активации в нейронных сетях с прямой передачей и обратным распространением: (i) вещественные и дифференцируемые, (ii) имеющие ровно одну точку перегиба, и (iii) имеющие пару горизонтальных асимптот.

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

def step_fn(x) :
  if x <= 0 :
    y = 0
  if x > 0 :
    y = 1    

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

Я полагаю, что существует неограниченное количество возможных функций активации, но на практике вы увидите только несколько; фактически только две из них составляют подавляющее большинство случаев (обе сигмоидальные). Вот они (на языке python), чтобы вы могли поэкспериментировать сами, учитывая, что основной критерий выбора - практический:

# logistic function
def sigmoid2(x) :
  return 1 / (1 + e**(-x))   

# hyperbolic tangent
def sigmoid1(x) :
  return math.tanh(x)

какие факторы следует учитывать при выборе функции активации?

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

Например, производная гиперболического тангенса имеет вид (в терминах выхода, как это обычно записывается):

def dsigmoid(y) :
  return 1.0 - y**2

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

#-------- Редактировать (см. комментарий ОП ниже) ---------#

Я не совсем уверен, что понял - иногда трудно передать детали NN без кода, так что я, вероятно, должен просто сказать, что все в порядке при соблюдении этой оговорки: То, что вы хотите, чтобы NN предсказывала, должно совпадать с зависимой переменной, используемой во время обучения. Так, например, если вы обучаете NN, используя два состояния (например, 0, 1) как единственную зависимую переменную (которая, очевидно, отсутствует в ваших данных тестирования/производства), то это то, что ваша NN вернет при запуске в "режиме предсказания" (после обучения или с компетентной матрицей весов).

21
ответ дан 30 November 2019 в 17:38
поделиться

У этого подхода есть одна проблема: если у вас есть векторы из R ^ n и ваша сеть отображает эти векторы в интервал [0, 1], не будет гарантировано, что сеть представляет действительную функцию плотности вероятности, поскольку интеграл сети не гарантированно равен 1.

Например, нейронная сеть может отображать любую входную форму R ^ n в 1.0. Но это явно невозможно.

Итак, ответ на ваш вопрос: нет, не можете.

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

4
ответ дан 30 November 2019 в 17:38
поделиться

Вы должны выбрать правильную функцию потерь для минимизации. Квадрат ошибки не приводит к гипотезе максимального правдоподобия. Квадрат ошибки получен из модели с гауссовским шумом:

P(y|x,h) = k1 * e**-(k2 * (y - h(x))**2)

Вы оцениваете вероятности напрямую. Ваша модель:

P(Y=1|x,h) = h(x)
P(Y=0|x,h) = 1 - h(x)

P(Y=1|x,h) - вероятность того, что событие Y=1 произойдет после просмотра x.

Гипотеза максимального правдоподобия для вашей модели:

h_max_likelihood = argmax_h product(
    h(x)**y * (1-h(x))**(1-y) for x, y in examples)

Это приводит к функции потерь "перекрестной энтропии". См. главу 6 в Mitchell's Machine Learning о функции потерь и ее выводе.

6
ответ дан 30 November 2019 в 17:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: