图文+代码分析:caffe中全连接层、Pooling层、Relu层的反向传播原理和实现

本文详细解析了神经网络中的全连接层、池化层及ReLU激活函数的反向传播过程,包括各层的梯度计算及更新策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.全连接层反向传播

CC为loss
全连接层输入:(bottom_data) a
全连接层输出:(top_data) zz
假设 a维度K_, zz维度N_,则权值矩阵维度为N_行*K_列,batchsize=M_
全连接层每个输出zi=b+jwijaj

1.1bottom_diff计算:

对bottom_data求导:Caj=iCziziaj=iziwij∂C∂aj=∑i∂C∂zi⋅∂ziaj=∑izi′wij(batchsize=1时)
当batchsize不为1时,需要分别获得各个样本下的结果,组成矩阵:
bottom_diff计算矩阵实现示意图
caffe实现:

1.2weight_diff计算:

对weight求导:Cwij=Cziziwij=ziaj∂C∂wij=∂C∂zi⋅∂ziwij=zi′aj
当batchsize不为1时,需要将各个样本下的结果进行求和:
weight_diff计算矩阵实现示意图
caffe实现:

1.3bias_diff计算:

对bias进行求导:Cb=iCzizib=izi∂C∂b=∑i∂C∂zi⋅∂zib=∑izi′(batchsize=1时)
当batchsize不为1时,需要分别获得各个样本下的结果,组成向量:
bias_diff计算矩阵实现示意图
caffe实现:

2.Pooling层反向传播

2.1 Max Pooling:

MaxPooling前向传播示意图
首先,在前向传播时,在输出新的feature map的同时,还要记录每个输出点对应于前一层feature map中的位置,放入mask或者top_mask中(top_mask是指,该mask存放在top_data里当作输出的一部分)
max pooling 前向传播caffe实现:

在反向传播时:将top_diff按照记录下来的index返回到输入层中,即只对前向传播时选中的一些位置进行误差传播,如下图:
MaxPooling反向传播示意图
max pooling 反向传播caffe实现:

2.2 Average Pooling

前向传播较简单,block内数值的平均值作为输出,每个输出值对应固定的输入block,如图:
AveragePooling前向传播示意图
反向传播,将输出层各个位置的梯度,平均分配到其对应的输入block中,如图:
AveragePooling反向传播示意图
average pooling 反向传播caffe实现:

3.Relu层反向传播

由Relu定义可得其导数:

f(x)={xαxx>0x0,f(x)={1αx>0x0f(x)={xx>0αxx⩽0,f′(x)={1x>0αx⩽0

其中αα默认为0
则Relu反向传播只需判断原始输入数据是否大于0,若大于0则将top_diff直接传到前层,否则将top_diff乘上αα传到前层,如图:
Relu层前向和反向传播示意图
Relu层反向传播caffe实现:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值