假如有一个实例,它的输入为x,需要使用梯度下降法来优化,这个实例的损失函数为,初始值为。对于该函数,需要找到J的最小值。要找到J的最小值,首先需要确定优化方向,也就是梯度的方向,每次优化的幅度就是学习率,那么更新公式为。对于该损失函数,,初始化的时候,设置=1,学习率为0.2,那么根据公式进行计算后,5次迭代结果如表所示。
5次迭代结果
迭代次数 参数值 更新后的参数值
1 1 1-2×1×0.2=0.6
2 0.6 0.6-2×0.6×0.2=0.36
3 0.36 0.36-2×0.36×0.2=0.216
4 0.216 0.216-2×0.216×0.2=0.1296
5 0.1296 0.1296-2×0.1296×0.2=0.07776
经过5次优化后,所得的结果已经比较小了。但是梯度下降法有一些问题:首先,如果损失函数不是一个凸函数,梯度下降并不一定能给出全局最优解,可能仅仅是局部最优解;其次,对全部数据的损失函数进行梯度下降是非常耗费时间的。一般为了加快速度,会选择随机梯度下降(Stochastic Gradient Descent),随机梯度下降不是对所有训练数据集的损失函数进行训练,而是训练某一个数据的损失函数,但是这一个数据损失函数的下降并不能很好地代表整体下降,所以要采用一个办法,就是引入一个批次(batch)训练,每次取训练数据集的一部分构造损失函数进行梯度下降,进而优化损失函数。