损失函数作为深度学习中最重要的一部分,有必要花时间好好学习和理解一下。
本系列从基础开始,梳理各个损失函数的概念和原理。
损失函数是什么
简单来说,损失函数是用来就是用来衡量真实值与预测值之间的差距的一个工具。
如图所示,蓝色实线是真实结果的走向,黑色空心圆圈代表预测值,红色虚线代表预测值与真实值之间的差距。
用小学数学来思考,如何描述a和b两个值之间的差距呢?
自然就是 L = a − b L = a - b L=a−b 。这就是一个简单的损失函数, L L L就表示 a a a 和 b b b 之间的损失。
在一个完整的深度网络训练任务中,训练的本质就是通过不断优化(最小化)损失函数,使得损失尽可能小,以达到较好的预测水平。
平均绝对误差(MAE)
但是在深度学习中,损失函数的最终归宿是通过优化方法对其最小化,所以我们要保证损失函数的非负性,如果损失可以为负,那么最小化就无止无尽了。
很自然的我们就想到为损失函数添加一个绝对值保证其非负性: L = ∣ a − b ∣ L = |a-b| L=∣a−b∣。对所有预测值的的损失求平均即 M A E = ∑ i = 1 n ∣ a i − b i ∣ n , a i ∈ A b i ∈ B MAE = \frac{\sum^n_{i = 1}|a_i - b_i|}{n}, a_i \in A\ b_i \in B MAE=n∑i=1n∣ai−bi∣,ai∈A bi∈B 这就是平均绝对误差。
其函数图像如下:
a = [x for x in range(-1000,1000)]
b = [np.abs(x-100) for x in a]
plt.plot(a,b)
plt.title('MAE Loss(real value 100)')
plt.xlabel('Prediction')
plt.ylabel('MAE Loss Value')
均方误差(MSE)
在实际应用中发现,我们更希望突出那些损失值较大的部分,在优化过程中对其给予更多地惩罚。通俗来讲,就是让损失大的更大,小的更小。
为了实现这种效果我们可以将绝对值换成平方,即 M S E = ∑ i = 1 n ( a i − b i ) 2 n , a i ∈ A b i ∈ B MSE = \frac{\sum^n_{i = 1}(a_i - b_i)^2}{n}, a_i \in A\ b_i \in B MSE=n∑i=1n(ai−bi)2,ai∈A bi∈B 。
函数图像如下:
a = [x for x in range(-1000,1000)]
b = [(x-100)**2 for x in a]
plt.plot(a,b)
plt.title('MSE Loss(real value 100)')
plt.xlabel('Prediction')
plt.ylabel('MSE Loss Value')
以上内容均为作者学习心得,若有错误请批评指正,欢迎各位评论交流!转载请注明出处!