目录
(由于平台稿件格式问题,公式格式不能正确写上;如若读写困难可後台私信我要完整电子版)
6.1 概率分布之间的距离
两个人投篮,x=1 表示投中,x=0 表示没投中。第一个人投中的概率是 P(x=1)=0.8,P(x=0)=0.2。第二个人投中的概率是 Q(x=1)=0.7,Q(x=0)=0.3。我们想比较这两个人投篮水平的差异,应该怎么做呢?
一般来说,可以使用KL距离来度量相同事件空间的概率分布 P(x) 和 Q(x) 的差异,公式如下
D(P||Q)=∑_(x∈X)▒〖P(x)log (P(x))/(Q(x))〗
在上例中,我们可以计算
D(P||Q)=P(x=0)log P(x=0)/Q(x=0) +P(x=1)log P(x=1)/Q(x=1)
=0.2∙log 0.2/0.3+0.8∙log 0.8/0.7=0.026
特别的,当两个概率分布相等时,即 P(x)=Q(x),log (P(x))/(Q(x))=log1=0,D(P||Q)=0。
不过,需要注意的是,和其他距离不同的是,KL距离不具备对称性,即
D(P||Q)≠D(Q||P)
我们在进行二分类的时候,两类分别为P类和N类。y 表示样本 x 属于P类的概率,1-y 表示样本 x 属于N类的概率。y 为 x 的真实类别,是一个确定事件,即 y=1 或者 y=0。y^' 为模型预测出来的 x 为P类的概率,1-y^' 表示模型预测样本为N类的概率。模型预测的 y^' 是一个概率,因此 y^'∈(0,1)。
真实情况和模型结果的差异可以由KL距离来度量,公式如下。
D(真实结果||模型结果)=ylog y/y^' +(1-y)log (1-y)/(1-y^' )
例如,有训练样本 〖{x_((i) ),y_((i))}〗_(i=1)^N,我们可以用它们对应的平均KL距离来度量模型结果和真实结果的差异,公式如下。
Loss=1/N ∑_(i=1)^N▒〖(y_((i)) log y_((i))/(y_((i))^' )+(1-y_((i)))log (1-y_((i)))/(1-y_((i))^' )〗)
Loss 越大,说明模型输出结果 y_((i))^' 离真实情况越远。
模型学习的目标就是不断地通过改变参数来改变 y_((i))^',以缩短KL距离。我们可以对上式进行一些简化:
Loss=∑_(i=1)^N▒(y_((i) ) log y_((i) )/(y_((i))^' )+(1-y_((i) ))log (1-y_((i) ))/(1-y_((i))^' ))
=∑_(i=1)^N▒〖y_((i)) log(y_((i)) )-y_((i)) logy_((i))^'+(1-y_((i)) )log(1-y_((i)) )-(1-y_((i)))log(1-y_((i))^')〗
因为我们的最终目标是改变 y_((i))^' 以缩短KL距离,所以只需要保留和 y_((i))^' 有关的项,其他略去,具体如下。
Loss=∑_(i=1)^N▒(-y_((i)) logy_((i))^'-(1-y_((i)))log(1-y_((i))^'))
可以发现,这正是二分类模型常用的损失函数。
6.2 最大似然估计
6.1节说到分类模型所使用的损失函数其实就是KL距离,但是距离有很多种,为什么一定要使用KL距离呢?原因在于KL距离等价于最大似然估计,而最大似然估计是目前数学界最常用、理论基础最扎实的参数估计方法。下面我们具体详细讲解最大似然估计在二分类中的应用。
当我们知道一个事件的概率分布后,就可以通过这个概率分布计算对应的概率。例如,已知后验概率 P(y|x) 的计算方法,x 为身高,y 为性别,我们可以通过一个人的身高预测他的性别概率。机器学习就是通过大量已知的身高和性别数据去找到最适合的 P(y|x)。那么,什么样的 P(y|x) 才算是最合适的呢?
因为已知数据是已经发生的,在没有任何其他信息时,已知事情对应的概率就应该是最大的。例如,我们认为“太阳从东方升起”对应的概率为1,是因为这件事情每天都在发生。
在使用模型预测样本 x_((i) ) 的类别时,模型的输出为 y_((i))^',也就是说,预测结果为P类的概率为 y_((i))^',预测结果为N类的概率为 〖1-y〗_((i))^'。
如果 x_((i) ) 的真实类别为P类,也就是 y_((i) )=1,那么模型预测结果为P类的概率为 P(y=y_((i) ) |x_((i) ) )=y_((i))^'。
如果 x_((i)) 的真实类别为N类,也就是 y_((i))=0,那么模型预测结果为N类的概率为 P(y=y_((i)) |x_((i)) )=1-y_((i))^'。
这是一个典型的0-1分布,可以统一写成
P(y=y_((i)) |x_((i)) )=〖y_((i))^'〗^(y_((i)) ) (1-y_((i))^' )^((1-y_((i))))
N 个训练样本 {〖x_((i) ),y_((i) )〗_(i=1)^N} 之间可能会存在相互矛盾的情况,例如身高170cm的人既有男性也有女性,即 x_((i) )=170、y_((i) )=1 和 x_((j) )=170、y_((j) )=0 同时存在于训练样本中。因此我们不必使所有样本对应的概率都为1,只需要整体最大即可,即最大化
likelihood=∏_(i=1)^N▒P(y=y_((i)) |x_((i)) )
一般称 likelihood 为似然函数。
为了方便计算,我们对似然函数取对数,似然函数变为
likelihood=log∏_(i=1)^N▒P(y=y_((i) ) |x_((i) ) ) =∑_(i=1)^N▒logP(y=y_((i) ) |x_((i) ) )
=∑_(i=1)^N▒〖log[〖y_((i))^'〗^(y_((i) ) )∙(1-y_((i))^' )^((1-y_((i) ) ) ) ]=∑_(i=1)^N▒〖y_((i)) log〖y_((i))^' 〗+(1-y_((i)) ) log(1-y_((i))^' ) 〗〗
因为训练样本是已经发生的事件,所以“好模型”的标准就是能够使似然函数最大化(最大似然估计)。优化目标为最大化似然函数,即 max(likelihood),它等价于 min(-likelihood),故优化目标为
min(-likelihood)〖=min〗[∑_(i=1)^N▒〖-y_((i)) log〖y_((i))^' 〗-(1-y_((i)) ) log(1-y_((i))^' ) 〗]
可以看出,-y_((i)) log〖y_((i))^' 〗-(1-y_((i)) ) log(1-y_((i))^' ) 就是 y_((i))^' 和 y_((i)) 的KL距离,优化目标就是最小化各样本的KL距离之和。
通过以上分析可以发现,使用KL距离的原因就是它等价于最大似然估计。
除了分类问题,回归问题也是机器学习常见的任务。
在回归问题中,模型预测的不再是类别概率,而是一个连续的数值,例如房价、人口
数等。例如,在训练样本 〖{x_((i)),y_((i))}〗_(i=1)^N 中,我们认为因变量(房价)y_((i)) 和自变量(面积、与城区的距离等)x_((i)) 的关系是
y_((i))=w^T x_((i))+w_0
这种模型称为线性回归。y_((i)) 和 x_((i)) 之间的关系可以是更复杂的形式,例如是一个多层神经网络。模型的学习过程,就是利用已知的数据 〖{x_((i)),y_((i))}〗_(i=1)^N 找到合适的 w。
但是,在我们拿到的训练数据中,也会有偏差 ε,例如两座一模一样的房子也有可能卖出不同的价格。这类偏差具有随机性,其影响因素无法在特征中体现,例如购房者自身的偏好、议价能力、单纯的运气等。
为了方便建模,我们把这些因素的影响用一个正态分布表示,对应的概率密度为
f(ε=e)=1/(σ√2π) exp^(-e^2/(2σ^2 ))
那么,y_((i)) 和 x_((i)) 的关系变为
y_((i))=w^T x_((i))+w_0+ε
根据正态分布的性质,此时 y_((i)) 也是一个连续型随机变量,符合正态分布,期望为 w^T x_((i))+w_0,方差为 σ^2。x_((i)) 已知时,y_((i)) 对应的概率密度函数为
f(y=y_((i)) |x_((i)) )=1/(σ√2π) exp^(-〖(y_((i) )-w^T x_((i) )-w_0)〗^2/(2σ^2 ))
机器学习的目标是从数据中找到最优的 w 和 w_0。
从统计学的角度,通过调整参数使训练样本 〖{x_((i)),y_((i))}〗_(i=1)^N 出现的概率最大。因此,考虑所有训练样本,需要最大化的似然函数为
likelihood=∏_(i=1)^N▒〖f(y=y_((i) ) |x_((i) ) )=∏_(i=1)^N▒〖1/(σ√2π) exp^(-〖(y_((i) )-f(x_((i))))〗^2/(2σ^2 )) 〗〗
为了运算方便,我们对似然函数取对数,使似然函数变为
likelihood=log[∏_(i=1)^N▒〖1/(σ√2π) e^(-〖(y_((i) )-f(x_((i))))〗^2/(2σ^2 )) 〗]=∑_(i=1)^N▒[-〖(y_((i) )-f(x_((i))))〗^2/(2σ^2 )-logσ√2π]
模型学习的目标就是最大化似然函数 likelihood,即已经发生的事实,因此,其对应的概率应该最大。
max(likelihood) 即最小化 min(-likelihood),因此,优化目标为最小化下式。
∑_(i=1)^N▒[〖(y_((i) )-f(x_((i))))〗^2/(2σ^2 )+logσ√2π]
由于在似然函数中,只有 w 和 w_0 为变量是我们希望求解的,其他无关项均可去除,所以,优化目标变为最小化下式。
∑_(i=1)^N▒〖〖(y_((i) )-f(x_((i))))〗^2=∑_(i=1)^N▒〖(y_((i) )-y_((i))^')〗^2 〗=∑_(i=1)^N▒〖(y_((i) )-w^T x_((i) )-w_0)〗^2
可以发现,上式就是MSE。可见,当数据符合正态分布时,使用MSE优化线性回归模型等价于最大似然估计。
6.3 logit和softmax
6.3.1 二分类的logit
通过前面的学习,我们知道概率 P 用来描述事件发生的可能性。但有的时候,我们需要知道事件发生和事件不发生之间的比例,因此定义Odds,具体如下。
Odds=P/(1-P)
假设中国队和巴西队踢足球,中国队的胜率为 1/10000,那么对应的Odds为 1/9999。也就是说,在制定赔率时,巴西队胜利赢1元,需要设定中国队胜利赢9999元,这个盘口才公平,才会有人下注。
我们知道,概率 P 的值域为 [0,1],如果直接用模型对概率 P 进行学习,模型的输出范围将会受限,Odds的值域为 [0,+∞]。再进一步,我们定义logit,它为Odds的对数,即
logit=logOdds=log〖P/(1-P)〗
容易看出,logit的值域为 (-∞,+∞)。使用模型来逼近logit,有一个好处就是模型的输出不再有值域的限制,因此模型的选取范围将显著增大。
例如,在二分类中,可以使用模型 f(x)(值域为 (-∞,+∞))对 logit(P(y=1|x)) 建模,即
logit(P(y=1│x))=log〖(P(y=1│x))/(1-P(y=1│x) )〗=f(x)
化简可得
P(y=1│x)=1/(1+e^(-f(x)) )
当 f(x)〖=w〗^T x+w_0,即 f(x) 为线性回归时,可得
P(y=1│x)=1/(1+e^(-(w^T x+w_0)) )
又导出了逻辑回归。
通过上面的例子其实可以发现,逻辑回归和线性回归没有本质上的不同。在逻辑回归中,其实就是用线性回归去拟合logit。
6.3.2 多分类的softmax
在实际项目中,除了二分类,多分类也是常见的任务。这里要说明一下,同样是多类别的分类,多分类和多标签是两种不同的任务。
在多分类中,要求类别之间互斥,且考虑部情况,即 ∑_(i=1)^N▒〖P(y=i│x)=1〗,N 为类别
个数。例如,通过模型预测一个人的学历,即“高中”“本科”“大学”“硕士”“博士”“其他”,那么这必然是一个N选1任务。但有时候类别之间并不互斥,例如预测一首歌属于“摇滚”“流行”“古典”“嘻哈”,一首歌往往会属于多种类型,我们称这类任务为多标签任务。本节仅讨论多分类的相关知识。
在N分类中,模型一般会有 N 个输出 f_1 (x)~f_N (x),但 f_1 (x)~f_N (x) 不宜直接输出概率 P(y=i|x),主要原因如下。
如果直接输出概率,那么 f_1 (x)~f_N (x) 的值域就会被限制为 [0,1],这对模型的选取有极大的限制。
在多分类中,∑_(i=1)^N▒〖P(y=i│x)=1〗 是一个硬性要求,f_1 (x)~f_N (x) 之间互相耦合,这给模型的选取带来了极大的挑战。
我们可以对 f_1 (x)~f_N (x) 进行概率归一化,具体如下。
P(y=i|x)=(f_i (x))/(∑_(i=1)^N▒〖f_i (x) 〗)
虽然解决了 ∑_(i=1)^N▒〖P(y=i│x)=1〗 的问题,但仍然存在其他问题,列举如下。
必须要求 f_i (x)≥0,否则 P(y=i│x)<0,这不符合概率本身的定义。因此,f_i (x) 的值域范围变小了。
概率只反映了 f_1 (x)~f_n (x) 之间的比例差,忽略了绝对差。
例如,当 N=2 时,第一种情况是
f_1 (x)=3
f_2 (x)=6
按上述归一化方法,可以得到
P(y=1|x)=1/3
P(y=2|x)=2/3
第二种情况是
f_1 (x)=300
f_2 (x)=600
按上述归一化方法,可以得到
P(y=1|x)=1/3
P(y=2|x)=2/3
显然,在这两种情况下归一化的概率是相等的,这是因为 f_1 (x):f_2 (x) 的比例并没有发生变化。但是,很明显,在第二种情况下 f_2 (x)-f_1 (x)=300 差值远大于第一种情况(差值为 6-3=3)。按正常思路,在第二种情况下,P(y=2|x) 应该更大。
为了解决上述问题,我们在多分类问题中,一般使用softmax函数进行概率归一化。softmax函数的输入和输出均为向量,具体形式如下。
softmax([■(x_1@⋮@x_N )])=[■(e^(x_1 )/(∑_(i=1)^N▒e^(x_i ) )@⋮@e^(x_N )/(∑_(i=1)^N▒e^(x_i ) ))]=1/(∑_(i=1)^N▒e^(x_i ) ) [■(e^(x_1 )@⋮@e^(x_N ) )]
归一化的结果如下。
[■(P(y=1|x)@⋮@P(y=N|x))]=softmax([■(f_i (x)@⋮@f_N (x) )])=1/(∑_(i=1)^N▒e^(f_i (x) ) ) [■(e^(f_i (x) )@⋮@e^(f_N (x) ) )]
softmax函数有如下优点。
能够满足 ∑_(i=1)^N▒〖P(y=i│x)=1〗。
f_i (x) 的值域可以为 (-∞,+∞),这极大拓宽了模型 f_i (x) 的选择范围。
P(y=i|x) 随 e^(f_i (x) ) 指数级增长,使模型输出对 f_i (x) 的绝对值敏感。
为什么这个函数叫作softmax呢?我们从hardmax函数说起。hardmax函数的输入为一个向量,输出为一个与输入同维度的向量,原向量中最大值对应的位置取1,其他位置都为0。例如:
x=[■(10@20@21)],y=hardmax(x)=[■(0@0@1)]
但是,这样做太“硬”了,会造成如下问题。
20仅比21小了1,但函数输出天差地别。hardmax函数对输入过于敏感,输入轻微变化,输出会有过大震荡。
函数不是一个连续函数,因此会造成求导困难,从而影响梯度下降法的使用。
softmax函数可以克服hardmax函数的上述问题。但是softmax函数在计算时,e^(x_i ) 很容易过大而导致溢出。我们可以做如下转换,以解决这个问题。
d=max(x_1,⋯,x_N )
softmax([■(x_1-d@⋮@x_N-d)])=1/(∑_(i=1)^N▒e^(x_i-d) ) [■(e^(x_1-d)@⋮@e^(x_N-d) )]=1/(∑_(i=1)^N▒e^(x_i ) ) [■(e^(x_1 )@⋮@e^(x_N ) )]=softmax([■(x_1@⋮@x_N )])
即
softmax([■(x_1@⋮@x_N )])=softmax([■(x_1-d@⋮@x_N-d)])
因此,在计算softmax函数时,先对各个元素计算 x_i-max(x_1,⋯,x_N),再进行其他计算,可以有效防止数值溢出。
6.4 语言模型
在自然语言处理中,语言模型是一个非常重要的模型,它用于计算“一句话是合理的”的概率。
例如,P(我喜欢吃饭)>P(我你哦)。“我喜欢吃饭”是常见句。而“我你哦”作为病句,几乎不会出现,其概率应该如何计算呢?“我喜欢吃饭”对应于4个词,w_1=“我”,w_2=“喜欢”,w_3=“吃”,w_4=“饭”,概率记为 P(w_1 w_2 w_3 w_4),即顺序排列的一系列词所对应的联合概率密度分布。需要注意的是,概率和词的顺序有关,即“饭喜欢吃我”对应于概率 P(w_4 w_2 w_3 w_1) 且 P(w_1 w_2 w_3 w_4)≠P(w_4 w_2 w_3 w_1)。P(w_1 w_2 w_3 w_4) 可用贝叶斯定理化简,如下式所示。
P(w_1 w_2 w_3 w_4 )=P(w_1 )×P(w_2│w_1 )×P(〖w_3 |w〗_1 w_2 )×P(w_4│w_1 w_2 w_3