3. CNN卷积网络-反向更新
完整机器学习实现代码GitHub
欢迎转载,转载请注明出处https://www.cnblogs.com/huangyc/p/10036246.html
欢迎沟通交流: 339408769@qq.com
1. CNN卷积网络-初识
2. CNN卷积网络-前向传播算法
3. CNN卷积网络-反向更新
1. 前言
如果读者详细的了解了DNN神经网络的反向更新,那对我们今天的学习会有很大的帮助。我们的CNN卷机网络中有3种网络结构。1. 卷积层,2.池化层,3.全连接层。全连接层的反向传播的方式和DNN的反向传播的方式是一样的,因为DNN的所有层都是全连接的结构。卷机层和池化层下文会继续讲解。
2. 全连接反向更新
这里先回顾下DNN的反向更新,我们进行反向更新主要是计算每一层的的梯度。
我们现在的目标只要计算每层的,就可以算出每层的的梯度。最后一层的很好计算,即
如果我们能够通过后一层的推算出前一层的那就把问题完全解决了。
以上就是全连接层的反向更新的过程。需要明确的一点是以上的推到是有一个前提的:
这个是前向传播的公式。所以卷积层和池化层的前向传播的公式不一样,那在对反向更新中的参数求导的过程也会变化。
3. 卷积层的反向传播
首先我们看下卷积层的前向传播公式:
其中的是不是一个矩阵,矩阵的定义是2维的,而我们的是一个张量,可以理解为多个矩阵的组合,或者理解为矩阵的数组。
由于前向传播公式的改变,卷积层求每层的递推方法肯定有所不同。又由于用的运算是卷积,那么计算卷积核的的方式也不同。
3.1 求的递推公式
我们先求,它的递推公式还是DNN中的那个。
因此和DNN一样,计算的任务就转化成了计算,那卷积层中的怎么计算呢?
所以有
这里的式子其实和DNN的类似,区别在于对于含有卷积的式子求导时,卷积核被旋转了180度。即式子中的,翻转180度的意思是上下翻转一次,接着左右翻转一次。在DNN中这里只是矩阵的转置。
3.2 已知,求的梯度
卷积层和的关系为:
则有带入(1)中得到:
其中的运算符和前向传播公式是一样的,是卷积的过程。可以把张量展开。
把当作卷积核,去扫描的张量,就得出了的梯度。
而对于,则稍微有些特殊,因为是三维张量,而只是一个向量,不能像DNN那样直接和相等。通常的做法是将的各个子矩阵的项分别求和,得到一个误差向量,即为的梯度:
4. 池化层的反向更新
在前向传播算法时,池化层一般我们会用MAX或者Average对输入进行池化,池化的区域大小已知。现在我们反过来,要从缩小后的误差,还原前一次较大区域对应的误差。
在反向传播时,我们首先会把的所有子矩阵矩阵大小还原成池化之前的大小,然后如果是MAX,则把的所有子矩阵的各个池化局域的值放在之前做前向传播算法得到最大值的位置。如果是Average,则把的所有子矩阵的各个池化局域的值取平均后放在还原后的子矩阵位置。这个过程一般叫做upsample。
用一个例子可以很方便的表示:假设我们的池化区域大小是2x2。的第个子矩阵为:
由于池化区域为2x2,我们先讲做还原,即变成
如果是MAX,假设我们之前在前向传播时记录的最大值位置分别是左上,右下,右上,左下,则转换后的矩阵为:
如果是Average,则进行平均:转换后的矩阵为:
这样我们就得到了上一层的值:
所以为:
5. 总结
以上就是CNN卷积网络的反向更新的过程,CNN卷积网络的更新和DNN还是有很大的不同,需要读者仔细思考这个过程,最好找个简单的例子能够手推一下整个过程,能够对整个过程有更深刻的理解。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)