神经网络为什么能实现分类

神经网络算法,以典型的VGG16为例子,该算法是一个典型的多分类(1000类)算法(介绍VGG的时候主要介绍大体思路,可能回略过掉一些零部件,例如激活函数,偏置项等等)

5b465ec26a4746892c2a288f25230584.jpeg

VGG16的输入数据一般是224*224*3的三通道彩色图像,block1:第一层卷积核的规模是64*3*3*3,可以理解为64个3*3*3的小卷积核,参数数量为64*3*3*3=1728个,(卷积核的通道数要和待处理数据的通道数保持一致),第一次卷积的结果是224*224*64,可以理解为经过第一次卷积后,将三通道的图像转化为64通道的图像(图像的width和length没有变是因为卷积时已经扩充);第二次卷积核的规模是64*64*3*3,参数数量为64*64*3*3=36864(此次的卷积核的通道可以理解为64个多通道的64*3*3),从上层传递来的224*224*64共64个通道,每个64*3*3的卷积核要一次和输入图像进行卷积运算,得到224*224*64的输出结果,然后进行最大向下池化(池化层没有参数),长宽各变为原来的一半,得到112*112*64的输出结果,然后进入block2部分,第一层的卷积核为128*64*3*3,参数数量为128*64*3*3=73728,卷积运算后得到的图像为112*112*128,(卷积运算后的输出数据的通道数等于卷积核的个数)以此类推,依次进行block3,block4,block5部分(经历五次下采样,224->112-

>56->28->14->7),

29c41a6b6151fa6ac45d6f02aa356e02.png

最后得到输出结果是7*7*512,然后转到到全连接层,使用flatten函数拉平为一个一维向量:

01fae2efa497c1126b78777da11fb7a2.png

然后继续经历两次全连接的运算,以第一次为例子,根据矩阵的乘法,第一层的参数数量为

7*7*512*4096,这一层的参数数量及其庞大,几乎占据了绝大部分参数,然后以此类推,最后的输出

结果为1000个值,可以自我理解为每个类别所得的分数,然后进行softmax处理,得出各个类别所对

应的概率。然后进行损失函数,准确率的计算。这里解释一下损失函数(有的被叫作目标函数),损

失描述的是网络模型的预测结果和数据集之间的距离,网络不断优化的主要目的就是减小预测结果和

真实值之间的距离。常见的损失函数有交叉熵误差,均方误差,此处以交叉熵误差为例:

5b88188ba383c8356f7eebb47a591b1c.png

log表示以e为底数的自然对数,yk是网络的输出(预测值),tk对应的是正确解的标签,并且,tk中

只有正确解的标签的索引为1,其他均为0(one-hot)表示。因此,该式子只计算正确解标签的输出的

自然对数。交叉熵误差的值是由正确解标签所对应的输出结果对应的。然后还有准确率accuracy,这

个原理是找出网路输出的最大值所对应的索引,如果和数据集正确类对应索引一致,则表明预测成

功。然后根据损失函数的导数,反向传播,求出网络各个参数的导数(梯度),然后根据随机梯度下

降法更新各层参数,然后再次前向传播,计算损失函数,反向传播,跟新参数。其实整个训练过程就是不

断迭代,训练数据集,更新参数,找到全局最优解,得到一组最优权重参数使损失函数趋于稳定的一

个过程,并不一定要使损失函数的值接近0,这也不可能达到。在使用验证集进行验证的时候将会停止

反向传播,这个过程就是检测你的网络是否真正学习到了东西。

然后现在回过头来想想,为什么神经网络能够做到分类?开始的卷积,每一次卷积都是在提取特征,

浅层感受野较小,浅层卷积提取的是图像中的边缘等信息;中层卷积提取的是图像中的局部信息;深

层感受野较大,深层卷积提取的则是图像中的全局信息。这样,通过加深网络层数,CNN(卷积神经网络)就可以有效地学习到图像从细节到全局的所有特征了(但是不能一直加深)。然后在进行卷积运算的过程,会发现,随着卷积的进行,图像的通道数会越来越多,而不想的width和length越来越小,我自己的理解是通过不断卷积,把三通的图像里面的width和length进行压缩,而对应的特征信息则被转移到多通道里面的各个通道,经过一定时代(epoch)的训练后,损失函数的值趋于稳定(因为在不断的训练下,参数一直在更新,损失函数的值越来越小,从而导致经过损失函数求导,反向传递所求的的梯度也越来越小,根据随机梯度算法的计算公式:

9c21149e95621b1315d1ec44320d9f92.png

即使学习率还在,但是梯度很小,所以导致参数最后的更新效果几乎消失。(这点近似理解一个负反馈的过程),更新参数的过程可以理解为整个网络模型在进行学习的过程。训练完后,此时我们已经得到了一个似乎还不错的模型。然后使用一张图像来进行测试,(进行测试的时候只进行前向传播)经过前面卷积层的不断卷积,提取各个特征,起初我一直认为最后的判定结果只和最后的输出层有关,为什么它能够做到分类?仔细回看整个过程,它是一层一层的向后传播,后一层提取的对象是上一层所传播过来的,如果没有浅层的铺垫,最后也不可能得到一个正确的结果,网络是根据这些提取的特征来判断物体种类!所以说整个模型的过程都有它自己的妙用!缺一不可!

额,这篇博客主要是我自己对神经网络为什么能够实现图像分类的看法!神经网络这东西我个人认为很玄乎,相信很多学习神经网络算法的伙伴在学习的时候也有相同的感觉!希望我的这些愚见能帮助到大家,当然,我接触深度学习才半年,可能有些地方自己理解错了或者理解偏了,还请路过的大佬能够指点一番!

 

 

  • 8
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值