一本书买来,转眼已是一年。
虽然作者说,已经是尽力通俗。但读来却甚是费力。
知道在说什么,但是说得过于抽象,若要真正施行,却又是另一回事。本书的目的也不在于这。
另有一部分,只剩下看得懂字,却无法组织起意思了。
每每拿起书,看一下一个章节前面的介绍性文字。一到概念,公式一来,注意力就开始分散,却是寸字难行。
自己的毛病又是,略过一部分就觉得浑身难受,只能搁下书籍。
不管如何,今天终于看完了。
书中,其实讲的就是在信息领略,数学模型的应用。而在这些章节中,又有一些数学模型,出现得次数较多。这大概也说明他们有很好的适应性吧。
隐含马尔可夫模型
- 马尔可夫假设
- 当前的状态只和前一个状态有关,也就是有 \( P(y_n | y_1, y_2, \cdots, y_{n-1}) = P(y_n | y_{n-1}) \) 。
- 马尔可夫链
- 满足上述假设的随机过程。
而隐含马尔可夫模型中的隐含则是说,马尔可夫链中的状态是不可见的,但是每个状态会有一个输出,输出是可以观察到的。
模型的应用场景就是已知输出,要得到原始的状态序列。那么考察所有可能的状态序列,选择其中输出已知序列可能性最大的作为最终结果。
几个基本问题:如何确定模型参数,即转移概率和输出概率,如何求出最大可能性的序列。
确定参数
根本上用的是EM算法。先取转移概率和输出概率是均匀的,得到一个初始模型。用这个模型计算输出O的过程,记录下每个状态出现的次数,由此可以得到新的一组参数,进而得到一个新的模型。不断重复这个迭代过程。
可以证明这个过程是收敛的。但是会收敛于局部最优解。
求出最大可能性序列
确定模型参数以后,如何确定输出序列呢?如果暴力搜索复杂度太大。这里利用的是维比特算法。它本质上是一种最短路的动态规划算法。
对于原始状态,每一个状态都有若干个可能的值。把每一个状态作为图的一层。相邻状态的每一个可能值之间连有有向边,由前面的状态指向后面的状态。这样,最终就是从每一层中选一个节点,构成一条通路。用动态规划解决。
这样的一个隐含马尔可夫模型就可以作为一个通信的编码解码过程的建模,而编码解码过程,可以具有很多应用:机器翻译,语音识别等等。
马尔可夫模型在多维上的扩展就是贝叶斯网络。隐含马尔可夫模型中,一个输出状态只与一个原始状态有关,如果这个输出状态同时与这个原始状态的前后一个状态相关,就是条件随机场。
EM算法
前面已经见过EM算法。它包括两个过程,E过程和M过程。E过程根据现在模型计算输出结果,M过程根据前面输出结果重新计算参数,得到新的模型。重复这个过程,直到结果达到局部最大值或者在其一定误差范围内。
一个比较好懂的例子是分类算法。
给定n个点,把它们分为K类。首先任意选取K个中心。
- 每个点归到离它最近的那个点所属的类。
- 对每个类,计算所有的点的重心,把这个重心作为新的中心。
重复这个过程,直到一定程度的结果。
难点在于选取一个适当的目标函数,使得结果收敛。更好的是如果是一个凸函数,那么就会收敛到唯一的极值点,也就是最佳点。
最大熵原理
最大熵就是一个凸函数。先来看一下什么是熵。
信息论中的熵用来衡量一个随机变量的不确定性的大小。不确定性的大小也就是相应信息的大小。一个随机变量(用大写字母表示)是含有不确定性的,而这不确定性由熵衡量)。当这个随机变量一旦取一个值(用小写字母表示)后,就确定下来了。也就是说这个值提供了信息,消除了不确定性。而信息的大小也就等于不确定性的大小(完全消除的情况下)。
\[ H(X) = - \sum_{x \in X} P(x) \log P(x) = E(-\log P(x)) \]
这里有一个疑问是条件熵。根据书上的定义是
\[ H(X|Y) = - \sum_{x \in X, y \in Y} P(x,y)\log P(x | y) \]
而这不等于 \( E(-\log P(x|y))\)。
同时为了衡量随机变量之间的关联性,引入了互信息
\[ I(X;Y) = H(X) - H(X|Y) \]
也就是X,Y之间的相关性是X的不确定性减去在已知了Y后X的不确定性。
同时熵还可以用来衡量两个函数的差异程度,这就是相对熵的作用。这可以用来讨论两个概率分布的差异,在判别文档的词频分布时尤其有用。
最大熵来源于我们的一些直觉认识。当完全不知道的情况下,我们假设每一种情形等可能。在知道了部分情况后,在满足限制的情况下,我们仍然假设剩下的未知的部分每一种情况等可能。因为这样风险最小。
这种直觉在数学上的描述就是,在满足限制的情形下,使得随机变量的概率分布达到熵最大。
已经证明这时的概率分布是唯一的,形式如下:
\[ P(d|x_1,x_2,\cdots,x_n)= \frac{1}{Z(x_1,x_2,\cdots,x_n)}e^{\lambda_1(x_1,d) + \lambda_2(x_2,d) + \cdots + \lambda_n(x_n,d)} \]
x为特征,Z为归一化因子。
最大熵的参数可用EM算法训练获得。训练的计算量非常大。