我已经有两年 ML 经历,这系列课主要用来查缺补漏,会记录一些细节的、自己不知道的东西。

已经有人记了笔记(很用心,强烈推荐):
https://github.com/Sakura-gh/ML-notes

本节对应笔记:

本节内容综述

  1. 引出 CNN ,为什么不用正常的全连接网络?因为如果输入图片后,紧跟全连接层,那么参数过多。引出,一开始要做一些“简化”,这就是CNN的引出。
  2. Why CNN for Image? Some pattern are much smaller than the whole image,举了一个例子,见[小细节](#A Neuron see small region with less parameters)。
  3. 接着介绍了CNN的架构:Convolution, Max Pooling, Convolution, Max Pooling,…, Flatten, 全连接层;
  4. 开始介绍了Convolution,见小细节
  5. Convolution v.s. Fully Connected,实际上卷积层就是全连接层的简化,见[小细节](#Convolution v.s. Fully Connected);
  6. Max Pooling,见[小细节](#Max Pooling)
  7. CNN in Keras,讲解如何用Keras声明一个CNN,涉及到参数的意义,以及前后卷积层的对接,了解了原理后,工程内容不予记录;
  8. 接着老师讨论了What does CNN learn?
  9. 接下来的内容在“小细节”最后一个部分详细讨论(包括:用DeepDream举例卷积神经网络“看到”了什么;卷积神经网络的其他应用如围棋等)。

小细节

A Neuron see small region with less parameters

【李宏毅2020 ML/DL】P17 Convolutional Neural Network
相比全连接层,CNN中每个神经元只连接了图片中的一小部分,减少了参数,但是具有实际意义。

【李宏毅2020 ML/DL】P17 Convolutional Neural Network

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

CNN-Convolution

【李宏毅2020 ML/DL】P17 Convolutional Neural Network
在卷积中有一个比整张图片小的Filter,其参数也是学习得到的;接着按照滑窗stride,进行“卷积”,得到新矩阵。

【李宏毅2020 ML/DL】P17 Convolutional Neural Network

对于彩色的图片,那么我们的Filter也是对应的多通道的。

Convolution v.s. Fully Connected

【李宏毅2020 ML/DL】P17 Convolutional Neural Network

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

【李宏毅2020 ML/DL】P17 Convolutional Neural Network

滑窗进行一次移动,可以看出输入进行了“滑动”。

注意到权重间存在共享,参数更加少了

Max Pooling

【李宏毅2020 ML/DL】P17 Convolutional Neural Network
假设如上,根据Filter得到一个4块乘4块的矩阵,那么对于每个“块”,只保留其中最大值 / 平均值。

那么这里会有疑问:如何微分?后面章节会讲Maxout network

可见,经过多次 Convolution + Max Pooling 后,实际上是将数据浓缩了。

What does CNN learn?

【李宏毅2020 ML/DL】P17 Convolutional Neural Network

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

【李宏毅2020 ML/DL】P17 Convolutional Neural Network

可以看出,如上,不同的Filter其提取的数据特征是不同的。

之后查看全连接的输出,可以看到其最终输出为下图。

【李宏毅2020 ML/DL】P17 Convolutional Neural Network

【李宏毅2020 ML/DL】P17 Convolutional Neural Network

可以看出,CNN学到的东西与人类的认知是不同的。

有没有可能更好地观察机器输出了什么吗?比较简单的方法是x=argmaxx(yii,jxi,j)x^* = arg \max_x (y^i - \sum_{i,j}|x_{i,j}|),意义为找一个图片,其另y最大,但是让大部分的像素和最小,以突出“有墨水”的地方。(下图中公式有笔误,一个是减号而非加号)

【李宏毅2020 ML/DL】P17 Convolutional Neural Network

Deep Dream

Given a photo, machine adds what it sees…

【李宏毅2020 ML/DL】P17 Convolutional Neural Network
输入一张李老师的正常图片,通过调整某一个hidden层的几个参数,CNN夸大化其所看到的东西——生成如下的图片。
【李宏毅2020 ML/DL】P17 Convolutional Neural Network

Deep Style

Given a photo, make its style like famous paintings.
【李宏毅2020 ML/DL】P17 Convolutional Neural Network

如图,进行了风格迁移。
【李宏毅2020 ML/DL】P17 Convolutional Neural Network

其大概原理如下图。

【李宏毅2020 ML/DL】P17 Convolutional Neural Network

More Application: Playing Go

【李宏毅2020 ML/DL】P17 Convolutional Neural Network

如上图,将棋盘视为一个矩阵输入,但是可以通过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?

【李宏毅2020 ML/DL】P17 Convolutional Neural Network

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

More Application: Speech

【李宏毅2020 ML/DL】P17 Convolutional Neural Network

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

More Application: Text

【李宏毅2020 ML/DL】P17 Convolutional Neural Network

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

相关文章:

  • 2021-10-11
  • 2021-10-31
  • 2021-05-14
  • 2021-09-14
  • 2021-09-15
  • 2021-09-19
  • 2021-10-01
  • 2021-12-06
猜你喜欢
  • 2021-04-11
  • 2021-07-03
  • 2021-07-20
  • 2022-01-09
  • 2021-05-16
  • 2021-04-08
  • 2021-05-08
相关资源
相似解决方案