当前位置: 首页 > news >正文

卷积神经网络 - 从全连接层到卷积

文章目录

  • 从全连接层到卷积
    • 1 - 不变性
    • 2 - 多层感知机的限制
      • 平移不变性
      • 局部性
    • 3 - 卷积
    • 4 - “沃尔多在哪里”回顾
      • 通道
    • 5 - 小结

从全连接层到卷积

我们之前讨论的多层感知机⼗分适合处理表格数据,其中⾏对应样本,列对应特征。对于表格数据,我们寻找的模式可能涉及特征之间的交互,但是我们不能预先假设任何与特征交互相关的先验结构。此时,多层感知机可能是最好的选择,然⽽对于⾼维感知数据,这种缺少结构的⽹络可能会变得不实⽤

例如,在之前猫狗分类的例⼦中:假设我们有⼀个⾜够充分的照⽚数据集,数据集中是拥有标注的照⽚,每张照⽚具有百万级像素,这意味着⽹络的每次输⼊都有⼀百万个维度。即使将隐藏层维度降低到1000,这个连接层也将有 1 0 6 × 1 0 3 = 1 0 9 10^6 × 10^3 = 10^9 106×103=109个参数。想要训练这个模型将不可实现,因为需要有⼤量的GPU、分布式优化训练的经验和超乎常⼈的耐⼼

有些读者可能会反对这个观点,认为要求百万像素的分辨率可能不是必要的。然⽽,即使分辨率减⼩为⼗万像素,使⽤1000个隐藏单元的隐藏层也可能不⾜以学习到良好的图像特征,在真实的系统中我们仍然需要数⼗亿个参数。此外,拟合如此多的参数还需要收集⼤量的数据。然⽽,如今⼈类和机器都能很好地区分猫和狗:这是因为图像中本就拥有丰富的结构,⽽这些结构可以被⼈类和机器学习模型使⽤。卷积神经⽹络(convolutional neural networks,CNN)是机器学习利⽤⾃然图像中⼀些已知结构的创造性⽅法

1 - 不变性

想象⼀下,假设你想从⼀张图⽚中找到某个物体。合理的假设是:⽆论哪种⽅法找到这个物体,都应该和物体的位置⽆关。理想情况下,我们的系统应该能够利⽤常识:猪通常不在天上⻜,⻜机通常不在⽔⾥游泳。但是,如果⼀只猪出现在图⽚顶部,我们还是应该认出它。我们可以从⼉童游戏”沃尔多在哪⾥”(图6.1.1)中得到灵感:在这个游戏中包含了许多充斥着活动的混乱场景,⽽沃尔多通常潜伏在⼀些不太可能的位置,读者的⽬标就是找出他。尽管沃尔多的装扮很有特点,但是在眼花缭乱的场景中找到他也如⼤海捞针。然⽽沃尔多的样⼦并不取决于他潜藏的地⽅,因此我们可以使⽤⼀个“沃尔多检测器”扫描图像。该检测器将图像分割成多个区域,并为每个区域包含沃尔多的可能性打分。卷积神经⽹络正是将空间不变性(spatial invariance)的这⼀概念系统化,从⽽基于这个模型使⽤较少的参数来学习有⽤的表⽰

现在,我们将上述想法总结一下,从而帮助我们涉及适合于计算机视觉的神经网络架构:

  1. 平移不变性(translation invariance):不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应,即为“平移不变性”
  2. 局部性(locality):神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系,这就是“局部性”原则。最终,可以聚合这些局部特征,以在整个图像级别进行预测

2 - 多层感知机的限制

平移不变性

局部性

3 - 卷积


这看起来类似于 (6.1.3),但有⼀个主要区别:这⾥不是使⽤(i + a, j + b),⽽是使⽤差值。然⽽,这种区别是表⾯的,因为我们总是可以匹配 (6.1.3)和 (6.1.6)之间的符号。我们在 (6.1.3)中的原始定义更正确地描述了互相关(cross-correlation),这个问题将在下⼀节中讨论

4 - “沃尔多在哪里”回顾

通道


然而,仍有许多问题待解决。例如,图像中是否到处都有存在沃尔多的可能?如何有效地计算输出层?如何选择适当的激活函数?为了训练有效的网络,如何做出合理的网络设计选择?

5 - 小结

  • 图像的平移不变性使我们以相同的方式处理局部图像,而不在乎它的位置
  • 局部性意味着计算相应的隐藏表示只需一小部分局部图像像素
  • 在图像处理中,卷积层通常比全连接层需要更少的参数,但依旧获得高效用的模型
  • 卷积神经网络(CNN)是一类特殊的神经网络,它可以包含多个卷积层
  • 多个输入和输出通道使模型在每个空间位置可以获取图像的多方面特征

相关文章:

  • selenium爬虫如何绕过反爬,看这一篇文章就足够了
  • c语言进阶:冒泡排序函数初步实现到逐步优化
  • 5年测试经验要个20K不过分吧,谁料面试官三个问题把我打发走了···
  • 内网渗透之Msf-Socks代理实战(CFS三层靶场渗透过程及思路)
  • 命令执行漏洞——远程命令执行
  • M0007 四则运算
  • 【机器学习】李宏毅——生成式对抗网络GAN
  • osi七层模型
  • 【Vue五分钟】五分钟了解webpack的高级概念
  • 【Linux】云服务器的购买与Linux远程连接
  • c++介绍与入门基础(详细总结)
  • 羊了个羊,日赚500万
  • Vue3+Element-Plus 前端项目配置
  • Qt5开发从入门到精通——第七篇二节( 图形视图——QSlider类)
  • java php nodejs python旅游网站设计与开发需求分析Springboot SpringcloudVue汇总一览
  • 自己简单写的 事件订阅机制
  • 2017年终总结、随想
  • 2017前端实习生面试总结
  • input实现文字超出省略号功能
  • Java 最常见的 200+ 面试题:面试必备
  • KMP算法及优化
  • k个最大的数及变种小结
  • React组件设计模式(一)
  • scala基础语法(二)
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 解决jsp引用其他项目时出现的 cannot be resolved to a type错误
  • 排序(1):冒泡排序
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 如何选择开源的机器学习框架?
  • 跳前端坑前,先看看这个!!
  • 想写好前端,先练好内功
  • 怎么将电脑中的声音录制成WAV格式
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • Spring第一个helloWorld
  • # 计算机视觉入门
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (二)JAVA使用POI操作excel
  • (二)斐波那契Fabonacci函数
  • (分布式缓存)Redis持久化
  • (十一)c52学习之旅-动态数码管
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (一)基于IDEA的JAVA基础1
  • .gitignore文件---让git自动忽略指定文件
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET Framework与.NET Framework SDK有什么不同?
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • ::前边啥也没有
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • @Controller和@RestController的区别?
  • @font-face 用字体画图标
  • []sim300 GPRS数据收发程序
  • [2018-01-08] Python强化周的第一天
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件