梯度问题总结

背景

计算梯度是机器学习问题很重要的部分,对于常见的梯度计算方法,我们要达到脱口而出的程度,本篇文章主要对
常见的梯度计算方法进行总结。

回归问题

回归问题的loss一般是平方loss,即:

loss=12n(f(xn)ˆyn)2

y=fw,b(x)=iwixi+b

losswi=n(f(xn)ˆyn)xni

注:这里的n表示第几个样本,xni表示第n个样本的第i个特征, 上标表示第几个样本,下标表示第几个特征

分类问题

二分类(LR举例说明)

label使用0和1

交叉熵loss

loss=n[^ynln(f(xn))+(1^yn)ln(1f(xn))]

losswi=n(f(xn)ˆyn)xni

和上面的梯度是一模一样的,即预测值减去label值,再乘以xni

label使用1和-1

当label使用1和-1的时候,就成了逻辑斯蒂损失函数

loss=nlog(1+e^yn(fw,b(xn)))

losswi=n11+e^ynfw,b(xn)e^ynfw,b(xn)^ynxni

看起来比0 和1作为标签要复杂一些

多分类

多分类使用softmax对y进行归一化生成z,然后做crossEntroy,先计算loss对y的梯度,然后计算y对最终参数的梯度,具体可以参考之前博客

总结

其他算法比如FM/DNN也都是类似的方法来计算梯度,根据具体应用,比如分类和回归,选择合适的loss函数,

这样才能根据自己的业务需求,快速设计相应的模型。

参考

  1. http://bourneli.github.io/ml/fm/2017/07/02/fm-remove-combine-features-by-yourself.html
  2. https://www.cnblogs.com/guoyaohua/p/9217206.html
------ 本文结束 ------
k