Оригинальная ссылка:CHAPTER 2 How the backpropagation algorithm works
Обзор обратного распространения
Алгоритм обратного распространения впервые был упомянут в 1970-х годах, но его важность не была признана до знаменитой статьи 1986 года Дэвида Румелхарта, Джеффри Хинтона и Рональда Уильямса.
Ядром обратного распространения является функция стоимости парыо любом весеи предвзятостьчастная производная отвыражение.
Это выражение говорит нам, как быстро изменяется функция стоимости при изменении весов и смещений.
Два предположения о функции стоимости
-
Функция стоимости может быть записана как в каждой обучающей выборкефункция стоимости насреднее значение.
-
Функция стоимости может быть записана как функция выхода нейронной сети.
Причина предположения 1 заключается в том, что обратное распространение фактически вычисляется на отдельной обучающей выборке.и. затем получено усреднением по всем обучающим выборками.
Гипотеза 2 необходима для того, чтобы связать функцию стоимости с выходом нейронной сети, который, в свою очередь, связан с параметрами нейронной сети.
Определение символа
Отпервоенейроны кпервоевеса каждого нейрона.
первыйпервоесмещение каждого нейрона.
первыйпервоезначение активации нейрона.
является функцией активации.
Векторизуйте вышеуказанные символы
- весовая матрица, перваяРядЭлементы столбца.
Например, весовая матрица между вторым и третьим слоями имеет вид
— вектор смещения. первоеЭлементы строки.
Например, вектор смещения для второго слоя равен
С этими представлениямипервоезначение активации нейронакакЗначения активации слоев связаны уравнением
Векторизуйте приведенную выше формулу
Например, вектор активации третьего слоя равен
— вектор активации. первоеЭлементы строки.
определение
но
означает первыйВзвешенный ввод в слой. первоеэлементы.
первыйпервоевзвешенный вход для каждого нейрона.
Ядром обратного распространения является функция стоимости парыо любом весеи предвзятостьчастная производная отвыражение. Для расчета этих значений введем промежуточную величину, указывая на то, что впервоеошибка нейрона.
определение
вектор ошибки,Первыйэлементы.
Четыре фундаментальных уравнения обратного распространения
оператор градиента,Результатом является вектор, элементами которого являются частные производные.
оператор поэлементного произведения,,Например
Алгоритм обратного распространения
Как мы сказали выше, алгоритм обратного распространения вычисляет градиент функции стоимости для обучающей выборки,. на практике , обычно используя комбинацию алгоритмов обратного распространения и обучения, таких как стохастический градиентный спуск, мы будем Обучающие выборки вычисляют соответствующие градиенты. В частности, для мини-партии размера m на этой мини-партии выполняется следующий алгоритм. Примените алгоритм обучения градиентного спуска на основе данных:
Схематический код комбинации алгоритма обратного распространения ошибки и алгоритма мини-пакетного стохастического градиентного спуска, полный код см.network.py
def backprop(self, x, y):
"""Return a tuple ``(nabla_b, nabla_w)`` representing the
gradient for the cost function C_x. ``nabla_b`` and
``nabla_w`` are layer-by-layer lists of numpy arrays, similar
to ``self.biases`` and ``self.weights``."""
nabla_b = [np.zeros(b.shape) for b in self.biases]
nabla_w = [np.zeros(w.shape) for w in self.weights]
# feedforward
activation = x
activations = [x] # list to store all the activations, layer by layer
zs = [] # list to store all the z vectors, layer by layer
for b, w in zip(self.biases, self.weights):
z = np.dot(w, activation)+b
zs.append(z)
activation = sigmoid(z)
activations.append(activation)
# backward pass
delta = self.cost_derivative(activations[-1], y) * \
sigmoid_prime(zs[-1])
nabla_b[-1] = delta
nabla_w[-1] = np.dot(delta, activations[-2].transpose())
# Note that the variable l in the loop below is used a little
# differently to the notation in Chapter 2 of the book. Here,
# l = 1 means the last layer of neurons, l = 2 is the
# second-last layer, and so on. It's a renumbering of the
# scheme in the book, used here to take advantage of the fact
# that Python can use negative indices in lists.
for l in range(2, self.num_layers):
z = zs[-l]
sp = sigmoid_prime(z)
delta = np.dot(self.weights[-l+1].transpose(), delta) * sp
nabla_b[-l] = delta
nabla_w[-l] = np.dot(delta, activations[-l-1].transpose())
return (nabla_b, nabla_w)
def cost_derivative(self, output_activations, y):
"""Return the vector of partial derivatives \partial C_x /
\partial a for the output activations."""
return (output_activations-y)
def sigmoid_prime(z):
"""Derivative of the sigmoid function."""
return sigmoid(z)*(1-sigmoid(z))
Доказательство четырех фундаментальных уравнений
Теперь мы докажем эти четыре основных уравнения (BP)-(BP4). Все это является следствием цепного правила многомерного исчисления.
доказывать
Исходя из уравнения (BP1), это дает ошибкувыражение. По определению
Согласно двум предположениям о функции стоимости 2 «Функция стоимости может быть записана как функция выхода нейронной сети», применение цепного метода показывает, что можно получить частную производную выхода нейронной сети первыйЗатем возьмите частную производную взвешенного выхода.
Кажется, что приведенная выше формула очень сложна, но из-завыходное значение активации нейроназависит только от индексавремявходные веса нейронов. все когдаВремяИсчезнувший. В результате мы можем упростить предыдущую формулу как
Также из-затакможно записать как, уравнение становится
Это в компонентной форме (BP1), а затем в соответствии соператор градиента,Результатом является вектор, элементами которого являются частные производные. Уравнения можно записать в векторной форме
(BP1) доказано.
доказывать
Докажите (BP2), что дает следующий уровень ошибокошибка в виде. Для этого кпереписать в виде,ипройти черезиПодключить, применить тест цепи
в соответствии сопределение имеет
правильноДелаем частичное дифференцирование, получаем
Обратите внимание, что хотяиНейроны в двух слоях связаны сложным образом, но существует только одна связь между любой парой нейронов (не связанных в одном и том же слое) между двумя слоями, т. е.итолько черезсоединять. такправильноРезультат частичного дифференцирования прост, просто. довести этот результат досередина
Это именно то, что написано в компонентной форме (BP2).
записано в векторной форме
Пример
(BP2) доказано.
доказывать
в соответствии сопределение
иопределение
следовательно
Также из-за
так
который
записано в векторной форме
(BP3) доказано.
доказывать
в соответствии сопределение
иопределение
Также из-за
так
векторизовать формулу
Пример
(BP4) доказано.
Интуитивная схема:
На данный момент доказаны все четыре уравнения об обратном распространении.
Доказательство обратного распространения четырех уравнений другими учеными (он написал более кратко):CSDN: oio328Loio
Обратное распространение: общая картина
Как показано на рисунке выше, предположим, что у нас естьсделать небольшое возмущение, это возмущение в конечном итоге повлияет на функцию стоимости в нейронной сети., функция стоимостиизменить иПодключить по следующей формуле
Один путь, предположительно влияющий на функцию затрат, состоит в следующем.
чтобы рассчитатьВсе изменения в , нам нужно просуммировать все возможные пути, т.е.
так как
Из приведенных выше трех уравнений видно, что
Приведенная выше формула выглядит сложной, и вот довольно хорошее интуитивное объяснение. Мы используем эту формулу для расчетаО скорости изменения веса в сети. И что эта формула говорит нам, так это то, что связь между двумя нейронами на самом деле связана с коэффициентом скорости изменения, который является просто частной производной значения активации одного нейрона по отношению к значению активации других нейронов. Фактор скорости изменения пути является произведением многих факторов пути. общая скорость измененияпредставляет собой сумму факторов скорости изменения для всех возможных путей от начальных весов до конечного результата функции стоимости. Для определенного пути процесс поясняется следующим образом:
Если вы используете матричные операции для суммирования всех приведенных выше уравнений, а затем максимально упростите их, вы, наконец, обнаружите, что делаете обратное распространение! Думайте об обратном распространении как о способе вычисления суммы скоростей изменения всех возможных путей. Или, другими словами, обратное распространение — это метод, который ловко отслеживает распространение небольших изменений весов и смещений на выходной слой, чтобы повлиять на функцию стоимости.
Если вы попытаетесь использовать приведенные выше идеи для доказательства обратного распространения, это будет намного сложнее, чем четыре уравнения обратного распространения в этой статье, потому что есть много мест, которые можно упростить в соответствии с приведенными выше идеями. Можно добавить один аккуратный шаг, объект частной производной приведенного выше уравнения выглядит примерно так:значение активации. Хитрость заключается в том, чтобы вместо этого использовать взвешенный ввод, например., как промежуточная переменная. Если идея не пришла в голову, продолжайте использовать значение активации, доказательство, которое вы получите, будет немного сложнее, чем доказательство, приведенное выше.
На самом деле появление самого раннего доказательства не слишком загадочно. Потому что это просто накопление тяжелой работы по упрощению доказательства!
использованная литература
[1] Michael Nielsen. CHAPTER 2 How the backpropagation algorithm works[DB/OL]. neuralnetworksanddeeplearning.com/chap2.html, 2018-06-21.
[2] Zhu Xiaohu. Zhang Freeman.Another Chinese Translation of Neural Networks and Deep Learning[DB/OL]. GitHub.com/Chapter Mandarin Edition/Можете ли вы…, 2018-06-21.
[3] oio328Loio, Обучение нейронной сети (3) Алгоритм обратного (BP) распространения (1) [DB/OL].blog.CSDN.net/HOHO1151191…, 2018-06-25.