从数据分布角度理解:为什么不同任务要用不同的损失函数?

从数据分布角度理解:为什么不同任务要用不同的损失函数?
从数据分布角度理解:为什么不同任务要用不同的损失函数?一、先说清楚:损失函数到底是什么?在机器学习里,我们可以先把模型想象成一个“会猜答案的机器”。给它一个输入,比如一张图片、一段文字、一个学生的学习时长,它会输出一个预测结果。比如:输入:学习时间输出:预测考试分数输入:一张动物图片输出:预测是猫、狗、兔子的概率输入:一个用户的历史行为输出:预测他会不会点击广告模型一开始猜得很差。我们需要告诉它:你猜得有多离谱?这个“离谱程度”就是损失函数。损失函数越大,说明模型错得越严重;损失函数越小,说明模型越接近正确答案。所以,训练模型的目标就是:让损失函数尽可能小 \text{让损失函数尽可能小}让损失函数尽可能小但是问题来了:为什么回归任务常用均方误差?为什么分类任务常用交叉熵?为什么有些任务用绝对误差、Poisson 损失、Huber 损失、KL 散度?答案是:不同任务的答案yyy本身来自不同的数据分布。损失函数其实是从“这个数据更像哪种分布”推导出来的。二、最核心的思想:先假设数据怎么产生,再推出损失函数我们先不管神经网络,也不管算法。假设世界上有一个真实规律:x→y x \rightarrow yx→y比如:学习时间→考试分数 \text{学习时间} \rightarrow \text{考试分数}学习时间→考试分数但是现实世界有噪声。同样学习555小时,有人考808080分,有人考858585分,有人考787878分。所以我们不应该认为模型输出的是一个绝对确定的答案,而应该认为:模型输出的是一个概率分布。也就是说,给定输入xxx,答案yyy不是一个完全固定的数,而是从某个分布里“抽出来”的。我们写成:p(y∣x) p(y|x)p(y∣x)读作:在给定xxx的情况下,出现yyy的概率。模型训练的目标就是:让真实答案出现的概率尽可能大。这叫做最大似然估计。1. 什么是“似然”?假设我们有nnn个样本:(x1,y1),(x2,y2),…,(xn,yn) (x_1,y_1),(x_2,y_2),\dots,(x_n,y_n)(x1​,y1​),(x2​,y2​),…,(xn​,yn​)模型认为第iii个真实答案出现的概率是:p(yi∣xi) p(y_i|x_i)p(yi​∣xi​)那么整批数据同时出现的概率就是:p(y1∣x1)p(y2∣x2)⋯p(yn∣xn) p(y_1|x_1)p(y_2|x_2)\cdots p(y_n|x_n)p(y1​∣x1​)p(y2​∣x2​)⋯p(yn​∣xn​)可以写成:∏i=1np(yi∣xi) \prod_{i=1}^{n} p(y_i|x_i)i=1∏n​p(yi​∣xi​)这个东西叫做似然。最大似然估计的意思就是:max⁡∏i=1np(yi∣xi) \max \prod_{i=1}^{n} p(y_i|x_i)maxi=1∏n​p(yi​∣xi​)也就是让真实数据出现的概率最大。2. 为什么要取对数?乘法很麻烦,而且很多小概率相乘会变得极小。比如:0.1×0.2×0.3=0.006 0.1 \times 0.2 \times 0.3 = 0.0060.1×0.2×0.3=0.006样本一多,数字会越来越小。所以我们取对数。对数有一个重要性质:log⁡(ab)=log⁡a+log⁡b \log(ab)=\log a+\log blog(ab)=loga+logb于是:$$\log \prod_{i=1}^{n} p(y_i|x_i)\sum_{i=1}^{n} \log p(y_i|x_i)$$最大化似然等价于最大化对数似然:max⁡∑i=1nlog⁡p(yi∣xi) \max \sum_{i=1}^{n} \log p(y_i|x_i)maxi=1∑n​logp(yi​∣xi​)但是机器学习里通常习惯做“最小化损失”,所以我们在前面加一个负号:$$L-\sum_{i=1}^{n} \log p(y_i|x_i)$$这个东西叫做负对数似然损失。它是所有常见损失函数的“母公式”。核心公式就是:$$\boxed{L-\sum_{i=1}^{n} \log p(y_i|x_i)}$$意思是:如果模型给真实答案的概率越大,损失越小;如果模型给真实答案的概率越小,损失越大。接下来,不同任务只是在问:p(y∣x)p(y|x)p(y∣x)应该选成什么分布?选高斯分布,就推出均方误差。选伯努利分布,就推出二分类交叉熵。选类别分布,就推出多分类交叉熵。选拉普拉斯分布,就推出绝对误差。选 Poisson 分布,就推出计数损失。三、回归任务:为什么常用均方误差?1. 回归任务是什么?回归任务就是预测一个连续数值。比如:预测房价预测考试分数预测温度预测身高预测股票价格这些答案都是连续的数字。例如模型预测:y^=80 \hat{y}=80y^​=80真实答案是:y=83 y=83y=83误差就是:y−y^=3 y-\hat{y}=3y−y^​=32. 回归任务的常见假设:误差服从高斯分布很多自然现象的误差会集中在000附近,小误差多,大误差少。比如老师估计学生成绩:误差111分很常见误差555分也可能误差303030分很少见这种“中间多、两边少”的形状很像高斯分布,也叫正态分布。我们假设:y=y^+ϵ y = \hat{y} + \epsilony=y^​+ϵ其中ϵ\epsilonϵ是误差。假设误差服从高斯分布:ϵ∼N(0,σ2) \epsilon \sim \mathcal{N}(0,\sigma^2)ϵ∼N(0,σ2)这表示误差大多数在000附近。那么真实值yyy在预测值y^\hat{y}y^​附近波动:y∣x∼N(y^,σ2) y|x \sim \mathcal{N}(\hat{y},\sigma^2)y∣x∼N(y^​,σ2)对应的概率密度函数是:$$p(y|x)\frac{1}{\sqrt{2\pi\sigma^2}}\exp\left(-\frac{(y-\hat{y})2}{2\sigma2}\right)$$3. 代入负对数似然单个样本的损失是:$$L-\log p(y|x)$$代入高斯分布:$$L-\log\left[\frac{1}{\sqrt{2\pi\sigma^2}}\exp\left(-\frac{(y-\hat{y})2}{2\sigma2}\right)\right]$$利用:log⁡(ab)=log⁡a+log⁡b \log(ab)=\log a+\log blog(ab)=loga+logb得到: