Подробный вывод алгоритма обратного распространения
Обратное распространение (англ. Backpropagation, сокращенно BP) — это сокращение от «обратного распространения ошибки», которое является распространенным методом, используемым в сочетании с методами оптимизации (такими как градиентный спуск) для обучения искусственных нейронных сетей. Этот метод вычисляет градиент функции потерь для всех весов в сети. Этот градиент возвращается обратно в метод оптимизации, который используется для обновления весов для минимизации функции потерь. Основной алгоритм выполнения градиентного спуска на нейронных сетях. Алгоритм сначала вычисляет (и кэширует) выходное значение каждого узла при прямом проходе, а затем вычисляет частную производную значения функции потерь по каждому параметру при обратном проходе по графу.
Мы будем использовать полносвязный слой с функцией активацииSigmoid
функция, функция ошибкиSoftmax+MSE
Возьмем в качестве примера нейронную сеть функции потерь и выведем ее метод распространения градиента.
Готов к работе
1. Производная сигмовидной функции
обзорsigmoid
Выражение функции:
Его производная:
можно увидеть,Sigmoid
Наконец, производное выражение функции может быть выражено как простая операция над выходным значением функции активации.
Благодаря этому свойству при расчете градиента нейронной сети путем кэширования выходного значения сигмовидной функции каждого слоя можно
При необходимости вычислите его производную. Реализация производной сигмовидной функции:
import numpy as np # 导入 numpy
def sigmoid(x): # sigmoid 函数
return 1 / (1 + np.exp(-x))
def derivative(x): # sigmoid 导数的计算
return sigmoid(x)*(1-sigmoid(x))
2. Градиент функции среднеквадратичной ошибки
Выражение функции потери среднеквадратичной ошибки:
вэто реальная стоимость,
является выходным значением. то его частная производная
Может быть расширен до:
Используйте цепное правило, чтобы разложить на
только если
k = i
когда1
, остальные точки0
, то естьтолько с
i
Количество узлов связано и не имеет ничего общего с другими узлами, поэтому символ суммирования в приведенной выше формуле можно удалить, а производную среднеквадратической ошибки можно вывести как
градиент одного нейрона
Для принятияSigmoid
Нейронная модель функции активации, ее математическая модель может быть записана как
в
- Верхний индекс переменной указывает количество слоев, например
представляет вывод первого скрытого слоя
-
x
представляет вход сети
Модель одного нейрона показана на рисунке ниже.
- Количество входных узлов
J
- где ввести
узел для вывода
Весовая связь записывается как
- где ввести
- Верхний индекс указывает количество слоев, к которым принадлежит вес, а нижний индекс указывает номер начального узла и номер конечного узла текущего соединения.
- как показано ниже
Указывает на первый
Node No. 1 – Node No. 1 текущего слоя
- как показано ниже
- Выходная переменная без функции активации
, выход после функции активации
- Так как есть только один выходной узел,
Далее вычисляем среднеквадратичную ошибку как градиент функции
Поскольку один нейрон имеет только один выход, функция потерь может быть выражена как
Добавить кДля удобства расчета воспользуемся весами для соединения первого
Вес номера узла
В качестве примера рассмотрим функцию потерь
частная производная от него
так как, из приведенного выше вывода видно, что производная сигмовидной функции
Пучокнаписано как
так как
Из приведенного выше уравнения видно, что ошибка имеетЧастная производная связана только с выходным значением
,реальная стоимость
t
и вывод текущего веса связиСвязанный
Полностью связанный градиент слоя
Мы обобщаем модель одного нейрона на сеть с одним полносвязным слоем, как показано на следующем рисунке. Входной слой получает выходной вектор через полносвязный слой., с достоверным вектором меток
t
Вычислите среднеквадратичную ошибку. Количество входных узлов, число выходных узлов равно
K
.
В отличие от одного нейрона, полносвязный слой имеет несколько выходных узлов., каждый выходной узел соответствует другой истинной метке
, среднеквадратическая ошибка может быть выражена как
так кактолько с
связанных, символ суммирования в приведенной выше формуле может быть удален, то есть
будетпринести
учитыватьПроизводная функции
будетотмечен как
наконец-то доступно
Отсюда видно, что связьВышеупомянутое соединение, только с подключенным в данный момент выходным узлом
, метка соответствующего узла истинного значения
, и соответствующий входной узел
x
Связанный.
мы заказываем,но
можно выразить как
вПеременная характеризует некоторое свойство градиентного распространения конечного узла связи, используя
После выражения,
Частные производные относятся только к начальному узлу текущего соединения.
, в конечном узле
Это более интуитивно понятно.
Алгоритм обратного распространения
Всех здесь увидеть не просто, ведь столько формул хахаха, но самое интересное время пришло
Сначала просмотрите формулу частной производной выходного слоя.
Многослойный полносвязный слой показан на следующем рисунке.
- Количество выходных узлов
K
, вывод - Количество узлов в обратном втором слое равно
J
, выход - Количество узлов в предпоследнем слое равно
I
, выход
функция среднеквадратичной ошибки
так какчерез каждый выходной узел
и
связаны, поэтому символ суммирования здесь нельзя убрать
будетпринести
Производная функции
, продолжить вывод и положить
написать ответ
заЦепное правило может быть применено для разложения как
На рисунке показано, так что есть
так
учитываяи
k
Не беда, его можно извлечь
снова естьи использовать
Производная функции
имеют
так как
в,но
Следуя методу записи выходного слоя, определите
В настоящее времяМожет быть записано как выходное значение текущего подключенного начального узла.
с оконечным узлом
информация о градиенте
Простое умножение:
по определениюпеременные, выражение градиента каждого слоя становится более четким и лаконичным, где
Его можно просто понимать как текущее соединение
Вклад в функцию ошибок.
Суммировать
выходной слой:
Предпоследний слой:
Третий этаж снизу:
вявляется входом предпоследнего слоя, то есть выходом предпоследнего слоя
Согласно этому правилу необходимо только итеративно вычислять значение каждого узла в каждом слое.Частная производная текущего слоя может быть получена по эквивалентному значению, и может быть получена весовая матрица каждого слоя.
Затем параметры сети можно итеративно оптимизировать с помощью алгоритма градиентного спуска.
Что ж, алгоритм обратного распространения выведен, реализация кода может ссылаться на другой блогПрактическая реализация алгоритма обратного распространения нейронной сети (BP)