第三天了,第二天的时候的深度学习框架和深度学习模型区别的博客居然没有分在这个分类中,真是失败,看来以后需要注意。
继续话题,今天就讲一下深度学习模型的一些最基本的结构单元,这一节非常重要,可能篇幅会比较大,希望能够仔细观看。
深度学习模型的结构单元(此处主要是卷积网络,关于循环网络以及生成模型会在后面讲述)主要分为几个部分。
1.输入层
2.卷积层
3.池化层
4.激活层
5.全连接层
6.输出层
首先看输入层,其实这在我看来并不能单独的算作一个层结构,因为这只是代表简单的输入图像,比如,你输入的图像是三通道(例如RGB彩色图像)的,那么你的输入层也就是三层,输入图像的尺寸也就是你输入层的输入尺寸,例如常用的224×224×3就代表三通道图像,图像长宽为224×224,以后你们会慢慢明白,绝大多数的卷积网络对于图像的输入尺寸是有严格要求的,并不是任意尺寸都可以。
接下来是卷积层,输入层的图像会通过卷积层提取特征,而卷积层类似于滤波器,是由一个个的卷积核组成的,如果你有一些基本的图像处理知识,理解起来会轻松一点,下面通过图片形式说明。
上图是一个8×10的图像,可以理解为卷积层进行卷积之前的图像,下面使用一个3×3的卷积核去卷积,具体形式如下:
卷积过程如下图所示:
图中最左侧的代表8×10的输入图像,中间代表卷积核,最右侧代表6×8的输出图像,卷积过程相当于将卷积核在输入图像上滑动一般,图中红色部分表示了一个数据的卷积输出过程,本文所涉及的卷积仅仅是输入图像与卷积核对应部分相乘然后相加,并没有加入偏置,往往一个卷积核除了卷积核中的值外还会有一个偏置。
通过这个卷积过程之后就可以深入介绍一下卷积层了,可以看出在卷积核对输入图像进行卷积的时候,卷积核的值是不变的,也就是说整幅图像是共享这个权值的,这也就是常说的权值共享,这是个很好的操作,通过它可以节省大量的参数,同时网络与卷积核之间是局部连接的,也就是每次只有3×3的区域与卷积核卷积。这段话说明了卷积层的两大特点,权值共享和局部连接,其实局部连接也可以叫做局部感受野,它的作用还有很多,在之后会慢慢描述。
卷积层主要作用是提取特征,通常会有补零操作,也就是在输出图形的周围补上几圈0,例如本文这里补1圈0后,输出特征图的尺寸与输入就一样大了。
至于特征图指的是通过卷积层之后生产的矩阵,特征图的大小取决于三个因素,步长,卷积核尺寸,输入特征图尺寸(一般为正方形),计算公式为
[(特征图尺寸—卷积核尺寸+2×补零数)⁄步长]+1
一般情况下,在步长为1的情况下,使用3×3的卷积核需要补一个零,5×5的卷积核需要补两个零,7×7的卷积核需要补七个零。
最后是关于卷积核个数的,假设输入通道数为N,设定的卷积核个数为M,则会生成M个特征图,同时:
(1)卷积核实际会生成M组,每组都有N个,每组的卷积核与输入通道数是一一对应,生成之后的数字相加作为本组的输出。
(2)可以通过一些特定的卷积方式改变这种方式,不过那涉及到轻量级网络了,需要以后慢慢理解。
接下来是池化层了,这一层我不想做太多的介绍,因为你可以把它简单理解为卷积层,只不过这是一个比较特殊的卷积层,它的输出只输出两种,最大值或者平均值,一般我比较常用的是最大值池化,一般设定的参数是2×2大小,然后步长是2,不补零,经过它之后,通常会参数减半,尺寸减半,但是通道数不变,所以可以看作减少尺寸的层。
然后是激活层,其实实际中它是在卷积层之后的,它最大的作用是将参数进行非线性变换,不然再深的网络也只是线性变换,也不会有现在这样神奇的作用,它最开始是sigmoid函数,但是这个函数在输入值大时变化几乎为0,会导致之后的参数无法更新,并且不是0中心化,之后的tanh函数解决了0中心化问题,之后的ReLU函数解决了参数无法更新问题,再之后的ELU,P-ReLU等等都是一般的改进,常用的还是ReLU函数。
最后是全连接层,这是与卷积层的局部连接相对应的,顾名思义,就是每一个输出点都连接全部输入点。
最后的输出层涉及softmax等函数,之后再说。