1.从DNN前向传播和BP后向传播说起
2.CNN前向传播和BP后向传播
注:为减小书写、计算量,文中推导都忽略了偏置b。
之前所学的DNN是一个全连接的网络,采用BP算法来计算各参数的梯度,只需要采用链式法则将误差求导传递到每个神经元的每个参数上即可。 特别是,将数据向量化后,求解梯度过程较为简单。 但对于CNN来说,CNN涉及到了卷积和池化,在进行后向传播计算时,仅采用矩阵乘法、元素级乘法(对应元素相乘)根本无法进行传递计算。 那么CNN的BP算法是如何实现的呢?首先从CNN的BP算法说起。
DNN符号约定:
①小写字母代表一个值,大写字母代表向量或矩阵
②输入数据维度为(n,m)表示n个特征,m个样本
③上标[l]:第l层,如A[l],表示第l层活值
④下标n:某一层第n个神经元,如果是输入数据X,则代表第n个特征,如a[l]1,表示第l层第1个活值
⑤w[l]ij:表示l层参数,连接了l层第i个神经元和第l-1层第j个神经元
⑥向量化导数符号:dZ即代表最终误差对Z的梯度
⑦δ[l]即dZ[l],两个是一个东西,只是描述不一样
卷积层前向传播如下图所示(步为1),l-1层的输出,高=3、宽=3、通道数=3,shape=(3,3,3);l层一共有两个卷积核,每个卷积核shape=(2,2,3);l层输出shape=(2,2,2)。
①l-1层的通道数与l层卷积核通道数相同,所以在进行卷积时,是同一个卷积核的各通道对应l-1层的通道输出A去卷积;②卷积后,在通道维度上进行叠加,一个卷积核最后只输出一个通道的数据;③卷积核的数量决定了该层输出的通道数量,活后维度不变。 因此,维度变化为:(m,n_h_pre ,n_w_pre ,n_c_pre )→(f,f,n_c_pre ,n_c)→(m,n_h,n_w,n_c)
根据DNN的经验,要求dW,那么需要先求出dZ、dA,在此假设已知当前l层dZ。
(1)求dA
由于池化向前传播时,会使得h、w两个维度缩减,丢失掉部分信息,那么在后向传播时,如何将尺寸小的矩阵还原到原来大小?一般,池化分为最大池化和平均池化,两种池化后向传播时处理的方式略有不同。
(1)最大池化后向传播
在此将池化当作一层,假设已知l层dZ=dA(池化无活函数,活后等于本身),求l-1层dZ=dA,下面对一个通道数据进行举例:
卷积神经网络(CNN)反向传播算法
CNN的反向传播
ConvolutionalNeuralNetworks:StepbyStep
上一篇:cnn卷积神经网络结构图
下一篇:卷积神经网络模型结构图