美文网首页
2020-01-02 新年从反向传播4个公式推导开始

2020-01-02 新年从反向传播4个公式推导开始

作者: 闲后美梦 | 来源:发表于2020-01-02 00:51 被阅读0次

1 S型神经元

修改权重和偏置的微小改动只会引起输出的微小变化

x1 --+
     |        +-------+
     +------->+       |
              |       |
x2 ---------->+       +------> output
              |       |
     +------->+       |
x3 --+        +-------+

S型神经元有多个输入,x1,x2,... , xi ∈[0,1],\sigma= \omega \cdot x+b
这里 \sigma称为S型函数定义为
\sigma(z)\equiv\frac{1}{1+e^{-z}}

代价函数
C(\omega,b)\equiv\frac{1}{2n}\sum\limits_{x}\|y(x)-a\|^2 \tag{6}

\omega 表示网络中的权重的集合

b是所有的偏置

n是训练输入的个数

a是表示当输入为x时输出的向量

我们想要找到的是C的最小值, C的梯度为

\Delta C \approx \frac{\partial C}{\partial v_1}\Delta v_1+ \frac{\partial C}{\partial v_2} \Delta v_2 \tag{7}

定义C的梯度为偏导数的向量,(\frac{\Delta C}{\Delta v_1},\frac{\Delta C}{\Delta v_2})^T,用 \triangledown C表示梯度向量
\triangledown C \equiv (\frac{\Delta C}{\Delta v_1},\frac{\Delta C}{\Delta v_2})^T \tag {8}

\Delta C \equiv \triangledown C \cdot \Delta v \tag {9}

假设:
\Delta v = -\eta \triangledown C \tag{10}

这里 \eta 是一个很小的正数(称为学习速率)

(10)带入(9)
\Delta C \approx -\eta \triangledown C \cdot \triangledown C = -\eta \|\triangledown C\|^2, 由于 \|\triangledown C\|\geq0,这保证了\Delta C \leq 0

v \to {v}' = v - \eta\triangledown C \tag{11}

                    2

 1                  ---
                   /   \
                   \   /
 ---                ---
/   \                                   3
\   / +---------->
 ---                                    ---
                    ---                /   \
                   /   \  +----------> \   /
 ---               \   /                ---
/   \               ---
\   / +----------->
 ---                                     ---
                    ---                 /   \
                   /    \  +----------> \   /
 ---               \ b23/                ---
/   \               ---
\   / +---------->
 ---
                    ---
                   /   \
                   \   /
                    ---

\omega_{jk}^l表示从 (l-1)^{th}层的k^{th}个神经元到l^{th}层的j^{th}个神经元的连接上的权重

b^l_j 表示在l^{th}层第j^{th}个神经元的偏置

a^l_j 表示l^{th}层第j^{th}个神经元的激活值

a_j^l = \sigma (\sum_k {\omega_{jk}^l a_k^{l-1}}+ b_j^l) \tag{23}

公式向量化
a^l = \sigma ({\omega^l a^{l-1}}+ b^l) \tag{25}

中间量 z^l ,为 l 层神经元的带权输入
z^l = {\omega^l a^{l-1}}+ b^l \tag{26}
z_j^l = \sum_k {\omega_{jk}^l a_k^{l-1}}+ b_j^l

我们定义 l层的第 j^{th} 个神经元的误差为
\delta_j^l \equiv \frac{\partial C}{ \partial z_j^l} \tag{29}

二次代价函数,单独的训练样本x的二次代价函数
C = \frac{1}{2}\|y-a^L\|^2 = \frac{1}{2}\sum_j{(y_j - a_j^L)}^2 \tag{6}

Hadamard 乘积, s \odot t
按元素乘积

\begin{bmatrix} 1 \\ 2 \end{bmatrix}\odot \begin{bmatrix} 3 \\ 4 \end{bmatrix} = \begin{bmatrix} 1*3 \\ 2*4 \end{bmatrix} = \begin{bmatrix} 3 \\ 8 \end{bmatrix} \tag{28}

输出层误差方程 \delta^L
\delta_j^L = \frac{\partial C}{\partial a_j^L}{\sigma}'(z_j^L) \tag{BP1}

\partial C/ \partial a_j^L 表示代价随着 j^{th} 输出激活值的变化而变化的速度,
如果C 不太依赖一个特定的输出神经元 j,那么 \delta_j^L就会很小,这也是我们想要的效果

{\delta}'(z_j^L) 刻画了在 z_j^L处激活函数\sigma变化的速度

具体事例: 代价函数为 二次函数
C=\frac{1}{2}\sum_j (y_j-a_j)^2 所以 \partial C/ \partial a_j^L = (a_j - y_i)

\sigma^L = \triangledown_a C \odot {\sigma}'(z^L) =(a^L - y) \odot {\sigma}'(z^L) \tag{BP1a}

使用下一层的误差 \delta^{l+1} 来表示当前层的误差\delta^l

\delta^l = ((\omega^{l+1})^T \delta^{l+1}) \odot {\sigma}'(z^l) \tag{BP2}

其中 (\omega^{l+1})^T(l+1)^{th}层权重矩阵\omega^{l+1} 的转置

代价函数关于网络中任意偏置的改变率
\frac{\partial C}{\partial b_j^l} = \delta_j^l \tag{BP3}

简记为:
\frac{\partial C}{\partial b} = \delta \tag{31}
代价函数关于任何一个权重的改变率
\frac{\partial C}{\partial \omega_{jk}^l} = a_k^{l-1}\delta_j^l \tag{BP4}

简化:
\frac{\partial C}{\partial \omega} = a_{in}\sigma_{out}

其中 a_in 是输入给权重\omega的神经元的激活值,\sigma_{out}是输出自权重\omega的神经元的误差

 in             out
 ---           ---
/   \    w    /   \
\   /  -----  \   /
 ---           ---

总结 四个反向传播公式

\delta_j^l \equiv \frac{\partial C}{ \partial z_j^l} \tag{29}

\delta_j^L = \frac{\partial C}{\partial a_j^L}{\sigma}'(z_j^L) = \triangledown_a C \odot {\sigma}'(z^L) \tag{BP1}
\delta^l = ((\omega^{l+1})^T \delta^{l+1}) \odot {\sigma}'(z^l) \tag{BP2}
\frac{\partial C}{\partial b_j^l} = \delta_j^l \tag{BP3}
\frac{\partial C}{\partial \omega_{jk}^l} = a_k^{l-1}\delta_j^l \tag{BP4}

1. 证明BP1

误差的定义(29) , 应用链式法制
\sigma_j^L = \frac{\partial C}{\partial z_j^L} = \sum_k \frac{\partial C}{\partial a_k^L} \frac{\partial a_k^L}{\partial z_j^L} \tag{37}
\delta_j^L = \frac{\partial C}{\partial a_j^L}\frac{\partial a_j^L}{\partial z_j^L} \tag{38}
a_j^L = \sigma(z_j^L) 所以第二项可以写成 {\sigma}'(z_j^L),方程变成
\delta_j^L = \frac{\partial C}{\partial a_j^L} \frac{\partial a_j^L}{\partial z_j^L} \tag{38}

2. 证明 BP2

\delta_j^l = \frac{\partial C}{\partial z_j^l} = \sum_k \frac{\partial C}{\partial z_k^{l+1}} \frac{z_k^{l+1}}{\partial z_j^l} = \sum_k\frac{\partial z_k^{z_k^{l+1}}}{\partial z_j^l} \delta_k^{l+1} \tag{42}

z_k^{l+1} = \sum_j \omega_{kj}^{l+1}a_j^l + b_k^{l+1} = \sum_j \omega_{kj}^{l+1}\sigma(z_j^l)+b_k^{l+1} \tag{43}
做微分
\frac{\partial z_k^{l+1}}{\partial z_j^l} = \omega_{kj}^{l+1}{\sigma}'(z_j^l) \tag{44}
带入(42)

\delta_j^l = \sigma_k \omega_{kj}^{l+1}\delta_k^{l+1}{\sigma}'(z_j^l) \tag{45}

3. 证明BP3

由公式(29)
\delta_j^l \equiv \frac{\partial C}{ \partial z_j^l} \tag{29}
z_j^l = \sum_k \omega_{kj}^l a_k^{l-1} + b_j^l \tag{46}
函数为b, 两边(46)对 z 求微分得
\frac{\partial b_j^l}{\partial z_j^l} = 1 \tag{47}
(29)应用链式法则
\delta_j^l = \frac{\partial C}{ \partial z_j^l} = \frac{\partial C}{\partial b_j^l}\frac{\partial b_j^l}{\partial z_j^l} = \frac{\partial C}{\partial b_j^l} \tag{48}

4. 证明BP4

(46),对 \omega_k 求偏微分
,对于i \not = k\omega\partial z_j^l / \partial \omega_{ij}^l = 0
\frac{\partial z_{j}^l}{\partial \omega_{jk}^l} = a_k^{l-1}
\frac{\partial C}{\partial \omega_{jk}^l} = \frac{\partial C}{\partial z_j^l} \frac{\partial z_j^l}{\omega_{jk}^l} = \delta_j^l a_{k}^{l-1}

相关文章

网友评论

      本文标题:2020-01-02 新年从反向传播4个公式推导开始

      本文链接:https://www.haomeiwen.com/subject/cgknoctx.html