梯度下降法可以解决哪些问题?
梯度下降法可以解决凸函数的最优化问题。对于非凸函数也可得到最优解或局部最优解。
简单描述梯度下降法的过程?
梯度下降法简要过程如下:
1,设置出发点(初值x_0),设置每一步的长度(步长η),设置停止的条件(比如最多迭代10次,两次下降的结果小于0.00001等);
2,通过求导找到下降的方向(导数的正负)及落差(导数的大小);
3,到达下一个出发点,重复第2步,直到不满足继续迭代的条件。
如何理解梯度下降法?
先看个例子,假设我们需要求解y=x^2的最小值。如何用梯度下降法去解决这个问题呢?
先看y=x^2的图像
按照前面说的梯度下降法过程,我们尝试一次
1,设置出发点(x=2),设置步长(η=0.5);(注:这里自己设置,设置得不好,可能得不到好的结果)
2,计算导数,找到下降的方向(导数的正负)及落差(导数的大小);
导数为正就表示函数在这一点递增,那么往x轴的负方向就是递减。导数的值为4,那么落差就是4。计算下一个出发点。
我们发现,方向和导数值的正负刚好相反,所以,可以将上面式子化简一下
所以,下一个出发点为x_1 = 0
计算一下是否满足继续迭代的要求,发现迭代次数<10,两次迭代差值 |y_1 - y_0| > 0.00001.
因此重复步骤2
再次计算是否满足继续迭代的要求,这里我们发现两次迭代的差值 |y_1 - y_0| = 0 < 0.00001,不满足继续迭代的条件,停止迭代,返回上一次迭代结果x_1 = 0, y_1 = 0。
所以通过梯度下降法得到凸函数y=x^2最小值为0。
总结梯度下降法的优缺点。
优点:
1,梯度下降法可以解决函数无法通过数学推导求最优解的问题;
2,简单易行,上手容易
缺点:
1,步长较难选择。如果步长太小可能很慢才能得到最优解,如果步长太大,可能得不到最优解;
2,凸函数可能得到的只是近似最优解,非凸函数可能只能得到局部最优解;
目前有很多优化过梯度下降法相关的算法,可以去参考