李宏毅《机器学习》|2021笔记:9.卷积神经网络

#李宏毅《机器学习》|2021笔记:9.卷积神经网络

<--------感谢评论、答疑、指正!--------->

2021.10.5
LeeML-Notes:P21
2021.10.19 更新
LeeML2021:
① 2.3 输出层:Classification(P7)
② CNN(P21)
2023.01.30 更新

1. Full connected Network vs CNN

1.1 图片分类的基本思想

将一个解析度为100*100的图片输入模型,然后生成一个向量,再拿向量和不同的类别向量计算交叉熵。类别用one-hot vector表示,只有一维是 1,向量有多少维就能表示多少种类别。

在这里插入图片描述


1.2 神经网络处理出现的问题

  • 处理影像可以用深度全连接模型
  • 图片看成三维Tensor(宽,高,颜色RGB)
  • 100*100是像素点数量,每个像素点都由RGB三种颜色构成,所以就有 3 个channels
  • 向量中每维储存的数值代表某一个像素点的某一个颜色的强度!这个长向量作为自变量输入神经网络中。

在这里插入图片描述

输入层: 将一张图片的像素拉成一列做输入层

向量中总共有100x100x3 个自变量,假如采用全连接网络,隐藏层有1000个神经元,那么我们需要的参数就是30000000!!!!

在这里插入图片描述

【问题】: 方面参数太多了影响运算,另一方面模型弹性太大,很容易导致overfitting


1.3 网络简化思路和CNN解决方案

① 只需要辨识一些关键图案,而并非整张图案

所以隐藏层的神经元不需要看整个图片,每次只需一小部分作为输入,看看是否含有pattern。

在这里插入图片描述

【CNN解决方案】一个神经元不用连接所有的输入向量,只连接一部分的自变量。CNN中,这个小部分自变量就称为receptive field(感受域)

在这里插入图片描述
*https://zhuanlan.zhihu.com/p/265831734 *

② 相同的 pattern 会出现在不同区域,不同感受域可以共用同一个鸟嘴检测器!!

在这里插入图片描述
【CNN解决方案】CNN中,相对相同位置用相同的参数 w,也就是同一个Filter

在这里插入图片描述

③ image大小对识别没有影响

在这里插入图片描述
【CNN解决方案】CNN中,用了池化层,保留区域内特征


2 CNN框架

在这里插入图片描述

2.1 卷积(Convolution)

*李宏毅老师这里讲的有问题,老师内容结合:https://zhuanlan.zhihu.com/p/268179286

2.1.1 单通道卷积

  • 单通道就是如下图1张imag矩阵
  • 单通道就是要么粗细,要么黑白 这种
  • 卷积计算就是图像矩阵和Fliter对应位置做内积。(矩阵对应位置相乘再求和)

我们能看见的是单通道6 * 6 image 和两个卷积(Filter 1,2),计算过程如下:

在这里插入图片描述

单通道矩阵与Fliter1内积

① 做第一个位置与Filter 1矩阵的内积: 1 ∗ 1 + 1 ∗ 1 + 1 ∗ 1 = 3 1*1+1*1+1*1=3 11+11+11=3

在这里插入图片描述

② 如果活动距离stride=1,那么就滑动一格继续做与Filter 1矩阵内积;如果stride=2,那么就滑动两格做内积,下面以stride=1为例: 1 ∗ 1 + 1 ∗ ( − 1 ) + 1 ∗ ( − 1 ) = − 1 1*1+1*(-1)+1*(-1)=-1 11+1(1)+1(1)=1
在这里插入图片描述

③ 现在使用stride=1进行操作,前面三行覆盖完成后可以得到:
在这里插入图片描述

④ 然后往下一行,继续进行内积
在这里插入图片描述

⑤ 直到图像矩阵Filter 1矩阵内积结束,
得到

在这里插入图片描述
也就是 ,一张 1 ∗ 6 ∗ 6 1*6*6 166的图,经过一个 3 ∗ 3 3*3 33的Fliter 1,得到了一个 1 ∗ 4 ∗ 4 1*4*4 144的矩阵,这个过程叫做卷积。

  • 输出的 1 ∗ 4 ∗ 4 1*4*4 144叫做 Feature Map

  • Filter1要提取的特征就是↘方向都为1的特征
    在这里插入图片描述

在这里插入图片描述

  • 从图像上看,有两个地方满足这个条件(蓝色斜线部分),在4×4的矩阵里面就是3,这里的原理对于上一小节的第二个原因(同一个神经元可以在不同地方检测出特征,不用不同的Filter来干这个事情)。

同样方法,做矩阵Filter 2,3,…n的内积
在这里插入图片描述

提取的是是图像中竖直方向图像特征

一张 1 ∗ 6 ∗ 6 1*6*6 166的图,经过n个 3 ∗ 3 3*3 33的卷积核,得到了一个 n ∗ 4 ∗ 4 n*4*4 n44的矩阵,也就是n个4 * 4的矩阵


2.1.2 多通道卷积

我们常见的是,RGB三原色的三通道照片

  • 多通道单卷积核
    在这里插入图片描述
  • 我们看红色的:如上图发现:每个卷积核有三层kernel,每个kernel可以不一样
  • 右边为卷积后的特征图(feature map),左边为一个三通道的卷积核对输入图片左上放进行卷积时的示意图。因此,对于这个部分的计算过程有:

在这里插入图片描述
三层计算结果对应位置求和
多通道单卷积核最后生成的是个1维的 feature map

  • 多通道多卷积核
    在这里插入图片描述

左边依旧为输入矩阵,我们现在要用右边所示的两个卷积核对其进行卷积处理:

在这里插入图片描述

  • 计算过程就是同样方法计算两个【多通道单卷积核】,如例,第一个核计算过程已经给出,数据一模一样。
  • 我们可以观察出,图像及通道,卷积核就有几通道,卷积核的个数是输出的维数(矩阵的个数)

2.1.3 Convolution v.s. Fully Connected

  • CNN的convolution操作和Fully Connected神经网络有什么关系?

    回答:convolution就是Fully Connected神经网络中的输入权重+隐藏层,且把其中的一些权重拿掉的结果;Feature Map相当于隐藏层的输出。【和网络简化1对应】

在这里插入图片描述

左边复现convolution操作,红框里面有9个pixels,这9个pixels在整张图像拉直后的编号是1、2、3、7、8、9、13、14、15,右上角是Filter1

  • 操作数少了,每次只九个神经元参加了运算;
  • 如下图,用了同一套(9个)权重,这样参数减少了【和网络简化2对应】

在这里插入图片描述


2.2 池化层(Pooling)

【和网络简化3对应】

最大池化:

  • Max Pooling是池化层的一种处理方式之一,也就是取区域最大值,还有别的方式,比如求区域平均值等
  • convolution操作之后得到如下的Feature Map,然后把4×4的Feature Map4个一组:

在这里插入图片描述

  • 通过取区域最大数值、或区域平均等操作(看自己喜好)
    在这里插入图片描述

也就是做完一套convolution+Max Pooling后,变成这样:

在这里插入图片描述


2.3 Flatten + Fully Connected Feedforward network

Flatten 就是把矩阵拉直,然后放到全连接层里。我们可见, Flatten是将所有层连到了一起

在这里插入图片描述


2.4 输出层:Classification

2.4.1 分类和回归输出的区别

在这里插入图片描述

  • classification中,我们用 one-hot 向量表示不同的类别(一个向量中只有1 个 1 ,其余都为 0,1 在不同的位置代表不同类别
  • 在regression中的神经网络输出只有一个,而classification则有多个输出。

2.4.2 分类输出的处理

  • 输出经过softmax后处理才去计算loss
  • softmax,分子是用来将 y都变成正值!分母是用来归一化,保证输出 y′ 在0 与 1之间

在这里插入图片描述

2.4.3 损失值计算方式不同

在这里插入图片描述

  • 分类用交叉熵,回归用MSE

【区别】:用MSE计算分类问题,优化时容易卡住

在这里插入图片描述


3 实例:CNN in Keras

在这里插入图片描述

  • 输入是:黑白二维的,像素是28*28的图片(1 * 28 * 28)
  • 卷积层1:25张 3 * 3矩阵Filter ,那么输出是 25张 26 * 26的矩阵(25 * 26 * 26;默认滑动slide=1,所以才26 * 26)
  • 最大池化层1:2*2的池化,所以输出 25 张13 * 13的矩阵(25 * 13 * 13)
  • 卷积层2可以看成输入的是25维的13 * 13矩阵;那么我们现在卷积核是50个,每个卷积核也是25维的,那么这层输出是50个11 * 11的矩阵;需要的参数3×3×25=225
  • 2 * 2最大池化后 50 * 5 * 5 有剩余,按理说11/2=5.5,一般的处理是,只取整数部分

在这里插入图片描述

  • flatten: 把输入展平 50x5x5=1250个输入到全连接层
  • 两层全连接层 分别输出100维和10维 激活函数分别荣relu和softmax,最后输出10维。

4 CNN结构理解

4.1 convolution+Max Pooling部分

逼逼赖赖一大段,其实就是说每次convolution+Max Pooling去的是上一层的特征

  • 第一个convolution+Max Pooling操作比较好理解,根据上篇笔记的内容可知,这里是用25个33的FIlter对输入的pixel进行特征的提取,得到Feature Map,而且这里如果把Filter的weight拿出来,是可以看出来要提取的特征是什么
  • 第二个convolution+Max Pooling操作的时候,输入的不再是pixel了,而是上一次操作得到结果,虽然Filter的大小还是33,但是它对于原输入的图像来说,覆盖的范围要大
  • 我们矩阵内积的值,看成这个区域的在Filter下的激活程度;这个取区域最大值的操作,可以看成让Filter的激活程度最大地方。也就是和Fliter最像的地方

4.2 Flatten+Fully Connected NN部分

  • 这里的每一个神经元对应的输入不再是图片的某一个小区域,而是整张图片。
  • 输出就是个分类

5 应用场景

【电脑作图】

在这里插入图片描述

  • 如果把照片丢到CNN训练后,把里面某一隐藏层或fully connected NN的某一层拿出来,然后把大数字变大,小的数字变小。就是让CNN把它看到东西夸大化:

在这里插入图片描述

  • 左上角通过CNN训练得到Filter的output,这个FIlter的output就是图像的content;右上角通过CNN训练得到Filter的output,这个时候考虑的不算output的值,而是在意Filter与Filter之间的输出的correlation,这个correlation就是style。

在这里插入图片描述

CNN其他应用包括【围棋】、【语音】、【文本】等

参考文献

卷积:https://blog.csdn.net/wistonty11/article/details/116235432
卷积:https://zhuanlan.zhihu.com/p/268179286
笔记:https://blog.csdn.net/oldmao_2001/article/details/90751063
笔记:https://zhuanlan.zhihu.com/p/395982281
filter和kernal的区别:https://blog.csdn.net/weixin_35078004/article/details/112942164

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羊老羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值