机器学习 神经网络 (6)

用一个例子来说明,当我们输入手写的 3 的图的时候,输出层的值可能并不是我们预期,因为权重和偏移量都是我们随机选取的。
所以需要一个成本函数来告诉电脑使用该数据模型是否正确。

我们通过计算输出值与正确值对比来判断数据模型的好坏,衡量的标准就是输出值和正确值得差平方的和。我们可以理解为他们间的距离的总和。

我们可以通过给定集合,也就是一大堆已经知道答案的数据,这里是图。计算出的输出值的平均值作为考察这套神经网络的依据。

我们的神经网络,输入为 784像素对应的灰度值。输出是 10 个数值而参数为 13002个权重值和偏移量。

如果要是漫无目的去找权重和偏差值,是海量的计算。正本函数的复杂性是他的输入为1300权重和偏移量作为输入,输出是一个能够表示系统好坏的值,参数就是已知的数据,越多越好。

我们一切都是由简入难,暂时不考虑那么多输入,我们只考虑一个输入和一个输出情况。这个函数对应一条曲线,我们用微积分很容易找到函数的最小值。

但是世界没有那么简单,对一些复杂函数就不一定了。

好的办法是我们随机输入一个值,然后根据此值来找出让函数值变小的方向。我们可以计算出函数在该点的斜率来作为左右移动输入点的依据



值得注意的是,即使在这样简单的单一输入的方程中,依然可能出现很多可以滚入的低谷。

从你随机选取的输入值开始,找到的局部最小值,却不能保证是函数的最小值。

扩展一下想象力,扩展到二维变量和一个因变量。输入变量空间是一个 x y 的二维平面形。成本函数则是浮在上面的曲面。

现在需要考虑不仅是斜率,而是输入空间的步进方向。减少 方向。熟悉多变量微积分的人都知道 函数梯度会给你最陡峭的上升方向。也就等于哪个方向是函数下降最快的方向。所以用负的梯度就能找到函数下降快的方向。这个梯度向量的长度实例上是这个最陡斜坡有的多个陡的指标。


因为如果你知道可以通过计算梯度方向来找到函数值最小的方向,并向山下走出第一步。

这个原理也适用拥有 13000 个自变量的方程。

成本函数的负梯度只是一个简单的向量。是一个超级大的输入变量空间中的一个方向。告诉哪个方向会让成本函数最快变小。