Во-первых, всего пара небольших точек в традиционной лексике MLP (может помочь при поиске в Интернете и т. Д.): «Sigmoid» и «tanh» - это не «выходные слои», а функции, обычно называемые «функциями активации». ». Возвращаемое значение функции активации действительно является выходным сигналом каждого слоя, но они сами не являются выходным слоем (и при этом они не вычисляют вероятности).
Кроме того, ваш вопрос содержит выбор между двумя «альтернативами» («сигмоид и танх»), но на самом деле они не являются альтернативами, а термин «сигмоидальная функция» является общим / неформальным термином для класса функций, который включает гиперболический тангенс («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 будет возвращать при запуске в «режиме прогнозирования» (после тренировки или с грамотной весовой матрицей).