- Algorithm
- Incremental Method
- Simulation
- Backtracking
- Dynamic Programming
- Largest Empty Interval
- Location Allocation Problem
- Knapsack Problem
- Algorithm Analysis
- Data
- Sort
- Set
- 排序资料结构: Search Tree 系列
- Sequence 资料结构: Array / List
- 大量 Point 资料结构: k-Dimensional Tree
- Region 资料结构: Uniform Grid
- Graph
- Tree 资料结构: Heavy-Light Decomposition
- Graph Spectrum(Under Construction!)
- Tree
- Binary Tree
- Directed Acyclic Graph
- Articulation Vertex / Bridge
- Reachability
- Bipartite Graph
- Clique(Under Construction!)
- Planar Graph
- Path
- Single Source Shortest Paths: Label Correcting Algorithm
- Shortest Walk
- Cycle
- Spanning Tree
- s-t Flow
- Feasible s-t Flow
- Cut
- Matching
- T-Join
- Hamilton Circuit
- Domination
- Coloring
- Labeling
- Vector Product
- Sweep Line
- Rectangle
- Rectangle
- Polygon
- Convex Hull
- 3D Convex Hull(Under Construction!)
- Half-plane Intersection
- Voronoi Diagram
- Triangulation
- Metric
- Number
- Sequence
- Function (ℝ)
- Matrix
- Root Finding
- Linear Equations
- Functional Equation
- Optimization
- Interpolation
- Curve
- Regression
- Estimation
- Clustering
- Transformation(Under Construction!)
- Wave (ℝ)
- Representation
- Signal
- State(Under Construction!)
- Markov Chain
- System(Under Construction!)
- Markov Model
- Function
- Gray Code
- Base
- Divisor
- Prime
- Residue
- Lattice
- Series(Under Construction!)
- Average Number
- Nim
- String
- Longest Increasing Subsequence
- Longest Common Subsequence
- Approximate String Matching
- String Matching
- String Matching
- String Matching: Inverted Index
- Count Substrings
- Palindrome
- Language
- Code
- Compression
- Correction
- Encryption
- Transmission
- Data
- Text
- 2D Graphics
- Audio
- Audition(Under Construction!)
- Image
- Vision(Under Construction!)
- Model
- Motion(Under Construction!)
- Camera(Under Construction!)
- Glass(Under Construction!)
- Computer
- Physics
- Biology
- Medicine
- Finance
- Education
- Standard Library
Markov Model
Markov Model
马可夫模型大意是:选一个状态作为起点,然后沿著边随意走访任何一个状态,一直走一直走,沿途累计机率,走累了就停在某个状态。
熟悉“ 图论 ”的读者应该很快就能上手,马可夫模型的外观看起来就是图──只不过代数符号多得令人生厌。
建议阅读:L. Rabiner, A Tutorial on Hidden Markov Models and Selected Applications in Speech Recognition, Proceedings of the IEEE, vol. 77, No. 2, February 1989.
State, S
图片中,每一个圆圈叫做一个“状态”。马可夫模型一共有 N 个状态,通常标作 s1到 sN。N 是我们自行设定的常数。
全部状态构成的集合,标作大写 S。
Transition Probability, A
每一个状态都会射出 N 条边,这 N 条边分别连向每一个状态,这 N 条边的数值都是机率,这 N 条边的数值皆介于 0 到 1,这 N 条边的数值总和必为 1,满足机率公设。
一条由状态 si到状态 sj的边,其数值通常标作 aij。亦可标作条件机率 P( sj | si ),意思是现在在状态 si、要来去状态 sj。亦可套用稍后提到的状态序列,标作 P( qt+1 = j | qt = i )。
全部边构成的集合,标作 A。通常把 A 看作一个 N×N 矩阵。
写程式时,我们可以利用图的资料结构 adjacency matrix 储存全部的数值。当 A 有很多数值是零,去掉一些边之后,也可以改用 adjacency lists。
Initial Probability, Π
我们可以选择任何一个状态作为起点。机率总和为 1。
绘制图片时,我们可以设计一个虚幻状态 s0,让 s0射出 N 条虚幻边,分别连向每一个状态,其数值满足机率公设。如此一来我们就可以从冥冥之中的 s0开始行动。
这 N 条虚幻边的数值通常标作π1到πN。亦可标作机率 P( s1 ) 到 P( sN )。亦可套用稍后提到的状态序列,标作 P( q1 = 1 ) 到 P( q1 = N )。
这 N 条虚幻边构成的集合,标作Π。通常把Π看作一个 N 维向量、一个 N×1 矩阵。
写程式时,通常我们不会设计一个虚幻的状态 s0,而是把状态 s1到 sN重新标作 s0到 sN-1。
State Sequence, q1 q2 ...... qT
选定起点后,可以沿著边,到处走来走去,一路走过 T 个状态以及 T-1 条边之后,就停下来。T 是我们自行设定的常数。
一条路径,通常标作 q1 q2 ...... qT,为途经的状态编号。
一条路径的机率,可以写成πq1 × aq1q2 × ...... × aqT-1qT,也可以写成 P( sq1 ) × P( sq2 | sq1 ) × ...... × P( sqT | sqT-1 )。
Hidden Markov Model
Observation, V
隐藏马可夫模型添加了一个新要素:每当造访一个状态,就立刻从 M 个值当中,喷出其中一个值。每一个状态都是喷出相同的 M 种值,这 M 个值通常标作 v1到 vM。M 是我们自行设定的常数。
全部观察构成的集合,标作大写 V。
Observation Probability, B
每一个状态喷出这 M 种值的机率都不相同。
状态 si喷出 vk的机率,通常标作 bi( k ) 或者简单标作 bik。亦可标作条件机率 P( vk | si ),意思是现在在状态 si、喷出观察 vk。亦可套用状态序列与观察序列,标作 P( ot = k | qt = i )。
每个状态各自的喷出机率构成的集合,标作 B。通常把 B 看作 N 个函数,或者简单地看作一个 N×M 矩阵。
Observation Sequence, o1 o2 ...... oT
走 T 步后,一路上 T 个状态个别喷出的值的编号。
有了状态序列与观察序列,一条路径的机率,可以写成πq1 × bq1( o1 ) × aq1q2 × bq2( o2 ) × ...... × aqT-1qT × bqT( oT ),也可以写成 P( sq1 ) × P( vo1 | sq1 ) × P( sq2 | sq1 ) × P( vo2 | sq2 ) × ...... × P( sqT | sqT-1 ) × P( voT | sqT )。我想各位差不多眼花撩乱了。名可名,非常名,若能领会原理就不用刻意背诵代数了。
Continuous Hidden Markov Model
Gaussian Mixture Model
之前说,每个状态都会喷出 M 种固定的值。然而现实生活中,观察值通常是实数,也通常有误差,不见得恰好就是这 M 种值。
一个直觉的解决方案是假设误差呈常态分布:以常态分布的平均数μ,代表正确的喷出数值;以常态分布的变异数σ2,控制误差范围。M 个观察值分别制作 M 个常态分布,标作 N( v , μ1 , σ12 ) 到 N( v , μM , σM2 )。
状态不再喷出 k 种值,而是有 k 种喷出管道。观察值不再是固定的、离散的数值 v1到 vM,而是变动的、连续的数值 v。
使用第 k 个喷出管道的机率,仍标作 bi( k )。在第 k 个喷出管道,喷出数值 v 的机率,是一个常态分布函数 N( v , μk , σk2 );v 代入一个实际数值,就能计算其喷出机率。
当各个常态分布的平均数很接近,或者变异数很大时,不同的喷出管道可能喷出相同数值。状态 si喷出数值 v 的机率,M 个喷出管道都必须累计,为∑i=1~M [ bi( k ) × N( v , μk , σk2 ) ]。
综观整个过程,是把 M 个常态分布以不同比重叠加起来,合成一个分布──此概念称作高斯混合模型,可以应用在许多地方,连续版本的 HMM 便是一例。另外,通常会将 bi( k ) 重新标作 cik,以呼应加权比重的概念。
写程式时,我们不会预先叠加起来,而是分别记录 M 个常态分布的平均数和变异数。
每个状态喷出不同的观察值
套用高斯混合模型,观察值从原先的离散数值变成了连续数值。换个角度想,套用高斯混合模型,就能制造任何一种我们想要的连续分布。
每个状态可以使用不同平均数、不同变异数的常态分布,甚至可以使用不同数量的常态分布。状态 si使用的常态分布,标作 N( v , μik , σik2 )。
观察值推广到高维度
观察值可以从一个值推广为一个向量。其实也就是每个维度分开处理罢了。
至于 Learning Problem,则要额外更新常态分布的平均数、变异数、加权比重了:
路径第一步,穿过状态 si。 πi = γ1(i) 分子是穿过边 aij。分母是穿过状态 si。 ∑t=1~T-1 [ ξt(i,j) ] aij = ————————————————————— ∑t=1~T [ γt(i) ] 分子是穿过状态 si、使用第 k 个喷出管道。分母是穿过状态 si。 ∑t=1~T [ γtk(i) ] cik = ———————————————————————— ∑t=1~T ∑k=1~M [ γtk(i) ] 分子是穿过状态 si、使用第 k 个喷出管道、喷出数值的平均数。 ∑t=1~T [ γtk(i) ] * ot μik = ———————————————————————— ∑t=1~T [ γtk(i) ] 分子是穿过状态 si、使用第 k 个喷出管道、喷出数值的共变异矩阵。 ∑t=1~T [ γtk(i) ] * (ot - μik)(ot - μik)T Σik = —————————————————————————————————————————— ∑t=1~T [ γtk(i) ]
至此产生了连续版本的 HMM,已经可以应付各种情况了!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论