Neural networks and the backpropagation algorithm

大憨熊 提交于 2020-03-10 17:55:31

1. Neural network formulation

Notations:$x$为输入,$y$为输出,用$n_l$表示网络的层数,$s_l$表示第$l$层的节点数(不考虑bias),输入层记为$a^{(1)}=x$

$$z^{(l+1)}=W^{(l)}a^{(l)}+b^{(l)}$$

$$a^{(l+1)}=f(z^{(l+1)})$$

Remarks

1. $W^{(l)}$是一个$s_{l+1}\times s_{l}$的矩阵,第$i$行对应由$l$层到$l+1$层节点$i$的线性组合的系数。

2. 定义cost function

$$J(W,b;x,y)=\frac{1}{2}||h_{W, b}(x)-y||^2$$

$$J(W,b)=\left[\frac{1}{m}\sum_{i=1}^m(\frac{1}{2}||h_{W, b}(x^{(i)})-y^{(i)}||^2)\right]+\frac{\lambda}{2}\sum_{l=1}^{n_l-1}\sum_{i=1}^{s_l}\sum_{j=1}^{s_{l+1}}(W_{ji}^{(l)})^2$$

Remarks

1. 上面的$J(W,b)$定义了总体的损失函数,第一项是sum-of-squares error term,第二项是regularization term。

2. regularization term中不包含bias terms。

3. 优化$J(W,b)$时需要初始化$W$和$b$,可以取0附近的随机数,注意不能取全部相同的数(如0)。

3. Backpropagation algorithm

首先给出用梯度下降法的迭代格式

$$W_{ij}^{(l)}:=W_{ij}^{(l)}-\alpha \frac{\partial}{\partial W_{ij}^{(l)}}J(W,b)$$

$$b_{i}^{(l)}:=b_{i}^{(l)}-\alpha \frac{\partial}{\partial b_{i}^{(l)}}J(W,b)$$

注意到求梯度时只需考虑单个样本的情形,对$W_{ij}^{(l)}$求导时只和$z_i^{(l+1)}$有关

$$\frac{\partial}{\partial W_{ij}^{(l)}}J(W,b;x,y)=\frac{\partial J}{\partial z_{i}^{(l+1)}}\frac{\partial z_i^{(l+1)}}{\partial W_{ij}^{(l)}}$$

其中$\frac{\partial z_i^{(l+1)}}{\partial W_{ij}^{(l)}}=a_j^{(l)}$,注意到$z_i^{(l+1)}$通过$z^{(l+2)}$作用到$J$

$$\frac{\partial J}{\partial z_{i}^{(l+1)}}=\sum_{k=1}^{s_{l+2}}\frac{\partial J}{\partial z_{k}^{(l+2)}}\frac{\partial z_k^{(l+2)}}{\partial z_i^{(l+1)}}=\sum_{k=1}^{s_{l+2}}\frac{\partial J}{\partial z_{k}^{(l+2)}}W_{ki}^{(l+1)}f’(z_i^{(l)})$$

由上面推导注意到$\frac{\partial J}{\partial z_{i}^{(l+1)}}$可以由一个由后向前的迭代得到,定义$\delta_i^{(l)}=\frac{\partial J}{\partial z_i^{(l)}}$,则有$\delta_i^{(l)}=\sum_{k=1}^{s_{l+1}}W_{ki}^{(l)}\delta_k^{(l+1)}f’(z_i^{(l)})$

于是,我们得到如下的迭代格式

$$\frac{\partial}{\partial W_{ij}^{(l)}}J(W,b;x,y)=a_j^{(l)}\delta_i^{(l+1)}$$

$$\frac{\partial}{\partial b_{i}^{(l)}}J(W,b;x,y)=\delta_i^{(l+1)}$$

4. 训练算法的矩阵描述

  • Perform a feedforward pass, computing the activations for layers $L_2$, $L_3$, up to  the output layer $L_{n_l}$.
  • For the output layer, set $\delta^{(n_l)}=-(y-a^{(n_l)}).*f’(z^{(n_l)})$.
  • For $l=n_l-1, n_l-2, n_l-3, \ldots, 2$, set $\delta^(l)=\left((W^{(l)})^T\delta^{(l+1)}\right).*f’(z^{(l)})$.
  • Compute the desired partial derivatives: $\nabla_{W^{(l)}}J(W,b;x,y)=\delta^{(l+1)}(a^{(l)})^T$, $\nabla_{b^{(l)}}J(W,b;x,y)=\delta^{(l+1)}$.
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!