注:这是写给自己看的学习笔记,如有错误敬请指出。
由四层构成,分别为:输入、卷积、池化、输出层。
卷积层的目的实际上是进行特征的提取。
在卷积层(convention layer)中,使用一个过滤器(kernel)去扫描一个图像,这个过滤器的参数是需要学习的。过滤器与图像进行卷积并滑动,会生成这个图像的特征映射(feature map)。
此处可以深究的问题是:如何选取合适的过滤器、如何确定过滤器的大小等。(书中说一般是5*5)
过程如下图所示:
对于一个N*N的图像以及一个M*M的卷积核,卷积完成后的特征映射大小为:(N-M+1)*(N-M+1)。
因此要进行信息的压缩,这就是池化层的简单意义。
此处可以深究的问题是:使用什么池化方式(如著名的最大池化:选择池化区域中最大的作为池化输出),池化区域的大小是怎么划分的(一般是2*2生成1这样进行池化,信息会被压缩成原来的1/4)。
池化完毕后就送到输出层进行输出了。
过程如下图所示:
1.输入:为图像的像素值,对于N*N大小的图来说,
2.输出:设输入层 I 的第i行j列的神经单元输出为。
3.则有:=, 即此层不进行任何操作,直接输出。
对于编号为k的过滤器,我们计算他的卷积层的输出。 书上似乎说,一个过滤器对应一个卷积层和一个池化层。
1.输入:来自输入层,其实就是图像的像素值,对于N*N大小的图来说,
2.参数:
(1)过滤器的值:对编号为k的3*3的过滤器,他的值为:. (F代表的是filter的意思)
(2)偏置(不依赖于i和j的一个数):.
(3)预设激活函数(通常选择sigmoid函数)
3.中间变量:
(1)卷积的结果:
(2)卷积神经单元的加权输入:
4.输出:
对于一个N*N的图像以及一个3*3的卷积核,卷积完成后的特征映射大小为:(N-3+1)*(N-3+1),即
5.
,
,
即,可以认为卷积神经单元的输入是加权输入,而这个加权输入可以认为是:先经过输入与过滤器卷积后得到结果,然后这个结果与偏置的和 就是加权的输入。然后卷积神经单元是用激活函数,预设为sigmoid则激活函数为,因此卷积层的输出就为:
此处对于编号为k的过滤器,使用同一个偏置。
6.此处可以深究的问题是:激活函数对于不同任务如何选择,然后这个偏置是怎么设置的。
7.PS:此处的卷积其实就是简单的加权求和,可以认为权重就是卷积核的参数。与严格意义上的数学卷积其实有不同。严格意义上的卷积是需要翻转再相乘的,至于为什么此处不需要翻转,以下文章有很好的解释:
哪位高手能解释一下卷积神经网络的卷积核? - superbrother的回答 - 知乎 https://www.zhihu.com/question/52237725/answer/545340892
卷积核的参数本来就是需要训练学习的,因此翻转与否都是未知参数,不翻转运算还更简便。
对于编号为k的过滤器,我们计算他的卷积层的输出。 书上似乎说,一个过滤器对应一个卷积层和一个池化层。
1.输入:来自卷积层的输出,。
2.参数:预设激活函数(通常选择恒等函数)
3.输出:,P的意思代表池化层
跟据我们前面提到的,进行2*2的区域划分后,在每个2*2的区域中进行池化,使用的是最大池化。因此池化后,信息会被压缩为原来的1/4。因此
池化层的输出即为:
,
即在每个2*2的区域中选出最大的一个,池化后的元素对应于池化前的四个元素:,又因为激活函数为恒等函数,因此池化层的输出即为选出的最大值。
对每个过滤器计算完卷积层和池化层后,我们要对 的所有池化层进行合并输出。
1.输入:来自池化层的输出,。
2.参数:
(1)预设激活函数
(2)输出的权重,即代表 第k个池化层的第 个元素 输出到 第个输出 所对应的权重
(3)为 第个神经单元所对应的偏置
3.中间变量:输出层神经单元的加权输入
4.输出:,O的意思代表池化层.(我们设这个卷积神经网络一共有3个输出,则,有多少个输出输出层就有多少个神经单元)
则加权输入为:所有池化层的所有元素分别乘他们的权重,再求和,然后加上偏置的结果,即为加权输入
输出为:即加权输入通过激活函数后的输出
可以根据任务选择代价函数。
典型的代价函数例如平方误差。
训练的目标就是根据训练的输入,选择参数,这些参数使得我们的代价函数最小。
对于卷积神经网络,参数有:过滤器的值(即卷积层的权重)、卷积层中的偏置、输出层的权重、输出层的偏置。
《深度学习中的数学》涌井良幸 等著 杨瑞龙译 (人民邮电出版社、中国工信出版集团)