Backpropagation derivation using Leibniz notation: Difference between revisions

From Machinelearning
No edit summary
 
(3 intermediate revisions by the same user not shown)
Line 3: Line 3:
Most of the notation on this page is borrowed from Michael Nielsen's book.<ref>[http://neuralnetworksanddeeplearning.com/chap2.html "Chapter 2: How the backpropagation algorithm works"] in ''Neural Networks and Deep Learning''. Michael A. Nielsen. ''Determination Press''. 2015. Retrieved November 8, 2018.</ref>
Most of the notation on this page is borrowed from Michael Nielsen's book.<ref>[http://neuralnetworksanddeeplearning.com/chap2.html "Chapter 2: How the backpropagation algorithm works"] in ''Neural Networks and Deep Learning''. Michael A. Nielsen. ''Determination Press''. 2015. Retrieved November 8, 2018.</ref>


<div style="border: 1px solid black; padding: 5px;">'''Theorem.''' Let <math>N</math> be a neural network with <math>L</math> layers and <math>n(l)</math> be the number of neurons in layer <math>l</math> for <math>l \in \{1, \ldots, L\}</math>. For <math>l \in \{2, \ldots, L\}</math>, <math>k\in\{1, \ldots, n(l-1)\}</math>, and <math>j \in \{1, \ldots, n(l)\}</math> let <math>w^l_{jk}</math> be the weight from the <math>k</math>th neuron in the <math>(l-1)</math>th layer to the <math>j</math>th neuron in the <math>l</math>th layer. Let <math>z^l_j = \sum_{k=1}^{n(l-1)} w^l_{jk}a^{l-1}_k + b^l_j</math> and let <math>a^l_j = \sigma(z^l_j)</math>, where <math>\sigma : \mathbf R \to \mathbf R</math> is the [[sigmoid function]]. Let <math>C = \frac12 \sum_{j=1}^{n(L)} (y_j - a^L_j)^2</math> be a cost function. Then we can calculate the partial derivatives <math>\frac{\partial C}{\partial w^l_{jk}}</math> and <math>\frac{\partial C}{\partial b^l_j}</math> starting from the later layers. Specifically, we have
==Theorem statement==
 
Let <math>N</math> be a neural network with <math>L</math> layers and <math>n(l)</math> be the number of neurons in layer <math>l</math> for <math>l \in \{1, \ldots, L\}</math>. For <math>l \in \{2, \ldots, L\}</math>, <math>k\in\{1, \ldots, n(l-1)\}</math>, and <math>j \in \{1, \ldots, n(l)\}</math> let <math>w^l_{jk} \in \mathbf R</math> be the weight from the <math>k</math>th neuron in the <math>(l-1)</math>th layer to the <math>j</math>th neuron in the <math>l</math>th layer. Let <math>z^l_j = \sum_{k=1}^{n(l-1)} w^l_{jk}a^{l-1}_k + b^l_j</math> and let <math>a^l_j = \sigma(z^l_j)</math>, where <math>\sigma : \mathbf R \to \mathbf R</math> is the [[sigmoid function]]. Let <math>C = \frac12 \sum_{j=1}^{n(L)} (y_j - a^L_j)^2</math> be a cost function. Then we can calculate the partial derivatives <math>\frac{\partial C}{\partial w^l_{jk}}</math> and <math>\frac{\partial C}{\partial b^l_j}</math> starting from the later layers. Specifically, we have


<math display="block">\frac{\partial C}{\partial w^l_{jk}} = \left(\sum_{i=1}^{n(l+1)} \frac{\partial C}{\partial a^{l+1}_i} \sigma'(z^{l+1}_i)w^{l+1}_{ij}\right) \sigma'(z^l_j)a^{l-1}_k</math>
<math display="block">\frac{\partial C}{\partial w^l_{jk}} = \left(\sum_{i=1}^{n(l+1)} \frac{\partial C}{\partial a^{l+1}_i} \sigma'(z^{l+1}_i)w^{l+1}_{ij}\right) \sigma'(z^l_j)a^{l-1}_k</math>
Line 11: Line 13:
<math display="block">\frac{\partial C}{\partial b^l_j} = ???</math>
<math display="block">\frac{\partial C}{\partial b^l_j} = ???</math>


</div>
==Proof==
 
We induct on the layer number <math>l</math>, starting at <math>l=L</math>. For the base case, we have
 
<math display="block">\frac{\partial C}{\partial w^L_{jk}} = \frac{\partial C}{\partial a^L_j} \frac{\partial a^L_j}{\partial w^L_{jk}} = \frac{\partial C}{\partial a^L_j} \sigma'(z^L_j)a^{L-1}_k </math>
 
We also have
 
<math display="block">\frac{\partial C}{\partial a^L_j} = a^L_j - y_j</math>


''Proof.'' The cost function <math>C</math> depends on <math>w^l_{jk}</math> only through the activation of the <math>j</math>th neuron in the <math>l</math>th layer, i.e. on the value of <math>a^l_j</math>. Thus we can use the chain rule to expand:
The cost function <math>C</math> depends on <math>w^l_{jk}</math> only through the activation of the <math>j</math>th neuron in the <math>l</math>th layer, i.e. on the value of <math>a^l_j</math>. Thus we can use the chain rule to expand:


<math display="block">\frac{\partial C}{\partial w^l_{jk}} = \frac{\partial C}{\partial a^l_j} \frac{\partial a^l_j}{\partial w^l_{jk}}</math>
<math display="block">\frac{\partial C}{\partial w^l_{jk}} = \frac{\partial C}{\partial a^l_j} \frac{\partial a^l_j}{\partial w^l_{jk}}</math>

Latest revision as of 00:26, 9 November 2018

This page presents a derivation/proof of backpropagation derivation using Leibniz notation. Leibniz notation is the most common notation for presenting backpropagation, but it is somewhat complicated due to its blurring of the function/value distinction and its reliance on functional relationships being implicit. Those who prefer function notation may wish to refer to backpropagation derivation using function notation instead of (or in addition to) this page.

Most of the notation on this page is borrowed from Michael Nielsen's book.[1]

Theorem statement

Let be a neural network with layers and be the number of neurons in layer for . For , , and let be the weight from the th neuron in the th layer to the th neuron in the th layer. Let and let , where is the sigmoid function. Let be a cost function. Then we can calculate the partial derivatives and starting from the later layers. Specifically, we have

and

Proof

We induct on the layer number , starting at . For the base case, we have

We also have

The cost function depends on only through the activation of the th neuron in the th layer, i.e. on the value of . Thus we can use the chain rule to expand:

We know that because . We have used the chain rule again here.

In turn, depends on only through the activations of the th layer. Thus we can write (using the chain rule once again):

Backpropagation works recursively starting at the later layers. Since we are trying to compute for the th layer, we can assume inductively that we have already computed .

It remains to find . But so we have

Putting all this together, we obtain

Let us verify that we can calculate the right-hand side. By induction hypothesis, we can calculate . We calculate , , and during the forward pass through the network. Finally, is just a weight in the network, so we already know its value.

References

  1. "Chapter 2: How the backpropagation algorithm works" in Neural Networks and Deep Learning. Michael A. Nielsen. Determination Press. 2015. Retrieved November 8, 2018.