李宏毅机器学习课程梳理【八】:Convolutional Neural Network(CNN)

文章目录

  • 摘要
  • 1 CNN
    • 1.1 理解Convolution
    • 1.2 Max Pooling
    • 1.3 Flatten&Fully Connected Feedforward Network
  • 2 CNN in Keras
  • 3 分析CNN的学习过程
    • 3.1 分析Filter的工作
    • 3.2 分析Neuron的工作
    • 3.3 分析Output层
  • 4 Deep Dream&Deep Style
  • 5 总结与展望

摘要

上一篇文章介绍了基于三条观察的CNN架构,本篇文章介绍CNN各层的工作过程,并且提出一种研究机器具体如何学习的方法,从而明确各个层、各个neuron的作用,最后介绍Deep Style等CNN的应用。CNN的众多应用还有待介绍。

1 CNN

1.1 理解Convolution

卷积层的工作原理实质上与Fully Connected Network类似,将Feature Map中的每一个像素当作一个neuron,Filter每过滤一个位置,都看作一次neuron运算,示意图如图1所示。

卷积层的设计可以从两个方面减少参数的数量:

  1. 只使用Fully Connected Network中的一部分weight
  2. 每个neuron还共用这些weight

图中用9种不同颜色的连线代表不同的weight,可以看出每个神经元shared weights,即步长为1时,第一个neuron连接pixel1的weight等于第二个neuron连接pixel2的weight;第一个neuron连接pixel2的weight等于第二个neuron连接pixel3的weight

如何保持weight的值都一样呢?
正常使用Backpropagation,第一个neuron连接pixel1的weight算出一个梯度,第二个neuron连接pixel2的weight也算出一个梯度……将所有要共用的weight(如所有红棕色的连线)的梯度求平均,再更新同样的值。

1.2 Max Pooling

经过Convolution,得到如图2所示的结果。
李宏毅机器学习课程梳理【八】:Convolutional Neural Network(CNN)_第1张图片

Max Pooling的主要工作是二次抽样,目的是缩小image,具体做法是将得到的4×4的image分组,每组4个像素,每组里面可选平均、可选最大,每组保留一个value,以保留最大值为例,如图3所示。
李宏毅机器学习课程梳理【八】:Convolutional Neural Network(CNN)_第2张图片
经过一次Convolution和Max Pooling,得到2×2的新的比较小的image,image中每个像素的深度取决于Filter的数量,也就是channel的数量。
将上述过程重复,其示意图如图4所示。
李宏毅机器学习课程梳理【八】:Convolutional Neural Network(CNN)_第3张图片

1.3 Flatten&Fully Connected Feedforward Network

Flatten的工作是将图片像素拉直,变成列向量后,丢入网络。示意图如图5所示。

2 CNN in Keras


图中两次Convolution,每次的Filter是有很大差异的。由于第一次Convolution有25个Filter,Feature Map会得到25层,所以第二次的Filter是立方体,每个Filter有3×3×25=225个参数。

3 分析CNN的学习过程

3.1 分析Filter的工作

难点在于第二次Convolution,想知道每个filter的作用,分析方法Activation Maximization:首先分析第k个filter的输出,接着定义第k个filter的启动程度(值为输出矩阵所有像素之和),那么需要找到一张image可以使第k个filter的启动程度最大: x ∗ = a r g max ⁡ x a k x^*=arg\max\limits_x a^k x=argxmaxak

这个方法的思维是,将输入的图片作为变量,将参数固定,去更新输入,来得到什么样的图案是每一个filter辨识的,从而了解filter如何工作。

3.2 分析Neuron的工作

相同的思维方法,得到的结果如图9所示。

3.3 分析Output层

此次的例子是手写数字辨识,输出层自然是数字的分类结果,那么用同样的思维方法,得到的输入结果能否是相应数字呢?结果如图10所示。

根本不是猜想的结果。解释一下图中的黑白两色,白色是有墨水、是墨迹。那么,现在对输入x做L1正则化处理: x ∗ = a r g max ⁡ x ( y i − ∑ i , j ∣ x i j ∣ ) x^*=arg\max\limits_x(y^i-\displaystyle\sum_{i,j}|x_{ij}|) x=argxmax(yii,jxij),对x做一些限制,加入了“白色太多不可能是数字”这个知识,来得到更接近数字的结果。
李宏毅机器学习课程梳理【八】:Convolutional Neural Network(CNN)_第4张图片
还可以加上“相邻的pixel是同样的颜色”等等正则化知识,应该会得到更好的结果。

4 Deep Dream&Deep Style

Deep Dream可以夸大CNN看到的、使图片增加CNN看到的东西。做法是输入一张图片,将CNN某个Filter或者某个Fully Connected Network的隐含层的输出值取出,增大正数、减小负数,再得到结果。

Deep Style可以让输入图片的风格像某幅名画的风格,A Neural Algorithm of Artistic Style提出的方法是使用19层VGG-Network,无需全连接层,Max Pooling时使用平均值代替最大值,首先将输入图片丢进CNN,得到filter的output,定义vector p与vector x代表原始图片与生成图片,定义 P l P^l Pl F l F^l Fl代表各自 l l l层的Feature Representation,定义两个Feature Representations间的squared-error loss为 L c o n t e n t ( p , x , l ) = 1 2 ∑ i , j ( F i j l − P i j l ) 2 L_{content}(p,x,l)=\dfrac{1}{2}\displaystyle\sum_{i,j}(F_{ij}^l-P_{ij}^l)^2 Lcontent(p,x,l)=21i,j(FijlPijl)2,以便后续更新vector x;再将名画丢进CNN,也得到filter的output,定义filter与filter间output的correlation(相关性)代表Style Representation;最后用同一个CNN,更新vector x使得filter的输出值接近Content的输出值,同时使得filter的输出的correlation接近Style的correlation。

5 总结与展望

文章首先介绍了CNN卷积层与Max Pooling层的工作原理,了解它们的工作过程以明确它们的作用,为后续CNN的应用打理论基础。机器学习曾因其学习过程不太明确而被称为“黑盒子”,随后,文章介绍了分析CNN学习过程的方法,提出了一种逆向思维,探究“黑盒子”内部的工作过程。最后介绍了CNN在图片风格迁移方面的应用细节。
CNN的应用不限于图像方面,Playing Go、声频识别、文字处理等方面也有应用。应用的关键在于,待解决的问题是否具有支持CNN架构的特点:待识别图案只占一小部分、可位于任意位置、可二次抽样,不全部具备也可重新设计架构(如省略某层),根据具体问题特点设计Filter及其移动方向。
接下来将进行GNN与RNN等类型的神经网络的学习。

你可能感兴趣的:(机器学习,深度学习)