machine learning - русском - Вероятность и нейронные сети



обучение нейронной сети (2)

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

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

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

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

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 будет возвращать при запуске в «режиме прогнозирования» (после тренировки или с грамотной весовой матрицей).

https://src-bin.com

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

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

РЕДАКТИРОВАТЬ
Я хотел использовать нейронную сеть, чтобы узнать и предсказать вероятность того, что данный вход произойдет. Вы можете рассматривать вход как кортеж State1-Action-State2. Следовательно, выходные данные NN - это вероятность того, что State2 произойдет при применении Action к State1 ..

Я надеюсь, что это делает вещи ясными ..

РЕДАКТИРОВАТЬ
При обучении NN я делаю случайное действие на State1 и наблюдаю результирующее State2; затем научите NN, что ввод State1-Action-State2 должен привести к выводу 1.0


Answer #1

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

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 в «Машинном обучении Митчелла» для функции потерь и ее производных.





classification