outline
- 神经元与神经网络
- 激活函数
- 前向算法
- 损失函数
- 反向传播算法
- 数据的准备
- PyTorch实例:单层神经网络实现
3.4 损失函数
损失函数又称为代价函数,是一个非负的实值函数,通常用表示。损失函数用来量化在训练过程中网络输出和真实目标间的差距。确定神经网络最佳状态相当于寻找使损失最小的神经网络参数,这样一来,损失函数的出现使网络的训练变成一个优化问题。
对数据集中所有的预测误差求平均,称为经验风险函数。经验风险并不是越小越好,比如模型复杂度过高会产生过拟合现象,这个时候经验风险是很小的,但过拟合的模型并不是我们想要的结果。
这里引入正则化的概念。正则化也叫结构风险,用来表示模型的复杂度。
我们把经验风险和结构风险的和称为目标函数。神经网络训练的最终目标就是寻找最佳的参数,使目标函数最小。
损失函数通常可分为两类,分别用于回归和分类任务。
3.4.1 回归问题
在回归中常用的损失函数是均方差损失(Mean Squared Error, MSE)
对于多输出的回归,MSE的公式为:
MSE在回归中使用很广泛,但是它对异常值很敏感,在特定的任务中有时不需要考虑异常值(比方说股票的选择中需要考虑异常值,但是在买房的时候就不需要过多考虑),这时就需要一个损失函数,更关注中位数而不是平均数。这时可以选择平均绝对误差(Mean Absolute Error, MAE),其公式如下:
3.4.2 分类问题
- 0-1问题(一般用-1代替0),可以使用铰链损失(hinge loss)
- 多分类可以转二分类表示:每次只考虑是否属于某一个特定的类别
- 对于预测属于某一类别概率的问题,可以使用负对数似然函数
- 我们把问题从二分类扩展到多分类上,用one-hot编码表示类别的预测结果:属于该类别的为1,其他的全为0,公式如下:
从形式上看这个函数恰好是交叉熵的形式,因此负对数似然损失函数又叫交叉熵函数。交叉熵是不确定性信息的一种度量,在这里交叉熵用来衡量我们学习到和真实的目标值y的不确定性。对于所有的输入,如果每个结果都接近目标值,也就是和近似相等,则这个交叉熵为0,反之,输出结果离目标值越远交叉熵就越大。
有用就留个赞吧^_^