共计 1108 个字符,预计需要花费 3 分钟才能阅读完成。
如果模型的label为连续的概率值,选择什么loss 函数进行学习。抛出这个问题,因为现在在做一个视频推荐的项目,其中一个指标就是完播率,这个是一个介于[0,1]之间的数值,是个连续值。本质上应该还是个回归问题,一般回归的时候我们都会用mse作为loss来优化。
1、cross entropy
首先在直觉上,用CE预估连续值,似乎有问题,因为当pred(预估值)=label的时候,loss本身大于0,
比如 pred=0.6 的时候
loss=-(0.6_log0.6+0.4_log0.4)>0
对比正常的二分类目标而言,此时是有问题的,因为如果预估值与标签一样的话,那么它的loss是为0 ,反向传播梯度也是0,这样才符合认知。
而当连续值预估的时候,loss>0则梯度“应该”也不为0。
但是实际推导一下,假设真实概率p,预估概率q,则loss对q的导数为-p/q + (1-p)/(1-q),实际上当p=q的时候,loss的gradient也为0,由链式法则可得,对输出一层偏导也会为0。
描述到这里,感觉好像也没啥问题。
2、MSE
MSE通常用于回归问题,其假设误差遵循 Normal Distribution
其实当输入为Sigmoid激活时,不能使用mse做loss,这样会导致梯度弥散,可以参考gradient vanishing/explode 中的数值分析中的第六点
当然,这里还有个问题是,如果使用sigmoid激活。对于朴素的Logistic Regression来说,优化问题是convex的,而对于MSE loss就不是convex的了。
对于DNN状况,则大部分就是梯度问题,具体可见:https://stats.stackexchange.com/questions/326350/what-is-happening-here-when-i-use-squared-loss-in-logistic-regression-setting
3、对比
角度1:先说结论,CE在距离最优值一定距离的点上梯度比MSE更大,但是在极值(靠近0,1)附近的gradient非常大,所以训练的时候可能需要对gradient做额外的处理。
第一张图是loss曲线
第二张图是梯度曲线
对于ce优化,边缘的梯度变化过于大,需要做适当的裁剪防止更新梯度异常。
角度2:这个可能跟业务相关,如果把完播率作为ce来优化,那么就是看作“是否完播”的优化目标,如果使用mse来优化,那就是“会播放到什么样的程度,完成度时是多少”,在我们自己的实践中发现使用ce来优化取得的效果是正向。
参考:https://www.jianshu.com/p/048255b3d29b