从神经网络到卷积神经网络
机器学习本质而言就是特征提取,从人类所能识别物体的方法过渡到计算机识别的方法,通过一系列的参数将抽象变为数字。说白了就是四步走,数据 — 建模 — 特征 — 评估。
神经网络?
神经网络简单来说,输入就是我们所需要处理的数据,就是一层一层的提取信息,把每一层连起来,最后就是输出想要得到的。
来,举个猫咪的栗子。
有一只猫的图图,我知道这是猫,但是计算机不知道啊,我想办法高速计算机这是猫,不是狗,也不是船。好了,计算机认识啥?认识数字啊!那我就给这个猫打个分,猫的得分高了计算机就认识了啊!
这个猫的图图,输入计算机是猫的一组数字。长32,宽32,彩色图像是RGB通道,乘起来3072个数字,但是为了后续简化我们就姑且认为这个猫 是由4个数字(56,231,24,2)代替一下。
嘿,接下来就是给它打个分,先随机给定一个参数W,b。粉色就是对“是猫”得分计算(0.2,-0.5,0.1,2.0)分别和(56,231,24,2)乘起来,加上偏执1.1,就算出来了-96.8。绿色就是计算”是狗“的得分,蓝色就是计算”是船“的得分。
这个得分有正有负,计算机而言,希望有一个0到1之间的数字(就是一个概率呗)来瞅明白,那么我们就给它整个函数映射一下,也就是激活一下(激活函数)。
有了这个Softmax 函数,这样一来,就将原来分散的得分都放到(0,1)这个区间喽。当然,还有其他函数比如 Relu,道理是一样的。Relu函数在后面求导的时候更方便,更常用。
但是,我们发现,这明明是个猫,为啥狗的分数那么高,计算机把这个认为成狗子了,那么是错了,必须要修正一下前面的W和b这个参数,也就是计算得分的几组数字呀。可是,怎么修改呢?
定义一个损失函数,也就是机器得到的值和真实值得差距,看看自己错的有多离谱。计算机一看损失好大,妈呀,我错的太离谱了,我要多改改。除了这个还有一个正则化惩罚项,奥哈,就是计算机看看自己W的系数怎么样,别太复杂。
这就是前项传播,通过权重,计算出损失。
我们希望一次一次迭代数据,损失越小越好呀,那怎么修改W和b呢?那就涉及到反向传播啦。梯度下降的方法很好,就好比一个人在找下山的路,最快的到达最低处,那么就是找一个最陡的坡下去啊。啊哈,但一次走得太多容易直接翻山到另一坡,一次走太小那要走个几天几夜岂不是饿死在路上了?
最终,经过几次迭代,终于找到差不多小的损失了,好了,这个参数我们可以用了。但是我们又想了,这些参数通用不?如果只是这张猫认识,换一个猫就不认识了?那岂不是很智障。所以,我们将很多很多数据训练,选择其中一部分做验证(验证集),只有验证集损失很小才能说这个网络还不错。最后,我们拿测试集来看看,到底能不能识别出来是猫,还是其他。
嘿,这样,一个神经网络好像就有点意思了,但是一次加权计算往往特征提取不全面啊,那我们就多次呗。比如这个猫,一开始有3072个数字,第一次提取,给它变成100个特征值,第二次提取,给它变成10个值,这10个值就是判断10个种类的每个种类的概率。
每一层的网络都和前一层每一个系数都有关系,这样就是一个全连接层,而且保持一个非线性变换。这样来看,这个参数可是太太太多了,这几层就这么多参数,每个小箭头都是一个W中参数,还有b那岂不是更多。
卷积神经网络?
我们看到一幅图,应该是一块一块的看,那为什么不一块一块的给它提取特征呢?嘿,卷积神经网络来了,其实,这比起传统神经网络,更易提取特征。
那神马是卷积呢?比如一张图片是5 * 5 * 3 的彩色图,我们先把一个通道拿出来,让一个3 *3 的小格子(卷积核)在上面滑动(每次滑动一个格子),和原来5 * 5对应位置相乘在求和。这样就得出来一个3 *3的小矩阵(特征图)了,小卷积核就是把特征提取出来了,当然,卷积核也可以取大一点,每次移动步数也可以变一变。
但是我们看啊,5 *5 的图片靠近边缘的一部分好像使用的不够,把这个图周围补0,变成7 * 7 的图,这样图像边边的信息也可以利用到。
![[]](https://img-blog.csdnimg.cn/20200401205025941.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L20wXzM3ODYyMDk5,size_16,color_FFFFFF,t_70#pic_center)
这样一个通道计算出,剩下练个通道也得出来特征图,把三个通道特征图对应位置加起来,再加上非线性变化的偏执b,就是经过一个卷积核得到的特征图啦。
![[]](https://img-blog.csdnimg.cn/20200401205039475.png#pic_center)
对一个图,不仅仅会用一个卷积核运算,我们用多个卷积核,同样的方法操作,就得到很多个特征图,这就是特征图的通道数。这样,一个5 *5 * 3 的图片(周围补一圈0),经过两个步长为1的 3 * 3 *3的卷积核 ,就变成了 3 * 3 * 2的特征图。
对于计算卷积也有个公式,特征图的维度是由小卷积核的个数决定。
说完了卷积,就是池化,池化就是把这个特征图缩缩水,特征图太大了,我们把每四个钟最大的数字拿出来当做特征就好,给特征缩缩水。
这样一层一层的连接上,卷积几次缩缩水,最后在全连接层,把所有特征拉长,分类就好,这就是卷积神经网络中特征图变化的样子。
在同样的感受野效果下,堆叠小的卷积核所需的参数更少一些,并且卷积过程越多,特征提取 也会越细致。加入的非线性变换也随着增多,还不会增大权重参数个数,所以经典的VGG 网络就出来了,用小的卷积核来完成体特征提取操作。
积核所需的参数更少一些,并且卷积过程越多,特征提取 也会越细致。加入的非线性变换也随着增多,还不会增大权重参数个数,所以经典的VGG 网络就出来了,用小的卷积核来完成体特征提取操作。