深度学习笔记------卷积训练

本文详细介绍了卷积神经网络(CNN)的训练过程,包括模型构成、参数初始化、前向传播和反向传播。讨论了卷积核、池化函数、激活函数的作用,以及在反向传播中如何处理全连接层、池化层和卷积层的梯度。此外,还强调了参数初始化的重要性,以打破对称性并避免梯度消失问题。
摘要由CSDN通过智能技术生成

模型构成

相比于一般的神经网络,卷积的输入数据更多,同时模型的相关参数也会更多,这就导致了其训练的消耗会比一般的神经网络大,但是基本的结构还是有类似的地方的。

输入数据

输入的数据一般为图像数据,但是由于图形数据中的色彩特征,往往会存在一些预处理,将相应的图形分解为rgb三个色彩通道;或者仅仅关注图像的轮廓特征,进行灰度处理;有些还会在正式的卷积训练前额外加一层,将图片进行一些放缩操作,最终获得的数据以数字形式表示。

输出数据

一般卷积用来构建分类器,输出就是对应的标签数据,一般以0,1表示,0表示不属于这个类型,或者是输出这一类型分类的概率。一般最后输出都是来自全连接层的。

评估函数

输出的数据是要有一个评估的,使用这个评估我们可以了解模型参数对数据的拟合情况,对于多分类我们一般用 H ( y ) = ∑ i n ( y i − y ^ i ) 2 H(y)=\sum_i^n(y_i-\hat y_i)^2 H(y)=in(yiy^i)2 来表示, y i y_i yi为实际的分类标签值, y ^ i \hat y_i y^i为预测的标签值,我们训练的目的也就是尽可能的减小该函数的值,使得我们的模型能够尽可能的拟合数据情况。通过梯度下降等方式,对参数进行求偏导这与一般的神经网络也是一致的。

卷积核

模型中主要的参数承担者就是卷积核了,一个卷积核往往含有多个参数,对于一般的二维卷积核(以矩阵的形式表示): [ a 11 a 12 a 21 a 22 ] \begin{bmatrix}a_{11} & a_{12} \\a_{21} & a_{22} \end{bmatrix} [a11a21a12a22](为了表示方便使用 2 ∗ 2 2*2 22的形状,一般的卷积核形状都是奇数 ∗ * 奇数,这里按互相关运算来卷积)
相应的函数定义为 f ( x ) = x 11 ∗ a 11 + x 12 ∗ a 12 + x 21 ∗ a 21 + x 22 ∗ a 22 + b f(x)=x_{11}*a_{11}+x_{12}*a_{12}+x_{21}*a_{21}+x_{22}*a_{22}+b f(x)=x11a11+x12a12+x21a21+x22a22+b(还有一个偏置值)

对于多通道的卷积核: [ a 11 a 12 a 21 a 22 ] \begin{bmatrix}a_{11} & a_{12} \\a_{21} & a_{22} \end{bmatrix} [a11a21a12a22] [ b 11 b 12 b 21 b 22 ] \begin{bmatrix}b_{11} & b_{12} \\b_{21} & b_{22} \end{bmatrix} [b11b21b12b22] [ c 11 c 12 c 21 c 22 ] \begin{bmatrix}c_{11} & c_{12} \\c_{21} & c_{22} \end{bmatrix} [c11c21c12c22]
相应的函数定义为 f ( x ) = ( x 111 ∗ a 11 + x 112 ∗ a 12 + x 121 ∗ a 21 + x 122 ∗ a 22 ) + ( x 211 ∗ b 11 + x 212 ∗ b 12 + x 221 ∗ b 21 + x 222 ∗ b 22 ) + ( x 311 ∗ c 11 + x 312 ∗ c 12 + x 321 ∗ c 21 + x 322 ∗ c 22 ) + b f(x)=(x_{111}*a_{11}+x_{112}*a_{12}+x_{121}*a_{21}+x_{122}*a_{22})+(x_{211}*b_{11}+x_{212}*b_{12}+x_{221}*b_{21}+x_{222}*b_{22})+(x_{311}*c_{11}+x_{312}*c_{12}+x_{321}*c_{21}+x_{322}*c_{22})+b f(x)=(x111a11+x112a12+x121a21+x122a22)+(x211b11+x212b12+x221b21+x222b22)+(x311c11+x312c12+x321c21+x322c22)+b(还有一个偏置值)

池化函数

最大池化 m a x ( [ x 11 x 12 x 21 x 22 ] ) = m a x ( x 11 , x 12 , x 21 , x 22 ) max(\begin{bmatrix}x_{11} & x_{12} \\x_{21} & x_{22} \end{bmatrix})=max(x_{11},x_{12},x_{21},x_{22}) max([x11x21x12x22])=max(x11,x12,x21,x22)
平均池化 m e a n ( [ x 11 x 12 x 21 x 22 ] ) = ( x 11 + x 12 + x 21 + x 22 ) / 4 mean(\begin{bmatrix}x_{11} & x_{12} \\x_{21} & x_{22} \end{bmatrix})=(x_{11}+x_{12}+x_{21}+x_{22})/4 mean([x11x21x12x22])=(x11+x12+x21+x22)/4
池化的操作就与之间的神经网络有很大的不同了,在池化之前一般经过了激活函数的处理(激活函数与池化的处理顺序可以互换,池化之后进行激活可以减少激活函数的运算量,但是对应的池化消去的数据就无法在之后使用了)

激活函数

相应的激活函数与一般的神经网络一致,常用的有Sigmoid函数与Relu函数等。

参数初始化

为网络中的诸多参数确定初值,为了保证训练的效果,需要对这些参数的初值进行一些要求。
这些参数的初值不能全部相同,否则运算过程中相同形状的卷积核对相同的输入进行运算,会导致多个卷积核仅仅只能提取一个特征。(多个卷积核对应的运算实际是等效的(“对称性”))
要打破这种对称性,可以进行随机初始化,同时为了保证在之后的偏导计算中(特别是链式法则的乘法运算)不会出现过大或过小的梯度值,取得随机值不宜过大,也不宜为0。根据不同的激活函数,可以选择不同的初始化方式。

前向传播


前向传播的过程是从输入层向后进行的逐层的参数计算,直至得到输出并且计算到相应的评估函数。
顺序为卷积运算得到特征图,特征图经由激活函数(可能还有归一化),再进行池化(可能有多层次),最终到全连接层前将数据展开,之后逐层进行线性运算,激活(可能还有归一化),直到最后输出,转到评估函数。

感受野

网络的前向计算中,实际是对输入的多个参数的处理,但是在每一层的计算中参与的输入数据是有数量(感受野的大小)差别的,越向后面的计算,实际展开时包含的输入参数就越多,相应的一个参数能涵盖的输入数据的区域(感受野)也就越大。

图中第二层中的每个参数都需要最底层中9个输入参与计算,所以其感受野为对应的9个元素,而最上层的元素计算需要第二层的9个元素,对应到最底层中就是底层的全部元素参与计算,相应的感受野就是底层的全部元素。(步幅为1,无填充)

反向传播

主要通过梯度下降来进行训练,与一般的神经网络类似,只是在卷积与池化的处理上与一般的神经网络不同。利用偏导计算来进行,逐步减小评估函数值。
参数更新:新的参数的值 w w w(新值) = w =w =w(旧值) + η +\eta +η(学习率) ∗ h *h h(偏导值)

全连接层

全连接层的训练就是一般的反向传播,从评估函数开始逐层传递,并进行偏导计算,多个层次的参数相当于多个函数的复合形式,对应的使用链式法则对其进行处理,相应的可以参考深度学习笔记------神经网络

池化层

对于池化层的反向传播只要根据不同的池化函数将误差对应分配。

最大池化
对于最大池化,返回给上层的有两类数据,一个是在池化中保留下来最大值的上层元素,对应将误差传递,其余的元素对应返回误差为0。
例如:池化层得到的偏导误差为 [ 3 4 6 7 ] \begin{bmatrix}3 &4 \\6 &7\end{bmatrix} [3647]
上层的数据为 [ 1 3 6 0 2 4 5 2 3 5 6 3 3 1 1 3 ] \begin{bmatrix}1 &3 &6 &0 \\2 &4& 5&2\\3 &5 & 6&3\\3 &1 & 1&3 \end{bmatrix} 1233345165610233对应分配到的误差为 [ 0 0 4 0 0 3 0 0 0 6 7 0 0 0 0 0 ] \begin{bmatrix}0 &0&4 &0 \\0 &3& 0&0\\0 &6 & 7&0\\0 &0 & 0&0 \end{bmatrix} 0000036040700000

平均池化
平均池化则是将相应的误差数据均分,并且传递给所有的上层元素。
例如:池化层得到的偏导误差为 [ 4 4 8 8 ] \begin{bmatrix}4 &4 \\8 &8\end{bmatrix} [4848]
上层的数据为 [ 1 3 6 0 2 4 5 2 3 5 6 3 3 1 1 3 ] \begin{bmatrix}1 &3 &6 &0 \\2 &4& 5&2\\3 &5 & 6&3\\3 &1 & 1&3 \end{bmatrix} 1233345165610233对应分配到的误差为 [ 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 ] \begin{bmatrix}1 &1&1 &1 \\1 &1&1 &1\\2 &2 & 2&2\\2 &2 & 2&2 \end{bmatrix} 1122112211221122

卷积层

先从一个简单的互相关运算开始(步幅为1):

[ a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ] c o n v [ w 11 w 12 w 21 w 22 ] \begin{bmatrix}a_{11} &a_{12} &a_{13} \\a_{21} &a_{22} &a_{23} \\a_{31} &a_{32} &a_{33} \end{bmatrix}conv\begin{bmatrix}w_{11} &w_{12} \\w_{21} &w_{22} \end{bmatrix} a11a21a31a12a22a32a13a23a33conv[w11w21w12w22]展开一下有:
[ w 11 w 12 0 w 21 w 22 0 0 0 0 0 w 11 w 12 0 w 21 w 22 0 0 0 0 0 0 w 11 w 12 0 w 21 w 22 0 0 0 0 0 w 11 w 12 0 w 21 w 22 ] [ a 11 a 12 a 13 a 21 a 22 a 23 a 31 a 32 a 33 ] \begin{bmatrix}w_{11} &w_{12}&0&w_{21}&w_{22}&0&0&0&0\\0&w_{11} &w_{12}&0&w_{21}&w_{22}&0&0&0\\0&0&0&w_{11} &w_{12}&0&w_{21}&w_{22}&0\\0&0&0&0&w_{11} &w_{12}&0&w_{21}&w_{22} \end{bmatrix}\begin{bmatrix}a_{11} \\a_{12} \\a_{13} \\a_{21} \\a_{22} \\a_{23} \\a_{31} \\a_{32} \\a_{33} \end{bmatrix} w11000w12w11000w1200w210w110w22w21w12w110w220w1200w21000w22w21000w22a11a12a13

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值