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

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

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

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

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

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

2 ответа

Решение

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

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

Для примера, см. Учебник Базовая регрессия 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, которая дала бы максимум потеря для любого неправильного предсказания, независимо от того, насколько близко или далеко оно не было правильным.

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

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

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

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

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

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

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

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

Другие вопросы по тегам