文章目录

  • 前言
  • 1. 从全连接层到卷积层
  • 2.卷积层
    • 2.1 二维交叉相关
    • 2.2 二维卷积层
    • 2.3 交叉相关 vs 卷积
    • 2.4 一维和三维交叉相关
  • 3. 卷积里的填充和步幅
    • 3.1 填充
    • 3.2 步幅
  • 4. 多个输入和输出通道
    • 4.1 多个输入通道
    • 4.2 多个输出通道
    • 4.3 1*1卷积层
  • 5. 池化层
    • 5.1 二维最大池化层
    • 5.2 平均池化层
  • 6 卷积神经网络(LeNet)

前言

卷积是我们学习深度学习最重要的概念之一,看一下卷积的基本知识。
我们从一个很简单的例子出发:一个猫和狗的图片分类问题:
假设我们用手机拍摄了一张1200万像素的彩色图片,则这张图片上会有3600万个元素。然后我们用一个100个大小的单隐藏层的MLP来训练,则这个模型会有36亿个元素,而这个数字远远多于世界上猫和狗的数量。那还不如直接记住所有的猫和狗咧。
所以,当我们使用MLP来处理比较大的图片的时候,就会遇到这种问题,那我们改怎么解决这个问题呢?


1. 从全连接层到卷积层

对于上面的问题简单画出它的层次结构如下图所示:

用单层的神经网络,就需要14GB的内存,还不算运算所需的内存,也就做不了多层。
找出图片中的沃尔多,总结出两个原则:

  1. 平移不变性:同样一个分类器,可以在图片任何地方识别。这个分类器不会因图片像素的改变而改变
  2. 局部性:找一个东西时,我们不需要考虑图片上的全局信息,只需要看输入图像中的局部信息就行

现在我们可以从全连接层出发,应用这两个原则得到卷积(一个特殊的全连接层)

之前的全连接层是把一个图片高和宽一个矩阵做成一个一维的向量了,现在我们把这个向量还原成一个矩阵,因为我们要考虑一些空间的信息,必须要用矩阵来算。
之前的全连接层:

  • 将输入和输出变形为举=矩阵(宽度和高度)

  • 对应的,我们可以把我们的权重变成一个4维的张量:从输入的高宽(h,w)到输出的高宽(h‘,w’)的变化,可以把它reshape成一个4D的张量。
    hi,j=∑k,lwi,j,k,lxk,l=∑a,bvi,j,a,bxi+a,j+b\mathbf{h}_{i, j} = \sum_{k,l}\mathbf{w}_{i,j,k,l} \mathbf{x}_{k,l}=\sum_{a,b}\mathbf{v}_{i,j,a,b}\mathbf{x}_{i+a,j+b}hi,j=k,lwi,j,k,lxk,l=a,bvi,j,a,bxi+a,j+b
    hi,j\mathbf{h}_{i, j}hi,j是我们的输出,x是我们的输入,w是之前全连接层的权重

  • V是W的重新索引 vi,j,a,b=wi,j,i+a,j+b\mathbf{v}_{i,j,a,b}=\mathbf{w}_{i,j,i+a,j+b}vi,j,a,b=wi,j,i+a,j+b

应用第1个原则–>平移不变性:

  • 我的输入x的平移会导致h的平移:
    hi,j=∑a,bvi,j,a,bxi+a,j+b\mathbf{h}_{i,j}=\sum_{a,b}\mathbf{v}_{i,j,a,b}\mathbf{x}_{i+a,j+b}hi,j=a,bvi,j,a,bxi+a,j+b
  • 而我们需要的是v不应该依赖于(i,j)
  • 解决方案:我们加上一个限制,使得vi,j,a,b=va,b\mathbf{v}_{i, j,a,b}=\mathbf{v}_{a,b}vi,j,a,b=va,b
    hi,j=∑a,bva,bxi+a,j+b\mathbf{h}_{i, j}=\sum_{a,b}\mathbf{v}_{a,b}\mathbf{x}_{i+a,j+b}hi,j=a,bva,bxi+a,j+b
    就是不管i,j移到哪里,我们的识别器vi.j\mathbf{v}_{i.j}vi.j也是不变的。这就叫做2维卷积或者说是2维的交叉相关。

二维卷积就是我的全连接或者说是一个矩阵乘法,但是我的权重使得一些东西是重复的,就是里面的每一个元素都不是可以自由变换,当我们把一个模型的取值范围做限制的话,模型的复杂度也会降低。

应用第2个原则–>局部性
hi,j\mathbf{h}_{i,j}hi,j的结果,应该由xi,j\mathbf{x}_{i,j}xi,j输入附近的那些节点就行了
hi,j=∑a,bva,bxi+a,j+b\mathbf{h}_{i, j}=\sum_{a,b}\mathbf{v}_{a,b}\mathbf{x}_{i+a,j+b}hi,j=a,bva,bxi+a,j+b

  • 当评估hi,j\mathbf{h}_{i,j}hi,j时,我们不应该远离xi,j\mathbf{x}_{i,j}xi,j的参数
  • 解决方案:当|a|或者|b| > Δ\DeltaΔ时,使得va,b=0\mathbf{v}_{a,b}=0va,b=0
    hi,j=∑a=−ΔΔ∑b=−ΔΔva,bxi+a,j+b\mathbf{h}_{i,j}=\sum_{a=-\Delta}^{\Delta}\sum_{b=-\Delta}^{\Delta}\mathbf{v}_{a,b}\mathbf{x}_{i+a,j+b}hi,j=a=ΔΔb=ΔΔva,bxi+a,j+b

小结一下:
对全连接层使用平移不变性和局部性就可以得到我们的卷积层。

2.卷积层

2.1 二维交叉相关

可以看到这个动画,看每一次是怎么样扫过去的。
假设输入是一个33的矩阵,卷积核(w)是一个22的矩阵,Δ\mathbf{\Delta}Δ等于1。

kernel是不变的,就是平移不变性
输出是一个2*2的矩阵,就是局部性,没有看整体。

2.2 二维卷积层

  • 输入X:nh∗nw\mathbf{n}_h*\mathbf{n}_wnhnw
  • 核W:kh∗kw\mathbf{k}_h*\mathbf{k}_wkhkw
  • 偏差 b∈R
  • 输出 Y:(nh−kh+1)∗(nw−kw+1)(\mathbf{n}_h-\mathbf{k}_h+1)*(\mathbf{n}_w-\mathbf{k}_w+1)(nhkh+1)(nwkw+1)
    Y=X∗W+b\mathbf{Y=X*W+b}Y=XW+b
  • W和b是可学习的参数

2.3 交叉相关 vs 卷积

  • 二维交叉相关
    yi,j=∑a=1h∑b=1wwa,bxi+a,j+b\mathbf{y}_{i,j}=\sum_{a=1}^{h}\sum_{b=1}^{w}\mathbf{w}_{a,b}\mathbf{x}_{i+a,j+b}yi,j=a=1hb=1wwa,bxi+a,j+b
  • 二维卷积
    yi,j=∑a=1h∑b=1ww−a,−bxi+a,j+b\mathbf{y}_{i,j}=\sum_{a=1}^h\sum_{b=1}^w\mathbf{w}_{-a,-b}\mathbf{x}_{i+a,j+b}yi,j=a=1hb=1wwa,bxi+a,j+b
  • 由于对称性,在实际使用中没有区别

2.4 一维和三维交叉相关

一维: yi=∑a=1hwaxi+a\mathbf{y}_{i}=\sum_{a=1}^h\mathbf{w}_a\mathbf{x}_{i+a}yi=a=1hwaxi+a

  • 可用于文本、语言、时间序列

三维:yi,j,k=∑a=1h∑b=1w∑c=1dwa,b,cxi+a,j+b,k+c\mathbf{y}_{i,j,k}=\sum_{a=1}^h\sum_{b=1}^w\sum_{c=1}^d\mathbf{w}_{a,b,c}\mathbf{x}_{i+a,j+b,k+c}yi,j,k=a=1hb=1wc=1dwa,b,cxi+a,j+b,k+c

  • 可用于视频、医学图像 、气象地图

小结:

  • 卷积层将输入和核矩阵进行交叉相关,加上偏移后得到输出
  • 核矩阵和偏移是可学习的参数
  • 核矩阵的大小是超参数

3. 卷积里的填充和步幅

3.1 填充

  • 对于一个给定的(32 * 32)的图像,用一个5 * 5的卷积核来做卷积,形状从nh∗nw\mathbf{n}_h*\mathbf{n}_wnhnw减少到(nh−kh+1)∗(nw−kw+1)(\mathbf{n}_h-\mathbf{k}_h+1)*(\mathbf{n}_w-\mathbf{k}_w+1)(nhkh+1)(nwkw+1)
  • 当我想要用卷积构造更深层次的神经网络,但是不希望我的图片变小的话就需要用到填充

填充:就是在输入的四周加上额外的行 / 列,得到我们的输出不会变小,甚至可以比输入要大
如下图所示,在输入的行和列周围都填充0,得到的输出要比输入大。

一般情况下:

  • 填充ph\mathbf{p}_hph行和pw\mathbf{p}_wpw列,输出的形状为(nh−kh+ph+1\mathbf{n}_h-\mathbf{k}_h+\mathbf{p}_h+1nhkh+ph+1)*(nw−kw+pw+1\mathbf{n}_w-\mathbf{k}_w+\mathbf{p}_w+1nwkw+pw+1
  • 通常取ph=kh−1\mathbf{p}_h=\mathbf{k}_h-1ph=kh1pw=kw−1\mathbf{p}_w=\mathbf{k}_w-1pw=kw1
    kh\mathbf{k}_hkh为奇数:在上下两侧填充ph\mathbf{p}_hph/2
    kh\mathbf{k}_hkh为偶数:在上侧填充⌈ph/2⌉\lceil p_h/2\rceilph/2,在下侧填充⌊ph/2⌋\lfloor p_h/2\rfloorph/2

3.2 步幅

对于给定一个224 * 224大小的输入,我们需要通过大量的卷积层才能得到较小的输出。此时便可用到步幅。
步幅:在每次移动卷积核的时候,向左向下移动的步幅大小,在不指定时,默认步幅为1。

一般情况下:

  • 给定高度sh\mathbf{s}_hsh和宽度sw\mathbf{s}_wsw的步幅,输出形状是⌊(nh−kh+ph+sh)/sh⌋\lfloor(\mathbf{n}_h-\mathbf{k}_h+\mathbf{p}_h+\mathbf{s}_h)/\mathbf{s}_h\rfloor⌊(nhkh+ph+sh)/sh * ⌊(nw−kw+pw+sw)/sw⌋\lfloor(\mathbf{n}_w-\mathbf{k}_w+\mathbf{p}_w+\mathbf{s}_w)/\mathbf{s}_w\rfloor⌊(nwkw+pw+sw)/sw
  • 如果ph=kh−1,pw=kw−1\mathbf{p}_h=\mathbf{k}_h-1,\mathbf{p}_w=\mathbf{k}_w-1ph=kh1pw=kw1
    ⌊(nh+sh−1)/sh⌋\lfloor(\mathbf{n}_h+\mathbf{s}_h-1)/\mathbf{s}_h\rfloor⌊(nh+sh1)/sh * ⌊(nw+sw−1)/sw⌋\lfloor(\mathbf{n}_w+\mathbf{s}_w-1)/\mathbf{s}_w\rfloor⌊(nw+sw1)/sw
  • 如果输入高度和宽度可以被步幅整除(hh/sh)∗(nw/sw)(\mathbf{h}_h/\mathbf{s}_h)*(\mathbf{n}_w/\mathbf{s}_w)(hh/sh)(nw/sw)

小结:

  • 填充和步幅都是卷积层的超参数
  • 填充在输入周围添加额外的行/列,来控制输出形状的减少量
  • 步幅是每次滑动核窗口时的行/列的步长,可以成倍的减少输出形状。

4. 多个输入和输出通道

4.1 多个输入通道

彩色图像的通道数可能是RGB三个通道,将其转换为灰度会丢失信息。

  • 假设我们是输入有多个通道,每个通道都有一个卷积核,结果是所有通道卷积结果的和。

    公式表达:
  • 输入X:ci∗nh∗nw\mathbf{c}_i*\mathbf{n}_h*\mathbf{n}_wcinhnw
  • 核W:ci∗kh∗kw\mathbf{c}_i*\mathbf{k}_h*\mathbf{k}_wcikhkw
  • 输出Y:mh∗mw\mathbf{m}_h*\mathbf{m}_wmhmw
    Yi=∑i=0ciXi∗Wi\mathbf{Y}_i=\sum_{i=0}^{\mathbf{c}_i}\mathbf{X}_i*\mathbf{W}_iYi=i=0ciXiWi

4.2 多个输出通道

无论有多少输入通道,到目前为止我们只用到单输出通道,我们可以有多个三维卷积核,每个核生成一个输出通道。
每个输出通道用来提取和识别不同的特征模式,最后

  • 输入X:ci∗nh∗nw\mathbf{c}_i*\mathbf{n}_h*\mathbf{n}_wcinhnw
  • 核W:c0∗ci∗kh∗kw\mathbf{c}_0*\mathbf{c}_i*\mathbf{k}_h*\mathbf{k}_wc0cikhkw
  • 输出Y:c0∗mh∗mw\mathbf{c}_0*\mathbf{m}_h*\mathbf{m}_wc0mhmw
    Yi=X∗Wi\mathbf{Y}_i=\mathbf{X}*\mathbf{W}_iYi=XWi for i =1…c0c_0c0

4.3 1*1卷积层

就是说卷积层的高和宽都等于1,它只能看到一个像素,意味着它不会去识别你的空间信息,但它用于融合不同通道的信息。
例子:
有一个输入通道为3,高和宽都等于3的输入,得到输出通道为2的1*1卷积的话,卷积核的每个通道里面就是一个长和高为1的元素。

注意:有多个通道时,每个通道的卷积核都不一样,不同通道卷积核的大小是一样的。

5. 池化层

卷积层对于位置非常的敏感,稍微的抖动都会造成值的变化。

5.1 二维最大池化层

返回滑动窗口中的最大值:

池化层的填充,步幅和多个通道:

  • 池化层与卷积层类似,都具有填充和步幅
  • 没有可学习的参数
  • 在每个输入通道应用池化层以获得相应的输出通道
  • 输出通道数=输入通道数

5.2 平均池化层

平均池化层就是将最大池化层中的“最大”操作替换为“平均”
.max()–>.mean()


小结:

  • 池化层是返回窗口中的最大值或者是平均值
  • 池化层的主要作用是用来缓解卷积层对位置的敏感性,通常作用于卷积层之后。
  • 与卷积层一样的是同样拥有窗口大小、填充和步幅作为超参数
  • 与卷积层不同的是它对每个通道分别作用,直接输出,没有输出通道数的超参数啦,也就是说输入通道数一定等于输出通道数
  • 池化层也没有可以学习的参数

6 卷积神经网络(LeNet)

输入是一张2828的图片;然后放到一个55的卷积里面,输出是六个通道数的28 * 28的一个输出;接下来是一个2 * 2的pooling层,输出是六个通道的14 * 14的输出;然后经过5 * 5的卷积层,输出16个通道是10*10的输出;然后是一个2 * 2的pooling层,输出16个通道的5 * 5的输出;然后在把它输入到几个全连接层,拉成一个向量。

图示过程:


小结:

  • LeNet是早期成功的神经网络
  • 先使用卷积层来学习图片空间信息
  • 然后使用全连接层来转换到类别空间

李沐-->卷积神经网络相关推荐

  1. 【动手学深度学习】李沐——循环神经网络

    本文内容目录 序列模型 文本预处理 语言模型和数据集 循环神经网络 RNN的从零开始实现 RNN的简洁实现 通过时间反向传播 门控循环单元GRU 长短期记忆网络(LSTM) 深度循环神经网络 双向循环 ...

  2. 沐神点赞!同济子豪兄精读AI经典论文,包括图像分类、目标检测、生成对抗网络、轻量化卷积神经网络等领域...

    读研/读博的你,是不是符合: 毕设/研一/博一科研小白刚进课题组,不知道如何写开题报告和综述? 前沿顶会.期刊论文.综述文献浩如烟海,不知道学习路径,无从下手? 导师放养,既不懂也不管,师兄各忙各的, ...

  3. 李沐动手学深度学习V2-全卷积网络FCN和代码实现

    一.全卷积网络FCN 1. 介绍 语义分割是对图像中的每个像素分类,全卷积网络(fully convolutional network,FCN)采用卷积神经网络实现了从图像像素到像素类别的变换 ,与前 ...

  4. 《图像分类》概述,李飞飞经典CS231N2021《卷积神经网络视觉识别》课程第二讲!...

    来源:专知本文多图,建议阅读5分钟本文深入探讨了基于神经网络的计算机视觉深度学习方法的细节. [导读 ]李飞飞老师的CS231N课程<卷积神经网络视觉识别>被奉为经典,最新2021季已经于 ...

  5. 收藏 | 李飞飞经典CS231N《卷积神经网络视觉识别》第十一讲!

    点上方计算机视觉联盟获取更多干货 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:专知 AI博士笔记系列推荐 周志华<机器学习>手推笔记正式开源!可打印版本附pdf下载链接 [导读 ...

  6. 【CS231n】斯坦福大学李飞飞视觉识别课程笔记(十九):卷积神经网络笔记(下)

    [CS231n]斯坦福大学李飞飞视觉识别课程笔记 由官方授权的CS231n课程笔记翻译知乎专栏--智能单元,比较详细地翻译了课程笔记,我这里就是参考和总结. [CS231n]斯坦福大学李飞飞视觉识别课 ...

  7. 真·卷积神经网络发明者福岛邦彦获奖!李飞飞、LSTM之父点赞祝贺

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 本文转载自:机器之心 1980 年,福岛邦彦首次使用卷积神经网络实现了模式识别,他被认为是真正的卷积神经网络 ...

  8. 李沐亲授加州大学伯克利分校深度学习课程移师中国,现场资料新鲜出炉

    2019 年 9 月 5 日,AI ProCon 2019 在北京长城饭店正式拉开帷幕.大会的第一天,以亚马逊首席科学家李沐面对面亲自授课完美开启! "大神",是很多人对李沐的印象 ...

  9. 资源 | 李沐等人开源中文书《动手学深度学习》预览版上线

    来源:机器之心 本文约2000字,建议阅读10分钟. 本文为大家介绍了一本交互式深度学习书籍. 近日,由 Aston Zhang.李沐等人所著图书<动手学深度学习>放出了在线预览版,以供读 ...

最新文章

  1. python可分组字典
  2. 北京站售票员内部大量出票无耻的售票员(转)
  3. ASP.NET MVC 2.0
  4. 3 年工作经验程序员应有的技能
  5. Python之Pymysql模块操作MySQL增删改查
  6. 容器编排技术 -- Kubernetes kubectl 命令表
  7. DB2 删除某用户下的所有表
  8. Linux下防火墙开启相关端口及查看已开启端口
  9. 仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'Address'中的标识列指
  10. ios控件 UIViewController
  11. 怎么锁定计算机密码忘了怎么办,电脑在控制面板被锁密码忘记怎么开呢?
  12. 软件程序设计中的N-S图、PAD图、程序流程图、E-R图
  13. python成绩统计_利用python进行学生成绩分析
  14. Java 计算工作时间 除去周末、节假日
  15. 计算机内存不足黑屏怎么办,win10内存不足会黑屏怎么办
  16. 苹果笔记本安装完系统win10后多了osxreserved_Mac重装双系统,苹果笔记本电脑重装系统教程...
  17. 零基础学CocosCreator·第八季-双人对战五子棋
  18. ubuntu18.04安装vmware虚拟机
  19. 在360个人图书馆中实现复制
  20. Spark First Sample Demo

热门文章

  1. 头条笔试题 分配任务
  2. 种树问题(Java)
  3. Python学习笔记(五.数据分析 ——上)
  4. python知识点整理
  5. 淘宝镜像安装 超详细 全网最全 仔细看完
  6. linux 日语软件下载,教你在 Arch Linux 中设置日语环境
  7. 游戏中的字体.......
  8. 铁路计算机软件,铁路信号计算机联锁软件研究与设计原稿_0(全文完整版)
  9. AOT/JNI/Vala 的比较
  10. 基于JAVA的选课管理系统