卷积神经网络 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 目 ...
随机推荐
- 安全稳定地远程访问飞牛NAS
春节前从一个网友那里了解到一个新的NAS--飞牛. 起因是我们一个用户用我们的SD-WAN来远程访问飞牛NAS,市面上做NAS的很多,之所以单独体验这个产品主要是: 不需要购买硬件,这个是非常重要的, ...
- nginx 强制https
nginx 强制https 通常有如下两种方法强制https推荐第二种,第二种更高效1.使用nginx的rewrite方法 server { listen 80; server_name xxx. ...
- HDP集群部署
一.环境准备 centos7 安装和系统环境处理 1)运行初始化脚本 !/bin/bash ------------------------------------- 系统环境初始化脚本 本脚本仅支持 ...
- 介绍一下opentcs
OpenTCS是一个开源的自动运载系统(Automated Guided Vehicle,AGV)控制系统.它旨在管理和控制自动化运输车辆,例如AGV或自动搬运车(AMR),在工业和商业环境中执行各种 ...
- 【ABAQUS 二次开发笔记】读入TXT分析结果&输出csv文件
abaqus分析之后,很多结果可以输出dat,msg,sta等文件中.可以用记事本.notpad++.editplus等软件打开编辑. 但是往往无法直接用excel.origin等软件打开,比如对结构 ...
- jquery给一个li标签添加和去掉class属性
$("li").addClass('xxx').siblings().removeClass("xxx");
- 认识webRTC
什么是 WebRTC 2010 年 5 月,谷歌收购了 Global IP Solutions(简称 GIPS),这是一家专注于 VoIP 和视频会议软件的公司,已开发出 RTC 所需的多项关键组件, ...
- Joker 智能开发平台再推重磅新品,引领开发新潮流
自 Joker 智能开发平台的前端可视化版本惊艳亮相后,便迅速在行业内掀起热潮,其创新的理念与出色的性能,为开发者和企业打造了高效.便捷的开发新路径,备受瞩目与好评.如今,Joker 智能开发平台即将 ...
- 项目管理协作工具对比:PingCode vs Leangoo
多语言适配能力 在全球化协作场景下,多语言支持成为跨国团队的硬性指标.PingCode目前仅支持中文界面,对于涉及多国语言协作的团队存在使用局限.对比Leangoo提供中英文双语界面切换功能,可满足基 ...
- RSA密钥生成-已知p、q、e求私钥d的python脚本
题目: 在一次RSA密钥对生成中,假设p=473398607161,q=4511491,e=17 求解出d作为flag提交 求解过程: 首先计算n和ϕ(n) n=p*q ϕ(n)=(p-1)(q-1 ...