Ответ 1
Во-первых, всего лишь несколько небольших точек в обычном лексиконе MLP (может помочь для поиска в Интернете и т.д.): "сигмоид" и "tanh" не являются "выходными слоями", а функциями, обычно называемыми "функциями активации" ". Возвращаемое значение функции активации действительно является выходным из каждого уровня, но они не являются самим выходным слоем (и они не вычисляют вероятности).
Кроме того, в вашем вопросе предлагается выбор между двумя "альтернативами" ( "сигмоид и тань" ), но они на самом деле не альтернативы, а термин "сигмоидальная функция" является общим/неформальным термином для класса функций, который включает гиперболический тангенс ('tanh'), на который вы ссылаетесь.
Термин "сигмоидальный", вероятно, связан с характерной формой функции - значения return (y) ограничены между двумя асимптотическими значениями независимо от значения x. Вывод функции обычно нормализуется, так что эти два значения равны -1 и 1 (или 0 и 1). (Это поведение выхода, кстати, явно вдохновлено биологическим нейроном, который либо стреляет (+1), либо не (-1)). Взгляните на ключевые свойства сигмоидальных функций, и вы можете понять, почему они идеально подходят в качестве функций активации в прямолинейных, backpropagating нейронных сетях: (i) вещественные и дифференцируемые, (ii) имеющие ровно одну точку перегиба и ( iii) наличие пары горизонтальных асимптот.
В свою очередь, сигмоидальная функция является одной из категорий функций, используемых в качестве функции активации (также называемой "функцией раздавливания" ) в FF нейронных сетях, решаемых с помощью backprop. Во время обучения или прогнозирования взвешенная сумма входов (для данного слоя, по одному слою за раз) передается в качестве аргумента функции активации, которая возвращает выход для этого слоя. Другая группа функций, по-видимому, используемая в качестве функции активации, является кусочно-линейной функцией. Функция шага - это двоичный вариант PLF:
def step_fn(x) :
if x <= 0 :
y = 0
if x > 0 :
y = 1
(По практическим соображениям я сомневаюсь, что функция шага является правдоподобным выбором для функции активации, но, возможно, она помогает понять назначение функции активации в операции NN.)
Я предполагаю, что существует неограниченное количество возможных функций активации, но на практике вы видите только горстку; на самом деле только два являются причиной подавляющего большинства случаев (оба являются сигмоидальными). Здесь они (в питоне), поэтому вы можете поэкспериментировать для себя, учитывая, что основной критерий отбора является практическим:
# logistic function
def sigmoid2(x) :
return 1 / (1 + e**(-x))
# hyperbolic tangent
def sigmoid1(x) :
return math.tanh(x)
Каковы факторы, которые следует учитывать при выборе функции активации?
Сначала функция должна дать желаемое поведение (возникающее из-за сигмоидальной формы). Во-вторых, функция должна быть дифференцируемой. Это требование для backpropagation, которое является методом оптимизации, используемым во время обучения, чтобы "заполнить" значения скрытых слоев.
Например, производная от гиперболического тангенса есть (в терминах вывода, как это обычно написано):
def dsigmoid(y) :
return 1.0 - y**2
Помимо этих двух требований, то, что делает одну функцию между другой, заключается в том, насколько эффективно она тренирует сеть - т.е. которая вызывает конвергенцию (достижение локальной минимальной ошибки) в наименьшие эпохи?
# -------- Редактировать (см. комментарий OP ниже) --------- #
Я не совсем уверен, что понял - иногда сложно сообщить подробности о NN, без кода, поэтому я должен, вероятно, просто сказать, что это хорошо подлежит этой оговорке: То, что вы хотите предсказать NN, должно быть так же как и зависимая переменная, используемая во время обучения. Например, если вы тренируете свой NN, используя два состояния (например, 0, 1), как одну зависимую переменную (которая, очевидно, отсутствует в ваших тестовых/производственных данных), то то, что ваш NN вернется при запуске в режиме прогнозирования, (пост-тренинг или компетентная весовая матрица).