卷积神经网络六之CNN反向传播计算过程

CNN反向传播计算过程

  • 传统的神经网络是全连接形式的,如果进行反向传播,只需要由下一层对前一层不断的求偏导,即求链式偏导就可以求出每一层的误差敏感项然后求出权重和偏置项的梯度,即可更新权重。
  • 卷积神经网络有两个特殊的层:卷积层和池化层。池化层输出时不需要经过激活函数,是一个滑动窗口的最大值,一个常数,那么它的偏导是1。池化层相当于对上层图片做了一个压缩,这个反向求误差敏感项时与传统的反向传播方式不同。从卷积后的feature_map反向传播到前一层时,由于前向传播时是通过卷积核做卷积运算得到的feature_map,所以反向传播与传统的也不一样,需要更新卷积核的参数。

2、CNN卷积层反向传播

例子:输入是一个4*4 的image,经过两个2*2的卷积核进行卷积运算后,变成两个3*3的feature_map

以卷积核filter1为例  (stride = 1 ):

计算第一个卷积层神经元o11的输入NetO11和输出Out011:

Neto11=conv(input,filter)

             =i11×h11+i12×h12+i21×h21+i22×h22

             =1×1+0×(−1)+1×1+1×(−1)=1

Outo11=activators(neto11)=max(0,neto11)=1

 

示例:

同样的方法,计算所有神经元的输入和输出:(此处使用Relu激活函数)

 

Outo11=activators(neto11)=max(0,neto11)

Outo12=max(0,neto12)

Outo13=max(0,neto13)

Outo21=max(0,neto21)

Outo22=max(0,neto22)

Outo23=max(0,neto23)

Outo31=max(0,neto31)

Outo32=max(0,neto32)

Outo33=max(0,neto33)

neto11=i11×h11+i12×h12+i21×h21+i22×h22

neto12=i12×h11+i13×h12+i22×h21+i23×h22

neto13=i13×h11+i14×h12+i23×h21+i24×h22

neto21=i21×h11+i22×h12+i31×h21+i32×h22

neto22=i22×h11+i23×h12+i32×h21+i33×h22

neto23=i23×h11+i24×h12+i33×h21+i34×h22

neto31=i31×h11+i32×h12+i41×h21+i42×h22

neto32=i32×h11+i33×h12+i42×h21+i43×h22

neto33=i33×h11+i34×h12+i43×h21+i44×h22

计算池化层的输入和输出:

netm11=max(o11,o12,o21,o22)=1

outm11=netm11=1

3、数学计算过程

(1)(链式求导)

首先计算卷积的上一层的第一个元素i11的误差项δ11:

然后对输入元素i(i,j)求偏导:

同样的方法计算其他元素对误差的偏导。

(2)观察一下上面几个式子的规律,归纳一下,可以得到如下表达式:

图中的卷积核进行了180°翻转,与这一层的误差敏感项矩阵Delta( i,j ),

周围补零后的矩阵做卷积运算后,就可以得到E/i11 :

权重的梯度:

偏置项的梯度:

根据梯度即可修改权重。

 

二、CNN可视化

CNN 可视化:滤波器

深度卷积核检测图像更高层次的特征

CNN的应用

计算机视觉:人脸识别、无人超市、自动驾驶、医学影像诊断

 

  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
卷积神经网络CNN反向传播是指在CNN训练过程中,通过计算误差反向传播来更新网络的权重参数。具体步骤如下: 1. 前向传播:将输入数据通过卷积层、池化层、全连接层等进行处理,得到输出结果。 2. 计算误差:将输出结果与真实结果进行比较,计算误差。 3. 反向传播:将误差通过网络反向传播计算各层的误差梯度。 4. 更新参数:根据误差梯度更新网络中的权重参数,使得网络的输出结果更加接近真实结果。 具体来说,反向传播计算可以分为两个部分:误差反向传播和权重更新。 误差反向传播:对于每个输出节点 $i$,计算其误差 $\delta_i$,即真实输出值与预测输出值的差值。对于最后一层的输出节点,误差可以直接计算得到。而对于其他层的节点,误差需要由下一层节点的误差加权求和得到。具体来说,对于第 $l$ 层的节点 $i$,其误差 $\delta_i$ 可以通过以下公式计算: $\delta_i = f'(z_i)\sum_{j} w_{ji}\delta_j$ 其中,$f'(z_i)$ 表示第 $l$ 层节点的激活函数的导数,$w_{ji}$ 表示第 $l+1$ 层节点 $j$ 到第 $l$ 层节点 $i$ 的权重。 权重更新:根据误差梯度更新网络中的权重参数。具体来说,对于第 $l+1$ 层节点 $j$ 到第 $l$ 层节点 $i$ 的权重 $w_{ji}$,可以通过以下公式进行更新: $w_{ji} = w_{ji} - \eta \delta_j x_i$ 其中,$\eta$ 表示学习率,$x_i$ 表示第 $l$ 层节点 $i$ 的输入值。 通过不断迭代更新网络的权重参数,CNN可以逐渐学习到输入数据的特征,从而实现对图像、语音等复杂数据的分类、识别等任务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Clark-dj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值