![深度学习实战](https://wfqqreader-1252317822.image.myqcloud.com/cover/852/26793852/b_26793852.jpg)
2.2 代价函数
机器学习中绝大多数任务都是优化任务,也就是去寻找最优解。对应到函数中,就是寻找函数极值。但这其中就存在一个很困难的问题,局部最优解。传统的机器学习大多是针对凸优化问题,也就是函数可以找到最大值或最小值,但很不幸,由于深度学习构造的函数非常复杂(模型容量大),因此深度学习会存在很多局部最优解(数据高维时鞍点更普遍),这也是深度学习所面临的最困难的挑战之一,为此我们也将在第5章中专门地介绍深度学习的优化技术。
绝大多数机器学习算法学习的过程,其实就是在调整数据特征的重要性,我们将这种刻画重要性的量称之为参数或权重,参数控制着机器学习系统的行为,而我们要做的其实就是找到一组最优的参数。我们可以把机器学习算法简单地想成一个函数fω(x),ω表示函数的参数,x表示我们输入的数据,fω(x)可以是简单的线性回归算法,如式(2.3)所示。
![](https://epubservercos.yuewen.com/519974/15253389704123506/epubprivate/OEBPS/Images/45_1.jpg?sign=1738830630-1F9SCwOykKQu68VjG7fgSyTOPWEELonS-0-e3033cab887244f5bdbe971671dfe89d)
也可以是层层嵌套的深度学习算法,如式(2.4)所示。
![](https://epubservercos.yuewen.com/519974/15253389704123506/epubprivate/OEBPS/Images/45_2.jpg?sign=1738830630-l668U1zhKuuuxVIRaafqxIgx684cBEBp-0-a87a41f30d63e158135814a85f814402)
暂不考虑其内部结构,我们的目的就是尽可能地让我们设计的函数尽可能的“好”。而所谓的“好”就是机器学习算法的预测值与实际值之间的误差尽可能的低,我们也将衡量这种误差的函数称之为代价函数(Cost Function)或者损失函数(Loss Function)。
2.2.1 均方误差函数
假设需要完成一个房屋价格预测任务,我们需要输入房屋面积、户型、位置等特征,输出为房屋价格预测。我们用集合X={x(1),x(2),…x(m)}表示已有的m条房屋信息(数据),用集合Y={y(1),y(2),…y(m)}表示对应的实际售出价格。并且我们也设计好了机器学习算法f(x;w),而你需要做的是,思考一下如何设计我们的代价函数。你能想到最简单的代价函数会是什么呢?比如式(2.5)这样一个简单的代价函数。
![](https://epubservercos.yuewen.com/519974/15253389704123506/epubprivate/OEBPS/Images/Figure-P46_12260.jpg?sign=1738830630-ybmNSJFkzcpmtfuGV4DhgX1PGmBsVJ0w-0-0106248b0d625cf3a5bee37cca063dc2)
你能看出式(2.5)表示什么意思吗?其实很简单,就是把每一个预测的房屋价格与真实的房屋价格相减,因为我们只关心两者的误差于是就加了一个绝对值,然后将所得的误差累加起来就得到上面的公式了。
假如你去预测房屋的价格,你又怎样评价自己误差呢?你会不会这样想“有些预测非常准确,有些预测比较差,但平均下来还是挺不错的。”自然而然,我们去估算一堆事物的好坏,也总是使用平均值,用统计学的术语就叫期望值,我们再稍稍修改式(2.5)中的代价函数就得到了式(2.6)。
![](https://epubservercos.yuewen.com/519974/15253389704123506/epubprivate/OEBPS/Images/Figure-P46_12261.jpg?sign=1738830630-x2HbGsGyQosJMtYeYkZ59b0P0J2LGN2e-0-801645d77e9529b0a27edbf3ba308cde)
式(2.6)已经足够优秀了,但有一个缺点,那就是有绝对值,因为绝对值不连续也不能处处可导,那么怎样既不破坏我们近乎完美的设计,又可以去掉绝对值呢?我猜你5秒钟内就会想到,可以对其求平方,如式(2.7)所示。
![](https://epubservercos.yuewen.com/519974/15253389704123506/epubprivate/OEBPS/Images/Figure-P46_12262.jpg?sign=1738830630-v8qbRoURSlzDV0lbjVoQpQJBPXLyhh4A-0-c89d264295362bf82b30b25c9c6a1ca2)
就是如此简单,我们轻松地设计出了第一个代价函数,但请你不要误会,式(2.7)代价函数可是大名鼎鼎的均方误差(Mean Squared Error)[5]。
看完以上式的推导,不知道你有何感想,其实这些式只是我们各种想法的简化描述,看到式(2.7)会不会有一种豁然开朗的感觉,我们需要用一堆文字描述的思想,只需一行表达式就可以完成。开始时希望你不要急躁,如果对这一过程有些不懂,再折回去慢慢体会这一过程也是个不错的选择。请记住这些式来帮助你记忆并理解上文中的内容,不是你的负担。这些式并不重要,重要的是其所表示的含义。
2.2.2 极大似然估计
“阳光正热,才过午后,学徒小飞沏了一杯下午茶,准备躺在竹摇椅上享受一番。不料杨师傅一记闷拳敲在了头上,小飞顿时头晕眼花,抱头嚎叫。‘劣徒,你还有没有梦想?快和为师上山打猎。’两人走到半山腰,发现了一只小兔子,于是两人同时举起了枪,小白兔就倒在了血泊中。”那么问题来了,是谁残忍地杀害了小白兔?
如果大侠没开脑洞,正常情况下应该会选择杨师傅吧,也许你觉得你的选择很正常没什么奇怪的,但其实你已经用到了极大似然的思想。那“似然”又具体指什么呢?似然(likelihood)是一种较为文言文的翻译,我们脱去其外衣可能看得比较清楚。“似然”用现代的中文来说就是“可能性”,所以极大似然,通俗点就是最大的可能性。我们选择杨师傅的原因是因为杨师傅帅吗?当然不是,那是因为杨师傅是“老炮”,他的枪法准,射中的可能性更大。
回到生活中,我们几乎处处都在使用“极大似然”,很多时候我们没机会,也没能力去探究事物的真相,我们最简单也是最高效的方法就是去估计。当你去找工作时,别人很有可能会问你,你来自哪所学校?你的文凭如何?你得过什么奖?记住,任何指标都不能确认你是一个多么优秀的人,指标只能确定你是优秀人才的可能性。
在继续讨论“极大似然”之前,我们要补充机器学习中非常重要的一个假设,那就是数据独立同分布(independent and identically distributed,i.i.d.)条件。独立同分布假设数据与数据是独立的,就比如信用卡发放任务中,每一张用户填写的表格是相互独立的,但该任务的所有数据又都来自于同一个概率分布函数,这就使得我们模拟出已知数据的概率分布模型,同样也可以运用在未来的任务中。有了i.i.d.条件,就可以构造极大似然估计。
我们依然给出一个概率函数P(y|x;w),为了方便,概率函数只进行了二分类,也就是输出“0”或“1”。那么如何去判断P(y|x;w)的好坏呢?很简单,那就是该概率函数在已有的数据上发生的概率最高,考虑到数据是相互独立的,因此可以对每一条数据对应的概率函数进行求积,就得到了式(2.8)。
![](https://epubservercos.yuewen.com/519974/15253389704123506/epubprivate/OEBPS/Images/Figure-P47_12264.jpg?sign=1738830630-n7fNNbmneZlUAGKhwiG94bkFa0cXayGg-0-ff607e9004042037b2b6efad9218b1cf)
这个函数就称为似然函数,而我们求出该函数取得最大值时所对应的参数,也就是极大似然估计(Maximum Likelihood Estimate)[6]。
但问题在于,求连积是很困难的,不但耗费计算资源,令人头疼的是还非常容易造成内存下溢出。那我们能不能将乘法改成加法呢?可以使用对数函数将乘法转换为加法。如式(2.9)就是对数运算的基本公式之一。
![](https://epubservercos.yuewen.com/519974/15253389704123506/epubprivate/OEBPS/Images/Figure-P47_12266.jpg?sign=1738830630-915dRFBlR8EafuZRekP9xtcZEhVtOTmf-0-6167bd3dd366c35d12e027ad1d3a433a)
根据式(2.8)和(2.9),我们对似然函数取自然对数就得到了式(2.10)。
![](https://epubservercos.yuewen.com/519974/15253389704123506/epubprivate/OEBPS/Images/Figure-P47_12268.jpg?sign=1738830630-yOEV8LrBsoIGSJ5peoAioPKojcVv90Zy-0-635cb6107130c2e7ab117152713e7e9e)
在习惯上,我们比较喜欢求最小值、平均值,因此式(2.10)就变成了式(2.11)。
![](https://epubservercos.yuewen.com/519974/15253389704123506/epubprivate/OEBPS/Images/Figure-P47_12269.jpg?sign=1738830630-mfvc5I0Fq7xQTv9Hr8EgKicebkLkRmZI-0-c2fcd740b44f0215d8bc2c3c5e472bec)
假设机器学习算法f(x)就是概率函数P(y|x),需要注意的是如果真实的标记y是“0”,那么预测的f(x)也应该接近于“0”,但公式又不允许“0”出现,因此在真实值为“0”时,预测值用1-f(x)代替。最后代价函数就如式(2.12)所示。
![](https://epubservercos.yuewen.com/519974/15253389704123506/epubprivate/OEBPS/Images/Figure-P47_12270.jpg?sign=1738830630-Qd5F2MTyrvUkKamGdBlCWAEVbL5Pj4nM-0-c7d1b7595e85c4b79f68a171ea372ac3)
也许一眼看上去式(2.12)会比较复杂,但其含义也很简单,当真实值为“1”时,我们就使用f(x),将右边式子的第二项去掉;当真实值为“0”时,我们就使用1-f(x),将右边式子的第一项去掉。式(2.12)也被称为交叉熵(Cross-entropy)[7]。