机器通过损失函数学习。这是一种评估特定算法对给定数据建模程度的方法。如果预测值与实际结果相差甚远,损失函数将得到非常大的值。在一些优化函数的帮助下,损失函数逐渐学会减少预测值的误差。本文将介绍几种损失函数及其在机器学习和深度学习领域的应用。损失函数和优化对于所有的机器学习算法,都没有一种放之四海而皆准的损失函数。为特定问题选择损失函数涉及许多因素,例如所选机器学习算法的类型、计算导数的难易程度以及数据集中异常值的比例。从学习任务的类型出发,损失函数可以大致分为两类——回归损失和分类损失。在分类任务中,我们希望预测具有有限类别值的数据集的输出,例如给定一个大型手写数字图像数据集,将其分类为0-9之一。回归问题处理连续值的预测,例如根据房屋的面积、房间数量和房间大小预测房屋的价格。NOTen-Numberoftrainingexamples.i-ithtrainingexampleinadataset.y(i)-Groundtruthlabelforithtrainingexample.y_hat(i)-Predictionforithtrainingexample。回归损失1.均方误差/平方损失/L2损失数学公式:均方误差顾名思义,均方误差(MSE)指标是预测值与观测值之差的平方的平均值。它只考虑误差的平均大小,而不考虑误差的方向。但是由于平方,与真实值偏差较大的预测比偏差较小的预测受到更严重的惩罚。再加上MSE良好的数学特性,这使得计算梯度变得更加容易。importnumpyasnpy_hat=np.array([0.000,0.166,0.333])y_true=np.array([0.000,0.254,0.998])defrmse(预测,目标):differences=predictions-targetsdifferencesdifferences_squared=differences**2mean_of_differences_squared=differences.squared.)rmse_val=np.sqrt(mean_of_differences_squared)返回rmse_valprint("dis:"+str(["%.8f"%elemforeleminy_hat]))print("pis:"+str(["%.8f"%elemforeleminy_true]))rmsermse_val=rmse(y_hat,y_true)print("rmserroris:"+str(rmse_val))2。Meanabsoluteerror/L1loss数学公式:meanabsoluteerrormeanabsoluteerror(MAE)衡量的是预测值与实际观测值之差的均值绝对差之和。与MSE一样,该指标也衡量错误的大小,与方向无关。但与MSE不同的是,MAE需要更复杂的工具,如线性规划来计算梯度。此外,MAE对异常值更稳健,因为它不使用平方。importnumpyasnpy_hat=np.array([0.000,0.166,0.333])y_true=np.array([0.000,0.254,0.998])print("dis:"+str(["%.8f"%elemforeleminy_hat]))print("pis:"+str(["%.8f"%elemforeleminy_true]))defmae(预测,目标):differences=predictions-targetsabsolute_differences=np.y_true)print("maeeroris:"+str(mae_val))3.meanbiaserror与其他损失函数相比,这个函数在机器学习领域并不是那么常见。它与MAE类似,唯一的区别是该函数不使用绝对值。使用此函数需要注意的一件事是,正误差和负误差可以相互抵消。虽然在实践中不太准确,但它可以确定模型是正偏还是负偏。数学公式:averagedeviationerror2.Classificationloss1.HingeLoss/Multi-classificationSVMloss简而言之,在一定的安全区间内(通常为1),正确类别的得分应该高于所有类别的得分之和错误的类别。因此,hingeloss常用于maximum-margin分类,最常用的是支持向量机。虽然不可微,但它是一个凸函数,因此可以很容易地与机器学习领域常用的凸优化器一起使用。数学公式:SVM损失(HingeLoss)考虑下面的例子,我们有三个训练样本,我们要预测三个类别(狗,猫和马)。下面是我们算法预测的每一类的值:Hingeloss/Multi-classificationSVMloss计算这3个训练样本的hingeloss:##1sttrainingexamplemax(0,(1.49)-(-0.39)+1)+max(0,(4.21)-(-0.39)+1)max(0,2.88)+max(0,5.6)2.88+5.68.48(高损失是非常错误的预测)##2ndtrainingexamplemax(0,(-4.61)-(3.28)+1)+max(0,(1.46)-(3.28)+1)max(0,-6.89)+max(0,-0.82)0+00(Zerolossascorrectprediction)##3rdtrainingexamplemax(0,(1.03)-(-2.27)+1)+max(0,(-2.37)-(-2.27)+1)max(0,4.3)+max(0,0.9)4.3+0.95.2(Highlossasverywrongprediction)交叉熵损失/负对数似然:这是分类问题中最常见的设置。随着预测概率偏离实际标签,交叉熵损失逐渐增加。数学公式:crossentropyloss注意当实际标签为1(y(i)=1)时,函数后半部分消失,当实际标签为0(y(i=0))时,前半部分消失功能部分消失。简而言之,我们只是将真实类别的实际预测概率的对数相乘。同样重要的是要注意,交叉熵损失将严重惩罚那些具有高置信度但错误的预测。importnumpyasnppredictions=np.array([[0.25,0.25,0.25,0.25],[0.01,0.01,0.01,0.96]])targets=np.array([[0,0,0,1],[0,0,0,1]])defcross_entropy(预测,目标,epsilon=1e-10):predictions=np.clip(预测,epsilon,1.-epsilon)N=predictions.shape[0]ce_loss=-np.sum(np.sum(targets*np.log(predictions+1e-5)))/Nreturnce_losscross_entropycross_entropy_loss=cross_entropy(predictions,targets)print("Crossentropylossis:"+str(cross_entropy_loss))文章微信公众号《机器之心》(id:almosthuman2014)"]点此查看该作者更多好文
