均方误差
均方误差(mean square error, MSE)是原始 BP 算法中使用的损失函数,就是将预测值与目标值的差求平方,之后再平均。以下是公式:
ℓ
=
1
m
∥
Y
^
[
k
]
−
Y
[
k
]
∥
2
2
\ell=\frac{1}{m}{\left\|\widehat Y^{[k]}-Y^{[k]}\right\|_2}^2
ℓ=m1∥
∥Y
[k]−Y[k]∥
∥22
ℓ
\ell
ℓ 为损失值,
Y
^
\widehat Y
Y
和
Y
Y
Y 分别为特征值向量(此处不是指矩阵论中的特征向量,是指向网络输入层输入的向量)的预测值向量和目标值向量,
m
m
m 为以上两个向量的维度。
MSE 至今仍是回归模型常用的损失函数。
交叉熵
我们已经知道,在分类模型中常常使用 Softmax 作为输出层的激活函数。Softmax 输出的是一组概率值,目标值是一个独热码,数值范围为
[
0
,
1
]
[0,1]
[0,1]。如果使用 MSE 作为损失函数,那么损失值就是一组
−
1
-1
−1 到
1
1
1 的数先平方再求平均,即损失值是一个
0
0
0 到
1
1
1 的数,损失值的下降空间太过狭小且反向传播求出的梯度值也小,模型收敛速度慢。
这时我们可以考虑
−
ln
x
-\ln x
−lnx 函数,它可以把
[
0
,
1
]
[0, 1]
[0,1] 映射到
[
0
,
∞
]
[0, \infty]
[0,∞],且其导函数导得值域也大。值得注意的是,当对
−
ln
x
-\ln x
−lnx 使用梯度下降时,会使
x
x
x 从
0
0
0 向
1
1
1 靠近。所以我们只能对目标值向量中分量为
1
1
1 的应用
−
ln
x
-\ln x
−lnx 。基于以上,我们常使用交叉熵(cross entropy, CE)来作为分类模型的损失函数,其表达式如下:
ℓ
=
−
∑
j
=
1
m
y
j
⋅
ln
y
^
j
\ell=-\sum_{j=1}^{m}{y_j\cdot \ln{\widehat y_j}}
ℓ=−j=1∑myj⋅lny
j
ℓ
\ell
ℓ 为损失值,
y
^
j
\widehat y_j
y
j 和
y
j
y_j
yj 分别为特征值向量的预测值向量与目标值向量的第
j
j
j 个分量,
m
m
m 为以上两个向量的维度。
在实际应用中,Softmax 与 CE 是搭配使用的。
自定义函数
我们都知道神经网的预测是一个向量,目标也是一个向量。我们可以在损失函数中为不同的分量配置不同的误差代价,这样代价高的分量会有更高的收敛强度,神经网路就会被推动着向着某一自定义的方向学习。