1.什么是数值微分?
(1)导数
导数表示的是某个瞬间的变化量;“真的导数”对应函数在x处的斜率(称为切线)
(2)数值微分
利用微小的差分求导数的过程称为数值微分
(3)偏导数
有多个变量的函数的导数称为偏导数。偏导数和单变量的导数一样,都是求某个地方的斜率。
不过,偏导数需要将多个变量中的某一个变量定为目标变量,并将其他变量固定为某个值。
2.什么是梯度?如何通过数值微分计算梯度?
(1)梯度
由全部变量的偏导数汇总而成的向量称为梯度。
梯度会指向各点处的函数值降低的方向。更严格地讲,梯度指示的方向是各点处的函数值减小最多的方向。
需要注意的是!无法保证梯度所指的方向就是函数的最小值或者真正应该前进的方向。虽然梯度的方向并不一定指向最小值,但沿着它的方向能够最大限度地减少函数的值。
因此,在寻找函数的最小值(或者尽可能小的值)的位置的任务中,要以梯度的信息为线索,决定前进的方向。
(2)梯度法
此时,梯度法就派上了用场。
在梯度法中,函数的取值从当前位置沿着梯度方向前进一定距离,然后再新的方向重新求梯度,再沿着新的梯度方向前进,如此重复,不断沿梯度方向前进,逐渐减小函数值。
寻找最小值的梯度法称为梯度下降法
寻找最大值的梯度法称为梯度上升法
但是通过反转损失函数的符号,求最小值的问题和求最大值的问题会变成相同的问题。
函数的极小值、最小值以及被称为鞍点的地方,梯度为0
机器学习的主要任务是在学习时寻找最优参数。同样地,神经网络也必须在学习时找到最优参数(权重和偏置)
这里所说的最优参数是指损失函数取最小值时的参数。
(3)学习率
我们用数学式来表示梯度法:
表示更新量,在神经网络的学习中,称为学习率。学习率决定在一次学习中,应该学习多少,以及在多大程度上更新参数。
学习率需要事先确定为某个值,比如0.01或0.001 一般而言,这个值过大或者过小都无法抵达一个“好的位置”
在神经网络的学习中,一般会一边改变学习率的值,一边确认学习是否正确进行了。
像学习率这样的参数称为超参数。这是一种和神经网络的参数(权重和偏置)性质不同的参数。相对于神经网络的权重参数是通过训练数据和学习算法自动获得的,学习率这样的超参数则是人工设定的。一般来说,超参数需要尝试多个值,以便找到一种可以使学习顺利进行的设定。
3.如何实现使用mini-batch数据的随机梯度下降法(stochastic gradient descent,SGD)?
神经网络存在合适的权重和偏置,调整权重和偏置以便拟合训练数据的过程称为“学习”。神经网络的学习分成下面 4 个步骤。
步骤 1(mini-batch)
从训练数据中随机选出一部分数据,这部分数据称为 mini-batch。我们的目标是减小 mini-batch 的损失函数的值
步骤 2(计算梯度)
为了减小 mini-batch 的损失函数的值,需要求出各个权重参数的梯度。梯度表示损失函数的值减小最多的方向。
步骤 3(更新参数)
将权重参数沿梯度方向进行微小更新。
步骤 4(重复)
重复步骤 1、步骤 2、步骤 3。
在这个方法中,使用的数据是随机选择的mini batch数据,所以又称为随机梯度下降法。stochastic gradient descent SGD
即对随机选择的数据进行梯度下降法