• 机器学习模型之隐马尔可夫(HMM)


    1、隐马尔可夫模型简介

    隐马尔可夫模型是一种生成模型,其广泛的应用于自然语言处理,语音识别,生物信息领域。

    其模型可以描述为由状态集合,观测集合,初始集合生成相应的状态序列和观测序列的任务。定义如下

    设Q表示状态集合,V表示观测集合。状态集合的个数为N,观测集合的个数为M,

    [Q = {q_{1},q_{2}......q_{N}} \ V = {v_{1},v_{2}......v_{M}} ]

    I是长度为T的状态序列,O是长度为T的观测序列。

    [I = {i_{1},i_{2}....i_{T}} \ O = {o_{1},o_{2}....o_{T}} ]

    A是状态转移概率矩阵。表示由状态(q_{i})转移到状态(q_{j})的概率大小

    [A = [a_{ij}]_{N * N} ]

    B是观测概率矩阵,表示由状态(q_{j})生成观测(o_{k})的概率值。

    [B = [b_{j}(k)]_{N*M} ]

    (pi)表示状态初始值

    [pi = [pi_{i}] ]

    所以,综上,隐马尔可夫模型可以用一个三元组来表示

    [lambda = (A,B,pi) ]

    隐马尔可夫模型有两个假设:1、任何时刻t的状态只依赖于前一个时刻的状态。2、任意时刻的观测输出只依赖于当前时刻的状态。

    隐马尔可夫模型有三个基本问题,接下来我们就一一进行详解,分别是:

    • 1、概率计算问题
      给定(lambda),计算观测序列O的概率,即(p(O|lambda))
    • 2、学习问题
      给定观测序列O,学习参数(lambda)使得(p(O|lambda))最大
    • 3、预测问题
      给定观测序列O和参数(lambda),求使得(p(I|O))最大的观测序列

    2、概率计算问题

    概率计算问题是已知参数(lambda)来计算给定的观测序列O,我们有三种方法来计算(P(O|lambda)),暴力解决法,前向计算法,后向计算法

    2.1、暴力解决法

    根据给定的参数(lambda)我们可以穷举出所有得到序列(O={o_{1},o_{2}....o_{T}})的可能性,并将相应的可能性相加即可得到最终的结果。对于任意一个状态序列(I={i_{1},i_{2}....i_{T}})来说,(P(I|lambda) = pi_{i_{1}} a_{i_{1}i_{2}} a_{i_{2}i_{3}}......a_{i_{T-1}i_{T}}),对于某一个固定的序列I来说,(P(O|I,lambda) = b_{i_{1}}(o_{1}) b_{i_{2}}(o_{2})....b_{i_{T}}(o_{T})),则对于一条固定的状态序列来说

    [P(O,I|lambda) = pi_{i_{1}} b_{i_{1}}(o_{1}) a_{i_{1}i_{2}} b_{i_{2}}(o_{2}) ...... a_{i_{T-1}i_{T}} b_{i_{T}}(o_{T}) ]

    那么,对于所有的观测序列I来说,其概率为

    [P(O|lambda) = sumlimits_{I} pi_{i_{1}} b_{i_{1}}(o_{1}) a_{i_{1}i_{2}} b_{i_{2}}(o_{2}) ...... a_{i_{T-1}i_{T}} b_{i_{T}}(o_{T}) ]

    这里表示说,对于每一条状态序列来说,我们都可以得到相应的概率输出,最终,我们将所有的概率做一个加和,即可得到结果。

    这种方法理论上是可行的,但在实际操作的时候,其时间复杂度为(O(TN^{T})),这里(N^{T})表示一个排列组合,即将个数为N的状态放在T个时间上的排列组合。(T)表示时间步骤,对于每一个固定的状态序列来说,都需要复杂度为(O(T)),所以最终的时间复杂度为(O(TN^{T})),所以,这种方法由于时间复杂度较高,实际中不适用。

    2.2、前向计算法

    前向算法的逻辑如下所示。前向算法的整体逻辑是,首先每一个时间t,计算当前时间的每个状态到当前序列的概率值,在时间t+1步,将上一个时间t计算出来的概率值进行相加,然后再计算t+1时刻的每个状态的概率值。再最后一步T,将当前计算的状态概率值相加即可。时间复杂度为(O(N^{2}T))

    2.3、后向计算法

    后向计算法的逻辑如下所示。其整体逻辑是从后向前进行计算,在每一个t+1步计算所有状态的概率值,在t步利用t+1计算的概率值和当前的概率转移等得到当前所有状态的概率值。

    3、学习问题

    学习问题是根据观测序列O来学习参数(lambda,I)这两个参数,由于参数有含有隐变量(I),这块需要用EM算法(这块的推导稍微有些复杂,后续弄懂了再推吧)

    4、预测问题

    预测问题是已知(lambda)(O),预测状态序列(I^{*} = i_{1}^{*},i_{2}^{*}.....i_{t}^{*}),可以用动态规划的方法来解决(也叫维特比算法)如下


    这里可以用这个图来进行理解,维特比算法的思想是对于前一个时间t的状态概率来说,转移到时间t+1的状态中,我们选择可以使概率值最大的状态概率,并用一个集合记录这个最大概率是从时刻t的哪个状态来的,这里选择最大的概率一点好处就是少算了许多不值得算的概率,减少了计算量。换一种方式理解的话,假设我们状态有3个,时间T为10,那其实我们构造了两个3 * 10的矩阵,第一个矩阵为(W_{ij}),表示第i个状态在第j个时刻的输出概率值,这个值根据(max(W_{1j-1}*a_{1j},W_{2j-1}*a_{2j},W_{3j-1}*a_{3j})*b_{j}(o))公式得到,而第二个矩阵(V_{ij})表示第i个状态的在第j个时刻的最大值是由j-1时刻的哪个状态得来的,比如刚才式子中最大值是第二个即(W_{2j-1}*a_{2j}),则(V_{ij} = 2)

  • 相关阅读:
    【译文】不是所有的 bug 都值得修复的
    11月第5周业务风控关注|重磅!瓜子二手车“遥遥领先”被罚天价1250万
    AutoCAD .NET二次开发(四)
    AutoCAD .NET二次开发(三)
    ArcGIS10.2下调试10.1的程序
    再遇1402,注册表权限问题
    ArcGIS Add-in——自动保存编辑
    只打开一个子窗体
    获取编辑器两种方法
    Adobe Acrobat Pro 11安装激活
  • 原文地址:https://www.cnblogs.com/stephen-goodboy/p/13054970.html
Copyright © 2020-2023  润新知