【深度学习】由人工神经网络(DNN)到卷积神经网络(CNN)

卷积神经网络(CNN)

背景

1.DNN可以用在计算机视觉吗?为什么需要CNN?
2. 卷积神经网络(CNN)和人工神经网络(DNN)的差异在哪?

人工神经网络(DNN)

1.DNN层级结构如下图所示:包括1,输入层;2.隐含层(1,2,…,n);3.输出层。层级之间采用全连接(FC),**函数一般采用sigmoid函数。优化算法一般是随机梯度下降(SGD)。
【深度学习】由人工神经网络(DNN)到卷积神经网络(CNN)
----------------------------------------------------图1 DNN层级结构------------------------------------------------------------
2.CNN层级结构如下图所示:包括输入层,若干个(卷积层CONV+激励层(一般使用ReLU**函数)+池化层(POOL,一般使用最大池化)),最后加一个全连接(FC),预测结果。
【深度学习】由人工神经网络(DNN)到卷积神经网络(CNN)
-------------------------------------------------------图2 CNN层级架构----------------------------------------------------------

2.1. 卷积层(CONV)
卷积层涉及到的几个概念:
①滤波器filter
②步长stride
③填充值zero-padding
④深度depth
举个例子:
如下图所示:原始输入是一个7x7x1的矩阵;可以看成7x7的二维矩阵;定义滤波器的大小为3x3(图中CONV Kernel);则计算过程如图右上角所示,就是对应点求积再求和,最后得到计算结果为-8。以上完成一个滤波器的一次图片的局部计算,此滤波器需要遍历整张图片,所以设定滤波器的移动步长(stride)为2;依次计算遍历整张图片,最终会得到3x3的矩阵;所以通过一个滤波器可以将原始7x7的图片降维为3x3;这里面牵扯到的一个卷积层的知识点叫做权值共享(意思就是对于一个滤波器而言,在遍历整张图片时,所用的权值矩阵是固定的,这也是为什么CNN能降低参数量的原因;在物理层面,一个滤波器代表提取出图片的的某一类特征)。 【深度学习】由人工神经网络(DNN)到卷积神经网络(CNN)
-----------------------------------------图3 CNN的卷积层计算过程---------------------------------------------------------

【深度学习】由人工神经网络(DNN)到卷积神经网络(CNN)
--------------------------------------图4 彩色图片(三通道)卷积层的计算过程-------------------------------------

刚才的例子中没有涉及到卷积层的另外两个概念,深度和填充值。填充值就是指当一个滤波器在按照指定的步长进行移动来遍历整张图时,可能在边缘不能完全遍历的情况。比如我们将上述例子的步长stride设定为3,则滤波器在往右移动的过程中,第二次移动还可以覆盖图片,到第三次移动时,滤波器“超出”了图片的范围,无法进行计算,所以此时我们一般操作是空余地方补0,继续计算,然后继续向下移动,直至遍历整张图片。
另外深度的意思就是滤波器的个数,刚才说到一个滤波器通过权值共享只能记录图片的某一类特征;所以需要多个不同的滤波器来遍历图片,记录此图片不同的特征。所以深度就是滤波器的个数就是神经元的个数。

【深度学习】由人工神经网络(DNN)到卷积神经网络(CNN)
--------------------------------------图5 深度为5的卷积层示意图-------------------------------------
讲到这其实就可以回答第一个问题了。
回答第1个问题:

  1. DNN可以用在计算机视觉吗?为什么需要CNN?

因为图像的像素一般都比较高,又基本都是彩色图片,所以输入数据比较多;
举个例子:
假设图片的输入矩阵为1000*1000*3的三维矩阵;一个隐含层最少也得500个神经元;则从输入层到第一个隐含层因为是全连接;则需要参数个数为1000*1000*3*500=1500000000个参数,这还只是有1个隐含层的网络结构;可见,DNN处理图片需要的参数量太大,一般难以训练。
可以结合上述介绍的CNN,对比为什么CNN就可以;主要就是卷积层的加入,以及权重共享可以大大降低参数量,并且能基本保留图片的特征,并且可以被训练。
2.2. 激励层
目的,把卷积层的输出结果进行非线性映射。
【深度学习】由人工神经网络(DNN)到卷积神经网络(CNN)
----------------------------------------------------------图6 激励层计算流程---------------------------------------------------
常用的激励函数及对应曲线
1.sigmoid
f(x)=1/(1+ex)f(x)=1/(1+e^{-x})
图像形式:
【深度学习】由人工神经网络(DNN)到卷积神经网络(CNN)
------------------------------------------图7 sigmoid函数图像-------------------------------------------------------------------
2.Tanh(双曲正切)
f(x)=sinh(x)/cosh(x)=(exex)/(ex+ex)=2sigmoid(x)1f(x)=sinh(x)/cosh(x)=(e^x-e^{-x})/(e^x+e^{-x})=2sigmoid(x)-1

函数图像:

【深度学习】由人工神经网络(DNN)到卷积神经网络(CNN)
------------------------------------------图8 双曲正切函数曲线----------------------------------------------------------------
3.ReLU
f(x)={0x<0xx>0f(x)=\begin{cases} 0 & x<0 \\ x & x>0 \end{cases}
函数图像:
【深度学习】由人工神经网络(DNN)到卷积神经网络(CNN)
----------------------------------图9 RELU曲线-----------------------------------------------------
4.leaky ReLU

f(x)={leakxx<0,leakxx>0f(x)=\begin{cases} leak*x & x<0,leak是很小的一个数 \\ x & x>0 \end{cases}

函数图像:
【深度学习】由人工神经网络(DNN)到卷积神经网络(CNN)
----------------------------------图10 leaky RELU曲线-----------------------------------------------------

。。。还有其他的激励函数,在此不一一介绍了。

2.3. 池化层(POOL)
目的:对卷积层和激励层的输出进行池化,主要有两种池化方法:①均值池化,②最大值池化。

举个例子:
假设激励层输出为一个4x4 的矩阵,我们使用2x2的窗口进行池化;左边得到是均值池化的结果;右边得到的是最大值池化的结果。显而易见,经过池化又将原始矩阵有4x4变成了2x2。池化在物理层面相当于将图片做模糊化处理。
【深度学习】由人工神经网络(DNN)到卷积神经网络(CNN)
----------------------------------图11 池化层计算流程-----------------------------------------------------

最后,其实还会在做了flatten(拉平,就是由原来的矩阵变成n*1维的向量),加一个全连接(FC)做预测。
此时,介绍完了DNN和CNN,可以回答第2个问题了。
CNN较DNN多了一个特殊层(卷积层CONV)。将输入拆分,可以对局部输入信息进行操作,引入权值共享的概念,优化计算量。以及后面的池化操作,也是在优化计算量。