02-神经网络中的参数
还是先从线性函数讲起,在计算参数w和b之前,首先回答一个问题:什么样的参数是好的?即:我们需要调整参数的方向是怎样的?
我们的目标是使函数的输出结果尽可能的接近真实数据,因此,好的参数就是使得函数的输出尽可能拟合真实数据的那一组参数。那么,如何衡量拟合的好坏呢?

从直觉上理解,上图的左边就拟合的好,而右边就拟合的差。那么,如何将直觉上的“好”和“差”用数学语言表示出来呢?

将真实的值用表示,将预测的值用表示,那么二者之间的距离就表示预测值和真实值之间的误差。为了评估总体的预测效果,我们将所有的差加起来,这样就得到了预测数据与真实数据之间的总的差异:
这类表示预测数据与真实数据之间差异的公式,就是损失函数(Loss Function),也叫做代价函数(Cost Function),记作,从参数的视角来看,它是一个关于w和b的函数。
我们对上述损失函数做一些优化,首先将绝对值替换为平方,一是可以让函数变得平滑,便于进行数学运算;二是可以放大误差较大的值的影响。然后将其做一个平均:
上式就是均方误差(Mean Squared Error,MSE)损失函数。

如何求解w和b使得损失函数最小化?自然是求导,然后令导数为0,求极值点。
举例来说,假设我们有如下的数据:
| x | y |
|---|---|
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
线性模型为:
那么,损失函数可以表示为:
对上式求导
易得,当时,导数为0,此时损失函数最小。
当考虑到b时,损失函数变为多元函数,求解过程与一元函数类似,只是求导时需要考虑多个变量,即偏导数。
上述通过损失函数来寻找线性函数参数的方法就是机器学习中的基本方法——线性回归。
如何寻找最佳的w和b呢?答案是一点点试。
在给定初始条件的情况下,每次调整w和b的值,然后计算损失函数,然后判断损失函数是否减小,如果减小,则保留这次的调整,否则,放弃这次的调整。重复这个过程,直到损失函数不再减小为止。
具体怎么调整呢?调整一点w或b,计算损失函数的变化值,损失函数变化值与参数变化值的商就是偏导数,我们要做的就是不断把参数按照偏导数的反方向去调整。
其中,是学习率,用来控制每次调整参数的幅度。这些偏导数所构成的向量就叫做梯度,逐渐变化w和b使得损失函数逐渐减小的过程,就叫做梯度下降。
如何求解偏导数?

这种求解偏导数的方法叫做链式法则。由于可以从右向左逐层求导,逐层更新参数,直到把每一层的参数都更新一遍,而且之前计算的值在后面同样会用到,再次计算时直接传递过来就好了,因此,这种方法叫做反向传播。

通过前向传播,根据输入x计算输出y,然后通过反向传播,计算出损失函数关于每个参数的梯度,再将参数向梯度的反方向调整,这个过程就叫做神经网络的一次训练。