常见损失函数总结
loss一般是正的,而且越小越好。
0-1 loss / abs loss
- 应用场景:回归问题
- 0-1 loss:只要预测值和标签不相等,就
loss+=1
;或者预测值q
和标签p
之间的差值大于阈值t
,就loss+=1
.或者套用其他的非线性函数。 - abs loss:
loss += abs(p-q)
.
square loss
- 应用场景:很多,分类问题和回归问题都可以
- loss输入:模型通过预测给出一个tensor(scalar, vector甚至matrix),而标签也是一个同样size的tensor
- 计算:
J m s e = ∑ i , j ( p i , j − q i , j ) 2 J_{mse} = \sum_{i, j}(p_{i, j} - q_{i, j})^2 Jmse=i,j∑(pi,j−qi,j)2
hinge loss
- 应用场景:N分类问题
- loss输入:模型输入一个N维向量为分类结果,针对这个向量计算loss.(这个N维向量一般是一个全连接层(线性层)的输出,是模型对于每个类别的打分。)
- 计算方法:向量的每个分量和正确分类的分量比较,如果差的不多甚至超过(说明有混淆),则在loss中反映出来。在下面的公式中,
i
i
i是正确的类别,
t
t
t是阈值(一般为1,或是某个计算出来的平均值)。
J h i n g e = ∑ j = 1 , j ≠ i N m a x ( 0 , s j − s i + t ) J_{hinge} = \sum_{j=1, j\neq i}^{N}max(0, s_j - s_i + t) Jhinge=j=1,j=i∑Nmax(0,sj−si+t)
softmax loss
- 应用场景:N分类问题
- loss输入:模型输出一个N维向量,为模型预测的分类概率。
- 计算方法:
J s o f t m a x = − l o g P ( i ∣ m o d e l ) J_{softmax} = -logP(i|model) Jsoftmax=−logP(i∣model)
cross entropy loss
- 应用场景:在自然语言中很常用
- loss输入:模型输出一个N维向量q,即模型预测的分布(分布律)。但是实际上的分布是N维向量p.
- 计算方法:
J c r o s s _ e n t r o p y = − ∑ i = 1 N p i l o g q i J_{cross\_entropy} = -\sum_{i=1}^{N}p_ilogq_i Jcross_entropy=−i=1∑Npilogqi
有的时候也会使用困惑度作为loss
J
c
r
o
s
s
_
e
n
t
r
o
p
y
=
2
J
c
r
o
s
s
_
e
n
t
r
o
p
y
J_{cross\_entropy} = 2^{J_{cross\_entropy} }
Jcross_entropy=2Jcross_entropy
L1正则项
- 正则项又叫做罚项,是为了限制模型的参数过度地往同一个方向发展,从而导致模型过拟合,而加在损失函数后面的一项。
- 计算:所有参数的线性和/加权线性和。
- 如果所有参数都位于同一量度,那么可以直接线性和;如果有的参数和其他参数量度不同(比如分布不同,均值的差距太大)(这可能是因为输入没有标准化导致的),那就乘以一个线性系数。
- L1会趋向于产生少量的特征,而其他的特征都是0.这样可以提取出较少的特征。图像解释:因为L1范数在平面坐标系的单位圆是菱形的,有向四个坐标轴突出的迹象,所以趋向于产生少量的值较大的特征。
- 如果样本原本的分布符合Laplace分布,那么推荐使用L1正则项。
L2正则项
- 计算:所有参数的平方和/加权平方和。
- L2产生的特征数比L1多,但是都是接近于0的。图像解释:因为L2范数在平面坐标系的单位圆是圆,在各个方向的扩展比较均匀,所以趋向于产生大量的值较小的特征。
- 如果样本原本的分布符合Gauss分布,那么推荐使用L2正则项。