梯度下降法
梯度下降法是求解无约束最优化问题的一种最常用的方法,有实现简单的优点。梯度下降法是迭代算法,每一步需要求解目标函数的梯度向量。
假设f(x)=w∗x+bf(x)=w∗x+b,现有已知值x0,x1...xix0,x1...xi,求f(x)最小值时的w,bw,b,则:
循环输入x0,x1...xix0,x1...xi,求f(x_k):
f(xk)=w∗xk+bf(xk)=w∗xk+b
求参数w,bw,b的梯度,如果梯度变化小于阀值,则停止迭代:
w的梯度:df(xk)dw=x0df(xk)dw=x0
b的梯度:df(xk)db=1df(xk)db=1
假设步长为aa,更新参数:
w=w−a∗xkw=w−a∗xk
b=b−a∗1b=b−a∗1
更新函数,继续迭代
f(x)=(w−a∗xk)∗x+(b−a)f(x)=(w−a∗xk)∗x+(b−a)
1、推导
我们的目标是求f(x)f(x)的最小值对应的xx值。
根据泰勒公式对函数进行一阶泰勒展开:
f(x)=f(x0)+f′(x0)∗(x−x0)+o(x0)f(x)=f(x0)+f′(x0)∗(x−x0)+o(x0)
假设f(x1)<f(x0),x1=x0+df(x1)<f(x0),x1=x0+d:
f(x1)=f(x0)+f′(x0)∗(x1−x0)+o(x0)f(x1)=f(x0)+f′(x0)∗(x1−x0)+o(x0)
即:
f(x1)=f(x0)+f′(x0)∗d+o(x0)f(x1)=f(x0)+f′(x0)∗d+o(x0)
梯度下降认为o(α)(即二次导数及以上的项)为无穷小,忽略不计,所以:
f(x1)=f(x0)+d∗f′(x0)f(x1)=f(x0)+d∗f′(x0)
1、假设在区间(x1,x0)(x1,x0)内,函数f(x)f(x)单调递增,f(x)∝xf(x)∝x,那么比f(x0)f(x0)更小的值对应的x′x′肯定小于x0x0,所以d=−dd=−d:
x′=x0−d∗f′(x0)x′=x0−d∗f′(x0)
2、假设在区间(x0,x1)(x0,x1)内,函数f(x)f(x)单调递减,f(x)∝−xf(x)∝−x,那么比f(x0)f(x0)更小的值对应的x′x′肯定大于x0x0,所以d=dd=d:
−x′=−x0+d∗f′(x0)−x′=−x0+d∗f′(x0)
即
x′=x0−d∗f′(x0)x′=x0−d∗f′(x0)
综上述1、2可得xx的更新函数:
;a为步长
由上述推导可知当步长a较大时,x′x′有可能会超出区间(x0,x1)(x0,x1),从而导致梯度爆炸;当a较小时,有可能导致xx的变化很小,从而无法找到最优解,这就是梯度消失。