深度学习系列二(DNN的有监督训练-BP算法)


DNN的有监督训练-BP算法

     这里以$K$类分类问题来对BP算法进行描述。实际上对于其他问题(如回归问题)基本是一样的。给定训练样本为:$(\mathbf{x},\mathbf{y})$,其中$\mathbf{x}$为样本的特征,$\mathbf{y}$为类别标签,其形式为:$\mathbf{y}=(0,\cdots,1,\cdots,0)^T$。

     设特征$\mathbf{x}$通过DNN前向传播后的输出为:$\mathbf{z}^L$,$z_k^L$表示样本$\mathbf{x}$为第$k$类的概率即:$p(\mathcal{C}_k|\mathbf{x})=z_k^L$。那么样本$(\mathbf{x},\mathbf{y})$的似然为:$$\prod_{k=1}^Kp(\mathcal{C}_k|\mathbf{x})^{y_k}=\prod_{k=1}^K(z_k^L)^{y_k}$$

     因此,为了求解网络参数$\mathbf{W}^1,\mathbf{b}^1,\cdots,\mathbf{W}^{L-1},\mathbf{b}^{L-1}$,我们采用最大似然估计。为了推导的简洁性,假设只有一对样本$(\mathbf{x},\mathbf{y})$。根据上面的公式,目标函数为最小化如下的负对数似然。$$E(\mathbf{W}^l,\mathbf{b}^l)=-\sum_{k=1}^Ky_k\ln z_k^L.$$

     显然,$E$是关于网络参数$\mathbf{W}^l,\mathbf{b}^l,l=1,\cdots,L-1$的非线性函数。这里采用梯度下降法最小化$E$。

     为了求解方便,我们定义变量$\delta^l=\frac{\partial E}{\partial \mathbf{a}^l},l=2,\cdots,L$。显然$\delta^{L-1}$最容易求解$$\delta_j^{L}=\frac{\partial E}{\partial a_j^{L}}=\sum_{k=1}^K\frac{\partial E}{\partial z_k^L}\frac{\partial z_k^L}{\partial a_j^{L}}=\sum_{k=1}^K\left(-\frac{y_k}{z_k^L}z_k^L(I_{kj}-z_j^L)\right)=z_j^L-y_j.$$这个推导用到了深度学习系列一中的结论。 写为向量形式:$$\delta^{L-1}=\mathbf{z}^L-\mathbf{y}$$

 

    当$l<L-1$时,$\delta^l$该怎么求解呢?也很简单,本质上就是一个求导链式法则。$$\delta_j^l=\frac{\partial E}{\partial a_j^l}=\sum_i\frac{\partial E}{\partial a_i^{l+1}}\frac{\partial a_i^{l+1}}{\partial z_j^{l}}\frac{\partial z_j^{l}}{\partial a_j^l}=\sum_i\delta_i^{l+1}W_{ij}^{l}(f^l(a_j^l))'.$$ 写为向量形式:$$\delta^l = (\mathbf{W}^{l})^T\delta^{l+1}\circ (f^l(\mathbf{a}^l))'.$$

$\circ$表示逐元素相乘。

     我们最终的目标还是要计算$E$对网络参数$\mathbf{W}^l,\mathbf{b}^l$的导数。怎么计算?有了$\delta^l$这个中间变量后,变得非常简单了。$$\begin{align*}\frac{\partial E}{\partial \mathbf{W}^l_{ij}}&=\frac{\partial E}{\partial a_i^{l+1}}\frac{\partial a_i^{l+1}}{\partial W_{ij}^l}=\delta_i^{l+1}z_j^l\\\frac{\partial E}{\partial b_i^l}&=\frac{\partial E}{\partial a_i^{l+1}}\frac{\partial a_i^{l+1}}{\partial b_i^l}=\delta_i^{l+1}\end{align*}$$

同样的,上述也写为向量形式:$$\begin{align*} \frac{\partial E}{\partial \mathbf{W}^l} &=\delta^{l+1}(\mathbf{z}^l)^T  \\ \frac{\partial E}{\partial \mathbf{b}^l} &=\delta^{l+1}\end{align*}$$

   先计算最后一层的$\delta^L$。 再通过如下向后传播的方式来计算$l=L-1,\cdots,1$层网络参数的导数。$$\begin{align*} \frac{\partial E}{\partial \mathbf{W}^l} &=\delta^{l+1}(\mathbf{z}^l)^T  \\ \frac{\partial E}{\partial \mathbf{b}^l} &=\delta^{l+1}\\ \delta^l &= (\mathbf{W}^{l})^T\delta^{l+1}\circ (f^l(\mathbf{a}^l))'.\end{align*} $$

    我们一直考虑的是只有一个训练样本的情况,实际情况中,包含了$N$个训练样本$(\mathbf{x}_1,\mathbf{y}_1),\cdots,(\mathbf{x}_N,\mathbf{y}_N)$,那么目标函数如下:$$E(\mathbf{W}^l,\mathbf{b}^l)=-\frac{1}{N}\sum_{n=1}^N\sum_{k=1}^KY_{kn}\ln Z_{kn}^L.$$ 显然,$$\Delta^L = \frac{1}{N}(\mathbf{Z}^L-\mathbf{Y})$$ 这里,$\mathbf{Z}^l=[\mathbf{z}_1^l,\mathbf{z}_2^l,\cdots,\mathbf{z}_N^l],\mathbf{Y}=[\mathbf{y}_1,\cdots,\mathbf{y}_N]$表示矩阵。

   那么后向传播的迭代公式如下,对于$l=L-1,L-2,\cdots,1$ $$\begin{align*} \frac{\partial E}{\partial \mathbf{W}^l} &=\Delta^{l+1}(\mathbf{Z}^l)^T  \\ \frac{\partial E}{\partial \mathbf{b}^l} &=\Delta^{l+1}\mathbf{1}\\ \Delta^l &= (\mathbf{W}^{l})^T\Delta^{l+1}\circ (f^l(\mathbf{A}^l))'.\end{align*} $$

  计算得到每层网络参数的梯度后,利用梯度下降就可以优化目标函数了。$$\begin{align*}\mathbf{W}^l &=\mathbf{W}^l-\eta\frac{\partial E}{\partial \mathbf{W}^l}\\\mathbf{b}^l &=\mathbf{b}^l-\eta\frac{\partial E}{\partial \mathbf{b}^l}\end{align*}$$

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM