四张图彻底搞懂CNN反向传播算法(通俗易懂)

小白学视觉

共 1629字,需浏览 4分钟

 ·

2021-04-04 08:12

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

本文转自:机器学习算法那些事

阅读本文之前,可以先阅读之前讲述的全连接层的反向传播算法详细推导过程,

已经了解反向传播算法的请自动忽略。

1. 卷积层的反向传播


废话不说,直接上图:

假设输入为一张单通道图像  ,卷积核大小为  ,输出为  。为了加速计算,首先将 按卷积核滑动顺序依次展开,如上图所示。其中,  中的红色框代表  中的红色框展开后的结果,将  依次按照此方式展开,可得  。同理可得  ,然后通过矩阵相乘可得输出  (与  等价)。此时,已经将CNN转化为FC,与反向传播算法完全一致,这里不再做详细介绍。

当有 N 个样本,做一个batch训练,即channel=N时,前向与反向传播方式如下图所示:

其中,输入图像channel=3,使用2个  的卷积核,输出两张图像,如图所示。红色框、黄色框代表的是卷积核以及使用该卷积核得到的输出图像  。当输入图像为一个batch时,  的转化方式如上图,首先将输入图像与卷积核分别按单通道图像展开,然后将展开后的矩阵在行方向级联。此时,已经将CNN转化为了FC,与反向传播算法完全一致,这里不再做详细介绍。

2. Average pooling的反向传播

 不用求,因为  为常数。 

3. Max-pooling的反向传播

遍历  的每一行,找出此行最大值的索引  ,然后将  中索引为  的值设为  对应行的值,将此行其余列的值设为  ,如上图所示红框所示。假设  中(1,1)处的值是第一行中最大的值,则将  赋值给  中索引为  的位置。最后计算:  。


下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲
小白学视觉公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


浏览 31
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报