[深度学习笔记][CNN/GCN]卷积神经网络基础

注:这是写给自己看的学习笔记,如有错误敬请指出。

1.卷积神经网络的结构

由四层构成,分别为:输入、卷积、池化、输出层。

 2.卷积神经网络的形象理解

2.1卷积层的形象理解

卷积层的目的实际上是进行特征的提取。

在卷积层(convention layer)中,使用一个过滤器(kernel)去扫描一个图像,这个过滤器的参数是需要学习的。过滤器与图像进行卷积并滑动,会生成这个图像的特征映射(feature map)。

此处可以深究的问题是:如何选取合适的过滤器、如何确定过滤器的大小等。(书中说一般是5*5)

过程如下图所示:

2.2池化层的形象理解

对于一个N*N的图像以及一个M*M的卷积核,卷积完成后的特征映射大小为:(N-M+1)*(N-M+1)。

因此要进行信息的压缩,这就是池化层的简单意义。

此处可以深究的问题是:使用什么池化方式(如著名的最大池化:选择池化区域中最大的作为池化输出),池化区域的大小是怎么划分的(一般是2*2生成1这样进行池化,信息会被压缩成原来的1/4)。

池化完毕后就送到输出层进行输出了。

过程如下图所示:

 

3.卷积神经网络的公式

3.1符号说明

3.2 输入层的公式

1.输入:为图像的像素值x_{ij},对于N*N大小的图来说,i\in 1,2,...,N; j\in 1,2,...,N.

2.输出:设输入层 I 的第i行j列的神经单元输出为a^I_{ij}

3.则有:a^I_{ij}=x_{ij}, 即此层不进行任何操作,直接输出。

 

3.3卷积层的公式

对于编号为k的过滤器,我们计算他的卷积层的输出。 书上似乎说,一个过滤器对应一个卷积层和一个池化层。

1.输入:来自输入层,其实就是图像的像素值x_{ij},对于N*N大小的图来说,i\in 1,2,...,N; j\in 1,2,...,N.

2.参数:

(1)过滤器的值:对编号为k的3*3的过滤器,他的值为:w^{Fk}_{11}, w^{Fk}_{12}, w^{Fk}_{13}, w^{Fk}_{21},...,w^{Fk}_{33}. (F代表的是filter的意思)

(2)偏置(不依赖于i和j的一个数):b^{Fk}.

(3)预设激活函数(通常选择sigmoid函数sig(z)

3.中间变量:

(1)卷积的结果:c^{Fk}_{i_Fj_F}

(2)卷积神经单元的加权输入:z^{Fk}_{i_Fj_F}

4.输出:a^{Fk}_{i_Fj_F}

对于一个N*N的图像以及一个3*3的卷积核,卷积完成后的特征映射大小为:(N-3+1)*(N-3+1),即i_F\in 1,2,...,N-3+1; j_F\in 1,2,...,N-3+1.

5.

c^{Fk}_{i_Fj_F}=w^{Fk}_{11}x_{i_Fj_F}+w^{Fk}_{12}x_{i_Fj_F+1}+...+w^{Fk}_{21}x_{i_F+1j_F}+...+w^{Fk}_{33}x_{i_F+2j_F+2}

z^{Fk}_{i_Fj_F}=w^{Fk}_{11}x_{i_Fj_F}+w^{Fk}_{12}x_{i_Fj_F+1}+...+w^{Fk}_{21}x_{i_F+1j_F}+...+w^{Fk}_{33}x_{i_F+2j_F+2}+b^{Fk}

a^{Fk}_{i_Fj_F}=sig(z^{Fk}_{ij})=sig(w^{Fk}_{11}x_{ij}+w^{Fk}_{12}x_{ij+1}+...+w^{Fk}_{21}x_{i+1j}+...+w^{Fk}_{33}x_{i+2j+2}+b^{Fk}).

     即,可以认为卷积神经单元的输入是加权输入z^{Fk}_{ij},而这个加权输入可以认为是:先经过输入x_{ij}与过滤器w^{Fk}_{11}, w^{Fk}_{12}, w^{Fk}_{13}, w^{Fk}_{21},...,w^{Fk}_{33}卷积后得到结果c^{Fk},然后这个结果c^{Fk}与偏置b^{Fk}的和 就是加权的输入z^{Fk}_{ij}。然后卷积神经单元是用激活函数a(z),预设为sigmoid则激活函数为sig(z),因此卷积层的输出就为:

a^{Fk}_{i_Fj_F}=sig(z^{Fk}_{i_Fj_F})=sig(w^{Fk}_{11}x_{i_Fj_F}+w^{Fk}_{12}x_{i_Fj_F+1}+...+w^{Fk}_{21}x_{i_F+1j_F}+...+w^{Fk}_{33}x_{i_F+2j_F+2}+b^{Fk})

     此处对于编号为k的过滤器,使用同一个偏置b^{Fk}

6.此处可以深究的问题是:激活函数对于不同任务如何选择,然后这个偏置是怎么设置的。

7.PS:此处的卷积其实就是简单的加权求和,可以认为权重就是卷积核的参数。与严格意义上的数学卷积其实有不同。严格意义上的卷积是需要翻转再相乘的,至于为什么此处不需要翻转,以下文章有很好的解释:

哪位高手能解释一下卷积神经网络的卷积核? - superbrother的回答 - 知乎 https://www.zhihu.com/question/52237725/answer/545340892

卷积核的参数本来就是需要训练学习的,因此翻转与否都是未知参数,不翻转运算还更简便。

 

3.4池化层的公式

对于编号为k的过滤器,我们计算他的卷积层的输出。 书上似乎说,一个过滤器对应一个卷积层和一个池化层。

1.输入:来自卷积层的输出,a^{Fk}_{i_Fj_F}

2.参数:预设激活函数(通常选择恒等函数)

3.输出:a^{Pk}_{i_Pj_P},P的意思代表池化层

跟据我们前面提到的,进行2*2的区域划分后,在每个2*2的区域中进行池化,使用的是最大池化。因此池化后,信息会被压缩为原来的1/4。因此i_P\in 1,2,...,\frac{N-3+1}{2}; j_P\in 1,2,...,\frac{N-3+1}{2}.

池化层的输出即为:

a^{Pk}_{i_Pj_P}=max(a^{Fk}_{(i_P-1)*2+1,(j_P-1)*2+1},a^{Fk}_{(i_P-1)*2+1,(j_P-1)*2+2},a^{Fk}_{(i_P-1)*2+2,(j_P-1)*2+1},a^{Fk}_{(i_P-1)*2+2,(j_P-1)*2+2})

即在每个2*2的区域中选出最大的一个,池化后的元素a^{Pk}_{i_Pj_P}对应于池化前的四个元素:,又因为激活函数为恒等函数,因此池化层的输出即为选出的最大值。

 

3.5输出层的公式

对每个过滤器计算完卷积层和池化层后,我们要对k\in1,2,...K 的所有池化层进行合并输出。

1.输入:来自池化层的输出,a^{Pk}_{i_Pj_P}

2.参数:

(1)预设激活函数a(z^O_i_o)

(2)输出的权重w^{Oi_o}_{k-i_pj_p},即代表 第k个池化层的第 i_pj_p个元素 输出到 第i_o个输出 所对应的权重

(3)b^O_i_o为 第i_o个神经单元所对应的偏置

3.中间变量:输出层神经单元的加权输入z^O_i_o

4.输出:a^{O}_{i_O},O的意思代表池化层.(我们设这个卷积神经网络一共有3个输出,则i_o\in1,2,3,有多少个输出输出层就有多少个神经单元)

则加权输入为:所有池化层的所有元素分别乘他们的权重,再求和,然后加上偏置的结果,即为加权输入

z^O_i_o=w^{i_O}_{1-11}a^{P1}_{11}+w^{i_O}_{1-12}a^{P1}_{12}+...+w^{i_O}_{2-11}a^{P2}_{11}+...+w^{i_O}_{3-11}a^{P3}_{11}+...+w^{i_O}_{3-11}a^{P3}_{11}+...+w^{i_O}_{k-i_pj_p}a^{Pk}_{i_pj_p}+b^O_i_o

输出为:即加权输入通过激活函数后的输出

a^{O}_{i_o}=a(z^{O}_{i_o})=a(w^{i_O}_{1-11}a^{P1}_{11}+w^{i_O}_{1-12}a^{P1}_{12}+...+w^{i_O}_{2-11}a^{P2}_{11}+...+w^{i_O}_{3-11}a^{P3}_{11}+...+w^{i_O}_{3-11}a^{P3}_{11}+...+w^{i_O}_{k-i_pj_p}a^{Pk}_{i_pj_p}+b^O_i_o)

 

3.6代价函数

可以根据任务选择代价函数。

典型的代价函数例如平方误差。

4.神经网络进行训练

训练的目标就是根据训练的输入,选择参数,这些参数使得我们的代价函数最小。

对于卷积神经网络,参数有:过滤器的值(即卷积层的权重)、卷积层中的偏置、输出层的权重、输出层的偏置。

0.参考资料:

《深度学习中的数学》涌井良幸 等著 杨瑞龙译 (人民邮电出版社、中国工信出版集团)

你可能感兴趣的:(深度学习笔记,深度学习,神经网络)