损失函数
一、定义
在深度学习中,损失函数是用来衡量一组参数的质量的函数,衡量的方式是比较网络输出和真实输出的差异。
二、命名
损失函数 loss function = 代价函数cost function
=目标函数objective function = 误差函数error function
他们的含义是一样的
也有的资料中用损失函数指单个数据的偏差,用代价函数指整体数据的偏差。
三、损失函数的作用
损失函数用来指导训练过程,使得网络的参数向损失降低的方向改变。
3.1 训练方法
随机梯度下降法Stochastic gradient descent.
- 试图找到一组参数使得损失函数的值越小越好.
- 调整参数的大小和方向取决于损失函数相对于参数的偏导数:
3.2 损失函数的选取原则
- (1)最小值(0):当网络的输出和真实输出一致
- (2)当输出和真实输出越不–致时值越大
- (3)理想情况→convex凸函数,实际上→not convex非凸函数
- (4)需要根据输出的变化而平滑的变化
- (5)需要可导(SGD优化)
- (6)需要容易求导
四、常用的损失函数
不同的任务类型需要不同的损失函数:
4.1 回归Regression问题
网络输出一个连续的数值:例如:预测一栋房屋的价值
损失函数:绝对值误差,平方差
绝对误差函数Absolute value, L1-norm |
---|
因为导数一样,离真值的远近不换导致其导数变化
方差函数Square error, Euclidean loss,L2-norm |
---|
因为离真值的越远,导致其导数越大
4.2 分类Classification问题
网络的输出为一个类别,从预定义的一组类别中的一个
实例:判断邮件是否是垃圾邮件.
损失函数: hinge loss, Cross-entropy loss
如何设计损失函数? |
---|
4.2.1 单label问题
- 将真实的唯一输出编码为一个向量→独热编码One-hot encoding
- 非概率的解释→hingeloss
- 概率解释:将输出转换为概率函数→Softmax,概率的值范围为0.0到1.0,属于所有类别的概率之和为1.0。
Cross-entropy loss |
---|
4.2.2 多label问题
输出属于多个类别中的一个或者多个类,例如一副包含猫咪的图像可以同时属于“猫” ,“哺乳动物” ,“宠物”
- 对每一个输出独立使用
Sigmoid激活函数
,不使用softmax
总结: