Почему функция активации Sigmoid работает, а ReLU - нет?
Есть такой код:
from keras.models import Sequential
from keras.layers import Dense
import numpy
from numpy import exp, array, random, dot
# задаем для воспроизводимости результатов
numpy.random.seed(2)
# разбиваем датасет на матрицу параметров (X) и вектор целевой переменной (Y)
X = array([[0, 0, 1], [1, 1, 1], [1, 0, 1], [0, 1, 1]])
Y = array([[0, 1, 1, 0]]).T
# создаем модели, добавляем слои один за другим
model = Sequential()
model.add(Dense(1, input_dim=3, activation='relu')) # входной слой требует задать input_dim
# компилируем модель, используем градиентный спуск adam
model.compile(loss="binary_crossentropy", optimizer="adam", metrics=['accuracy'])
# обучаем нейронную сеть
model.fit(X, Y, epochs = 10000, batch_size=4)
# оцениваем результат
scores = model.evaluate(X, Y)
print("\n%s: %.2f%%" % (model.metrics_names[1], scores[1]*100))
pre = model.predict(array([[0, 1, 0]]))
print(pre)
precl = model.predict_classes(array([[1,0,0]]))
print(precl)
И когда я использую функцию активации ReLU, то точность никогда не растет выше 50% и ответы получаются неправильными. Когда я использую Sigmoid, все сходится сразу же.
Я читал, что ReLU сейчас является предпочтительной в большинстве случаев. Что не так в моём случае?
Результаты (должно быть: 0, 1):
Для ReLU:
accuracy: 50.00%
[[0.9953842]]
[[0]]
Для Sigmoid:
accuracy: 100.00%
[[0.13338517]]
[[1]]
Ответы (1 шт):
Разные функции активации применяются в разных случаях. Как всегда, не существует серебрянной пули универсальной функции активации.
ReLU (Rectified Limear Unit) обычно используется для скрытых слоев НС, но не для выходного слоя.
В вашем случае вы построили модель бинарной классификации, которая должна на выходе выдавать вероятность позитивного исхода (при бинарной классификации у нас может быть либо негативный False либо позитивный True результат). Поэтому для задач бинарной классификации для выходного слоя удобно использовать функцию сигмоиды в качестве функции активации. Область значений сигмоиды: (0, 1) - как раз то что нужно для случая бинарной классификации.
График сигмоиды:
График ReLU:
PS статья на английском, помогающая понять различные функции активации

