手动推导softmax神经网络反向传播求导过程——softmax前世今生系列(6)

导读:

softmax的前世今生系列是作者在学习NLP神经网络时,以softmax层为何能对文本进行分类、预测等问题为入手点,顺藤摸瓜进行的一系列研究学习。其中包含:

1.softmax函数的正推原理,softmax的代数和几何意义,softmax为什么能用作分类预测,softmax链式求导的过程。

2.从数学的角度上研究了神经网络为什么能通过反向传播来训练网络的原理。

3.结合信息熵理论,对二元交叉熵为何适合作为损失函数进行了探讨。

通过对本系列的学习,你可以全面的了解softmax的来龙去脉。如果你尚不了解神经网络,通过本系列的学习,你也可以学到神经网络反向传播的基本原理。学完本系列,基本神经网络原理就算式入门了,毕竟神经网络基本的网络类型就那几种,很多变种,有一通百通的特点。

网上对softmax或是神经网络反向传播知识的整理,基本都通过一个长篇大论堆积出来,一套下来面面俱到但又都不精细。本文将每个环节拆开,分别进行详细介绍,即清晰易懂,又减轻了阅读负担,增加可读性。本文也借鉴了其他作者的内容,并列举引用,希望大家在学习过程中能有所收获

本章内容提要:

上一篇文章讲解了神经网络的正向传播和反向传播原理,以及神经网络反向传播求导的时候,究竟是对谁求导。传送门:神经网络正向传播及反向传播原理分析——softmax前世今生系列(5)

本文就开始讲解神经网络反向传播的求导过程。

一、场景描述

阅读本文前最好看一下上一篇文章,本文是单纯的推导过程,适合有面试需要,或是想写原生神经网络代码,或是对神经网络原理感兴趣的读者。

介于部分推理过程不复杂但是用公式编辑器写起来太复杂,这里就直接引用笔记中的内容,结合笔记给出关键步骤的说明。

二、反向传播求导过程分解

由上一篇文章可知我们的目标是求下面这个导数:

                                                                      \frac{\partial Loss}{\partial W} = \frac{\partial Loss}{\partial s_{i}}\cdot \frac{\partial s_{i}}{\partial z_{i}}\cdot \frac{\partial z_{i}}{\partial w_{i}}

(1)损失函数对softmax层求导:

本节目标是完成如下求导:

                                                                                      \frac{\partial Loss}{\partial s_{i}}

在BP神经网络中交叉熵作为损失函数的原理——softmax前世今生系列(4)这篇文章中,我们知道交叉熵的表达式如下:

                                                                        Loss = -\sum_{i}^{k}y_{i}log_{e}S_{i}

对Loss函数求导:

                                                 \frac{\partial Loss}{\partial S_{i}} = -{(y_{1}lnS_{1}+ y_{2}lnS_{2}+...+y_{i}lnS_{i}+...+y_{k}lnS_{k})}'

                                                 \frac{\partial Loss}{\partial S_{i}} = -{(y_{1}lnS_{1})}'- {(y_{2}lnS_{2})}'-...-{(y_{i}lnS_{i})}'-...-{(y_{k}lnS_{k})}'

已知:

                                                        s_{i} = \frac{e^{z_{i}}}{e^{z_{1}}+e^{z_{2}} +...+e^{z_{i}}+...+e^{z_{k}}}

我们对Si求导,其实是对Si中的e^{z_{i}}求导,从公式中可以看出,由于每个Si的分母中都包含e^{z_{i}},因此对所有的Si都要求导。

                                                \frac{\partial Loss}{\partial S_{i}} = -\frac{y_{1}}{S_{1}}-\frac{y_{2}}{S_{2}}-...-\frac{y_{i}}{S_{i}}-...-\frac{y_{j}}{S_{j}}

                                                \frac{\partial Loss}{\partial S_{i}} =-\sum_{j=1}^{n}y_{i}\frac{1}{S_{i}}

 

(2)softmax层对输出层求导

本节目标是完成如下求导:

                                                                                      \frac{\partial S_{i}}{\partial z_{i}}

已知softmax的表达式为:

                                                         s_{i} = \frac{e^{z_{i}}}{e^{z_{1}}+e^{z_{2}} +...+e^{z_{i}}+...+e^{z_{k}}}

根据导数的特性,我们求导的对象是Zi,因此Zi为未知数,Zj为常数,因此有:

                                                                  \left\{\begin{matrix} {(e^{z_{i}})}' = e^{z_{i}}\cdot {(z_{i})}' \\ {(e^{z_{j}})}' = 0 \end{matrix}\right.

所以求导过程分为i=j时,i<>j时,两种情况来讨论:

1.当 i = j 时,求导过程如下:

手动推导softmax神经网络反向传播求导过程——softmax前世今生系列(6)_第1张图片

即:

                                                                   \frac{\partial S_{j}}{\partial z_{i}} = S_{i}(1-S_{i})

2.当 i <> j 时,求导过程如下:

手动推导softmax神经网络反向传播求导过程——softmax前世今生系列(6)_第2张图片

即:

                                                                 \frac{\partial S_{j}}{\partial z_{i}} = -S_{j}S_{i}

 

(3)输出层对权重矩阵求导

本节目标是完成如下求导:

                                                                  \frac{\partial z_{i}}{\partial w_{i}}

以Zi为例,对Z1求导:

                                                                  \frac{\partial z_{1}}{\partial w_{1}} = {(x_{1}w_{11}+x_{2}w_{12}+x_{3}w_{13})}'

                                                                  \frac{\partial z_{1}}{\partial w_{1}} = x_{1}

输入数据X为:

                                                                      X = \begin{pmatrix} x_{1}\\ x_{2}\\ x_{3} \end{pmatrix}

知道权重矩阵为

                                                                     W = \begin{pmatrix} w_{11} & w_{12} & w_{13} \\ w_{21} & w_{22} & w_{23} \\ w_{31} &w_{32} & w_{33} \end{pmatrix}

因此输入层与权重矩阵相乘,可表示为:

                                                                WX^{T} = \begin{pmatrix} x_{1}w_{11}+x_{2}w_{12}+x_{3}w_{13}\\ x_{1}w_{21}+x_{2}w_{22}+x_{3}w_{23}\\ x_{1}w_{31}+x_{2}w_{32}+x_{3}w_{33} \end{pmatrix}

对权重矩阵求导,如下:

                                                                  \frac{\partial z_{i}}{\partial w_{i}} =(WX^{T})' = \begin{pmatrix} \frac{\partial (x_{1}w_{11}+x_{2}w_{12}+x_{3}w_{13})}{\partial w_{11}}\\ \\ \frac{\partial (x_{1}w_{21}+x_{2}w_{22}+x_{3}w_{23})}{\partial w_{22}}\\ \\ \frac{\partial (x_{1}w_{31}+x_{2}w_{32}+x_{3}w_{33})}{\partial w_{33}} \end{pmatrix} = \begin{pmatrix} x_{1} \\ x_{2} \\ x_{3} \end{pmatrix}

得:

                                                                  \frac{\partial z_{i}}{\partial w_{i}} =X^{T}

三、将三个求导结果合并

此时我们分别求出了三个偏导数,将三个偏导数合并起来(相乘),因为softmax层对输出层的偏导数有两种情况,因此链式求导的结果也分 i = j 和 i <> j 两种情况:

                           \frac{\partial Loss}{\partial W} = \frac{\partial Loss}{\partial s_{i}}\cdot \frac{\partial s_{i}}{\partial z_{i}}\cdot \frac{\partial z_{i}}{\partial w_{i}} =\left\{\begin{matrix} (-y_{i}\cdot \frac{1}{S_{i}})\cdot (S_{i}-S_{i}^{2})\cdot X^{T} \ \ \ \ \ \ \ \ \ \ \ (i=j)\\ \\ (-\sum_{i\neq j}^{\ }y_{j}\cdot \frac{1}{S_{j}})\cdot (-S_{i}\cdot S_{j})\cdot X^{T}\ \ \ (i\neq j) \end{matrix}\right.

化简结果:

                                                              \frac{\partial Loss}{\partial W} =\left\{\begin{matrix} y_{i} \cdot (S_{i}-1)\cdot X^{T} \ \ \ \ \ \ \ (i=j)\\ \\ (\sum_{i\neq j}^{\ }y_{j})\cdot (S_{i})\cdot X^{T}\ \ \ (i\neq j) \end{matrix}\right.

将两种情况合并起来:

                                                              \frac{\partial Loss}{\partial W} = [S_{i}y_{i}-y_{i}+S_{i}\cdot \sum_{i\neq j}^{\ }y_{j}]\cdot X^{T}=[S_{i}(\sum_{i\neq j}^{\ }y_{j}+y_{i})-y_{i}]\cdot X^{T}

由于:

                                                       \sum_{i\neq j}^{\ }y_{j}+y_{i} = \sum y_{i}=1

所以得:

                                                              \frac{\partial Loss}{\partial W} = (S_{i}-y_{i})\cdot X^{T}

因为输入X在此处可以作为一个常量处理,所以最终有:

                                                              \frac{\partial Loss}{\partial W} = S_{i}-y_{i}

对于简单的单层网络(即输入层和输出层之间只有一个权重矩阵相连接),损失函数反向传播到权重矩阵的损失值,就是上述表达式。在网络中表达的意义就是经过softmax层计算后的概率分布Si,与真实的概率分布yi之差。

四、总结

通过对本文以及上篇文章的学习,我们学会了神经网络的反向传播原理以及手动推导了网络的求导过程。对神经网络有了更深一步的认识。此时你已经是半个神经网络“专家”了。上可调侃原理,下可手推公式。

但半个“专家”终究是不够的,还有很多细节问题需要搞清楚。比如,我们得到反向传播的误差后,如何利用这个误差去更新权重矩阵?是对权重进行加减乘除吗?为什么要进行加减乘除,数学原理是什么?反向传播中的梯度爆炸和梯度消失是什么原理?且听下回分解。

传送门:稍后

 

五、附学习笔记如下:

手动推导softmax神经网络反向传播求导过程——softmax前世今生系列(6)_第3张图片


 

你可能感兴趣的:(人工智能)