1、前言
损失函数(Loss function)或者代价函数(Cost function)是用来估量你模型的预测值 $f(x)$ 与真实值 Y 的不一致程度,也就是当前W取值下的不理想程度。它是一个非负实值函数,通常用 $L(Y,f(x))$ 来表示。损失函数越小,模型的鲁棒性就越好。损失函数(一次预测好坏)是经验风险函数(平均意义下模型好坏)的核心部分,也是结构风险函数的重要组成部分。
一些资源:CS231n 2016 通关 第三章-SVM与Softmax
2、损失函数
2.1 0-1 Loss
分类错误时损失为1,分类正确
2.2 Hinge Loss
折页损失,也称铰链损失,常用于SVM最大间隔法中。将所有不正确分类得分与正确类别(标签)得分之差加1,再与0比较,取最大值求和。1为安全系数,当然可以任意设置,W成比例缩放,损失也会成比例变化,所以分数与W的度量相关。
问题1:如果在求loss时,允许j=y_i会怎么样?(L加1)
问题2:如果对1个样本做loss时使用对loss做平均,而不是求和,会怎样?(损失绝对值减小,相当于sum乘以常系数,问题1,2均不会影响最终的W)
问题3:若取平方会怎么样?(这其实是二次的hinge loss,在某些情况下会使用。并且某些情况下结果比一次的hinge loss更好,此处使用一次形式。)
问题4:hinge loss的最大最小损失是多少?(0,无穷大)
问题5:通常会以较小较小的值初始化参数w,此时得到的scores接近于0,那么这时候的loss是?(此时正确score与错误score的差接近于0,对于N类,loss的结果是N-1。)
存在的问题:若w是损失函数为0,w按比例变化,损失函数值不变。
解决办法:引入正则项,对损失函数进行约束$R(w)$,$R(w)$可以衡量w的好坏,因此不仅要求更好的拟合数据,也希望优化w, 同时可以防止过拟合,使得在测试集上效果更好。
常见的正则项有:
L2正则项:
L1正则项:
弹性网络(Elastic Net)L1+L2:
max-norm regularization:
Dropout:
加入正则,对w进行约束,常用的正则有L1、L2。,L1趋于选取稀疏的参数,起到特征选择的作用L2趋于选取数值较小且离散的参数,尽可能的考虑的大部分特征。SVM目标函数即:L2 + hinge loss
2.3 Softmax Loss
在逻辑回归的推导中,它假设样本服从伯努利分布(0-1分布),然后求得满足该分布的似然函数,接着取对数求极值等等。而逻辑回归并没有求似然函数的极值,而是把极大化当做是一种思想,进而推导出它的经验风险函数为:最小化负的似然函数,softmax只是其在多维上的推广,适用于多分类。
得分函数f(x, w)的值score看作是未标准化的对数概率,于是得到每一类的未标准化概率为$e^score$,进一步标准化得到0-1之间的概率,且所以的概率之和为1.大的score代表此score对应图像属于的某一个class的概率大。该函数就是softmax函数:
我们要是正确类别对数概率最大,根据损失函数,要是负的正确分类概率最小。
使用似然估计作为loss,本来是似然估计越大越好,但通常loss使用越小时更直观:
即最终表达式:
问题1:损失函数最大值最小值?(0,无穷)
问题2:初始化w为很小值时,损失值?($-log{\frac{1}{CLASSES}}$)
softmax与SVM的区别:SVM只考虑支持向量对分类结果的影响,softmax考虑所有数据对结果的影响。
2.5 Absolute Loss
常用于回归任务中。
2.5 Square Loss
或者均方误差(MSE),常用于回归任务中。
2.6 Exponential Loss
指数损失常用于boosting算法中。
3、最优化
学习就是个最优化问题,不断更新w,使得损失最小。
3.1 最朴素的思想:随机搜索
计算量大,效果不行,不可取。
3.2 梯度下降
一维函数梯度:
梯度检验:,计算梯度的方式有两种:数值梯度(numerical gradient)、解析梯度(analytic gradient)。
数值梯度:根据公式右边计算,优点是容易编程实现,不要求函数可微,然而,缺点也很明显,通常是近似解,同时求解速度很慢,针对多维数据,需反复计算求每一维的梯度值。因此在设计机器学习目标函数时,通常设计成可微的函数,可以快速地通过微积分求解其解析梯度,同时这个梯度是确切解。
解析梯度:通过微积分公式直接对损失函数求导进行计算,无需反复计算,效率高,但易出错,毕竟涉及复杂数学问题。
梯度下降(BGD)、随机梯度下降(SGD)、Mini-batch Gradient Descent、带Mini-batch的SGD
梯度下降(BGD):通过梯度的负值 * 步长一点一点更新w值,使得损失减少。步长也叫学习率,是一个非常重要的超参数(手工设置,模型不能学)。基于全部数据更新参数,得到全局最优解。
随机梯度下降(SGD):训练集中随机选取一个样本,更新参数,局部最优解。通常batch_size大小根据GPU内存大小设置。
小批量批梯度下降 (mini-batch GD):训练集中,选取小批量数据更新参数。
小批量随机梯度下降(mini-batch SGD):上述两者的结合。