2020李宏毅学习笔记——14.Convolution Netural Network

CNN来了,他真的来了,带着迅速的步伐来了。那,yolo还会远吗。

1. Why 不DNN

1.1肯定是DNN有缺陷呀:
一般的全连接神经网络处理图像:
第一层识别一些最基础的线条
第二层就开始复杂
往后的层以此类推
我们要尽可能的去简化 Neural Network 的参数,掉网络中的一些没用的 weight。这就是 CNN 要做的事情。

2.Why CNN

本质: CNN 是简化了全连接的神经网络。
2.1 为什么可以去掉没用的netural?

  • 原因1:图像识别的时候,并不是每识别一个模式都要查看整张图,大多数特征只要看图片的一小部分就行了(部分图片)(只需看一点就知道是不是鸟嘴)卷积
    在这里插入图片描述
  • 原因2 在图片不同区域出现的同一个模式,只需要训练出一组参数 去检测,然后重复使用。(不同地方出现了鸟嘴)卷积
    在这里插入图片描述
  • 原因3 重采样(subsample):一张图片的奇数行和偶数列拿掉,使图片变为原来的 1/4 ,使神经网络的参数大大减少。(一种netural,同样的weight就可以检测不同地方的鸟嘴)池化

3.CNN的步骤:

  • 对图像做 Convolution(卷积)
  • (可选)对图像做 Max Pooling(池化)
  • 以上两个步骤重复 N 次。(N 要提前决定好)
  • 将处理完的图像 一维展开(Flatten)
  • 丢进一个全连接神经网络进行学习。

Convolution 处理的就是我们在前面 1.2 中讲的 原因1 和 原因2。Max Pooling 处理的就是 原因3重采样

3.1卷积:Fliter里面的值都是学出来的
Filter

  • 假设我们一张 6*6 的图片,定义一些 Filter(滤波器,也叫作卷积核),在真正的应用中,Filter 的值是要我们去学习出来的,但是在这里我们假设已经知道了
  • 卷积过程:将Filter 1(33)对准图像左上角的 33 的区域,计算其与 Filter 1 的 内积(就是逐元素相乘再相加),然后将 Filter 向右移动 stride,再做内积.循环直至结束。(特征图66,卷积核33,每个 Filter 得到的一个 4*4 的矩阵),得出的矩阵我们叫做 Feature Map(特征图),这些 Filter 实质上识别的是图片上特定方向的纹理或者是边界
    (你看这个图片里面的3 3,因为卷积核是111,卷积就是看这种111出现在哪,明显出现在3 3 的位置)在这里插入图片描述

(有多少个fliter就有多少个image)在这里插入图片描述

  • 彩色图片的卷积操作:彩色图片的每一个像素是由 3 个值表示的,每一次卷积的 Filter 也得 3 个,从一个矩阵变成了一个立方体
    (彩色rgb,立方体上)
    在这里插入图片描述

3.2 卷积跟神经网络有什么关系
(看这个图对应个关系,是把image这张图的像素值横着拿出来,因为3和-1有两条红线是不是,就是第一次卷积和第二次卷积时共用了同一个weight,但是是不同的输入像素值哦,这样就减少了 参数哦)
在这里插入图片描述

  • 卷积中的图片,就是神经网络中**输入的(x)**图片,输入的是经过 Flatten 过的一维向量
  • 卷积中的 Filter 对应的是神经网络中的 weight(w)
  • 卷积中计算出来的每一个 内积 对应着 一个神经元的输出,一个 Feature Map 就是一个 hidden layer 的输出
    卷积对应的神经网络就是一个全连接网路拿掉了其中的某些 weight

3.3CNN 参数为什么比较少

  • 看一下步骤就知道了,首先把输入的图片变成一个一维的向量,然后卷积进行第一次内积运算,相当于9个输入接到了一个神经元,所以,,
  • 第二次卷积的时候,对应的9个输入接入一个神经元,好像时增加了9个weight,但其实是和上一次一样的,所以没有增加参数,
  • 其实让输入参数变小,就相当于全连接中让个别weight为0了,而且强制让不同的输入共用了一个卷积核

3.31所以我们自己去训练CNN时怎样达到以上两点呢?
首先就是让一些weight为0,第二点就是,先算出gradient,然后让那些共享同一个weight的输入的gradident加起来,然后算平均就好了。然后update

4 Max Pooling

4.1 怎么做?
在这里插入图片描述
(Max pooling后得到的就是2*)
在这里插入图片描述

  • 首先就是将卷积得到的Feature Map进行分组,每四个为一组,
  • 于是只保留其中最大的数(或者是平均值,这里自己定义办法就可以),于是成功 把图片缩小到了2*2大小

5.Flatten(展开)

就是把上面处理好的图像转换成一个向量,然后丢进一个神经网络中就好了。
咋弄呢?
就是在最后的图像拉直,进行fully connected network,然后得到输出结果
在这里插入图片描述

6.CNN in keras

一般靠近输入地方的filter较少,靠近输出的地方较多,因为输入地方的pattern较简单,输出地方较复杂。
在这里插入图片描述
上图意思:25个卷积核,大小33,图片尺寸2828
pooling:把22的拿出来,找到最大的那一个
在这里插入图片描述
卷积1:25
2626 参数:9(33)
池化1:251313:减半
卷积2:501111 参数:225(5033)
池化:5055
Flatten:把5055拉直,1250丢到个全连接层里:

在这里插入图片描述

7.CNN各层的定向分析

  • 可以将第一层的layer展开,进行分析,得到他们的定向功能的描述
  • 对于高层的layer,可以通过多个图片的输入,得到netural对于那些图片的activation最强,从而推断他们的功能
  • 对于训练好的模型,第一层可以直接绘制,对于后面的convolution layer,可以定义一个优化函数,通过调整输入的图像,得到最大的输出参数,此时的输入图像就是对于filter响应最强的时候
  • 注意:对于输出层,DNN很容易受到干扰,采用遮挡层将图片部分遮挡,从而判断输出是否合理

8.有趣的应用

8.1 Deep dream的应用
CNN做什么?
给定一个图片,丢到CNN里面去,得到的output,让他正的更正,负的更负
在这里插入图片描述
8.2 Deep style的应用
给一张图片,CNN,得到output左面,再给一张呐喊也得到呐喊的output右面。再找一个图片,content像左面,style像右面,就会得到下图
在这里插入图片描述
还包括了语音识别,文字识别等
CNN下围棋:
正常来说,全连接层就可以学会下围棋,但是CNN会有更好的表现
在这里插入图片描述
CNN也不是适用所有:
比较适应,影像处理(只要看到一个小的鸟嘴,就知道是鸟)
围棋也有一样的特性(看到两个白字,就知道该黑子了,并不需要整个期盼)(同时,两白一黑可能出现按在左上,又可以右下,所以可以用同一个filter处理)(但是第三点,拿掉奇数行或者偶数行,显然围棋是不行呀,原来是,阿尔法狗有一个附录,有一个191948 48:是指,在每一个位置,都有一个value去描述它,第一个layer,把原来的1919补上0,变成2323,发现,竟然没有用Max pooling,因为围棋的特性)
所以第三点,李老师到底想表达什么呢?阿尔法狗到底有什么特性呢
?可能就是想表达,CNN要根据特性是设计

文字处理:
filter只在时间方向上移动,不会在embedding方向上移动
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值