神经网络和深度学习(五)——深层神经网络基础
(原创内容,转载请注明来源,谢谢)
一、概述
本文是对深层神经网络的基础,主要讨论深层神经网络的算法、公式推导以及一些注意事项。
首先,符号表示上和之前的一样,用L表示总层数,上标[l]表示第l层,n表示数量,a表示每一层的输出,w、b是参数,输入层是第0层。
二、前向传播
前向传播,目的是计算出预测的输出结果。实际上,多层的神经网络,也是一步步向前进行计算,主要在于要把前一层的输出,当作下一层的输入。
这里每层,可以考虑用之前说的激活函数,对wTx+b的结果进行变换。现在仅考虑所有层都使用sigmoid,其他激活函数,区别在于计算结果不一样、反向传播的导数不一样,但是本质是一样的。
第一层,输入是3个x,则z[1]=w[1]Tx+b[1],且a[1]=g(z[1])=1/(1+e-z[1])。
第二层,输入则是第一层计算的结果a[1],则z[2]=w[2]T a[1]+b[2],且a[2]=g(z[2])=1/(1+e-z[2])。
后面的层同理。最后一层计算出来的a,即最终的预测结果y。
如果使用向量化,则是一次计算一层,把一层的神经元,整合在一起,进行矩阵运算,整合方式,例如A[1],是将第一层每个神经元计算出来的a[1],纵向并排在一起,形成一个大的矩阵A[1],参与运算。
三、参数w与b的维度
根据上面的讨论,可以看出,每一层的w和b,其维度是会变化的。w和b是为了辅助更好的预测结果的,故其数量是需要根据输入、输出的数量决定的。
1、w
先不考虑b,假设z=wx。考虑第一层,以下图为例。x的维度是(2,1),维度即行、列元素个数。
由于输出的a只是对z进行一层函数的处理,因此z的维度即a的维度,对于第一层而言,即第一层的神经元的数量(因为每个神经元就是一个输出),下图来看是(3,1)。
由wx=z,即(?,?) *(2,1)=(3,1),根据矩阵运算的原则,可以看出(?,?)=(3,2),即第一层的w,其是一个三行两列的矩阵。
再看第二层,(?,?)*(3,1)=(5,1),故(?,?)=(5,3),即第二层的w是一个五行三列的矩阵。以此类推,可以确定后面的w。
2、b
b是在wx的基础上,进行相加的,且由z=wx+b,可以看出,b和z的维度是一样的,即b的维度就是输出的维度。如第一层的b,即(3,1),第二层的b,即(5,1)。
3、确认维度的意义
在明确维度的情况下,后续调试代码、查找问题的时候,可以先清晰的看出,每一层的参数在个数上是否有误。
4、向量化的维度
上面提到的,都是一个样本的情况下,实际情况,输入的x的样本个数是m,即有m个x1、x2的输入,此时,输入的维度x变为(2,m),输出的维度a变成(3,m),则可以看出,w的维度是不需要变化的,仍是(3,2)。b的维度跟随a的维度,也变成(3,m)。
5、通用公式
设n[l]表示第l层神经元个数,m表示样本数量:
W的维度:(n[l],n[l-1]),b的维度=Z的维度=A的维度:(n[l], m)。
四、使用多层神经网络的原因
这个主要和业务场景有关,考虑到人脸照片处理。
人脸照片处理,过程大致为:接收图片;图片边界分析;边界组成(组成五官);组成人脸;输出。
这里每一步的处理结果,都是需要输出给下一步,因此,多层的情况下,每一层可以全责清晰,而且利于计算处理。
如果不用多层网络,只用1层的话,那一层需要非常多的神经元,这样计算量大而且不易调试。
五、搭建神经网络
1、反向传播
多层神经网络的反向传播,和单层没有本质上的区别,处理方式还是一个很长的链式求导法则,这里不细说,可以看上一篇文章,有详细的描述。建议大家都手工推导一遍,基本上就理解了。
2、构建网络
实际上,即针对输入(无论是样本输入,还是上一层网络的输出),结合本层的参数,整理成z=wx+b,再套用上激活函数,例如sigmoid、tanh、relu等,即可完成本层的计算输出。
在前向传播计算时,通常会缓存本层的z、w、b的结果,以便后面反向传播时使用,不用再次计算。
对于反向传播,最后一层的导数,要先考虑到损失函数L(a,y)=-(yloga + (1-y)log(1-a)),求出y对a的导数da=-y/a +(1-y)/(1-a),再计算本层的dw、db。然后再将da的结果往前一层传,逐层计算da、dw、db。
接着,将每一层的w、b减去本层对应的dw、db,即完成一次的优化。
重复上面的工作多次,直到整个系统足够优化。
六、参数与超参数
这个是个概念的说明,参数即实际参与需要优化的内容,即每一层的w、b。
而超参数,是协助优化w、b的参数,比如学习速率α、神经网络层数L、每一层的神经元的个数、激活函数的选择、正则化项系数等。这些参数,本身大部分不在设定后就不会变化(如L、神经元个数、激活函数等设定后不会变化,α可以变化但是变化也是为了优化更快)。
七、总结
前向和反向传播,最终的公式如下:
学习深层神经网络,实质就是浅层神经网络的堆叠,因此主要要学好单层、双层网络的推导和运用,后面多层的网络自然就融会贯通。
——written by linhxx 2018.02.03