关于卷积神经网络的介绍
一,全连接神经网络
1,全连接神经网络的整体结构
X代表左边输入的数据(向量或者矩阵等等),Y代表模型对数据处理之后的结果,中间的节点都可以算作为隐藏层。
2,全连接神经网络的单元结构
x1,x2,x3是输入的数据,w1,w2,w3是权重,b1是偏置项,h是激活函数,a是输出。以此图为例,节点是一个求和函数,它负责把x1w1,x2w2,x3*w3,b1这几项加起来,得到的结果再通过激活函数的处理,最终得到输出a。
假如x1,x2,x3是一张图片的数据,如果输出a为1,那么这张图片是狗,如果为0,那么这张图片是猫。对于这张图片来说,我们现在的目的就是为了找一组w和b,使得这张图片的数据经过处理,要么为1,要么为0,从而能够对这张图片进行分类,那么这个模型就暂时被训练完成。但是现在这个模型仅仅能够识别这一张图片,而对于不同的多组图片来说,我们的目的是能够尽量地找到一组w和b,使得这个模型对于不同的多组图片的识别尽量地贴合输出结果a,那这样这个模型就能够暂时的对图片进行识别。
3,激活函数
激活函数的功能其实和寻找一组w和b的用途一样,也是为了对输入数据处理后的结果进行调整,使其能够贴合预期输出的结果a。另外,激活函数分为线性和非线性的,对于线性的激活函数,存在的问题就是客观上可能会减少神经网络的层数(一般情况下神经网络层数越深,模型效果越好)。
具体的激活函数的优缺点暂时不做解释,等全部内容学完之后,再解释为什么不同的激活函数有不同的优缺点或者说为什么这种激活函数会有这种优缺点。
4,神经网络的前向传播
所谓前向传播就是输入数据经过每一层网络不断计算的过程。
5,损失函数
如果一个模型的预测值为连续的值,那么每一轮预测结束,结果都会与真实值之间存在误差。但是误差的计算绝对不能让预测值与真实值进行简单的相减,这样会出现一些问题,所以在这种情况下采取均方误差的方式来计算误差。
损失函数还有一种用途:通过绘制损失和训练轮数的图表,可以看到当训练达到一定轮数后,损失就会稳定在一个值左右,这表明模型在某轮之后达到收敛,再训练已经无法提升模型的性能了。
这告诉了我们模型训练的一系列步骤,先前向传播传递输入数据,计算结果,再计算误差。如果误差比较大,那就反向传播调整w权重和b偏置项,然后再前向传播重复此过程。
6,梯度下降法
那么梯度下降法如何对w和b进行更新呢?首先观察这个误差公式可以看出(在假定w只有一个):在每一次传输图片数据时,x是确定的。数据通过前向传播最终得到的结果也是确定的,然后y’(真实值)也是确定的,那么唯一不确定的就是w和b,最终这个误差函数其实是关于w和
b的二元二次函数。既然知道了这个函数那么我们就可以绘制出这个函数图像,通过图像可以看出,我们可以使得w和b在梯度方向上不断减少,最终可以得到误差的最小值。
既然理论上已经可行了,我们该如何确定具体的w和b呢?
首先我们还是要看这个误差函数,当我们只针对w时,b暂且可以看做常量,那么这个函数就是关于w的一元二次函数(对于多个w时也是一样,只是把w1、w2、w3等看做常量而已)。但是这时候想要求最小的loss值不能用求根公式,因为w不只是一个变量,也有可能时一个矩阵,所以这时候只能用梯度下降的方式来接近w1(得到最小loss值的w),所以对于w的更新公式如图所示,w(旧)一步步地走,直到接近w1。而对于b,也是一样的理论。
另外,图上的a也叫做学习率。对于a来说,不能太大也不能太小。如果a太小,那么w接近w1的速度会很慢,也就是说可能训练很多轮,w变化不大。如果a太大,那么w有可能会走过头,直接越过
w1导致训练效果没有变化或者变差。