NLP --- 隐马尔可夫HMM(极大释似然估计详解)

版权声明:转载请注明出处: https://blog.csdn.net/weixin_42398658/article/details/84842960

上一节我们介绍了隐马尔可夫的第三个基本问题的解决方案,但是遇到的问题是在如果语料库没有给出状态转移概率则就不能使用最大释然估计了,因此使用EM算法可以解决,在理解EM算法之前需要理解最大释然估计,本节就详细的探讨一下最大释然估计,下面正式开始:

极大似然估计

这里先举一个简单的例子:

       一对师徒去上山打猎,在山上同时发现了一只兔子,两师徒同时开了枪,结果兔子被打中了,那么问题是兔子是谁打死的呢?

       正常情况下应该都是认为是师傅打中的,其实当我们这样认为时就已经在使用极大似然思想了。那“似然”是什么呢?根据字面的意思理解就是“似”是似乎、几乎、可能的意思,因此似然其实就是可能性。因此极大似然就是最大的可能性的意思了。我们选择师傅打中的原因,就是认为师傅是最有可能打中的,因此这就是极大似然的最通俗的理解了。

       回到生活中,我们几乎处处都在使用“极大似然”,很多时候我们没机会,也没能力去探究事物的真相,我们最简单也是最高效的方法就是去估计。当你去找工作时,别人很有可能会问你来自哪所学校?你的文凭如何?你得过什么奖?记住,任何指标都不能确认你是一个多么优秀的人,指标只能确定你是优秀人才的可能性。
      在继续讨论“极大似然”之前,我们要补充机器学习中非常重要的一个假设,那就是数据独立同分布(independent and identically distributed,i.i.d.)条件。独立同分布假设数据与数据是独立的,就比如信用卡发放任务中,每一张用户填写的表格是相互独立的,但该任务的所有数据又都来自于同一个概率分布函数,这就使得我们可以模拟出己知数据的概率分布模型,同样也可以运用在未来的任务中。有了i.i.d.条件,就可以构造极大似然估计。
       在机器学习中,我们一般的分类问题可以表示为输入x得到y 的类别,那么用概率描述就是在x的条件下分类为y的概率即可以使用条件概率进行描述分类问题\large P(y|x),但是呢,一般我们不可能那么简单的就得到我们的条件概率公式,里面会有位置参数的,因此我们把条件概率可以写成\large P(y|x;\theta ),其中\large \theta是待求参数,这里解释一下,为了方便,概率函数只进行了二分类,也就是输出0或1。那么如何去判断\large P(y|x;\theta )的好坏呢?很简单,那就是该概率函数在己有的数据上发生的概率最高,也就是说我们的目的是使其概率最大,而概率的大小和参数\large \theta有关,那么就转换成在某个参数的情况下的概率最大值的问题,也就是说我们能不能找到一组参数\large \theta,使的这个概率的值是最大的,这既是极大释然估计了。下面我们推倒数学公式,考虑到数据是相互独立的,因此可以对每一条数据对应的概率函数进行求积,就得到了下式:

                                                    \large L(\theta ) = \prod_{i=1}^{m}P(y_i|x_i;\theta )                                                 \large \left ( 1 \right )

上式的函数我们称为释然函数,而我们就是通过这个式子求出该函数取得最大值时\large \theta对应的值,也就是极大释然估计。

但这里的困难在于连乘计算对于计算机来说资源耗费比较大,容易使内存下溢,我们有什么方法可改变连乘的缺点呢?把连乘改为连加就好了,可以做到吗?答案是肯定的,取对数就可以了,对数的性质大家没忘吧,我们把使用的对数的性质拿过来,如下所示:

                                                     \large log_a(MN) = log_aM+log_aN                                   \large \left ( 2 \right )

这样我们把\large \left ( 1 \right )式取log得到如下式:

                                                    \large ln(L(\theta )) = \sum_{i=1}^{m}ln(P(y_i|x_i;\theta ))                                   \large \left ( 3 \right )

上面就是我们常规的释然函数的定义,但是在机器学习中,我们一般都是求极小值或者平均值,那如何改呢?很简单加一个负号就是极小了,除以求和的个数m就是均值了,因此 \large \left ( 3 \right )就可以改为如下表达式了:

                                                  \large J(\theta )= ln(L(\theta )) = -\frac{1}{m}\sum_{i=1}^{m}ln(P(y_i|x_i;\theta ))             

假设机器学习算法\large f(x)就是概率函数\large P(y|x),需要注意的是如果真实的标记y是0,那么预测的\large f(x)应该也是接近于0,但是公式又不允许0的出现,因此在预测值为0的情况下,预测值使用 \large 1-f(x)来代替,最后代价函数如下所示:

                                 J(\theta )= ln(L(\theta )) = -\frac{1}{m}\sum_{i=1}^{m}(y_ilnf(x_i;\theta )+(1-y_i)ln(1-f(x_i;\theta )))

上式看起来可能很复杂,但是其实很简单,假如x 的真实分类为y=1,则我们就会使用上式求和第一项,第二项为0了不参与计算,如果真实分类为0.则我们使用求和第二项,第一项不参与计算,这个式子恰好避免了,当真实样本为0时无法求值的问题,同时上式也被称为交叉熵。好,到这里我们举一个最大释然的例子,这样大家理解的会更深入。

这里使用Logistic回归算法原理为例进行讲解,这样大家不仅可以理解最大释然还可以理解Logistic回归原理:

Logistic回归算法

先给出Logistic回归的sigmod函数数学表达式:

                                                                      \large f(x)=\frac{1}{1+e^{-x}}

 很简单的表达式,再看看它的性质,当\large x\rightarrow +\infty时,\large e^{-x}\rightarrow0,因此\large f(x)\rightarrow 1

                                                           当\large x\rightarrow- \infty时,\large e^{-x}\rightarrow+ \infty,因此\large f(x)\rightarrow 0

Logistic回归之所以称为Logistic是因为只有两个状态即0和1,这也是数电中的逻辑数即布尔数,那么为什么需要这样的回归呢?因为针对二分类问题,有两个这样的输出是最好不过了,但是具有逻辑性质还有其他函数,为什么就选择这这个函数呢?

现实中确实存在这样的信号,通信专业的同学都知道有一个信号是阶跃函数,该函数在0这一点瞬间改变到1,但是这个信号的瞬间跳跃很难处理,或者说频率太高而无法处理,而sigmod函数很好的处理了高频特性,他虽不是一瞬间改变状态,但是当数很大时很接近了,同时在0的左右处于非线性区间,这对后面的深度学习的激活函数很有用,今天就不深入讲了,等到后面实战深度学习在好好探讨该函数的其他性质。 

        实现Logistic回归的分类器,我们可以在每个特征上都乘以一个回归系数,然后所有的结果相加,将这个总和代入上面的sigmod函数中,进而得到0~1的数值,把大于0.5 的数据分为1类,把小于0.5的分为0类,所以Logistic回归也是一种概率估计。

确定好分类器后,剩下的就是找到一组最佳回归系数,这个回归系数如何找 ?这属于优化问题,优化问题,经常使用的是梯度下降算法, 在上篇的博客中,详细的探讨了什么是梯度,为什么梯度总是沿着函数增加的方向,梯度下降又是什么?在上篇博客中详细的解说了,不懂的可以查看我的这篇博客

        我们知道了,所谓梯度其实就是一阶函数的一阶偏导所组成的向量,因此我们只需要求出一阶偏导,代入x,梯度就找到了,但是呢我们的函数是含有未知数的即\large z = w_{0}x_{0}+w_{1}x_{1}+w_{2}x_{2}+.....+w_{n}x_{n},其中【\large w_{0},w_{1},,,,,w_{n}】是未知数,有未知数怎么求导,又怎么求该点的梯度呢?这时候就需要我们概率论的方面的知识了即最大释然估计了,直接给出最大释然的推倒工程的公式了:

上面的公式就是我们最后说的那个公式。

      先解释一下上面的符号意义,如果知道释然估计的同学,应该都能理解所谓的\large \Theta其实就是我们要求的权值向量\large W了,因为最大释然估计的意义就在于找到一组参数\large \Theta,使得发生的概率最大,例如Logistic回归的分为0或者1的概率最大,那既然已经求得表达式了。此时就可以求梯度了,根据上一篇的梯度理解可知对\large \Theta求偏导就好了:

需要解释一下,下面属于链式求导。

很简单吧,到这里,本节就结束了,下一节将详细介绍EM算法。其实我还是建议大家看看概率论课本的定义,相信有上面的理解再看课本应是很容易的事了。

猜你喜欢

转载自blog.csdn.net/weixin_42398658/article/details/84842960
NLP