Antkillerfarm Hacking V7.0

深度学习(四)——Neural Network Zoo, CNN, AutoEncoder

2017-06-14

Neural Network Zoo

在继续后续讲解之前,我们首先给出常见神经网络的结构图:

上图的原地址为:

http://www.asimovinstitute.org/neural-network-zoo/

单元结构:

层结构:

上图的原地址为:

http://www.asimovinstitute.org/neural-network-zoo-prequel-cells-layers/

参考:

https://mp.weixin.qq.com/s/ysnLwvbSD4fcL5LK7wSnyA

MIT高赞深度学习教程:一文看懂CNN、RNN等7种范例

CNN

概述

卷积神经网络(Convolutional Neural Networks,ConvNets或CNNs)属于神经网络的范畴,已经在诸如图像识别和分类的领域证明了其高效的能力。

CNN的开山之作是Yann LeCun的论文:

《Gradient-Based Learning Applied to Document Recognition》

注:科学界的许多重要成果的开山之作,其名称往往和成果的最终名称有一定的差距。比如LeCun的这篇文章的名称中,就没有CNN。类似的还有Vapnik的SVM,最早被称为Support Vector Network。

英文不好的,推荐以下文章:

http://www.hackcv.com/index.php/archives/104/

CNN的直观解释

https://ujjwalkarn.me/2016/08/11/intuitive-explanation-convnets/

上面文章的英文版本

关键点

这里以最经典的LeNet-5为例,提点一下CNN的要点。

LeNet-5的caffe模板:

https://github.com/BVLC/caffe/blob/master/examples/mnist/lenet.prototxt

卷积

在《数学狂想曲(十六)》中我们讨论了卷积的数学含义,结合《 图像处理理论(一)》和《 图像处理理论(二)》,不难看出卷积或者模板(算子, kernel, filter),在前DL时代,几乎是图像处理算法的基础和灵魂。

为了实现各种目的,人们手工定义或发现了一系列算子:

到了DL时代,卷积仍然起着非常重要的作用。但这个时候,不再需要人工指定算子,算子本身也将由学习获得。我们需要做的只不过是指定算子的个数而已。

上面的两图形象的指出了ML和DL的差别。

比如,LeNet-5的C1:6@28*28,其中的6就是算子的个数。显然算子的个数越多,计算越慢。但太少的话,又会导致提取的特征数太少,神经网络学不到东西。

需要注意的是,传统的CV算法中,通常只有单一的卷积运算。而CNN中的卷积层,实际上包括了卷积+激活两种运算,即:

\[L_2=\sigma(Conv(L_1,W)+b)\]

因此,相比全连接层而言,卷积层每次只有部分元素参与到最终的激活运算。从宏观角度看,这些元素实际上对应了图片的局部空间二维信息,它和后面的Pooling操作一道,起到了空间降维的作用。

实际上,传统的MLP(MultiLayer Perceptron)网络,就是由于1D全连接的神经元控制了太多参数,而不利于学习到稀疏特征。

CNN网络中,2D全连接的神经元则控制了局部感受野,有利于解离出稀疏特征。

至于激活函数,则是为了保证变换的非线性。这也是CNN被归类为NN的根本原因。

参考:

https://mp.weixin.qq.com/s/dIIWAKv9woLO8M0CyN8lsw

传统计算机视觉技术落伍了吗?不,它们是深度学习的“新动能”

池化

Pooling操作(也称Subsampling)使输入表示(特征维度)变得更小,并且网络中的参数和计算的数量更加可控的减小,因此,可以控制过拟合。

它还可使网络对于输入图像中更小的变化、冗余和变换变得不变性。

Gaussian Connections

LeNet-5最后一步的Gaussian Connections是一个当年的历史遗迹,目前已经被Softmax所取代。它的含义在上面提到的Yann LeCun的原始论文中有描述。

注意:现代版的LeNet-5最后一步的Softmax层,实际上包含了\(Wx+b\)和Softmax两种计算。相当于用Softmax函数替换Sigmoid/ReLU函数。

其他

上图展示了不同分类的图片特征在特征空间中的分布,可以看出在CNN的低层中,这些特征是混杂在一起的;而到了CNN的高层,这些特征就被区分开来了。

上图是若干ML、DL算法按照不同维度划分的情况。

多通道卷积

MNIST的例子中,由于图像是单通道(灰度图)的,因此,多数教程都只是展示了单通道卷积的计算步骤:

\[g(i,j)=\sum_{k,l}f(i+k,j+l)h(k,l)\]

而多通道(例如彩色图像的RGB三通道)卷积实际上就是将各通道卷积之后的结果再加在一起:

\[g(i,j)=\sum_{c,k,l}f(i+k,j+l)h(k,l)\]

上图展示了一个4通道图像经卷积之后,得到2通道图像的过程。

从中可以得出以下结论:

1.RGB通道信息在卷积之后,就不复存在了。无论输入图像有多少个通道,输出图像的通道数只和feature的个数相关。

2.即使是LeNet-5的MNIST示例中,实际上也是有多通道卷积的,只不过不在第一个卷积层而已。

3.多通道卷积除了二维空间信息的卷积之外,还包括了通道间信息的卷积。这也是CNN中1x1卷积的意义之一。

CNN的反向传播算法

由于卷积和池化两层,不是一般的神经网络结构。因此CNN的反向传播算法实际上也是很有技巧的。

上面提到卷积操作可以转换为矩阵运算:\(y=Cx\)

其对应的梯度反向传播公式为:

\[\frac{\partial Loss}{\partial x} = \frac{\partial y^T}{\partial x}\cdot \frac{\partial Loss}{\partial y} = C^T \cdot \frac{\partial Loss}{\partial y}\]

因此:

正向:\(Y=X*K\)

反向:\(\Delta X = \Delta Y * rot_{180}(K)\)

ConvBackpropInput:

ConvBackpropFilter:

卷积的反向传播,有时也被称为反卷积(Deconvolution)。

上图是Deep convolutional inverse graphics networks的结构图。DCIGN实际上是一个正向CNN连上一个反向CNN,以实现图片合成的目的。其原理可参考《深度学习(四)》中的Autoencoder。

参见:

http://www.cnblogs.com/pinard/p/6494810.html

卷积神经网络(CNN)反向传播算法

http://blog.csdn.net/zy3381/article/details/44409535

CNN误差反传时旋转卷积核的简明分析

https://mp.weixin.qq.com/s/dnElNURJ6xfWHJVf_yeT8w

理解多层CNN中转置卷积的反向传播

https://www.jianshu.com/p/f0674e48894c

Tensorflow反卷积(DeConv)实现原理

参考

http://blog.csdn.net/Fate_fjh/article/details/52882134

卷积神经网络系列blog

https://zhuanlan.zhihu.com/p/47184529

卷积神经网络(CNN)详解

http://mp.weixin.qq.com/s/YRwGwelyA3VOYZ4XGAjUBw

CNN感受野首次可视化:深入解读及计算指南

https://mp.weixin.qq.com/s/EJyG3Y4EHTGMm_Q1mY4RvA

CNN入门手册(上)

https://mp.weixin.qq.com/s/T3tHFdjnQh4asE0V25vTog

CNN入门手册(中)

https://mp.weixin.qq.com/s/chsDjS39qcoHICUNbSdQHQ

长文揭秘图像处理和卷积神经网络架构

https://mp.weixin.qq.com/s/nIbfiDXkqkpdLzQo2Gmc2Q

利用卷积神经网络处理CIFAR图像分类

https://mp.weixin.qq.com/s/5BMU7SRQeuDg68XDcOUBZw

训练集样本不平衡问题对CNN的影响

https://mp.weixin.qq.com/s/p-wZ_6ZQW-zXzDqmRenNow

深度学习入门:几幅手稿讲解CNN

https://mp.weixin.qq.com/s/xXf7hTfH-vx4YbzlZVQucA

CNN入门再介绍

https://mp.weixin.qq.com/s/Q4snAlAi8tPQAyGm0qUy4w

CNN的全面解析

https://mp.weixin.qq.com/s/Do6erhin3W4dK_-RTAyD6A

卷积神经网络(CNN)概念解释

http://www.qingruanit.net/blog/23930/note5837.html

卷积神经网络(CNN)学习算法之—基于LeNet网络的中文验证码识别

https://mp.weixin.qq.com/s/XiaAPd20YxbM0wDiSTAYMg

深度学习之卷积神经网络(CNN)的模型结构

https://mp.weixin.qq.com/s/x-H6h4sRqTrZlOXKStnhPw

卷积神经网络背后的数学原理

https://mp.weixin.qq.com/s/qIdjHqurqvdahEd0dXYIqA

徒手实现CNN:综述论文详解卷积网络的数学本质

https://mp.weixin.qq.com/s/D6ok6dQqyx6cCJKc2M8YpA

从AlexNet剖析-卷积网络CNN的一般结构

https://mp.weixin.qq.com/s/XZeZX8zTtNom0az_ralp4A

ImageNet冠军带你入门计算机视觉:卷积神经网络

https://mp.weixin.qq.com/s/t8jg_bpEcQiJmgIqKarefQ

卷积神经网络CNN学习笔记

https://mp.weixin.qq.com/s/buRuerMHkRMSSVlvmlDdtw

人人都能读懂卷积神经网络:Convolutional Networks for everyone

https://mp.weixin.qq.com/s/3pIybS_GsuN6XobP_4bLrg

深度学习以及卷积基础

https://mp.weixin.qq.com/s/VcjivPhJuCk7NPQ1FNQULw

一文让你入门CNN

https://mp.weixin.qq.com/s/zvPNuP_LT7pWIgoxzfeUWw

综述卷积神经网络:从基础技术到研究前景

AutoEncoder

Basic AE

Bengio在2003年的《A neural probabilistic language model》中指出,维度过高,会导致每次学习,都会强制改变大部分参数。

由此发生蝴蝶效应,本来很好的参数,可能就因为一个小小传播误差,就改的乱七八糟。

因此,数据降维是数据预处理中,非常重要的一环。常用的降维算法,除了线性的PCA算法之外,还有非线性的Autoencoder。

Autoencoder的结构如上图所示。它的特殊之处在于:

1.输入样本就是输出样本。

2.隐藏层的神经元数量小于样本的维度。

粗看起来,这类恒等变换没有太大意义。然而这类恒等变换之所以能够成立,最根本的地方在于,隐藏层的神经元具有表达输出样本的能力,也就是用低维表达高维的能力。反过来,我们就可以利用这一点,实现数据的降维操作。

但是,不是所有的数据都能够降维,而这种情况通常会导致Autoencoder的训练失败。

类似的,如果隐藏层的神经元数量大于样本的维度,则该AE可用于升维。这样的AE又叫做Sparse autoencoders。

总体来看,AE是个Encoder/Decoder结构。我们上面提到的降维/升维,主要是利用了Encoder部分。而Decoder部分也是很有意义的,它表明我们能够从tensor生成样本,这实际上就是一种生成模型

和Autoencoder类似的神经网络还有:Denoising Autoencoder(DAE)。

黄色的三角表明输入数据中被加入了噪声。当然了DAE的输出要和无噪声样本做比较,这样才能体现去噪的效果。

Fork me on GitHub