背景
计算梯度是机器学习问题很重要的部分,对于常见的梯度计算方法,我们要达到脱口而出的程度,本篇文章主要对
常见的梯度计算方法进行总结。
回归问题
回归问题的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函数,
这样才能根据自己的业务需求,快速设计相应的模型。