HMER论文系列
1、论文阅读和分析:When Counting Meets HMER Counting-Aware Network for HMER_KPer_Yang的博客-CSDN博客
2、论文阅读和分析:Syntax-Aware Network for Handwritten Mathematical Expression Recognition_KPer_Yang的博客-CSDN博客
3、论文阅读和分析:A Tree-Structured Decoder for Image-to-Markup Generation_KPer_Yang的博客-CSDN博客
4、 论文阅读和分析:Watch, attend and parse An end-to-end neural network based approach to HMER_KPer_Yang的博客-CSDN博客
5、 论文阅读和分析:Multi-Scale Attention with Dense Encoder for Handwritten Mathematical Expression Recognition_KPer_Yang的博客-CSDN博客
6、 论文阅读和分析:Mathematical formula recognition using graph grammar_KPer_Yang的博客-CSDN博客
7、 论文阅读和分析:Hybrid Mathematical Symbol Recognition using Support Vector Machines_KPer_Yang的博客-CSDN博客
8、论文阅读和分析:HMM-BASED HANDWRITTEN SYMBOL RECOGNITION USING ON-LINE AND OFF-LINE FEATURES_KPer_Yang的博客-CSDN博客
内容:读论文,同时复习HMM
主要贡献:
1、提出使用HMM模型架构进行字符识别;
复习HMM模型
下面HMM引用:[GitHub - SmirkCao/Lihang: Statistical learning methods, 统计学习方法(第2版)李航] [笔记, 代码, notebook, 参考文献, Errata, lihang]
马尔可夫链
随机过程有两个维度的不确定性。马尔可夫为了简化问题,提出了一种简化的假设,即随机过程中各个状态 s t s_t st的概率分布,只与它的前一个状态 s t − 1 s_{t-1} st−1有关, 即 P ( s t ∣ s 1 , s 2 , s 3 , … , s t − 1 ) = P ( s t ∣ s t − 1 ) P(s_t|s_1, s_2, s_3, \dots,s_{t-1})=P(s_t|s_{t-1}) P(st∣s1,s2,s3,…,st−1)=P(st∣st−1)
这个假设后来被称为马尔可夫假设,而符合这个假设的随机过程则称为马尔可夫过程,也称为马尔可夫链。
数学之美,吴军
P ( s t ∣ s 1 , s 2 , s 3 , … , s t − 1 ) = P ( s t ∣ s t − 1 ) P(s_t|s_1, s_2, s_3, \dots,s_{t-1})=P(s_t|s_{t-1}) P(st∣s1,s2,s3,…,st−1)=P(st∣st−1)
时间和状态取值都是离散的马尔可夫过程也称为马尔可夫链。
隐含马尔可夫模型
P ( s 1 , s 2 , s 3 , … , o 1 , o 2 , o 3 , … ) = ∏ t P ( s t ∣ s t − 1 ) ⋅ P ( o t ∣ s t ) P(s_1,s_2,s_3,\dots,o_1,o_2,o_3,\dots)=\prod_tP(s_t|s_{t-1})\cdot P(o_t|s_t) P(s1,s2,s3,…,o1,o2,o3,…)=t∏P(st∣st−1)⋅P(ot∣st)
隐含的是状态 s s s
隐含马尔可夫模型由初始概率分布(向量 π \pi π), 状态转移概率分布(矩阵 A A A)以及观测概率分布(矩阵 B B B)确定.
隐马尔可夫模型 λ \lambda λ 可以用三元符号表示, 即
λ = ( A , B , π ) \lambda = (A, B, \pi) λ=(A,B,π)
其中 A , B , π A,B,\pi A,B,π称为模型三要素。
具体实现的过程中,如果观测的概率分布是定的,那么 B B B就是确定的。在hhmlearn中,实现了三种概率分布的HMM模型:MultinominalHMM,GaussianHMM,GMMHMM。还可以定义不同的emission probabilities,生成不同的HMM模型。
两个基本假设
-
齐次马尔科夫假设(状态)
P ( i t ∣ i t − 1 , o t − 1 , … , i 1 , o 1 ) = P ( i t ∣ i t − 1 ) , t = 1 , 2 , … , T P(i_t|i_{t-1},o_{t-1},\dots,i_1,o_1) = P(i_t|i_{t-1}), t=1,2,\dots,T P(it∣it−1,ot−1,…,i1,o1)=P(it∣it−1),t=1,2,…,T
注意书里这部分的描述假设隐藏的马尔可夫链在任意时刻 t t t的状态 → i t \rightarrow i_t →it
只依赖于其前一时刻的状态 → i t − 1 \rightarrow i_{t-1} →it−1
与其他时刻的状态 → i t − 1 , … , i 1 \rightarrow i_{t-1, \dots, i_1} →it−1,…,i1
及观测无关 → o t − 1 , … , o 1 \rightarrow o_{t-1},\dots,o_1 →ot−1,…,o1
也与时刻 t t t无关 → t = 1 , 2 , … , T \rightarrow t=1,2,\dots,T →t=1,2,…,T
-
观测独立性假设(观测)
P ( o t ∣ i T , o T , i T − 1 , o T − 1 , … , i t + 1 , o t + 1 , i t , i t − 1 , o t − 1 , … , i 1 , o 1 ) = P ( o t ∣ i t ) P(o_t|i_T,o_T,i_{T-1},o_{T-1},\dots,i_{t+1},o_{t+1},i_t,i_{t-1},o_{t-1},\dots,i_1,o_1)=P(o_t|i_t) P(ot∣iT,oT,iT−1,oT−1,…,it+1,ot+1,it,it−1,ot−1,…,i1,o1)=P(ot∣it)
书里这部分描述如下假设任意时刻 t t t的观测 → o t \rightarrow o_t →ot
只依赖于该时刻的马尔可夫链的状态 → i t \rightarrow i_t →it
与其他观测 → o T , o T − 1 , … , o t + 1 , o t − 1 , … , o 1 \rightarrow o_T,o_{T-1},\dots,o_{t+1},o_{t-1},\dots,o_1 →oT,oT−1,…,ot+1,ot−1,…,o1
及状态无关 → i T , i T − 1 , … , i t + 1 , i t − 1 , … , i 1 \rightarrow i_T,i_{T-1},\dots,i_{t+1},i_{t-1},\dots,i_1 →iT,iT−1,…,it+1,it−1,…,i1
注:用知乎一张图就说的很明白:
引用:HMM隐马尔可夫模型的例子、原理、计算和应用 - 知乎 (zhihu.com)
概率计算算法:前向概率与后向概率
给定马尔可夫模型 λ \lambda λ, 定义到时刻 t t t部分观测序列为 o 1 , o 2 , … , o t o_1, o_2, \dots ,o_t o1,o2,…,ot, 且状态 q i q_i qi的概率为前向概率, 记作
α t ( i ) = P ( o 1 , o 2 , … , o t , i t = q i ∣ λ ) \alpha_t(i)=P(o_1,o_2,\dots,o_t,i_t=q_i|\lambda) αt(i)=P(o1,o2,…,ot,it=qi∣λ)
给定马尔可夫模型 λ \lambda λ, 定义到时刻 t t t状态为 q i q_i qi的条件下, 从 t + 1 t+1 t+1到 T T T的部分观测序列为 o t + 1 , o t + 2 , … , o T o_{t+1}, o_{t+2}, \dots ,o_T ot+1,ot+2,…,oT的概率为后向概率, 记作
β t ( i ) = P ( o t + 1 , o t + 2 , … , o T ∣ i t = q i , λ ) \beta_t(i)=P(o_{t+1},o_{t+2},\dots,o_T|i_t=q_i, \lambda) βt(i)=P(ot+1,ot+2,…,oT∣it=qi,λ)
关于 α 和 β 这两个公式 , 仔细看下 , 细心理解 . \color{red} 关于\alpha 和\beta 这两个公式, 仔细看下, 细心理解. 关于α和β这两个公式,仔细看下,细心理解. 前向概率从前往后递推, 后向概率从后向前递推。
前向算法
输入: λ , O \lambda , O λ,O
输出: P ( O ∣ λ ) P(O|\lambda) P(O∣λ)
初值
α 1 ( i ) = π i b i ( o 1 ) , i = 1 , 2 , … , N \alpha_1(i)=\pi_ib_i(o_1), i=1,2,\dots,N α1(i)=πibi(o1),i=1,2,…,N
观测值 o 1 o_1 o1, i i i的含义是对应状态 q i q_i qi这里 α \alpha α 是 N N N维向量, 和状态集合 Q Q Q的大小 N N N有关系. α \alpha α是个联合概率.
递推
α t + 1 ( i ) = [ ∑ j = 1 N α t ( j ) a j i ] b i ( o t + 1 ) , i = 1 , 2 , … , N , t = 1 , 2 , … , T − 1 \color{red}\alpha_{t+1}(i) = \left[\sum\limits_{j=1}^N\alpha_t(j)a_{ji}\right]b_i(o_{t+1})\color{black}, \ i=1,2,\dots,N, \ t = 1,2,\dots,T-1 αt+1(i)=[j=1∑Nαt(j)aji]bi(ot+1), i=1,2,…,N, t=1,2,…,T−1
转移矩阵 A A A维度 N × N N\times N N×N, 观测矩阵 B B B维度 N × M N\times M N×M, 具体的观测值 o o o可以表示成one-hot形式, 维度 M × 1 M\times1 M×1, 所以 α \alpha α的维度是 α = α A B o = 1 × N × N × N × N × M × M × N = 1 × N \alpha = \alpha ABo=1\times N\times N\times N \times N\times M \times M\times N=1\times N α=αABo=1×N×N×N×N×M×M×N=1×N终止
P ( O ∣ λ ) = ∑ i = 1 N α T ( i ) = ∑ i = 1 N α T ( i ) β T ( i ) P(O|\lambda)=\sum\limits_{i=1}^N\alpha_T(i)=\color{red}\sum\limits_{i=1}^N\alpha_T(i)\beta_T(i) P(O∣λ)=i=1∑NαT(i)=i=1∑NαT(i)βT(i)
注意, 这里 O → ( o 1 , o 2 , o 3 , … , o t ) O\rightarrow (o_1, o_2, o_3,\dots, o_t) O→(o1,o2,o3,…,ot), α i \alpha_i αi见前面前向概率的定义 P ( o 1 , o 2 , … , o t , i t = q i ∣ λ ) P(o_1,o_2,\dots,o_t,i_t=q_i|\lambda) P(o1,o2,…,ot,it=qi∣λ), 所以, 对 i i i求和能把联合概率中的 I I I消掉.前向算法的关键是其局部计算前向概率, 然后利用路径结构将前向概率"递推"到全局.减少计算量的原因在于每一次计算直接引用前一时刻的计算结果, 避免重复计算.
前向算法计算 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)的复杂度是 O ( N 2 T ) O(N^2T) O(N2T)阶的,直接计算的复杂度是 O ( T N T ) O(TN^T) O(TNT)阶,所以 T = 2 T=2 T=2时候并没什么改善。
红色部分为后补充了 β T ( i ) \beta_T(i) βT(i)项,这项为1,此处注意和后面的后向概率对比。
后向算法
输入: λ , O \lambda , O λ,O
输出: P ( O ∣ λ ) P(O|\lambda) P(O∣λ)
- 终值
β T ( i ) = 1 , i = 1 , 2 , … , N \beta_T(i)=1, i=1,2,\dots,N βT(i)=1,i=1,2,…,N
在 t = T t=T t=T时刻, 观测序列已经确定.
- 递推
β t ( i ) = ∑ j = 1 N a i j b j ( o t + 1 ) β t + 1 ( j ) , i = 1 , 2 , … , N , t = T − 1 , T − 2 , … , 1 \color{red}\beta_t(i)=\sum\limits_{j=1}^Na_{ij}b_j(o_{t+1})\beta_{t+1}(j)\color{black}, i=1,2,\dots,N, t=T-1, T-2,\dots,1 βt(i)=j=1∑Naijbj(ot+1)βt+1(j),i=1,2,…,N,t=T−1,T−2,…,1
从后往前推
β = A B o β = N × N × N × M × M × N × N × 1 = N × 1 \beta = ABo\beta = N \times N \times N \times M \times M \times N \times N \times 1 = N \times 1 β=ABoβ=N×N×N×M×M×N×N×1=N×1
P ( O ∣ λ ) = ∑ i = 1 N π i b i ( o 1 ) β 1 ( i ) = ∑ i = 1 α 1 ( i ) β 1 ( i ) P(O|\lambda)=\sum\limits_{i=1}^N\pi_ib_i(o_1)\beta_1(i)=\color{red}\sum\limits_{i=1}\alpha_1(i)\beta_1(i) P(O∣λ)=i=1∑Nπibi(o1)β1(i)=i=1∑α1(i)β1(i)
- 这里需要注意下,按照后向算法, β \beta β在递推过程中会越来越小,如果层数较多,怕是 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)会消失
- 另外一个要注意的点 o t + 1 β t + 1 \color{red}o_{t+1}\beta_{t+1} ot+1βt+1
- 注意,红色部分为后补充,结合前面的前向概率最后的红色部分一起理解。
小结
求解的都是观测序列概率
观测序列概率 P ( O ∣ λ ) P(O|\lambda) P(O∣λ)统一写成
P ( O ∣ λ ) = ∑ i = 1 N ∑ j = 1 N α t ( i ) a i j b j ( o t + 1 β t + 1 ( j ) ) , t = 1 , 2 , … , T − 1 P(O|\lambda)=\sum_{i=1}^N\sum_{j=1}^N\alpha_t(i)a_{ij}b_j(o_{t+1}\beta_{t+1}(j)),\ t=1,2,\dots,T-1 P(O∣λ)=i=1∑Nj=1∑Nαt(i)aijbj(ot+1βt+1(j)), t=1,2,…,T−1P ( O ∣ λ ) = α A B o β P(O|\lambda) = \alpha ABo\beta P(O∣λ)=αABoβ
其实前向和后向不是为了求整个序列 O O O的概率,是为了求中间的某个点 t t t,前向后向主要是有这个关系:
α t ( i ) β t ( i ) = P ( i t = q i , O ∣ λ ) \alpha_t(i)\beta_t(i)=P(i_t=q_i,O|\lambda) αt(i)βt(i)=P(it=qi,O∣λ)
当 t = 1 t=1 t=1或者 t = T − 1 t=T-1 t=T−1的时候,单独用后向和前向就可以求得 P ( O ∣ λ ) P(O|\lambda) P(O∣λ),分别利用前向和后向算法均可以求解 P ( O ∣ λ ) P(O|\lambda) P(O∣λ),结果一致。
利用上述关系可以得到下面一些概率和期望,这些概率和期望的表达式在后面估计模型参数的时候有应用。
概率与期望
- 输入模型 λ \lambda λ与观测 O O O,输出在时刻 t t t处于状态 q i q_i qi的概率 γ t ( i ) \gamma_t(i) γt(i)
- 输入模型 λ \lambda λ与观测 O O O,输出在时刻 t t t处于状态 q i q_i qi且在时刻 t + 1 t+1 t+1处于状态 q j q_j qj的概率 ξ t ( i , j ) \xi_t(i,j) ξt(i,j)
- 在观测 O O O下状态 i i i出现的期望值
- 在观测 O O O下状态 i i i转移的期望值
- 在观测 O O O下状态 i i i转移到状态 j j j的期望值
模型架构
使用三个HMM模型进行分类
{ x o } \{x_o\} { xo}:在线特征; { x v } \{x_v\} { xv}:离线特征; { x h } \{x_h\} { xh}:离线特征;
注:这篇论文的特征基本是参考其他另外两篇的,只是做了HMM的多层架构进行集成,特征方法在另外两篇论文再学习。
参考:
1、《HMM-BASED HANDWRITTEN SYMBOL RECOGNITION USING ON-LINE AND OFF-LINE FEATURES》
2、HMM隐马尔可夫模型的例子、原理、计算和应用 - 知乎 (zhihu.com)