深度学习入门(四)——神经网络是如何学习的?

深度学习入门(四)——神经网络是如何学习的?

所谓的神经网络学习过程是根据模型分类效果调整神经网络中上千个激活函数的所有权值和偏置值。直至模型分类精度符合要求,模型学习过程结束。

前文曾经介绍,神经元是装有激活值的容器。现在,你会发现神经元的激活值是会随着输入对象的改变而发生变化的。也就是说,神经元实际上是一个函数,它的输入值是上一层所有神经元的输出。他的输出是一个0-1的实数,也就是这个神经元本身的激活值。多个神经元函数组成了这个极为复杂的人工神经网络函数,它的输入值为被测图像每个像素点的灰度值,输出为被测图像与各个数字的相似度,仅此而已。

1.MINIST数据集

神经网络究竟是如何给每个神经元都找到合适的权值和偏置值的呢?在本例中我们希望神经网络将MINIST手写数字数据集作为“学习资料”,自动给数以万计的权值和偏置值找到合适的设定,使该神经网络具备快速、准确识别手写数字的能力。其中,MINIST手写数字数据集共有60000张训练数据,10000张测试数据。每张图像都为28*28的灰度图像,并且每张图像都配有标签说明这张图是哪个数字。神经网络就是依靠这些带有标签的数据集进行学习和评估模型性能工作的。

 

深度学习入门(四)——神经网络是如何学习的?_第1张图片

图1.1 手写数字数据集

2.计算机可以自己学习?

虽然机器会学习这个事情听起来很魔幻,但是,当你实际了解它的工作原理后,你会发现它学习的过程更像是一道数学计算题。更具体的解释就是:神经网络的学习过程是在找某个函数的最小值。在上篇文章对神经元激活值计算方法的介绍中,我们提到权值代表着两个神经元间连接的强度,而偏置值可以看成神经元间连接的敏感程度。在学习的一开始,假如对所有的权值和偏置值进行随机初始化。那么模型将会因为所有参数都是随机的,分类效果会非常的糟糕。

这时我们需要引入一个损失函数Cost来告诉计算机它做出的分类动作究竟有多糟糕。用数学语言来描述就是,你需要求出输出层神经元激活值与正确答案激活值的差值平方和。我们称这个平方和为单个样本的损失值CostCost函数值越小代表模型的分类效果越好。如果模型的参数很糟糕Cost函数值就会很大。这都是针对单个样本来说的,实际上我们求取的所有训练样本的平均损失值,才是衡量模型性能的最重要指标。

Cost=ni=1ai-yi2

Cost函数中,n为输出层神经元个数,ai为输出层神经元激活值,yi为神经元对应的目标激活值。

如何才能找到完美的权值和偏置值使损失函数值最小呢?如果对于只有一个自变量的函数,这个问题将会很好解决。但是当自变量变为复杂的13000个损失函数时,问题就不是那么好解决了。

3.最优的梯度,最优的算法

试想,如果我们一开始在损失函数图像上随便挑一个损失值,然后考虑横坐标的左右移动对损失值有什么影响,同时记录这个方向并一直朝着这个方向调整,最后一定会找到损失值最小的点。转换为数学方法就是找到函数在这里的斜率,斜率为正就向左走,斜率为负就向右走。在每一个点都重复计算,得到新的斜率,接着再适当地走下一步。你就会逼近损失函数的某个局部最小。

可惜,这种方法只能找到单个参数对于损失函数的局部最小值,并不能代表整个模型的最优解。想象一下,假如损失函数是一个三个输入一个输出的函数,那么损失函数图像就是空间上的一个曲面,这个曲面像是有高山有低谷的地图,那么寻找降低损失函数值的路径就变成了寻找最快、最高效下山的方法。这种问题便是数学中的多元微积分。其中函数的梯度指出了函数值的最快增长方向。即按照梯度的方向走,函数值增长的最快,那么沿着梯度的负方向走,函数值自然就降低地最快了。而且,这个梯度向量的长度就代表了这个最陡的函数值斜坡到底有多陡。

让损失函数值最小的算法,不过是先计算损失函数的梯度,在朝着梯度的反方向调整,然后循环。需要注意的是,模型的损失函数值取了整个训练集的平均值。所以,最小化损失函数值意味着神经网络对总体样本的处理效果更好。

4.总结

回到文章的开头,神经网络的学习并不是那么神秘,它的学习实质上就是让损失函数的函数值变得更小。上述的各种数据处理并不是神经网络的核心所在,神经网络的核心工作是将损失函数值作为输入值,运用反向传播算法,计算得到一个负梯度列向量告诉我们如何微调权重和偏置才能让神经网络更快的变好。实际上,这一层层函数对训练数据的处理就是神经网络的学习过程。以上就是关于神经网络是如何让学习的全部内容,下篇文章将会介绍神经网络模型中核心的核心—反向传播算法(BackpropagationBP)。敬请期待吧!

你可能感兴趣的:(神经网络,python,机器学习,人工智能,深度学习)