卷积神经网络 CNN BP算法推导
重点在对CNN的理解后, 理解对卷积层的的 梯度(导数) 推演.
回顾 CNN
首先是对神经网络, 前向, 后向的基本认识.
神经网络初步认识来看, 跟传统的 ML 理论的区别在于, 它更像一个经验的过程, 即debug. 它将一个样本输入(向量) 的每个分量, 进行一些 奇怪 的线性处理 (加权, 求和), 然后进行压缩投影 (0-1), 这样一层层地处理数据, 最后再来个 归一化 为一个向量(近似概率) 的输出. 这个过程呢, 称为 前向, 得到结果跟真实值之间的误差, 通过 反向 传递的方式来 动态调整权值参数 直到每个节点的 梯度接近0 就停止了调整了, 也就意味着, 网络基本构建完成了.
而 反向调整权值的 BP算法的核心, 就是多元函数求偏导, 利用链式法则而已.
学界已经证明, 一个3层的网络结构, 是可以模拟出任何的函数的, 只要中间层的节点够多. 但这样一来需要的计算量和内存非常大. 于是想着可以适当将网络变为复杂一点, 从层次上增加 (卷积层), 再加上一个滤波器, 实现对 输入的数据的特征提取 大幅度降低了计算复杂度.
CNN 的卷积过程, 一般会这样处理:
- 卷积核: 也是一个矩阵, 或者从数学上称为算子(option), 对输入矩阵进行变换, 通常, 输入,输出的维数没变, 但数值变了.
- 池化: 类似对卷积后的矩阵, 进行一个过滤, 分块 这样的(滤波器) 操作, 实现对对输入的 主特征提取.

池化的过程:

而网络的基本结构为: (以黑白图像, 单通道举例). 如果是彩色图像, 多通道, 则输入根据 R, G, B 三个矩阵而已.

回顾就到这了, 现重点来关注卷积层的梯度推演.
卷积层梯度 BP推导
变量声明
输入:
- 图像, 尺寸 H, W
- 卷积核, 尺寸 R, S
H, W 分别表示图片的高和宽, 如 100 x 200 px; R, S 表示卷积核的 垂直方向, 水平方向的 px, 跟 图片类似概念
参数:
- u, v 为纵向和横向的步长 (strides)
- a, b 为纵向和横向的填充 (padding) 这是为了, 卷积和对 图片区没有能对应上的地方(边界) 填充
输出:
- 特征图 (大小) : P, Q (P是纵向, Q是横向)
P, Q 呢, 作为 输入图像 H, W 与卷积核 R, S 卷积后的输出尺寸, 其关系为:
\(P = \frac {H-R +1+2a} {u}\)
\(Q = \frac {W-S +1+2b} {v}\)
2a, 2b 因为有两端嘛, 画图就能形象理解.
默认上对 P, Q 进行了 ceiling 操作, 使其为整数.
卷积的定义
对于给定的图像矩 I 和卷积核矩阵 K (卷积和尺寸为 k1 x k2)
Cross-correlation:
\((I \otimes K)_{ij} = \sum\limits_{m=0}^{k_1-1} \sum\limits_{n=0}^{k_2-1} I(i+m, j+n)K(m,n)\)
这就跟咱直观理解的"卷积" 的那个图移动操作是相符合的呀, 对应元素相乘, 然后再求和.
而在数学上的卷积概念, 跟我们上边这个直接对应元素相乘再求和有些不太一样:
\((I \otimes K)_{ij} = \sum\limits_{m=0}^{k_1-1} \sum\limits_{n=0}^{k_2-1} I(i-m, j-n)K(m,n)\)
\(=(I \otimes K)_{ij} = \sum\limits_{m=0}^{k_1-1} \sum\limits_{n=0}^{k_2-1} I(i+m, j+n)K(-m,-n)\)
即 卷积 Convolution 相当于将一个卷积核 旋转180度, 以后再来做 Cross-correlation
旋转这个操作, 即对应于某个的矩阵. 或者可理解为, 矩阵就是一个函数.
卷积前向
也是要线声明一波变量.
l 为层的下标, 第一层为 l=1,最后一层为 l = L
输入x 的尺寸为 H, W 并用 i, j 表示其下标
卷积核 w 的尺寸 k1, k2 并用 m, n 表示其下标
\(w^l_{mn}\) 为连接 l-1 层 和 l 层的卷积核
\(b^l\) 为 l 层的 bias
\(x^l_{i,j}\) 为 l 层激活函数的输入
\(o^l_{i,j}\) 为 l 层的输出
f(*) 为激活函数
暂时不细写了, 感觉好难去描述这种多层多维度的东西哦, 还是调api吧, 暂时, 太难弄了.

继续,

小结
还是留了一个推导的 Todo 在这里, 就关于BP推导的部分, 细节还有待考量, 太难弄觉得, 深度学习果然不一般, 目前觉得已到了我的知识上限了, 前面的BP还好, 偏导数而已, 而CNN的BP, 是有一下难度. 不过总体上, 这几篇算是理解了卷积的大致过程, 卷积无非是做了一个特征提取, 降低计算复杂度的这样一个往深度发展的网络结构而已. 原理并不算复杂, 但要从数学符号来描述, 我感觉我目前还是有点难, 放一放先, 至少概念基本清楚, 能调api即可.
卷积神经网络 CNN BP算法推导的更多相关文章
- 神经网络和BP算法推导
注意:绘画太难了,因为他们画,本文中的所有插图来自基本算法饺子机类.请勿转载 1.习模型: 事实上,基本上全部的基本机器学习模型都能够概括为下面的特征:依据某个函数,将输入计算并输出. 图形化表示为下 ...
- 卷积神经网络(CNN)反向传播算法
在卷积神经网络(CNN)前向传播算法中,我们对CNN的前向传播算法做了总结,基于CNN前向传播算法的基础,我们下面就对CNN的反向传播算法做一个总结.在阅读本文前,建议先研究DNN的反向传播算法:深度 ...
- [DL学习笔记]从人工神经网络到卷积神经网络_1_神经网络和BP算法
前言:这只是我的一个学习笔记,里边肯定有不少错误,还希望有大神能帮帮找找,由于是从小白的视角来看问题的,所以对于初学者或多或少会有点帮助吧. 1:人工全连接神经网络和BP算法 <1>:人工 ...
- 卷积神经网络(CNN)前向传播算法
在卷积神经网络(CNN)模型结构中,我们对CNN的模型结构做了总结,这里我们就在CNN的模型基础上,看看CNN的前向传播算法是什么样子的.重点会和传统的DNN比较讨论. 1. 回顾CNN的结构 在上一 ...
- 卷积神经网络CNN总结
从神经网络到卷积神经网络(CNN)我们知道神经网络的结构是这样的: 那卷积神经网络跟它是什么关系呢?其实卷积神经网络依旧是层级网络,只是层的功能和形式做了变化,可以说是传统神经网络的一个改进.比如下图 ...
- 【深度学习系列】手写数字识别卷积神经--卷积神经网络CNN原理详解(一)
上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...
- 【深度学习系列】卷积神经网络CNN原理详解(一)——基本原理
上篇文章我们给出了用paddlepaddle来做手写数字识别的示例,并对网络结构进行到了调整,提高了识别的精度.有的同学表示不是很理解原理,为什么传统的机器学习算法,简单的神经网络(如多层感知机)都可 ...
- 深度学习方法(五):卷积神经网络CNN经典模型整理Lenet,Alexnet,Googlenet,VGG,Deep Residual Learning
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld. 技术交流QQ群:433250724,欢迎对算法.技术感兴趣的同学加入. 关于卷积神经网络CNN,网络和文献中 ...
- 深度学习之卷积神经网络(CNN)详解与代码实现(二)
用Tensorflow实现卷积神经网络(CNN) 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10737065. ...
- 深度学习之卷积神经网络(CNN)详解与代码实现(一)
卷积神经网络(CNN)详解与代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/10430073.html 目 ...
随机推荐
- Common.Logging+log4net搭建项目日志框架
原文参考链接:https://www.cnblogs.com/heys/p/5787123.html Common.Logging+(log4net/NLog/) common logging是一 ...
- Android ADB 使用笔记
ADB 工作原理 当启动某个adb客户端时,该客户端会先检查是否有adb服务器正在运行,如果没有则启动服务器进程.服务器会在启动后与本地TCP端口 5037 绑定,并监听adb客户端 发出的命令. 服 ...
- Docker - 部署禅道
原文链接:https://mp.weixin.qq.com/s/8L0Rv6Wc0lFsQU6Lw0QloQ 简单的看了一下原文,他使用的是Ubuntu的操作系统,第一步的Docker安装相关命令 ...
- C#/.NET/.NET Core技术前沿周刊 | 第 28 期(2025年2.24-2.28)
前言 C#/.NET/.NET Core技术前沿周刊,你的每周技术指南针!记录.追踪C#/.NET/.NET Core领域.生态的每周最新.最实用.最有价值的技术文章.社区动态.优质项目和学习资源等. ...
- Nginx 之fastcgi常用配置项说明
在LNMP环境中,我们都知道nginx如果要解析php脚本语言,就必须通过配置fastcgi模块来提供对php支持,那么在配置fastcgi的时候,关于fastcgi配置项的值应该怎么设置才能让其发挥 ...
- 关于能否用DeepSeek做危险的事情,DeepSeek本身给出了答案
AI教父辛顿说DeepSeek允许本地部署的话可能会导致用户用DeepSeek来做一些危险的事情(https://t.cj.sina.com.cn/articles/view/7879923924/m ...
- HoloLens2 开发推荐配置
博客地址:https://www.cnblogs.com/zylyehuo/ 1.win11 pro+vs2019+unity2018+MRTK2.6.1 2.win10 pro+vs2019+uni ...
- 关于oracle pfile和spfile文件说明
•Pfile(Parameter File,参数文件):是基于文本格式的参数文件,含有数据库的配置参数. 默认的名称为"init+例程名.ora",这是一个文本文件,可以用任何文本 ...
- 一文彻底拿下HarmonyOS NEXT开发实战调试技巧
> 程序员Feri一名12年+的程序员,做过开发带过团队创过业,擅长Java.嵌入式.鸿蒙.人工智能等,专注于程序员成长那点儿事,希望在成长的路上有你相伴!君志所向,一往无前! --- # 1. ...
- BUUCTF---萌萌哒的八戒(猪圈密码)
1. 问题 2.知识点 猪圈密码 3.解题 对应解题,套上flag{whenthepigwanttoeat}