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)}$.
来源:https://www.cnblogs.com/stat-cchen/p/3153052.html