02 卷积神经网络(CNN)

CNN介绍

上图是CNN的完整结构图,先放在这里,下面会以图像分类任务为例,逐步对其进行介绍。

CNN的设计动机

CNN是专门为图像设计的网络结构,结合了许多图像才会有的特性。

CNN在图像分类中的使用

基本结构信息

输入

CNN的输入一般的图片,且图片一般是一个三维的张量,包括图片的宽、图片的高和图片的信道数。图片的宽和高之积即为图片的像素数目,如果图片是彩色图片,那么有RGB三个信道,如果是黑白图片则只有一个信道,相当于此时图片退化为二维的矩阵。

有一个很普遍的前提假设是:所有待分类的图片(即模型的输入)都有相同的大小。在实际应用中,如果图片大小不一致,会对其进行缩放。

输出

CNN的输出是一个 n n n维向量,维数等于设定的类别数,且向量中某个元素的数值越大,代表分类为该类别的可能性越高。

目标标签采用one-hot编码,向量中只有代表相应目标类别的一个元素为1,其他元素均为0。

损失函数

对于分类问题,CNN采用的损失函数一般是交叉熵。

由于数据的标签即为one-hot编码,并且正确分类对应的元素值为1,所以将模型经过softmax函数之后的值与数据的标签进行交叉熵运算,然后用优化算法使得交叉熵最小。

全连接网络的问题(模型参数的个数与数据量关系的问题)

如上图所示,如果在图片分类中使用的是全连接网络(即每个输入都与所有神经元相连),那么未知参数的数量是很庞大的,而这会使得运算量较大,并且会增加过拟合的风险。

更加普适性的说,模型的参数越多,那么模型的弹性越大、能力更强,但是在数据量比较少时容易过拟合,且训练复杂度高。而如果模型参数较小,则模型不容易过拟合,但是无法从更多的数据量中学习到有用的信息。所以,在数据量比较少的时候,用参数少的模型好,在数据量比较大的时候,用参数多的模型好。

图片本身的特性

观察1:特定模式大小是比较小的->设置感受野

CNN在进行图像识别的时候,重点是关注图片中的重要模式(pattern)而非整张图片。

因此,如下图所示,可以仅仅只需要将图片的一小部分(感受野)输入给对应的神经元。这样的好处时大大减少了未知参数的数量。

比如对于一张3*100*100的图片,1000个神经元的全连接网络的输入层,未知参数个数应该为30000*1000。而对于一张3*100*100的图片,按照经典的CNN设定,感受野是3*3,每次移动的步长stride是2,则感受野的数量是50*50(最右和最下边的感受野会有padding填充),若每个感受野只对应一个神经元,那么神经元的数量也是2500,而总的未知参数的个数为9*2500,可见未知参数数量有大幅减少。

当然,由于pattern可能会分布在图片的任何一部分,所以所有的感受野加起来必须要将整张图片完全覆盖。

观察2:相同的模式可能会出现在图片的不同区域->共享参数

由于相同的模式可能会出现在图片的不同区域,因此没有必要对于不同的区域使用不同的参数的神经元进行pattern的侦测,可以考虑将每一个神经元的参数进行共享,即将所有神经元的参数设置为同一套参数。

这样,在前一步的中描述的模型未知参数数量将变为一个感受野的大小,即3*3。当然,一般经典的设定是将一个感受野与64个神经元对应,即未知参数数量是3*3*64。每一个神经元对应的3*3个数量的未知参数也叫一个filter。

当然需要说明的是,虽然每一个神经元的参数都是相同的,但是并不意味着对不同感受野的训练是重复的,因为图片不同区域的输入是不同的,因此经过相同神经元的输出也是不同的。

从filter的角度理解侦测pattern的原理

filter的角度理解侦测pattern的步骤:

  1. 首先将第一个filter放在图片的左上角,然后将filter中的数值与图片中对应的数值相乘并求和,然后再加上偏置量bias。
  2. 将filter移动一个步长stride,重复步骤1中运算,直至遍历完整张图片,得到一个新的矩阵(Feature Map)。
  3. 对所有的filter执行步骤1和步骤2的操作。

如上图所示,如果感受野中出现了和filter中相近的pattern,那么对应输出的值是比较大的。那么可以认为数值最大的位置,就是可能出现了pattern的位置。

观察3:把图片缩小并不会改变图片中的物体->池化

比如把图片中的奇数列或偶数行去掉,尽管图片会变为原来的 1 / 4 1/4 1/4,但是基本不影响对图片内容的判断,因此可以考虑将每个Feature Map的信息进行分组,然后每组选择一个代表,从而降低其维数,这就是池化(Pooling)。

池化有许多不同的类型,比如Max Pooling是取每一组中数值最大的那一个作为代表。

池化的主要目的是为了降低模型的复杂度,减少运算量,所以当计算资源足够多是池化并不是一个必须要进行的操作。但同时,池化操作会降低模型的精度,尤其是当侦测一些比较细微的模型时,所以现在的很多模型放弃了池化的操作,而是设计full convolution的网络。

当然需要说明的是,池化并不是神经网络的一层,因为池化操作并不涉及到任何未知参数的学习,仅仅是执行固定好的行为,因此池化的作用更加类似于激活函数的作用。

卷积层的设计

每一个卷积层的未知参数由若干个filter构成(严格来说还要加上bias),每个filter中未知参数的个数是感受野的大小*输入数据的通道数。对卷积层训练的过程即对filter中未知参数的学习。

用到卷积层的神经网络就叫做卷积神经网络。

卷积层与全连接层的关系

全连接层包含卷积层,卷积层可以看作是将filter感受野范围之外的未知参数均设置为0,且有许多神经元的未知参数是相同的全连接层。(即全连接层+感受野+参数共享=卷积层)

卷积层与全连接层的优劣

卷积层与全连接层相比,全连接层弹性很大,但容易过拟合。卷积层不容易过拟合,但模型偏差更大。

换言之,全连接层的普适性更强,可以在任何任务上都表现得比较好,但是无法在特定任务上做得更好;而卷积层是专门为图像设计的,所以在图像上能做得更好,但是当把卷积层应用到其他领域时,如果其他领域没有类似于图像中的设计,那么卷积层可能就表现得不好。

CNN的设计

叠加多个卷积层

将图片输入到一个卷积层,卷积层中的每一个filter会对其进行扫描,得到一个Feature Map。

所有的filter得到的Feature Map构成了一张新的通道数为当前卷积层filter个数的“图片”,并将其作为下一个卷积层的输入。

将卷积层与池化结合

在实际应用中往往进行若干次卷积,然后进行一次池化,二者交替进行。

CNN的整体结构

卷积和池化操作完毕之后,会进行flatten。flatten指的是把矩阵中的数据拉直排列成一个向量。然后将flatten之后的向量放入全连接层,并对输出附加一个softmax函数,得到最终的结果。

CNN在其他场景中的使用

α \alpha α Go中的使用

将棋盘看作是像素为19*19的图片,每一个位置用48通道来描述,比如可以在某个通道中对每一个像素用不同的数值来表示有黑子、白子或无子。输出为下一手在哪个位置更好的分类。

CNN之所以能用于下围棋,是因为围棋与图片有许多相似的特征,比如pattern在整张图片中的占比都很小,比如不同的pattern会出现在图片的不同位置。

其他应用

根据具体场景的特性,CNN还被用于语音处理、文字处理中。

CNN的局限性

CNN无法直接对缩放或旋转后的图片进行正确的分类。

只有在训练时,用缩放或旋转后的图片对CNN进行训练,才能使CNN对相关图片的处理有较好的性能。

李宏毅老师2022机器学习课程笔记 02 卷积神经网络(CNN)相关推荐

  1. 李宏毅老师2022机器学习课程笔记 01 Introduction of Deep Learning

    01 Introduction of Deep Learning 机器学习相关规定 什么是机器学习 机器学习的概念 我觉得李老师讲得非常好的一点就是,他真正说清楚了机器学习中的一些因果逻辑. 比如我之 ...

  2. 李宏毅老师《机器学习》课程笔记-3卷积神经网络

    注:本文是我学习李宏毅老师<机器学习>课程 2021/2022 的笔记(课程网站 ),文中图片除了一幅我自己绘制的图和一幅来自 Stanford cs231n 教程的图,其余图片均来自课程 ...

  3. 吴恩达深度学习课程笔记之卷积神经网络(2nd week)

    0 参考资料 [1]  大大鹏/Bilibili资料 - Gitee.com [2] [中英字幕]吴恩达深度学习课程第四课 - 卷积神经网络_哔哩哔哩_bilibili [3]  深度学习笔记-目录 ...

  4. 【TensorFlow实战笔记】卷积神经网络CNN实战-cifar10数据集(tensorboard可视化)

    IDE:pycharm Python: Python3.6 OS: win10 tf : CPU版本 代码可在github中下载,欢迎star,谢谢 CNN-CIFAR-10 一.CIFAR10数据集 ...

  5. 机器学习算法之——走近卷积神经网络(CNN)

  6. 李宏毅老师《机器学习》课程笔记-5 Transformer

    注:本文是我学习李宏毅老师<机器学习>课程 2021/2022 的笔记(课程网站 ),文中图片除一张来自 transformer论文,其余均来自课程 PPT.欢迎交流和多多指教,谢谢! L ...

  7. 李宏毅老师《机器学习》课程笔记-6 GAN

    注:本文是我学习李宏毅老师<机器学习>课程 2021/2022 的笔记(课程网站 ),文中图片均来自课程 PPT.欢迎交流和多多指教,谢谢! 6 Unsupervised Learning ...

  8. 李宏毅老师《机器学习》课程笔记-2.1模型训练技巧

    注:本文是我学习李宏毅老师<机器学习>课程 2021/2022 的笔记(课程网站 ),文中图片除了两幅是我自己绘制外,其余图片均来自课程 PPT.欢迎交流和多多指教,谢谢! 文章目录 Le ...

  9. 李宏毅老师《机器学习》课程笔记-4.1 Self-attention

    注:本文是我学习李宏毅老师<机器学习>课程 2021/2022 的笔记(课程网站 ),文中有一张图片来自于 The Illustrated Transformer ,其余图片均来自课程 P ...

最新文章

  1. CenterNet2:比强更强的二阶段网络,COCO成绩最高达到56.4mPA
  2. C++ with STL(一)
  3. JavaScript函数小集锦
  4. 阿里云峰会|阿里云数据中台重磅升级后拟扶持100万家企业数智化
  5. Dubbo思维导图知识点整理
  6. Representation Flow for Action Recognition论文解读
  7. pmp项目变更的流程图_PMP流程图
  8. Linux内核部件分析 设备驱动模型之bus
  9. 关于MyBatis一级缓存、二级缓存那些事
  10. java 事务控制_java中事务的管理
  11. python 爬取 谷歌以及百度图片
  12. 双向链表的插入及删除图解
  13. ORA-01653: 表 xxx 无法通过 (在表空间 xxx 中) 扩展
  14. 07.极限的四则运算法则
  15. java判断生日_java根据生日判断生日和星座
  16. 如何获取网络协议的协议号
  17. Arcgis主页面字体太小
  18. windows server环境下域的管理(域控制器和普通计算机都是win server)
  19. 电子纸驱动IC停在BUSY状态的处理办法(大连佳显)
  20. 微拍堂通过创新性的文玩体验,让世界感受中华文化的魅力

热门文章

  1. 快钱等企业获支付牌照 NFC手机支付市场快速布局
  2. LKT4201 32位高性能RSA算法加密芯片
  3. SpringBoot正常启动后,却无法访问
  4. 逻辑面试题:叫你戴帽子
  5. [训练5]信用卡消费记录(构造方法创建对象,成员方法定义对象输出行为)
  6. iOS-申请开发证书流程
  7. php for调用数组元素,php中foreach语句如何用于数组元素
  8. 企业微信or个人微信?三个角度让你不再纠结
  9. 2019年10月22日AWS SAP-C01 大捷战报
  10. 【 jsqlparser学习】SQL转换为java类