最大熵读书笔记

##最大熵
熵是一个热力学概念,用来衡量一个系统的混乱度。 熵越大表示系统越混乱,且在外界不做功的情况下,系统总是朝着熵增的方向发展。在信息论中,香农借用熵的概念,提出了信息熵,具体计算公式如下:
H(P)=−∑P(x)logP(x)
从公式可推出结论:
0=<H(P)<=log|X|, |X|为随机变量X的所有取值个数,当且仅当X均匀分布时H(P)取到最大值。
下面是一些常见的熵函数定义:

  • 联合熵:两个随机变量X,Y的联合分布
  • 条件熵:在X发生的前提下,Y发生所“新”带来的熵定义为Y的条件熵
  • 交叉熵:又称相对熵,交叉熵在自然语言中用的很多,很多神经网络的代价函数都采用交叉熵进行计算。
  • 互信息:变量间相互依赖程度。度量知道这两个变量其中一个,对另一个不确定度减少的程度。
    ##最大熵的基本思想
    对观察到的数据进行建模,出的概率模型满足所有已知条件,对未知的情况不作任何假设。
    ##最大熵的形式化定义
    最大熵原理:在一定约束条件下,熵最大的概率模型是最好的。
    最大熵模型是基于最大熵原理。我们用特征函数来描述约束条件。约束条件可以这样表述:特征函数的经验期望和模型期望应该相等。
    给一个训练集:T ={(x1, y1),(x2, y2),(x3, y3),…(xn,yn)},可以确定联合分布P(X, Y)和边缘分布P(X)的经验分布

$$\hat P(X=x, Y=y)={V(X=x, Y=y)\over N};\hat P(X=x)={V(X=x)\over N}$$
用特征函数(feature function)f(x, y)描述输入x和输出y之间的某一个事实

$$f(x,y) =
\begin{cases}
1, & x与y满足某一事实 \[2ex]
0, & 否则
\end{cases}$$

特征函数f关于经验分布的期望值有:

$$E{\hat P}(f)=\sum{x,y}\hat P(x,y)f(x,y)$$

P(Y∣X)是最大熵模型的输出.特征函数f关于模型与经验边缘分布的期望值有:
$$E{P}(f)=\sum{x,y}\hat P(x)P(y|x)f(x,y)$$
如果模型能获取样本中的数据信息,那么这两个期望值相等,即:
$$E{\hat P}(f) = E{P}(f)$$
有n个特征函数就有n个约束条件
最大熵模型
假设满足所有约束条件的模型集合为:
$$C = {P\in \mathcal P|E_{\hat P}(fi)=E{P}(fi),i=1,2…n}$$
定义在条件概率分布P(Y|X)上的条件熵为:
$$H(P)=-\sum
{x,y}\hat P(x)P(y|x)\log P(y|x)$$
最大熵模型即为模型空间中熵值最大的模型
最大熵模型学习
$$\min{P\in C} -H(P)\ \ \ s.t.\ E{\hat P}(fi)=E{P}(fi),\sum{y}P(y|x)=1$$
对于有约束条件的最值问题,可以考虑拉格朗日乘数法。
模型参数求解
最大熵模型的最优化算法有很多,比如,改进的迭代尺度法(IIS),拟牛顿法,以及BFGS。有数数学水平有限,在这里不做表述。
应用
最大熵模型最后求出的是一个最优的概率分布,可以用来分词、词性标注、文本分类,相关的论文有:使用最大熵进行文本分类关键词自动标引的最大熵模型
相关的工具有:

  • 张乐博士写的最大熵工具包:maxent
  • opennlp工具。这个可以在java开发环境下使用,里面包含最大熵的实现。
    ##比较好的学习资料:

博文首语

周末搭建了一个博客,以后就在这里写文章了。文章类型包括但不限于:

  • 编程:主要是数据结构、算法
  • java学习

  • 机器学习: 机器学习算法

  • 数据分析:专业文章、代码分析
  • 读书:书摘、书评、读书清单
  • 随笔:生活感悟

暂拟这么多,想到了再补充 :)

很惭愧<br><br>只做了一点微小的工作<br>谢谢大家