Step 1: Take the derivative (gradient) of the loss function for each parameter in it.
Step 2: Pick random values for the parameters.
Step 3: Plug the parameter values into the derivatives(gradient)
Step 4: Calculate the step sizes, step size = slope*learning_rate
Step 5: Calculate the new parameter: new parameter = old parameter-step size
Back to Step 3 until Step_Size=small, or reach the maximum number of steps
1: θ←θ0 2: while ∇L(θ)>ϵ do 3: θ←θ−α⋅∇L(θ) 4: return θ
ϵ 是tolerance,很小的数值(1e-6), α 是learning rate。
use gradient to descent to the lowest point in the loss function (sum of the squared residuals); gradient descent can be very sensitive to the learning rate
从上面的过程可以看出,如果要实现一次gradient descent,需要load进去所有的x。如果我们只load部分的dataset,每次换不同的batch去算derivative,这个时候我们叫它out of core learning 在sklearn就是partial_fit
Gradient Boosting
从general的boosting vs bagging说起
Bagging: independent classifier并行运算,一群high variance, low bias的model,用一些avg的技巧得到最后的结果(因为low bias,所以大家犯不同的错误取平均后应该得到一个真实值),比如weighted average, majority vote, normal average 最后的结果是reduce variance,variance变成了原来的1/N。
Boosting: sequential classifiers串行运算,可以理解成 精英教育,不停培养同一个model,让这个model的error最小。每一个model都在学习在此之前每一个model的mistake。Boosting的问题在于我们需要设置一个stop time or iteration time,因为它有overfitting的问题。
Gradient Boosting
我们此前的想法都是given x,predict y。y本身有一个predicted value, 也有一个true value. 现在转变一下想法,我们还有一个叫做residual的参数 rj,i , residual of fj on data i.
r0,i←yi−f0(xi)
已知 xi ,预测每个rj,i , f1:xi→r0,i , 用预测结果改进 f0.
1: f0:x→0 2: f←f0 3: i←1 4: while i<T do 5: ei←yi−f(xi) 6: fit fi using {<xi,ei>} 7: f(x)←f(x)+fi(x) 8: i ←i+1 9: return f