概述
卷积神经网络在回归问题中原理与实现过程
- 卷积原理
- 正向传播
- 反向传播
卷积原理
卷积神经网络往往被用于图像领域处理,它具有两大优势,分别是共享权重和局部连接,在数据量较大时,能够有效的降低网络压力。卷积神经网络中包含卷积层、池化层(可选)、全连接层(可选)。
卷积层的作用是对输入数据进行卷积操作,也可以理解为滤波过程,一个卷积核就是一个窗口滤波器,在网络训练过程中,使用自定义大小的卷积核作为一个滑动窗口对输入数据进行卷积,卷积的过程为:
卷积过程实质上就是两个矩阵做乘法,在卷积过程后,原始输入矩阵会有一定程度的缩小,比如自定义卷积核大小为3*3,步长为1时,矩阵长宽会缩小2,所以在一些应用场合下,为了保持输入矩阵的大小,我们在卷积操作前需要对数据进行扩充,常见的扩充方法为0填充方式。
卷积层中还有两个重要的参数,分别是偏置和激活(独立层,但一般将激活曾和卷积层放在一块)
偏置向量的作用是对卷积后的数据进行简单线性的加法,就是卷积后的数据加上偏置向量中的数据(原因在后面中会讲到),然后为了增加网络的一个非线性能力,需要对数据进行激活操作,在神经元中,就是将没有的数据率除掉,而有用的数据则可以输入神经元,让人做出反应。
目前常见的激活函数有好几种,但是每种激活函数都有自己的优缺点,现在相关学者还在研究激活函数的优化,最常用的激活函数目前有Relu、tanh、sigmoid,这三种具体原理可百度了解,这里着重介绍一下Relu函数,Relu函数是一个线性函数,它对负数取0,正数则为y=x(即输入等于输出)。函数图如下:
这里就可以说一下偏置向量的作用了,由于经过Relu函数激活后的数据0值一下都变成0,而这部分数据难免有一些我们需要的数据被强制取消,所以为了尽可能的降低损失,我们就在激活层的前面,卷积层的后面加上一个偏置向量,对数据进行一次简单的线性加法,使得数据的值产生一个横向的偏移,避免被激活函数过滤掉更多的信息。
而池化层的作用是对数据进行降维处理,对于所有神经网络来说,随着网络深度增加,网络中权值参数的数量也会越来越大,这也是导致我们在训练一个大型网络时必须使用大型服务站核GPU加速了,但是卷积神经网络出了它本身权值共享核局部连接方式可以有效的降低网络压力外,池化层也作为一个减低网络压力的重要组成部分,经过卷积层后的数据做为池化层的输入进行池化操作;
池化方式一般有两种,一种为取最大值,另一种为取均值,池化的过程也是一个移动窗口在输入矩阵上滑动,滑动过程中去这个窗口中数据矩阵上最大值或均值作为输出,池化层的大小一般为2*2,步长为1
全连接层往往在分类问题中用作网络的最后层,作用主要为将数据矩阵进行全连接,然后按照分类数量输出数据,在归回问题中,全连接层则可以省略,但是我们需要增加卷积层来对数据进行逆卷积操作【将输出的特征图组降维成图像(灰度图像为1维,彩色图像为3维)】
正向传播
当我们定义好卷积网络的结构,网络的学习率,卷积核大小,卷积层和池化层的步长时,我们就可以开始使用我们的数据进行网络的一个训练过程了,那么卷积神经网络整体是怎么处理我们的数据呢,以图像去模糊为例
1、一般来说,我们在训练网络时都会对输入图像进行一个标准的分幅处理,以便于网络运行,这里将图片裁剪为标准128128像素
2、如果训练图像有1000张(灰度图像),读取方式为按序,一次读取一张,那么我们的输入层就是100010001
3、然后进行卷积操作,这里卷积核为(33110)初始卷积核可以使用rand来随机生成,也可以根据经验选择固定的滤波器,比如高斯等,偏置也可选择随机
4、然后经过卷积的数据(假定采用0填充的方式进行卷积)为1000100010,也就是将输入数据提取出10维的特征图,然后加上偏置向量,输入激活层
4、输入激活层(Relu)的数据经过负数取零后,输出到下一层
5、如果需要进行池化操作,那么经过激活的数据就需要进入池化层进行下采样,然后进行输出
6、卷积和池化往往重复进行,以提升网络的性能,这里需要注意的是,由于现在的数据变为1000100010,所以下一层的卷积核大小就应该设置为(3310任意维度)(卷积核的前两维为卷积核的大小,第三维为卷积核的输入矩阵维度,第四维为卷积层的输出维度)
7、假设经过卷积层、池化层的多重使用后,输出的矩阵为10001000100,那么我们需要把这100个特征图进行一个逆卷积重构,重建为一张图,实质上也是卷积层的操作,如第六条所说,我们可以将卷积核的第三第四维度做一个改变,使得经过卷积操作后,特征图的维度降低,比如设置卷积核的大小为(3310010),则卷积后特征图的维度就为10,然后再卷积(33101),特征图组的维度就成1了,这样我们就得到了10001000*1的一个特征图
8、卷积的正向传播到此结束
反向传播
上面介绍了卷积神经网络的正向传播过程,虽然经过多层网络后,重新输出了一张特征图,但是特征图到底有没有较好的完成了去模糊的功能,如果没有实现去模糊的作用,又该如何去做,这就涉及到反向传播的相关知识
反向传播中有一个十分重要的物理量,这个物理量就是损失函数,定义网络输出和理想值之间的差异。
当网络的正向传播过程结束后,输出图像和目标图像(这里指的是清晰图像)做差,一般有均方根误差,结构相似性等指标(可以根据你的具体应用来选择,也可以自己定义),然后得到了一个差值,如果这个插值非常大,那么就说明我们网络的训练效果不好,需要进行优化,那么如何优化呢
现阶段,梯度下降法被广泛使用在反向传播阶段,梯度的具体概念可百度,
假设网络输出与目标的误差为ERROR,网络最后一层的权值参数为W(i),即卷积核中的参数,那么我们的目的是要根据误差来更新卷积核,即权重参数,那么我们需要得到卷积核中的参数和我们所得到的ERROR之间的联系,这就应用到梯度的概念
在我们的总体误差和权值之间还有一步激活工作,所以如果我们要求得总体误差和权值之间的梯度,那么我们还需要对激活函数进行一次运算,这里激活函数的输出为net。具体过程如下式
假如网络上一层的输出为3,激活函数为relu,那么上式的具体过程为
则网络误差在w(i)上的梯度就为3,接下来我们需要根据计算得到的梯度对w(i)进行更新,具体过程为
w(i+1)为更新后的权重,w(i)为原始权重(假定为5),η为学习率(假定为0.3),g为该方向上的梯度,这里我们得到的为3,那么新的权重就为5-0.3*3=4.1
所以更新后的权重就为4.1,然后我们就可以进行前一层网络的权重更新,不断重复,知道更新到网络的第一层
由于这个过程是从后往前进行,所以叫反向传播过程,这里需要特别注意的是
所有的权重更新都是从后往前进行,当后面一层的权重更新完,在更新前面一层的权重时,使用后一层的参数为更新之前的值,直到完成一次完整的反向传播后,下一次才使用更新后的权重进行第二次的反向传播
以上就是我对卷积神经网络的一个了解,欢迎补充,转载请注明地址
最后
以上就是失眠烧鹅为你收集整理的卷积神经网络原理与实现过程卷积神经网络在回归问题中原理与实现过程的全部内容,希望文章能够帮你解决卷积神经网络原理与实现过程卷积神经网络在回归问题中原理与实现过程所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复