我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的、自己不知道的东西。
已经有人记了笔记(很用心,强烈推荐):
https://github.com/Sakura-gh/ML-notes
本节对应笔记:
- https://sakura-gh.github.io/ML-notes/ML-notes-html/11_Convolutional-Neural-Network-part1.html
- https://sakura-gh.github.io/ML-notes/ML-notes-html/12_Convolutional-Neural-Network-part2.html
本节内容综述
- 引出 CNN ,为什么不用正常的全连接网络?因为如果输入图片后,紧跟全连接层,那么
参数过多。引出,一开始要做一些“简化”,这就是CNN的引出。 - Why CNN for Image?
Some pattern are much smaller than the whole image,举了一个例子,见[小细节](#A Neuron see small region with less parameters)。 - 接着介绍了CNN的架构:
Convolution,Max Pooling,Convolution,Max Pooling,…,Flatten, 全连接层; - 开始介绍了
Convolution,见小细节; - Convolution v.s. Fully Connected,实际上卷积层就是全连接层的简化,见[小细节](#Convolution v.s. Fully Connected);
- Max Pooling,见[小细节](#Max Pooling)
- CNN in Keras,讲解如何用
Keras声明一个CNN,涉及到参数的意义,以及前后卷积层的对接,了解了原理后,工程内容不予记录; - 接着老师讨论了
What does CNN learn? - 接下来的内容在“小细节”最后一个部分详细讨论(包括:用DeepDream举例卷积神经网络“看到”了什么;卷积神经网络的其他应用如围棋等)。
小细节
A Neuron see small region with less parameters

相比全连接层,CNN中每个神经元只连接了图片中的一小部分,减少了参数,但是具有实际意义。

此外,对于不同的区域,可能要做相同的判断(如鸟嘴出现在了不同区域);不需要训练两个神经元,只需要共享参数即可。
CNN-Convolution

在卷积中有一个比整张图片小的Filter,其参数也是学习得到的;接着按照滑窗stride,进行“卷积”,得到新矩阵。

对于彩色的图片,那么我们的Filter也是对应的多通道的。
Convolution v.s. Fully Connected

如上图,对于一次“卷积运算”,其只相当于用了输入层的9个输入,并没有全连接。

滑窗进行一次移动,可以看出输入进行了“滑动”。
注意到权重间存在共享,参数更加少了!
Max Pooling

假设如上,根据Filter得到一个4块乘4块的矩阵,那么对于每个“块”,只保留其中最大值 / 平均值。
那么这里会有疑问:如何微分?后面章节会讲Maxout network。
可见,经过多次 Convolution + Max Pooling 后,实际上是将数据浓缩了。
What does CNN learn?

将思路反过来:把输入的图片
x
x
x当初参数,对于任何一个Filter,其就是在寻找让数据这个“参数”最大的过程。

可以看出,如上,不同的Filter其提取的数据特征是不同的。
之后查看全连接的输出,可以看到其最终输出为下图。


可以看出,CNN学到的东西与人类的认知是不同的。
有没有可能更好地观察机器输出了什么吗?比较简单的方法是 x ∗ = a r g max x ( y i − ∑ i , j ∣ x i , j ∣ ) x^* = arg \max_x (y^i - \sum_{i,j}|x_{i,j}|) x∗=argmaxx(yi−∑i,j∣xi,j∣),意义为找一个图片,其另y最大,但是让大部分的像素和最小,以突出“有墨水”的地方。(下图中公式有笔误,一个是减号而非加号)

Deep Dream
Given a photo, machine adds what it sees…

输入一张李老师的正常图片,通过调整某一个hidden层的几个参数,CNN夸大化其所看到的东西——生成如下的图片。

Deep Style
Given a photo, make its style like famous paintings.

如图,进行了风格迁移。

其大概原理如下图。

More Application: Playing Go

如上图,将棋盘视为一个矩阵输入,但是可以通过CNN处理棋盘,让参数减少,信息浓缩。
这是因为,围棋有些特性与图片相似:
- Some patterns are much smaller than the whole image(Alpha Go uses 5 × 5 for first layer)
- The same patterns appear in different regions
- Subsampling the pixels will not change the object(但是这一点让李老师一开始想不通,不符合常理,下面展开讨论)
Why CNN for playing Go?

实际上,Alpha Go的文章附录中讲明了…没有使用Max Pooling。
More Application: Speech

如上,有经验的人可以大概识别这个Spectrogram图片的内容;对于CNN,则将一段时间视为一个“图片”,并且通常来讲,CNN只做竖向移动。
More Application: Text

对于由’word embeddiing’连成的句子,同样可以使用 CNN 进行处理。










