Роль функции активации в расчете функции стоимости для искусственных нейронных сетей

У меня есть некоторые трудности с пониманием роли функций активации и функций стоимости. Давайте рассмотрим простой пример. Допустим, я строю нейронную сеть (искусственную нейронную сеть). У меня есть 5 переменных «x» и одна переменная «y».

Если я выполняю обычное масштабирование функций, а затем применяю, например, функцию активации Relu в скрытом слое, то эта функция активации выполняет преобразование, и в результате мы получаем прогнозируемое выходное значение (шляпа y) между 0 и, скажем, M. Тогда Следующим шагом является вычисление функции стоимости.

Однако при вычислении функции затрат нам необходимо сравнить выходное значение (yh) с фактическим значением (y).

Вопрос в том, как мы можем сравнить преобразованное выходное значение (y hat), которое, скажем, между 0 и M, с непреобразованным фактическим значением (y) (которое может быть любым числом, поскольку оно не подвергалось функции активации Relu) для вычисления функция затрат? Может быть большое несоответствие, так как одна переменная подвергалась преобразованию, а другая нет.

Спасибо за любую помощь.


person Emil    schedule 10.01.2019    source источник


Ответы (3)


Похоже, вы выполняете задачу регрессии, поскольку вы описываете свой конечный результат как «непреобразованное фактическое значение (y) (которое может быть любым числом, поскольку оно не подвергалось функции активации Relu)».

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

Пример см. в руководстве по Basic Regression TensorFlow Keras. Вы можете видеть из определений слоя модели:

def build_model():
  model = keras.Sequential([
    layers.Dense(64, activation=tf.nn.relu, input_shape=[len(train_dataset.keys())]),
    layers.Dense(64, activation=tf.nn.relu),
    layers.Dense(1)
  ])

  optimizer = tf.train.RMSPropOptimizer(0.001)

  model.compile(loss='mse',
                optimizer=optimizer,
                metrics=['mae', 'mse'])
  return model

Он использует потерю среднеквадратичной ошибки, а последний слой представляет собой простое значение Dense(1) без активации.

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

Так, например, если вы хотите предсказать метку для задачи прогнозирования с 4 категориями, ваш выходной слой будет чем-то вроде Dense(4, activation=tf.nn.softmax), где активация softmax преобразует необработанные значения нейронов этих 4 нейронов в относительные оценки.

Обычно выходной нейрон с наивысшей оценкой в ​​этом случае связывается с меткой прогнозируемой категории. Однако категориальные функции потерь, такие как потери перекрестной энтропии, будут использовать относительные значения оценок для всех нейронов как способ распределения потерь в соответствии со степенью точности предсказания, а не потери 0-1, которая дала бы максимальную потери за любой неверный прогноз, независимо от того, насколько он был близок или далек от правильного.

person ely    schedule 10.01.2019
comment
Спасибо. Могу я узнать ваше мнение по следующему пункту? Допустим, я использую функцию активации Tanh в скрытом слое, а затем не использую никаких функций активации в выходном слое. Это заставит все значения, выходящие из скрытого слоя (следовательно, «прогнозируемые значения y» или «y hat») колебаться между -1 и 1. Однако истинные значения «y» не будут иметь этой границы. В этом случае могу ли я рассчитывать на разумный результат или конвергенцию? Насколько я понимаю, функция стоимости в этом случае будет генерировать большую ошибку (большая разница между прогнозируемым y и фактическим y). - person Emil; 10.01.2019
comment
@Emil, если вы не используете функцию активации на выходном слое, то вывод не будет ограничен диапазоном [-1, 1]. Результатом скрытого слоя будет вход для последнего слоя (это не общий вывод, который сравнивается с функцией потерь). - person ely; 11.01.2019

- Функция стоимости — это мера ошибки между тем значением, которое предсказывает ваша модель, и фактическим значением. Например, предположим, что мы хотим предсказать значение yi для точки данных xi. Пусть fθ(xi) представляет предсказание или результат некоторой произвольной модели для точки xi с параметрами θ . Одна из многих функций затрат может быть

∑ni=1(yi−fθ(xi))2

эта функция известна как потеря L2. Обучение гипотетической модели, которую мы изложили выше, будет процессом нахождения θ, которое минимизирует эту сумму.

-Функция активации преобразует форму/представление входящих в нее данных. Простым примером может быть функция max(0,xi), которая выводит 0, если входное значение xi отрицательное, или xi, если входное значение xi положительное. Эта функция известна как функция активации ReLU или Rectified Linear Unit. Выбор того, какая функция (функции) лучше всего подходит для конкретной задачи с использованием конкретной нейронной архитектуры, все еще является предметом многочисленных дискуссий. Однако эти представления необходимы для того, чтобы сделать многомерные данные линейно разделимыми, что является одним из многих применений нейронной сети.

Я надеюсь, что это дало достойное представление о том, что это за вещи. Если вы хотите узнать больше, я предлагаю вам пройти курс машинного обучения Эндрю Нг на Coursera. Это обеспечивает прекрасный вводный взгляд в поле.

person Voontent    schedule 23.06.2020

Значение, с которым вы сравниваете свои фактические результаты для функции стоимости, (внутренне) не имеет ничего общего с входными данными, которые вы использовали для получения выходных данных. Никак не трансформируется.

Ваше ожидаемое значение равно [10 200,3], но вы использовали Softmax на выходном слое и потери RMSE? Ну и плохо, у вас все время будет высокая стоимость (да и модель скорее всего не сойдется).

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

person jkm    schedule 10.01.2019