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

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

Логическая конъюнкция (оператор И) принимает два входа и возвращает один выход. Функция возвращает истину только в том случае, если оба ее входа истинны. Таблица истинности этого выглядит так:

Наша нейронная сеть имеет 2 входа, p и q, и один выход, предсказание p и q. В нашем обучающем наборе 2 примера из 4 возможных:

Для первого обучающего примера желаемый выход нейронной сети равен 1, а для второго обучающего примера - 0. Наша нейронная сеть имеет 2 нейрона на входном слое и 1 нейрон на выходном слое. Структура выглядит так:

Прямое распространение:

При прямом распространении мы проверяем, что нейронная сеть предсказывает для первого обучающего примера с начальными весами и смещением. Сначала мы случайным образом инициализируем веса и смещение:

Затем мы вычисляем z, взвешенную сумму активации и смещения:

После того, как у нас есть z, мы можем применить к нему функцию активации:

σ - функция активации. Наиболее распространенными функциями активации являются relu, sigmoid и tanh. В этом примере мы собираемся использовать tanh.

Для первого обучающего примера наша нейронная сеть предсказала результат 0,291. Наш желаемый результат - 1. Нейронная сеть может улучшиться благодаря процессу обучения обратному распространению. Прежде чем продолжить обратное распространение, давайте вычислим прогноз для второго обучающего примера. Вот результаты:

Обратное распространение:

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

где k обозначает обучающий пример, и предполагается, что выходными данными является активация выходного нейрона, а y - фактический желаемый результат. Для наших обучающих примеров затраты следующие:

Общая стоимость обучающего набора - это среднее значение отдельных функций стоимости данных в обучающем наборе:

где N - количество обучающих примеров. В нашем обучающем наборе это выглядит так:

Мы хотим улучшить производительность нейронной сети на обучающих примерах, чтобы мы могли изменить веса и смещение и, надеюсь, снизить общую стоимость. Мы хотим знать, насколько конкретные веса и смещение влияют на общую стоимость, поэтому нам нужно рассчитать частные производные от общей стоимости по весам и смещению. Для этого мы можем применить цепное правило:

После упрощения детали выглядят так:

Расчет частных производных для первого обучающего примера:

Частные производные для второго обучающего примера:

Теперь мы вычисляем частные производные по общей стоимости. Рассмотрим первый вес (w1). Частная производная от общих затрат по w1 представляет собой среднее значение всех частных производных отдельных функций затрат по w1:

В нашем обучающем примере это:

Проделаем тот же расчет для другого веса и смещения:

Затем мы обновляем веса и смещение: мы умножаем частные производные на некоторую скорость обучения и вычитаем результаты из весов и смещения. Давайте использовать скорость обучения α = 0,6

Повторяя этот расчет с другим весом и смещением:

После обновления весов и смещения наша нейронная сеть выглядит так:

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

Видите ошибки в моей статье, есть предложения, комментарии или вопросы? Пожалуйста, отправьте мне сообщение.

Спасибо!