笔记:ML-LHY-10: Convolutional Neural Network
这节课开始讲深度学习中重要的网络:卷积神经网络(Convolutional Neural Network)CNN。理解卷积操作在神经网络中的作用,理解CNN在做什么,以及CNN的可视化。
首先回顾一下及深度学习(CNN)中的卷积
为什么要用CNN?
局部检测
卷积核有大小之分,对应感受视野,而一个卷积核一般远远小于整张图片,所以卷积后的到视野也是比较小的。而检测一个物体的特征,比如鸟有鸟嘴,其实只用局部检测就行。注意卷积是滑动窗口操作,所以会遍历整张图(只是每次的窗口比较小),上图就会识别到鸟嘴、鸟爪、翅膀等多个局部特征。那识别局部特征往往还不够,要从全局的视野来看是什么东西,就是下面要说的下采样。
下采样(池化)
我们知道SIFT特征有个很关键的步骤解决尺度不变性,那就是高斯金字塔。其实就是在不同分辨率下模拟人类由进到远,有细到粗看物体。下采样(池化)的意义也就是这样,比如上图,下采样后我们依然能够分辨是鸟,因为我们可以根据轮廓看出。轮廓就是一种粗特征。还有关键一点,下采样减低分辨率,后面全连接参数也就相应减少。
模式共享
这个理解可能没那么直观,卷积核就是一个对应一个滤波器,不同的滤波器可以提取不同类型的特征,比如aplacian、soble算子。前面也提到,卷积是滑动窗口操作,就意味着一个卷积核会在多个区域应用,那么一个模式可以应用在多个区域,也就减少了总模式的参数。换句话说,把卷积核看做一组参数,既然可以共用,那当然减少了总的需要的参数。
小结
- 卷积的窗口提现视野局部性(细特征)
- 卷积的滑动操作提现参数共享性
- **下采样(池化)**提现视野全局性(粗特征)
上图是CNN的总框架
输入 -> 卷积 -> 池化 -> 卷积 -> 池化 … 全连接… -> softmax -> 输出
tip: 输出层神经元个数和类别数一样
卷积池化操作
卷积
卷积就是图像处理中的卷积,这里就不重复了,关键是滤波器(就是卷积核一个意思,卷积对应滤波)的通道数和输入的通道数一样,而输出的通道数取决于滤波器的数目。
例如:输入时RGB图像3通道 滤波器也是3通道 那么输出就是1通道
而我们想用多个滤波器提取多种特征,比如用2个滤波器每个滤波器都是3通道,那么输出就是2通道。卷积还涉及步长、padding大小,具体看这个笔记
池化
一般指最大池化 max pooling
就是在给定窗口内取最大的值
上图池化完就是:
3 0
3 1
更重要的是,分辨率简报,原来4个值,池化只保留了一个值。其实可以把池化看做特殊的卷积操作,步长是和卷积核大小一样,padding为0。
CNN学习到了什么?
现在训练完一个model后,里面的参数都是固定的,在卷积层的最后一层,如果输入时1 8 28 * 28 经过2层卷积层和池化后就是 50 *11 * 11:
最后一层是有50个滤波器,我们取第k个滤波器的输出结果为:
现在要找是怎么样的输入,使得这个滤波器activation。其实就是找一个输入x使得最大。步骤和知道输入求参数一样,这里知道参数当然可以用梯度下降方法求输入使得最大。
选其中12个滤波器,对应的最大化的输入:
可以看到每个filter对应特征同,比如水平,催着、斜条纹,可以**对应的filter参数。而在一张图中,可以看到条纹是布满整张图的,提现CNN的参数共享性。
那在全连接层会怎么样呢?由于flatten后,全连接层的神经元是和输入整张图是相关的:
取得神经元输出结果为,同样求一个输入图片,使得最大:
上图每一张图对应一个神经元输出,可以看到每个神经元想要**的图片,这不是一个完整的数字,只是这个神经元想要**的pattern。
继续往后,到输出层
是不是使得最大的就对应的数字呢?
结果却是这样:
这明显就不是人类手写的数字,右边是加了L1正则化约束的结果(避免整张图都是笔画),可以看到部分关联。
Deep Dream
现在不是无中生有,而是在原图基础上更新图像,这样就会在保留原图的基础上,朝网络想识别的方向变换(因为要最大化上面提到的目标函数)。如果想让效果更明显,还可以强化参数,大的变得更大,小的变得更小。
风格迁移 Deep Style
精神就是找一张图,同时像content图和style图,求和
如下:
而怎么找在上面说过了,用梯度下降法。
内容损失的定义是:
还原图像的方法是梯度下降法。设原始图像为????⃗ ,期望还原的图像为????⃗ (即自动生成的图像)。使用的卷积是第????层,原始图像????⃗ 在第????层的卷积特征为。????表示卷积的第????个通道,????表示卷积的第????个位置。通常卷积的特征是三维的,三维坐标分别对应(高、宽、通道)。此处不考虑具体的高和宽,只考虑位置????,相当于把卷积“压扁”了。比如一个10x10x32的卷积特征,对应1⩽????⩽32,1⩽????⩽100。对于生成图像????⃗ ,同样定义它在????层的卷积特征为。
风格损失的定义应用了Gram矩阵,这里不在展开。参考这篇博客:图像风格迁移原理
应用例子
Alpha Go
也是使用了CNN,为什么?
- 在 5 * 5的范围内就知道要怎么下,不需要看整个棋盘
- 位置可以不同
- 需要注意的是,Alpha Go用的CNN没有max pooling,因为围棋的特性不需要下采样
Speech
滤波器移动是在frequency维度上,因为不同频率的组合就可以表示不同的词,所以在频率上检测是有效的。在时间上检测词就不是那么好,有可能存在同一个词在用部分频率是一样的。
Text
文本语义识别任务滤波器就需要在时间纬度上移动,因为不同的word embedding就可以表示不同的语义,所以在时间纬度上检测是有效的。在embedding维上检测就可能完全检测不出语义。
以上参考李宏毅老师视频和ppt,仅作为学习笔记交流使用