最大熵模型

七月在线机器学习笔记

#熵
如果一个随机变量x的可能取值为X={x1, x2,…, xk}。要用n位y: y1y2…yn表示(每位y 有c种取值)n的期望值至少为:

一般地。我们令c为2(二进制表示),于是, X的信息量为

将P(x=xi)写成普适公式即得

H(X)=-\sum_{x\in X}p(x)lnp(x)

研究函数f(x)=xlnx,x=[0,1]
f'(x)=lnx + 1
f''(x)=1/x  [x>0,凸函数]
当f'(x)=0时,x=1/e ,极小值
lim f(x)=0
x->0
x->1
定义f(0)=f(1)=0
绘图

def f(x):
    return x * np.log(x)
x=np.linspace(0,1,20,endpoint=True)
y=f(x)
y[0]=0
x_min=np.exp(-1)
y_min=f(x_min)
fig=plt.figure()
ax=fig.add_subplot(1,1,1)
# ax.text(x_min, y_min - 0.015, '%.3f' % y_min, ha='center', va='bottom', fontsize=6)
ax.annotate('x=1/e',xy=(x_min,y_min),xytext=(x_min,y_min+0.05),arrowprops=dict(facecolor='red'),horizontalalignment='left',verticalalignment='top')

ax.plot(x,y,'bo--')
plt.tight_layout()
plt.show()
 

熵是随机变量不确定性的度量,不确定性越大,熵值越大;若随机变量退化成定值,熵为0

均匀分布是‘最不确定分布’

在概率归一化条件下sum(p(xi)=1,使用拉格朗日乘数法可求熵的最大值

L=-\sum_{i}p(x_i)lnp(x_i)+\lambda(\sum_ip(x_i)-1)

对p(x)求偏导,并等0 =>

\frac{\partial L}{\partial p_{(x_i)}}=-ln(p(x_i))-1+\lambda=0 \Rightarrow p(x_i)=e^{\lambda-1}    为定值,又sum(p(xi))=1

当所有的p(xi)都相等时,熵取得最大值,p(xi)=1/M

#两个随机变量X,Y的联合分布,可以形成联合熵(Joint Entropy),用H(X,Y)表示

#条件熵:

(X,Y)发生所包含的熵,减去Y单独发生包含的熵:

在Y发生的前提下,X发生,“新”带来的熵

#相对熵/交叉熵/K-L散度

设p(x)、q(x)是X中取值的两个概率分布,则p对q的相对熵是

D(p||q)=\sum_xp(x)log\frac{p(x)}{q(x)}=E_{p(x)}log\frac{p(x)}{q(x)}

#利用Jensen不等式[f(E(x))<=E(f(x))]可得D(p||q)>=0

因此KL散度可作为:两个分布p(x)和q(x)之间不相似程度的度量 (两个随机变量的距离)

   假定使用KL(Q||P),为了让距离最小,则要求在P为 0的地方,Q尽量为0。会得到比较“窄”的分布曲线;

         假定使用KL(P||Q),为了让距离最小,则要求在P不 为0的地方,Q也尽量不为0。会得到比较“宽”的分布曲线

交叉熵:用分布q(x)来表示p(x)的期望

H(p,q)=-\sum_{x}p(x)log\frac{1}{q(x)}=-\sum_{x}p(x)log \ q(x)

\begin{align*} D(p||q)=\sum_xp(x)log\frac{p(x)}{q(x)} &=\sum_xp(x)logp(x)-\sum_xp(x)logq(x) \\ &= H(p,q)-H(p) \end{align*}

在机器学习中,因为训练数据一定,因此H(p)可视为常量,那么最小化相对熵 D(p||q) 等价于最小化交叉熵 H(p,q) 也等价于最大化似然估计(推导见后面)

#互信息 I(X,Y)=D(P(X,Y) || P(X)P(Y))

I(X,Y)=\sum_{x,y}p(x,y)log\frac{p(x,y)}{p(x)p(y)}

互信息与条件熵之间的关系: I(X,Y)=H(Y)– H(Y|X)=H(X)– H(X|Y)

#表示一个新的观测y造成的x的不确定性的减小

在机器学习中,我们希望在训练数据上模型学到的分布 P(model) 和真实数据的分布  P(real) 越接近越好,所以我们可以使其相对熵最小。但是我们没有真实数据的分布,所以只能希望模型学到的分布 P(model) 和训练数据的分布 P(train)

尽量相同。假设训练数据是从总体中独立同分布采样的,那么我们可以通过最小化训练数据的经验误差来降低模型的泛化误差。即:

  1. 希望学到的模型的分布和真实分布一致,P(model)≃P(real)
  • 但是真实分布不可知,假设训练数据是从真实数据中独立同分布采样的,P(train)≃P(real)
  • 因此,我们希望学到的模型分布至少和训练数据的分布一致,P(train)≃P(model)

根据之前的描述,最小化训练数据上的分布  P(train)与最小化模型分布 P(model) 的差异等价于最小化相对熵,即 D(P(train)||P(model))。此时, P(train) 就是D(p||q) 中的 p,即真实分布,P(model) 就是 q。又因为训练数据的分布 p 是给定的,所以求  D(p||q)  等价于求 H(p,q)。

得证,交叉熵可以用来计算学习模型分布与训练分布之间的差异。交叉熵广泛用于逻辑回归的Sigmoid和Softmax函数中作为损失函数使用。


最大熵模型的原则:

承认已知事物(知识)

对未知事物不做任何假设,没有任何偏见(均匀分布,无偏)

即H(Y|X),在给定X的情况下,Y的概率分布满足无偏性,即每一种情况尽量满足均匀分布(熵最大

特征:(x,y) 

y:这个特征中需要确定的信息

x:这个特征中的上下文信息
样本:关于某个特征(x,y)的样本,特征所描 述的语法现象在标准集合里的分布: 

(xi,yi)对

yi是y的一个实例 ; xi是yi的上下文 

(x1,y1) (x2,y2) (x3,y3)……

特征函数:对于一个特征(x0,y0), 定义特征函数:
f(x,y)=\begin{Bmatrix} 1 &x=x_{0},y=y_{0} \\ 0& otherwise \end{Bmatrix}
 对于一个特征(x0,y0) ,在样本中的期望值 是:
\tilde{p}(f)=\sum_{(x_{i},y_{i})}\tilde{p}(x,y)f(x,y)
\tilde{p}(x,y)是(x,y)在样本中出现的概率

条件Constraints
 对每一个特征(x,y),模型所建立的条件概率 分布要与训练样本表现出来的分布相同。
假设样本的分布是(已知):
\tilde{p}(x)=x出现的概率
\tilde{p}(x,y)=xy出现的概率

\tilde{p}(f)=特征f在样本中的期望值:

    

最大熵模型在NLP中的完整提法

p *=arg \max_{p\in P}H(Y|X)=-\sum_{x,y}p(x,y)log p(y|x)=-\sum_{x,y}p(y|x)\bar{p}(x)logp(y|x)

P=\left \{ p(y|x) | \forall f_{i}:\sum_{x,y}p(y|x)\bar{p}(x)f_{i}(x,y),\forall x:\sum_{y}p(y|x)=1 \right \}

最大熵模型总结

求解Maxent模型

拉格朗日乘数法:

L=-\sum_{x,y}p(y|x)\bar{p}(x)logp(y|x) +\sum_{i}\lambda_i \sum_{x.y}f_i(x,y) [p(y|x)\bar{p}(x)-\bar{p}(x,y)] +\lambda_0[\sum_yp(y|x)-1]

对p(y|x)求偏导,等于0

\frac{\partial L}{\partial p(y|x)}=-\bar{p}(x)[logp(y|x)+1]+\sum_i\lambda_if_i(x,y)\bar{p}(x)+\lambda_0=0

\Rightarrow p*(y|x)=e^{\sum_i\lambda_if_i(x,y)+\frac{\lambda_0}{\bar{p}(x)}-1}

λ未知

Z_\lambda(x)=\sum_ye^{\sum_i \lambda_if_i(x,y)},Maxent模型是对数线性模型

因为包含指数函数,几乎不可能有解析解 ?

        退一步说:有了解析解,仍然需要数值解
能不能找到另一种逼近?构造函数f(λ),求 其最大/最小值?

理论问题:解释通过最大熵模型建立的目标函数和最大似然估计的关系

实践问题:找到有效的求解λ的算法

1.理论问题

MLE:找出与样本的分布最接近的概率分布模型

此目标式,与条件熵具有相同的形式。

H(Y|X)=-\sum_{x,y}\bar{p}(x,y)logp(y|x)

既然函数式相同,极有可能二者殊途同归, 目标函数是相同的。

将最优解p_\lambda(y|x)=\frac{1}{Z_\lambda(x)}e^{\sum_i\lambda_if_i(x,y)}分别带入MLE和拉格朗日函数L

二者的右端具有完全相同的目标函数(±号)

      Z_\lambda(x)=\sum_ye^{\sum_i \lambda_if_i(x,y)}               p^{*}(y|x)=\frac{1}{Z_\lambda(x)}e^{\sum_i\lambda_if_i(x,y)}

结论:

根据MLE的正确性,可以断定:

最大熵的解(无偏 的对待不确定性)同时是最符合样本数据分布的解,进一步证明了最大熵模型的合理性

熵:不确定度

似然:与知识的吻合程度 

最大熵模型:对不确定度的无偏分配 

最大似然估计:对知识的无偏理解

知识不确定度补集

2.求解λ

因为没有显式的解析式,使用IIS(Improved Iterative Scaling)计算最大熵模型的数值解

  IIS是目前最大熵模型的最优化算法,优于梯度下降算法

算法思想:

假设最大熵模型当前的参数向量是λ,希望找到新的参数向量λ+δ,使得模型的对数 似然函数值L增加。重复这一过程,直至找 到对数似然函数的最大值

 对上面得到的下界求偏导,令为0,求出\delta

\delta的求法:f^\#(x,y)=M为常数

\delta_i=\frac{1}{M} log\frac{E_{\bar{p}}(f_i)}{E_p(f_i)}

#若f^\#(x,y)不是常数

g(\delta_i)=\sum_{x,y}\bar{p}(x)p_\lambda(y|x)f_i(x,y)exp(\delta_if^\#(x,y))-E_{\bar{p}}(f_i)

     转换为求g(\delta)=0的根

牛顿法:

\delta_i^{(k+1)}=\delta_i^{(k)}-\frac{g(\delta_i^{(k)})}{g'(\delta_i^{(k)})}         过程与梯度下降有些类似

说明:因为需要计算g(δ)=0的根而不是求g(δ)的极小值,上式 是函数值除以一阶导,而不是一阶导除以二阶导;

实践中,可采用拟牛顿BFGS或者L-BFGS的方法

最终解:上述求解过程中得到的权值λ,回代到下式 中,即得到最大熵模型的最优估计

             Z_\lambda(x)=\sum_ye^{\sum_i \lambda_if_i(x,y)}               p^{*}(y|x)=\frac{1}{Z_\lambda(x)}e^{\sum_i\lambda_if_i(x,y)}

All Models are wrong. Some are useful.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值