损失函数度量的是训练的模型与真实模型之间的距离。一般以最小化损失函数为目标,对模型进行不断优化。
常见的损失函数在计算过程中都会接受两个参数:模型预测值y_pred
和正确答案y_true
。
由于背后的数学计算过程相同,所以即使是不同深度学习框架这些损失函数的api也是大同小异。本文以keras为例,罗列出几个常见的损失函数。
均方误差 mean squared error, MSE
回归任务常用的损失函数,也是最简单粗暴的损失函数。
loss = mean(square(y_true - y_pred), axis=-1)
api: keras.losses.mean_squared_error(y_true, y_pred)
平均绝对误差 mean absolute error, MAE
loss = abs(y_true - y_pred)
api: keras.losses.mean_absolute_error(y_true, y_pred)
mean absolute percentage error
没了解过,先记着。
loss = 100 * abs(y_true - y_pred) / y_true
api:keras.losses.mean_absolute_percentage_error(y_true, y_pred)
hinge loss
合页损失函数
loss = mean(maximum(1 - y_true * y_pred, 0), axis=-1)
api: keras.losses.hinge(y_true, y_pred)
相对熵 Kullback-Leibler divergence, KL散度
loss = y_true * log(y_true / y_pred)
api: keras.losses.KLD()
sparse categorical crossentropy
稀疏的类别交叉熵,主要用于多分类。
其中y_pred是一般是未经处理的logits,当然也可以是softmax归一化后的概率分布(keras默认)
y_true是标签
categorical crossentropy
类别交叉熵,和sparse categorical crossentropy唯一的区别就是,这里的y_true是one-hot形式
binary_crossentropy 二元交叉熵
对于二分类的问题,多分类的交叉熵直接使用二元交叉熵
api:keras.losses.binary_crossentropy(y_true, y_pred, from_logits=False, label_smoothing=0)
余弦相似度
余弦相似度是两个向量的夹角的余弦值。
一般计算方法为:
\[cosine\_similarity = \frac{a \cdot b}{||a|| ||b||} \]
keras计算的时候,会把上式拆成两个l2_norm的相乘:
loss = -sum(l2_norm(y_true) * l2_norm(y_pred))
这里的l2_norm
就是
\[l2\_norm(x) = \frac{x}{max(\sum_i x_i^2, epsilon)} \]
epsilon就是为了避免向量的元素和为0
api: keras.losses.cosine_similarity(y_true, y_pred, axis=-1)
keras把计算的值取负了,这样越接近-1相似度越高。