那些回归问题的损失函数(一)

最近这几天想要尝试用markdown写写数学公式放到文章中,记录一下一些算法、模型背后的数学形式和推导。但苦于本人实在是有点懒,发现输入公式是一件非常费时的事情,索性就走另外一个极端,尝试不使用公式讲讲那些看起来复杂公式背后朴素的逻辑。所以就把【笔记】系列,改成【就是不想写公式】系列。



昨天讲统计学习三要素(模型、策略、算法)算是【就是不想写公式】的第一篇吧,那今天就是第二篇,说说统计学习三要素中的策略,更明确的说是损失函数,在细分一下就是回归问题的损失函数。


首先回归问题是什么?其实这个名字一点都不直观,根本不像他所对应的分类问题一样,从名字就知道到底是干什么的。回归问题要解决的就是预测一个值,而不是类别。就比如说预测你的工资是多少,你可能会有几个女朋友,或者是明天的股票涨到多少点。这种要预测一个具体的数值的问题就是回归问题。


那损失函数呢表示的就是你的预测与实际真实值的差异,比如你可能每个月赚3万,我只预测你能赚3千,那这两个值差的就太大了,明显预测的不准。损失函数就是这么一个标尺来衡量这个不准到了什么程度。训练模型的目的呢就是想办法让这个预测和真实值之间的差异越小越好。


那这个标尺的选择可就大有讲究了,就好比皮尺和钢尺,虽然都能量出距离,但在具体场景下选择皮尺和钢尺就会测量出不同的距离,从而影响到最后的判断。就比如说,你想测笔记本上一条线段的长度,那自然钢尺最好,皮尺你不一定能把两端拉的那么紧。但如果要测一下腰围,钢尺就不行了,你拿着钢尺绕腰一周量出来的尺寸,买到的裤子肯定不合适。所以最好的办法就是有很多把不同的尺子,在最适合的场景下去选择不同的尺子。


那机器学习中也就有了不同的尺子,用来衡量回归问题中,预测值和真实值的差异。


今天就讲两个最最直观的“尺子”,平方损失函数和绝对值损失函数。


两个值的差距,最最直观的方法就是两个值相减。我体重150,你体重180,咱两的体重差距只要一减就得到了,差30斤。但其实无论我体重是150,还是210,都是和你差三十斤,但如果直接减的话就会有一个正负的问题。所以就有了平方和绝对值,这两个东西的作用就是通过一种操作把相差的正负号给去掉。表达的就是无论是我比你重30斤还是轻30斤,咱们之间都是相差30斤。


虽然都是处理正负的问题,但平方和绝对值的处理方式还是有差异的。首先直观的感受就是平方会放大差异,尤其是那些与真实值差别特别大的样本,平方之后差距就会特别的大,从而影响到你对整体变差的判断。


就比如说我预测你的考试成绩,本来你的成绩都挺稳定的都是80~90分,那我的预测值也会在这个附近。但突然有一次你拉肚子了,严重影响了考试状态,本来可能可以考87分的,结果只考了20。那我按照正常来预测你考了85分,这一下子中间就差了65分,然后我再做一个平方4225。而如果你不拉肚子发挥正常,这个中间的平方差就只有4。4和4225差距非常的大,所以用平方的方法会放大异常值对于模型的影响,本来还是挺不错的模型,因为样本中的异常值,就直接显得不那么好了。


相比起来绝对值就好多了,就不会过于放大异常值带来的影响。


但绝对值也有自己不好的地方,就是他曲线上各个点的斜率都是一样的,也就是梯度是一样的。这也会导致一个问题,就是优化的时候没有办法更新梯度,参数移动的步长就是固定的,不适合找到最优解。


这个可能有点不太好理解。可以这么想象,就好比打高尔夫球,当你距离球洞远的时候,就用大杆子用力猛打,尽可能的大的远以尽快接近球洞。而到了近的地方呢,就用小杆子轻轻打,即使错过了球洞也不要跑的太远。而这个球洞呢就是我们要找到的最优解,而打高尔夫球的力度呢,受到梯度的影响。


如果是平方差损失函数,那优化起来就和咱们正常打高尔夫球的思路是一样的,距离远的时候就猛打让球飞远点,距离近的时候呢就轻轻打,越近就越轻,这样最终就很容易落到洞里了。


而绝对值损失函数就不行了,他就有个奇葩打高尔夫球的习惯,就是每一杆我都用相同的力度打。那这就有问题了,远的时候你走的很慢,要打好多杆才能接近球洞。而近的时候呢你力度又太大了,你很有可能就在这个球洞的左右,左右来回打,怎么也近不了洞里。


平方差损失函数和绝对值损失函数都是基于一个最最朴素的想法,就是让你的预测值和真实值相减,只不过两者使用了不同的处理方式来解决正负差值的问题。当然也因为这不同的方法也就带来了不同的问题,一个呢对于异常过于敏感,一个呢优化起来又过于古板。那有么有解决两者问题的损失函数呢?当然有,下回说Huber损失。 


END

作者:锅哥不姓郭

   

那些回归问题的损失函数(一)》来自互联网,仅为收藏学习,如侵权请联系删除。本文URL:http://www.bookhoes.com/1365.html