神经网络的目的根据历史数据自动找到最优的权重参数,最优的意思是损失函数的值最小,梯度下降就是找到这个最优解的一种算法。
举个例子,假设损失函数是f(x) = x平方,如何让损失函数的值最小呢?我们一眼就看出当x = 0时,损失函数最小。但是如果让你设计一个算法来算出这个最小值,你会如何设计呢?
梯度下降就是求最小值的一种算法,下图形象地表示了梯度下降的过程:
神经网络基础5 - 梯度下降
图中的曲线就是损失函数f(x)=x平方的几何表示,算法先给 x 初始化一个值,比如-3(图中左上方的第一个蓝点),然后让蓝点沿着一定的方向移动,不断下降,最终找到x = 0的那个点。
那当 x=-3时,它应该往哪个方向尝试呢?这个方向由 x = -3 时,f(x)对 x的导数决定(导数代表了 x = -3 那个点的切线的斜率。)
我们知道f(x)对x的导数是 2x,所以当x = -3 时,导数是 -6,那么下一个 x 就是:
x = -3 - (-6) * 0.1 = -2.4
其中0.1是一个常数,代表了学习率,你可以根据不同的场景设置不同的值。
上面的例子是2维的情况,如果是多维呢?假设下图代表了一个损失函数 神经网络基础5 - 梯度下降图中黑色的带箭头的线形象地表示了梯度下降算法沿着黑线的指引不断尝试最终找到损失函数值的过程。
网友评论