梯度问题总结

背景

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

回归问题

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

$loss = \frac{1}{2} \sum\limits_{n} (f(x^n) - \hat{y}^n)^2$

$y = f_{w,b}(x) = \sum \limits_{i} w_i x_i + b$

$\frac {\partial{loss}}{w_i} = \sum\limits_n(f(x^n) - \hat{y}^n) * x_i^n$

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

分类问题

二分类(LR举例说明)

label使用0和1

交叉熵loss

$loss = \sum \limits_n-\left[ {\hat{y^n}ln(f(x^n)) + (1-\hat{y^n})ln(1 - f(x^n))} \right]$

$\frac{\partial{loss}}{w_i} = \sum\limits_n(f(x^n) - \hat{y}^n) * x_i^n$

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

label使用1和-1

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

$loss = \sum\limits_{n}log(1+e^{-\hat{y^n}(f_{w,b}(x^n))})$

$\frac{\partial{loss}}{w_i} = -\sum\limits_n \frac{1}{1+e^{-\hat{y^n}f_{w,b}(x^n)}} e^{-\hat{y^n}f_{w,b}(x^n)}\hat{y^n} x_i^n$

看起来比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