在机器学习的参数估计(学习)中,常见三种更新方法:梯度下降,极大似然,EM算法;它们的本质目的均是让模型更好地拟合目标分布;在学习三种算法的联系前,需要先了解牛顿法;
牛顿法迭代
先从经典的牛顿法开始,给定一个复杂的非线性函数 f ( x ) f(x) f(x),希望获得其最小值;在高中的数学课上,我们会假设其是光滑的,那么最小值应属于极小值点,极小值处满足 f ′ ( x ) = 0 f'(x)=0 f′(x)=0,此时,求解方程的根就能获得最小值。
进入大学后,认识到了泰勒公式,基于泰勒公式,我可以在具体点处(比如
x
n
x_{n}
xn)用"切抛物线"近似非线性函数:
f
(
x
)
≈
g
(
x
)
=
f
(
x
n
)
+
f
′
(
x
n
)
(
x
−
x
n
)
+
1
2
f
′
′
(
x
n
)
(
x
−
x
n
)
2
f(x)\approx g(x)=f(x_{n})+f'(x_{n})(x-x_{n})+\frac{1}{2}f''(x_{n})(x-x_{n})^{2}
f(x)≈g(x)=f(xn)+f′(xn)(x−xn)+21f′′(xn)(x−xn)2
这样做的几何意义在于:在
y
=
f
(
x
)
y=f(x)
y=f(x)的
x
=
x
n
x=x_{n}
x=xn处,用一条近似的曲线逼近原函数,近似的曲线容易求得最小值,因此我就用近似曲线的最小值代替原函数的最小值;
近似的抛物线具有二阶精度,对当前抛物线来说,极值点为:
g
′
(
x
m
)
=
0
→
x
m
=
x
n
−
f
′
(
x
n
)
f
′
′
(
x
n
)
g'(x_{m})=0\rightarrow x_{m}=x_{n}-\frac{f'(x_{n})}{f''(x_{n})}
g′(xm)=0→xm=xn−f′′(xn)f′(xn)
以极值点作为新的抛物线展开点,另作抛物线逼近原函数,再求该抛物线的最小值点,依次迭代,即为牛顿法:
x
n
+
1
=
x
n
−
f
′
(
x
n
)
f
′
′
(
x
n
)
x_{n+1}=x_{n}-\frac{f'(x_{n})}{f''(x_{n})}
xn+1=xn−f′′(xn)f′(xn)
牛顿法的迭代过程可以描述如下图:
如果原函数足够光滑,在全局只有一个极值点,牛顿法将能快速收敛,但真实函数通常并不能获得理想的过程:
- 有些函数的二阶导数很复杂
- 二阶导数的正负不固定,即抛物线的开口方向是不确定的,这导致迭代结果可能是一个极大值
梯度下降
为解决牛顿法的两大缺点,提出梯度下降,直接舍弃二阶精度,将
f
′
′
(
x
n
)
f''(x_{n})
f′′(xn)一项改成一个固定的正数
1
/
h
1/h
1/h:
g
(
x
)
=
f
(
x
n
)
+
f
′
(
x
n
)
(
x
−
x
n
)
+
1
2
h
(
x
−
x
n
)
2
g(x)=f(x_{n})+f'(x_{n})(x-x_{n})+\frac{1}{2h}(x-x_{n})^{2}
g(x)=f(xn)+f′(xn)(x−xn)+2h1(x−xn)2
同样的,求抛物线的极小值点,并迭代得到:
x
n
+
1
=
x
n
−
h
f
′
(
x
n
)
x_{n+1}=x_{n}-hf'(x_{n})
xn+1=xn−hf′(xn)
对于高维空间,即表示为:
x
n
+
1
=
x
n
−
h
▽
(
f
(
x
n
)
)
x_{n+1}=x_{n}-h\triangledown (f(x_{n}))
xn+1=xn−h▽(f(xn))
很明显,这就是典型的梯度下降法;
极大似然
极大似然的原理
在估算概率的时候,通常优化目标是最大化似然函数。比如一个语言模型,仅用于估计任意两个词的共现概率;
语言模型:用于衡量一句话是否合理,词顺序和选择哪些词也有要求,比如给出一句话,判断这句话(词的组合)的出现概率
对于两个词
(
x
,
y
)
(x,y)
(x,y),其共现概率为
P
(
x
,
y
)
P(x,y)
P(x,y),假设在一个规模为
N
N
N 的语料库中,
(
x
,
y
)
(x,y)
(x,y)共现的次数为:
£
(
x
,
y
)
\pounds (x,y)
£(x,y),可以得到统计结果:
P
~
(
x
,
y
)
=
£
(
x
,
y
)
N
\widetilde{P}(x,y)=\frac{\pounds (x,y)}{N}
P
(x,y)=N£(x,y)
这样的表示虽然简单,但对机器的存储来说,将任意两个词都统计一遍并保存是不能接受的;更好的解决方法是引入一个未知参数
θ
\theta
θ,将共现概率表示成一种函数:
P
(
x
,
y
;
θ
)
P(x,y;\theta)
P(x,y;θ),比如定义一个神经网络,然后再优化这个参数;
针对概率问题,统计学的研究者们提出了一个自然的解决方案:极大似然(最大化似然函数)。在哲学中,常提到存在即合理,极大似然的依据是"存在必合理",似然函数常定义为各组数据的概率连乘:
L
(
θ
)
=
∏
x
,
y
P
(
x
,
y
;
θ
)
£
(
x
,
y
)
L(\theta)=\prod_{x,y}P(x,y;\theta)^{\pounds (x,y)}
L(θ)=x,y∏P(x,y;θ)£(x,y)
观察似然函数,可以发现,这样的定义是具有实际意义的:
(
x
,
y
)
(x,y)
(x,y)出现了
£
(
x
,
y
)
\pounds (x,y)
£(x,y)次,代表这个事件在数据集中确实发生了,那就认为它是合理的,因此,我们需要最大化概率的连乘,其本质是让之前定义的模型
P
(
x
,
y
;
θ
)
P(x,y;\theta)
P(x,y;θ)拟合原始数据的分布;
为了便于计算,在似然函数上取对数,连乘转为累加:
l
o
g
(
L
(
θ
)
)
=
∑
x
,
y
£
(
x
,
y
)
l
o
g
(
P
(
x
,
y
;
θ
)
)
log(L(\theta))=\sum_{x,y}\pounds (x,y)log(P(x,y;\theta))
log(L(θ))=x,y∑£(x,y)log(P(x,y;θ))
注意到,
£
(
x
,
y
)
\pounds (x,y)
£(x,y)可以替换成统计的频率
P
~
(
x
,
y
)
\widetilde{P}(x,y)
P
(x,y),于是得到等价的表达:
∑
x
,
y
P
~
(
x
,
y
)
l
o
g
(
P
(
x
,
y
;
θ
)
)
\sum_{x,y}\widetilde{P}(x,y)log(P(x,y;\theta))
x,y∑P
(x,y)log(P(x,y;θ))
对表达式取相反数,就得到了机器学习中常用的损失函数-交叉熵:
l
o
s
s
(
θ
)
=
−
∑
x
,
y
P
~
(
x
,
y
)
l
o
g
(
P
(
x
,
y
;
θ
)
)
loss(\theta)=-\sum_{x,y}\widetilde{P}(x,y)log(P(x,y;\theta))
loss(θ)=−x,y∑P
(x,y)log(P(x,y;θ))
可见,最小化交叉熵损失与最大化似然函数其实是等价的:
m
a
x
θ
l
o
g
(
L
(
θ
)
)
⇔
m
i
n
θ
l
o
s
s
(
θ
)
max_{\theta}log(L(\theta))\Leftrightarrow min_{\theta}loss(\theta)
maxθlog(L(θ))⇔minθloss(θ)
极大似然为两步:
- 1.找到似然函数
- 2.对似然函数求导,令导数为零,直接解出参数
扩展:关于隐变量和贝叶斯学派
从一个特别地角度来看,将似然函数的参数 θ \theta θ视为一个变量,参数应该属于隐变量,因为参数 θ \theta θ确实存在,但是我无法获知它是多少;
在概率论与数理统计中,对于一个变量,如果存在,但不能看到这个变量是多少,就称为隐变量;
当我把参数也视为变量的时候,就进入了贝叶斯学派的范围,贝叶斯学派认为,一切对象皆为随机,任何事物都服从某个概率分布,贝叶斯学派是一个高深的领域。
回顾机器学习笔记本-朴素贝叶斯分类器,观察模型参数的表达,确实符合上面的描述;
EM算法
在损失函数的最小化过程中,常常使用梯度下降,但面对某些复杂的优化问题时(含有隐变量的问题),梯度下降不能有效更新模型,于是引入EM算法;就像牛顿法用抛物线逼仅原函数一样,EM算法通过具体问题下的构造函数逼仅原函数,这个构造函数常被称为Q函数(质量函数);
在了解EM的构造函数前,先了解jensen不等式;
jensen不等式
对于任意点集{
x
i
∣
i
∈
M
x_{i}|i\in M
xi∣i∈M},若:
∑
i
λ
i
=
1
,
λ
i
≥
0
\sum_{i}\lambda_{i}=1,\lambda_{i}\geq 0
i∑λi=1,λi≥0
对于一个 凸函数
f
(
x
)
f(x)
f(x),以下不等式成立(琴生jensen不等式):
f
(
∑
i
=
1
M
λ
i
x
i
)
≤
∑
i
=
1
M
λ
i
f
(
x
i
)
f(\sum_{i=1}^{M}\lambda_{i}x_{i})\leq \sum_{i=1}^{M}\lambda_{i}f(x_{i})
f(i=1∑Mλixi)≤i=1∑Mλif(xi)
如果将
λ
i
\lambda_{i}
λi视为
x
i
x_{i}
xi发生的概率,则全体
λ
i
x
i
\lambda_{i}x_{i}
λixi求和即表示
x
x
x的期望,于是得到琴生表达式更一般的形式:
f
(
E
[
x
]
)
≤
E
[
f
(
x
)
]
f(E[x])\leq E[f(x)]
f(E[x])≤E[f(x)]
EM算法原理
以前面极大似然部分的语言模型为例,为了方便表示,把 P ( x , y ; θ ) P(x,y;\theta) P(x,y;θ)记作 P ( x , y ) P(x,y) P(x,y);
将
P
(
x
,
y
)
P(x,y)
P(x,y)转为
P
(
x
∣
y
)
P
(
y
)
P(x|y)P(y)
P(x∣y)P(y),再分解:
P
(
x
∣
y
)
=
∑
z
P
(
x
∣
z
)
P
(
z
∣
y
)
P(x|y)=\sum_{z}P(x|z)P(z|y)
P(x∣y)=z∑P(x∣z)P(z∣y)
其中,
z
z
z可以理解为类别或文本的主题,
z
z
z是一个隐变量,这样引入隐变量是为了提高模型的泛化能力;
P
(
x
∣
z
)
P(x|z)
P(x∣z)就是已知主题
z
z
z中出现词
x
x
x的概率;
P
(
z
∣
y
)
P(z|y)
P(z∣y)指的是已知词
y
y
y,判断其属于主题
z
z
z的概率;
基于以上内容,交叉熵定义为:
l
o
s
s
=
−
∑
x
,
y
P
~
(
x
,
y
)
l
o
g
(
P
(
y
)
∑
z
P
(
x
∣
z
)
P
(
z
∣
y
)
)
loss=-\sum_{x,y}\widetilde{P}(x,y)log(P(y)\sum_{z}P(x|z)P(z|y))
loss=−x,y∑P
(x,y)log(P(y)z∑P(x∣z)P(z∣y))
其中的
P
(
y
)
P(y)
P(y)可以由统计频率精确估计:
P
(
y
)
=
P
~
(
y
)
=
£
(
y
)
N
P(y)=\widetilde{P}(y)=\frac{\pounds(y)}{N}
P(y)=P
(y)=N£(y)
损失函数化简为:
l
o
s
s
=
−
c
o
n
s
t
−
∑
x
,
y
P
~
(
x
,
y
)
l
o
g
(
∑
z
P
(
x
∣
z
)
P
(
z
∣
y
)
)
⇒
−
∑
x
,
y
P
~
(
x
,
y
)
l
o
g
(
∑
z
P
(
x
∣
z
)
P
(
z
∣
y
)
)
loss=-const-\sum_{x,y}\widetilde{P}(x,y)log(\sum_{z}P(x|z)P(z|y))\Rightarrow -\sum_{x,y}\widetilde{P}(x,y)log(\sum_{z}P(x|z)P(z|y))
loss=−const−x,y∑P
(x,y)log(z∑P(x∣z)P(z∣y))⇒−x,y∑P
(x,y)log(z∑P(x∣z)P(z∣y))
现在再次观察损失函数,发现待求参数的梯度计算涉及隐变量;
原问题的难度一是在于对数内部有求和项,二是包含隐变量,如果依靠梯度下降,将是不便于计算梯度的;梯度下降不能处理含隐变量的问题
利用jensen不等式(
−
l
o
g
-log
−log即负对数是凸函数,则
l
o
g
log
log是凹函数),可以得到一个构造函数:
l
o
s
s
n
′
=
−
∑
x
,
y
P
~
(
x
,
y
)
∑
z
Q
n
(
z
)
l
o
g
(
P
(
x
∣
z
)
P
(
z
∣
y
)
Q
n
(
z
)
)
loss_{n}'=-\sum_{x,y}\widetilde{P}(x,y)\sum_{z}Q_{n}(z)log(\frac{P(x|z)P(z|y)}{Q_{n}(z)})
lossn′=−x,y∑P
(x,y)z∑Qn(z)log(Qn(z)P(x∣z)P(z∣y))
其中,
n
n
n是迭代的步序;
根据jensen不等式,有以下关系:
l
o
g
(
∑
z
P
(
x
∣
z
)
P
(
z
∣
y
)
)
=
l
o
g
(
∑
z
Q
n
(
z
)
P
(
x
∣
z
)
P
(
z
∣
y
)
Q
n
(
z
)
)
≥
∑
z
Q
n
(
z
)
l
o
g
(
P
(
x
∣
z
)
P
(
z
∣
y
)
Q
n
(
z
)
)
log(\sum_{z}P(x|z)P(z|y))=log(\sum_{z}Q_{n}(z)\frac{P(x|z)P(z|y)}{Q_{n}(z)})\geq \sum_{z}Q_{n}(z)log(\frac{P(x|z)P(z|y)}{Q_{n}(z)})
log(z∑P(x∣z)P(z∣y))=log(z∑Qn(z)Qn(z)P(x∣z)P(z∣y))≥z∑Qn(z)log(Qn(z)P(x∣z)P(z∣y))
从几何意义的角度来看,最小化损失等价于极大似然,此时,我利用构造函数改进原似然函数,得到原似然函数的下界(相当于不再利用抛物线,而是换了一个下界曲线逼近原函数);用这个下界函数的最大值代替原函数的最大值;在EM算法中,又将构造函数称为Q函数:
Q
(
n
)
=
∑
z
Q
n
(
z
)
l
o
g
(
P
(
x
∣
z
)
P
(
z
∣
y
)
Q
n
(
z
)
)
Q(n)=\sum_{z}Q_{n}(z)log(\frac{P(x|z)P(z|y)}{Q_{n}(z)})
Q(n)=z∑Qn(z)log(Qn(z)P(x∣z)P(z∣y))
观察函数
Q
(
n
)
Q(n)
Q(n),未知的分布
Q
n
(
z
)
Q_{n}(z)
Qn(z)应该与
l
o
g
(
P
(
x
∣
z
)
P
(
z
∣
y
)
Q
n
(
z
)
)
log(\frac{P(x|z)P(z|y)}{Q_{n}(z)})
log(Qn(z)P(x∣z)P(z∣y))出现的概率相关,应该满足:
∑
z
Q
n
(
z
)
=
1
\sum_{z}Q_{n}(z)=1
z∑Qn(z)=1
所以可以得到未知分布的表达:
Q
n
(
z
)
=
P
(
x
∣
z
)
P
(
z
∣
y
)
∑
z
P
(
x
∣
z
)
P
(
z
∣
y
)
Q_{n}(z)=\frac{P(x|z)P(z|y)}{\sum_{z}P(x|z)P(z|y)}
Qn(z)=∑zP(x∣z)P(z∣y)P(x∣z)P(z∣y)
现在得到了
Q
n
(
z
)
Q_{n}(z)
Qn(z),即得到了似然函数的表达,即EM算法的E步;最大化当前似然函数即为EM算法的M步;然后两个步骤交替迭代
EM算法流程
EM算法是一种迭代的框架,主要是"期望-最大化"的思想,EM算法可以描述如下,已知当前数据{ x 1 , . . . , x n x_{1},...,x_{n} x1,...,xn},引入隐变量 z ∈ { z 1 , . . . , z M } z\in \left\{z_{1},...,z_{M}\right\} z∈{z1,...,zM}的分布 P ( x , z ; θ ) P(x,z;\theta) P(x,z;θ),假设迭代 J J J次,则在 j = 1 , 2 , . . . , J j=1,2,...,J j=1,2,...,J时有:
- E步:计算期望(用下界曲线逼近原函数)
Q j ( x i , z m ) = P ( x i , z m ; θ j ) ∑ m = 1 M P ( x i , z m ; θ j ) , Q_{j}(x_{i},z_{m})=\frac{P(x_{i},z_{m};\theta_{j})}{\sum_{m=1}^{M}P(x_{i},z_{m};\theta_{j})}, Qj(xi,zm)=∑m=1MP(xi,zm;θj)P(xi,zm;θj),
L ( θ j ) = ∑ i = 1 n ∑ m = 1 M Q j ( x i , z m ) l o g ( P ( x i , z m ; θ j ) Q j ( x i , z m ) ) L(\theta_{j})=\sum_{i=1}^{n}\sum_{m=1}^{M}Q_{j}(x_{i},z_{m})log(\frac{P(x_{i},z_{m};\theta_{j})}{Q_{j}(x_{i},z_{m})}) L(θj)=i=1∑nm=1∑MQj(xi,zm)log(Qj(xi,zm)P(xi,zm;θj)) - M步:极大似然(用下界曲线的最优值点代替原函数的最优值点)
θ j + 1 = a r g m a x θ L ( θ j ) \theta_{j+1}=argmax_{\theta}L(\theta_{j}) θj+1=argmaxθL(θj) - 判断模型是否收敛,输出参数 θ j + 1 \theta_{j+1} θj+1
EM算法小结
EM算法是迭代求解最大值的算法,同时算法在每一次迭代时分为两步,E步和M步,EM算法多用于处理含隐变量的问题。
一个最直观了解EM算法思路的是K-Means算法。在K-Means聚类时,每个聚类簇的中心是隐变量。假设K个初始化中心,即EM算法的E步;然后计算得到每个样本最近的中心,并把样本聚类到最近的这个中心,即EM算法的M步。计算各类样本的中心,即回到E步。重复E步和M步,直到中心不再变化为止,这样就完成了K-Means聚类;
EM 算法具备收敛性,但并不保证找到全局最大值,有可能找到局部最大值