文章目录
- 1. 有向概率图模型(贝叶斯网络)
- 1.1 概率分布
- 1.2 表示
- 1.3 条件独立性
- 1.3.2 检验条件独立算法(贝叶斯球)
- 2. 无向图模型(马尔科夫随机场)
- 2.1 条件独立性
- 2.2 概率分布
- 2.3 表示
- 无向图的条件独立性判断
- 3.概率推断和学习
- 3.1 推断
- 3.1.1 变量消去法(动态规划)
- 4.HMM-->CRF
- 4.1 HMM--是个序列
- 4.1.1 推断问题(evaluate)
- 4.1.2 viterbi decoding解码
- 4.1.3 学习,参数估计
- 4.1.4计算实例
- 4.1.5 EM(baum-welch算法)的上溢出和下溢出
- 5 CRF
- 5.1 推断
- 4.PLSA
- 5.LDA狄利克雷分布
code
- 传统的机器学习:
- ◼ “如何把我的问题映射到标准的方法”?
- 基于模型的机器学习:
- ◼ “什么是适合我的问题的好的模型”?
- 目标:用一个框架创建一系列定制的模型
- 基础的问题
- 如何表示世界P(x)
- 如何推断P(x|D)
- 如何学习模型M=argmaxF(d;m)
- 另一些
- 能够用模型去描述这些任务
- 给定观测数据能够逆向推理
- 使用概率处理不确定性
- 概率图模型PGM=概率+结构
- why图
- 直观地刻画世界
- 交流、计算、发展的语言
- 元素
- 节点–随机变量和状态
- 边——概率关系
- 分类
- 有向图(贝叶斯网络):因果关系
- 无向图(马尔科夫随机场):关联关系
- why图
1. 有向概率图模型(贝叶斯网络)
- 有向边:
- 因果关系
- 常见
- 隐马尔科夫模型
- ◼ 卡尔曼滤波
- ◼ 因子分析
- ◼ 概率主成分分析
- ◼ 独立成分分析
- ◼ 混合高斯
- ◼ 转换成分分析
- ◼ 概率专家系统
- ◼ Sigmoid 信念网络
- ◼ 层次化混合专家
- ◼ 等等
- 关注三个方面
- 概率分布–》用于查询、推断
- 表示 ------》具体实现
- 条件独立–》模型的解释
1.1 概率分布
- 一个概率图—一族概率分布
- 每个概率可以随意,是泊松还是高斯还是什么
- 每个节点对应一个P(xi∣xπi),xπi是xi的父节点P(x_i|x_{\pi_i}),x_{\pi_i}是x_i的父节点P(xi∣xπi),xπi是xi的父节点
- 联合分布表示为P(x1,x2,...,xn)=Πi=1nP(xi∣xπi)P(x_1,x_2,...,x_n)=\Pi_{i=1}^n P(x_i|x_{\pi_i})P(x1,x2,...,xn)=Πi=1nP(xi∣xπi)
- 图中:P(x1,x2,x3,x4,x5,x6)=P(x1)P(x2∣x1)P(x3∣x1)P(x4∣x2)P(x5∣x3)P(x6∣x2,x5)P(x_1,x_2,x_3,x_4,x_5,x_6)=P(x_1)P(x_2|x_1)P(x_3|x_1)P(x_4|x_2)P(x_5|x_3)P(x_6|x_2,x_5)P(x1,x2,x3,x4,x5,x6)=P(x1)P(x2∣x1)P(x3∣x1)P(x4∣x2)P(x5∣x3)P(x6∣x2,x5)
- 图中:P(x1,x2,x3,x4,x5,x6)=P(x1)P(x2∣x1)P(x3∣x1)P(x4∣x2)P(x5∣x3)P(x6∣x2,x5)P(x_1,x_2,x_3,x_4,x_5,x_6)=P(x_1)P(x_2|x_1)P(x_3|x_1)P(x_4|x_2)P(x_5|x_3)P(x_6|x_2,x_5)P(x1,x2,x3,x4,x5,x6)=P(x1)P(x2∣x1)P(x3∣x1)P(x4∣x2)P(x5∣x3)P(x6∣x2,x5)
1.2 表示
- 贝叶斯网络使用一系列变量间局部关系紧凑地表示联合概率分布
- 空间复杂度O(2n)−−>O(n∗2k)O(2^n)-->O(n*2^k)O(2n)−−>O(n∗2k)
1.3 条件独立性
-
why有条件独立性
- 因为有边不存在
-
找条件独立性
- 使用图分离吗?
- 给定x2和x3,x1和x6独立
- 给定x1和x6,x2和x3不一定独立
- 使用图分离吗?
-
图中存在的条件独立性
- 给定一个节点的父节点,该节点和其祖先节点条件独立
- P(xi⊥xvi∣xπi)P(x_i ⊥ x_{v_i}|x_{\pi_i})P(xi⊥xvi∣xπi)
- 证明x4⊥x1,x3x_4⊥{x_1,x_3}x4⊥x1,x3
- P(x1,x2,x3,x4)=Σx5Σx6P(x1,x2,x3,x4,x5,x6)=P(x1)P(x2∣x1)P(x3∣x1)P(x4∣x2)Σx5P(x5∣x3)Σx6P(x6∣x2,x5)=P(x1)P(x2∣x1)P(x3∣x1)P(x4∣x2)P(x_1,x_2,x_3,x_4)=\Sigma_{x_5}\Sigma_{x_6}P(x_1,x_2,x_3,x_4,x_5,x_6)=P(x_1)P(x_2|x_1)P(x_3|x_1)P(x_4|x_2)\Sigma_{x_5}P(x_5|x_3)\Sigma_{x_6}P(x_6|x_2,x_5)=P(x_1)P(x_2|x_1)P(x_3|x_1)P(x_4|x_2)P(x1,x2,x3,x4)=Σx5Σx6P(x1,x2,x3,x4,x5,x6)=P(x1)P(x2∣x1)P(x3∣x1)P(x4∣x2)Σx5P(x5∣x3)Σx6P(x6∣x2,x5)=P(x1)P(x2∣x1)P(x3∣x1)P(x4∣x2)
- P(x1,x2,x3)=Σx4P(x1)P(x2∣x1)P(x3∣x1)P(x4∣x2)=P(x1)P(x2∣x1)P(x3∣x1)P(x_1,x_2,x_3)=\Sigma_{x_4}P(x_1)P(x_2|x_1)P(x_3|x_1)P(x_4|x_2)=P(x_1)P(x_2|x_1)P(x_3|x_1)P(x1,x2,x3)=Σx4P(x1)P(x2∣x1)P(x3∣x1)P(x4∣x2)=P(x1)P(x2∣x1)P(x3∣x1)
- P(x4∣x1,x2,x3)=P(x1,x2,x3,x4)/P(x1,x2,x3)=P(x4∣x2)P(x_4|x_1,x_2,x_3)=P(x_1,x_2,x_3,x_4)/P(x_1,x_2,x_3)=P(x_4|x_2)P(x4∣x1,x2,x3)=P(x1,x2,x3,x4)/P(x1,x2,x3)=P(x4∣x2)
- 三个结构
- 给定一个节点的父节点,该节点和其祖先节点条件独立
-
对于第三个:已知Y,则x,z就不独立了
- P(x|y,z)!=p(x|y)
-
解释消除
1.3.2 检验条件独立算法(贝叶斯球)
- 下面图对应于已知x1、x6看x2的球可否到x3去
- 黑球已知
2. 无向图模型(马尔科夫随机场)
- 定义无向图的两种方式
- U1:通过枚举所有图上极大团的势函数的可能选项
- U2:通过生命图G上的所有条件独立断言
- Hammersley-clifford定理:U1==U2
- 对应于图G=(V,E)的一个分布具有局部马尔科夫性, 是指如果给定任意一节点的邻居,该点和其余节点条件独立
- Hammersley-Clifford定理: 如果分布是严格正并且满足局部马尔科夫性质,那么它就会像对应的图G那样分解
2.1 条件独立性
- 朴素图理论分割
- 分隔开后不可达–则无关
- 无向图和有向图能否转换?
- 不行
- 不行
2.2 概率分布
- 有向图: 利用 “局部” 参数(条件概率)去表示联合概率
- 无向图: 是否也可以用条件概率去表示联合?
- 一致性问题
- 放弃条件概率(有环所以不可以)
- 失去局部概率表示
- 保持独立地任意地选择这些函数的能力
- 保证所有重要的联合表示可以表示为局部函数的积
- 关键问题: 决定局部函数的定义域
- 条件独立: 图分隔
- ◼团(Clique)
- 图上的团是一个完全连接的节点子集
- 局部函数s不应该被定义在超出团的域上
- ◼极大团
- 图的极大团是指那些没法再增加额外点的团,否则就会不满足完全连接的性质
- 不失一般性,我们可以把局部函数定义到极大团上,因为它包含所有可能的依赖
- ◼势函数 (局部参数化)
- ϕxc(xc)\phi_{x_c}(x_c)ϕxc(xc): 定义在极大团𝑥𝑐上的势函数
- 不是边际概率,也不是条件概率
- 自然的解释:一致性,约束,能量。。。
- 将函数表示为一种无约束的形式
- P(x)=1ZΠc∈CϕXc(xc)=1ZΠc∈Cexp(−HC(XC))=1Zexp(−Σc∈CHC(XC))=1Zexp(−H(x))P(x)=\frac{1}{Z}\Pi_{c\in C} \phi_{X_c}(x_c)=\frac{1}{Z}\Pi_{c\in C} exp(-H_C(X_C))=\frac{1}{Z} exp(-\Sigma_{c\in C}H_C(X_C))=\frac{1}{Z} exp(-H(x))P(x)=Z1Πc∈CϕXc(xc)=Z1Πc∈Cexp(−HC(XC))=Z1exp(−Σc∈CHC(XC))=Z1exp(−H(x))—玻尔兹曼分布(exp保证它恒正
- Z=ΣxΠc∈CϕXc(xc)=Σxexp(−H(x))Z=\Sigma_x\Pi_{c\in C} \phi_{X_c}(x_c)=\Sigma_x exp(-H(x))Z=ΣxΠc∈CϕXc(xc)=Σxexp(−H(x))
- P(x)=1ZΠc∈CϕXc(xc)=1ZΠc∈Cexp(−HC(XC))=1Zexp(−Σc∈CHC(XC))=1Zexp(−H(x))P(x)=\frac{1}{Z}\Pi_{c\in C} \phi_{X_c}(x_c)=\frac{1}{Z}\Pi_{c\in C} exp(-H_C(X_C))=\frac{1}{Z} exp(-\Sigma_{c\in C}H_C(X_C))=\frac{1}{Z} exp(-H(x))P(x)=Z1Πc∈CϕXc(xc)=Z1Πc∈Cexp(−HC(XC))=Z1exp(−Σc∈CHC(XC))=Z1exp(−H(x))—玻尔兹曼分布(exp保证它恒正
- 非负实值函数
- 势函数得到的联合概率分布
- P(x)=1ZΠc∈CϕXc(xc)P(x)=\frac{1}{Z}\Pi_{c\in C} \phi_{X_c}(x_c)P(x)=Z1Πc∈CϕXc(xc)
- Z=ΣxΠc∈CϕXc(xc)Z=\Sigma_x\Pi_{c\in C} \phi_{X_c}(x_c)Z=ΣxΠc∈CϕXc(xc)–除以Z,保证p(x)是个概率,因为势函数得到的是个实数
- P(x)=1ZΠc∈CϕXc(xc)P(x)=\frac{1}{Z}\Pi_{c\in C} \phi_{X_c}(x_c)P(x)=Z1Πc∈CϕXc(xc)
- ϕxc(xc)\phi_{x_c}(x_c)ϕxc(xc): 定义在极大团𝑥𝑐上的势函数
2.3 表示
-
空间复杂度O(2n)−−>O(r∗2k),r−团的数目O(2^n)-->O(r*2^k),r-团的数目O(2n)−−>O(r∗2k),r−团的数目
-
why不用边际概率P(xc)作为势函数?
- P(x)=1ZΠc∈CϕXc(xc)P(x)=\frac{1}{Z}\Pi_{c\in C} \phi_{X_c}(x_c)P(x)=Z1Πc∈CϕXc(xc)
- 对于下图:显然有X ⊥ Z|Y
- 所以p(x,y,z)=p(y)p(x|y)p(z|y)!=P(x,y)P(z)
- P(x,y,z)!=P(x,y)P(y,z)
- 如果等于,则p(y)=0或p(y)=1(太约束了)
- –>无法用边际概率去定义
无向图的条件独立性判断
3.概率推断和学习
- 典型任务
- 任务1: 我们如何回答关于 𝑃𝑀的查询, 例如,𝑃𝑀(𝑋|𝑌) ?
- 推断
- 任务 2: 我们如何基于数据D估计合理的模型 𝑀?
- 学习–极大似然估计(频率派)
- 贝叶斯学派(找P(M|D)–推断过程–最大后验估计
- 当不是所有的变量可观察时,即使计算M的点估计,也需要进行推断处理隐含变量
- 任务1: 我们如何回答关于 𝑃𝑀的查询, 例如,𝑃𝑀(𝑋|𝑌) ?
3.1 推断
- ◼精确推断:
- ⚫ 变量消去
- ⚫ 信念传播
- ⚫ 较高的计算代价
- ◼近似推断
- ⚫ 采样
- ⚫ 变分推断
- ⚫ 较低的计算复杂度
3.1.1 变量消去法(动态规划)
-
P(x1,x2,x3,x4,x5)=P(x1)P(x2∣x1)P(x3∣x2)P(x4∣x3)P(x5∣x3)P(x_1,x_2,x_3,x_4,x_5)=P(x_1)P(x_2|x_1)P(x_3|x_2)P(x_4|x_3)P(x_5|x_3)P(x1,x2,x3,x4,x5)=P(x1)P(x2∣x1)P(x3∣x2)P(x4∣x3)P(x5∣x3)
-
P(x5)=Σx1,x2,x3,x4P(x1,x2,x3,x4,x5)=Σx1,x2,x3,x4P(x1)P(x2∣x1)P(x3∣x2)P(x4∣x3)P(x5∣x3)P(x_5)=\Sigma_{x_1,x_2,x_3,x_4} P(x_1,x_2,x_3,x_4,x_5)=\Sigma_{x_1,x_2,x_3,x_4} P(x_1)P(x_2|x_1)P(x_3|x_2)P(x_4|x_3)P(x_5|x_3)P(x5)=Σx1,x2,x3,x4P(x1,x2,x3,x4,x5)=Σx1,x2,x3,x4P(x1)P(x2∣x1)P(x3∣x2)P(x4∣x3)P(x5∣x3)
- =Σx3P(x5∣x3)Σx4P(x4∣x3)Σx2(x3∣x2)Σx1P(x1)P(x2∣x1)=\Sigma_{x_3}P(x_5|x_3)\Sigma_{x_4}P(x_4|x_3)\Sigma_{x_2}(x_3|x_2)\Sigma_{x_1} P(x_1)P(x_2|x_1)=Σx3P(x5∣x3)Σx4P(x4∣x3)Σx2(x3∣x2)Σx1P(x1)P(x2∣x1)
- =Σx3P(x5∣x3)Σx4P(x4∣x3)Σx2(x3∣x2)m12(x2)=\Sigma_{x_3}P(x_5|x_3)\Sigma_{x_4}P(x_4|x_3)\Sigma_{x_2}(x_3|x_2)m_{12}(x_2)=Σx3P(x5∣x3)Σx4P(x4∣x3)Σx2(x3∣x2)m12(x2)
- =Σx3P(x5∣x3)Σx4P(x4∣x3)m23(x3)=\Sigma_{x_3}P(x_5|x_3)\Sigma_{x_4}P(x_4|x_3)m_{23}(x_3)=Σx3P(x5∣x3)Σx4P(x4∣x3)m23(x3)
- =Σx3P(x5∣x3)m43(x3)m23(x3)=\Sigma_{x_3}P(x_5|x_3)m_{43}(x_3)m_{23}(x_3)=Σx3P(x5∣x3)m43(x3)m23(x3)
- =m35(x5)=m_{35}(x_5)=m35(x5)
-
适用于贝叶斯网络和马尔科夫网络
-
sum-product算法:mi−>j(xj)=Σxiϕ(xi,xj)Πk∈n(i)/jmki(xi)m_{i->j}(x_j)=\Sigma_{x_i}\phi(x_i,x_j)\Pi_{k\in n(i)/j} m_{ki}(x_i)mi−>j(xj)=Σxiϕ(xi,xj)Πk∈n(i)/jmki(xi)
-
计算多个边际概率会有重复计算
- 信念传播法::mi−>j(xj)m_{i->j}(x_j)mi−>j(xj)当做传递的消息
- p(xi)−−−Πk∈n(i)mki(xi)p(x_i)---\Pi_{k\in n(i) }m_{ki}(x_i)p(xi)−−−Πk∈n(i)mki(xi)–从邻居得到
-
信念传递算法(一来一回双向传播–得到所有邻居)
-
联合概率P(x1,x2,...,x5)=1Zϕ12(x1,x2)ϕ23(x2,x3)ϕ34(x3,x4)ϕ35(x3,x5)P(x_1,x_2,...,x_5)=\frac{1}{Z}\phi_{12}(x_1,x_2)\phi_{23}(x_2,x_3)\phi_{34}(x_3,x_4)\phi_{35}(x_3,x_5)P(x1,x2,...,x5)=Z1ϕ12(x1,x2)ϕ23(x2,x3)ϕ34(x3,x4)ϕ35(x3,x5)
- Z=Σxϕ12(x1,x2)ϕ23(x2,x3)ϕ34(x3,x4)ϕ35(x3,x5)Z=\Sigma_x\phi_{12}(x_1,x_2)\phi_{23}(x_2,x_3)\phi_{34}(x_3,x_4)\phi_{35}(x_3,x_5)Z=Σxϕ12(x1,x2)ϕ23(x2,x3)ϕ34(x3,x4)ϕ35(x3,x5)
- 叶子到根得到(蓝色)
- m43(x3)=Σx4ϕ(x4,x3)m_{43}(x_3)=\Sigma_{x_4} \phi(x_4,x_3)m43(x3)=Σx4ϕ(x4,x3)
- m53(x3)=Σx5)ϕ(x5,x3)m_{53}(x_3)=\Sigma_{x_5}) \phi(x_5,x_3)m53(x3)=Σx5)ϕ(x5,x3)
- m32(x2)=Σx3ϕ(x3,x2)m43m53m_{32}(x_2)=\Sigma_{x_3} \phi(x_3,x_2)m_{43}m_{53}m32(x2)=Σx3ϕ(x3,x2)m43m53
- m21(x1)=Σx2ϕ(x2,x1)m32m_{21}(x_1)=\Sigma_{x_2} \phi(x_2,x_1)m_{32}m21(x1)=Σx2ϕ(x2,x1)m32
- 根到叶子(红色)
- m12(x2)=Σx1ϕ(x1,x2)m_{12}(x_2)=\Sigma_{x_1}\phi(x_1,x_2)m12(x2)=Σx1ϕ(x1,x2)
- m23(x3)=Σx2ϕ(x3,x2)m12m_{23}(x_3)=\Sigma_{x_2} \phi(x_3,x_2)m_{12}m23(x3)=Σx2ϕ(x3,x2)m12
- m34(x4)=Σx3ϕ(x4,x3)m23m53m_{34}(x_4)=\Sigma_{x_3} \phi(x_4,x_3)m_{23}m_{53}m34(x4)=Σx3ϕ(x4,x3)m23m53
- m35(x5)=Σx3ϕ(x5,x3)m23m43m_{35}(x_5)=\Sigma_{x_3} \phi(x_5,x_3)m_{23}m_{43}m35(x5)=Σx3ϕ(x5,x3)m23m43
- 边际分布
- P(x1)−−m21(x1)P(x_1)--m_{21}(x_1)P(x1)−−m21(x1)
- P(x2)−−m12(x2)m32(x2)P(x_2)--m_{12}(x_2)m_{32}(x_2)P(x2)−−m12(x2)m32(x2)
- P(x3)−−m23(x3)m43(x3)m53(x3)P(x_3)--m_{23}(x_3)m_{43}(x_3)m_{53}(x_3)P(x3)−−m23(x3)m43(x3)m53(x3)
- P(x4)−−m34(x4)P(x_4)--m_{34}(x_4)P(x4)−−m34(x4)
- P(x5)−−m35(x5)P(x_5)--m_{35}(x_5)P(x5)−−m35(x5)
-
学习
- l(θ;D)=logP(D∣θ)=log(Πn(Πip(xn,i∣xn,πi,θi)))=ΣiΣnlog(p(xn,i∣xn,πi,θi))l(\theta;D)=logP(D|\theta)=log(\Pi_n(\Pi_ip(x_{n,i}|x_{n,\pi_i,\theta_i})))=\Sigma_i\Sigma_n log(p(x_{n,i}|x_{n,\pi_i,\theta_i}))l(θ;D)=logP(D∣θ)=log(Πn(Πip(xn,i∣xn,πi,θi)))=ΣiΣnlog(p(xn,i∣xn,πi,θi))
- MLE:极大似然估计–计数
- MAP:贝叶斯估计,加上伪计数(加上了先验
- 部分观察:期望最大化(EM
- 无向图无法分解
- 要先做推断得到P(x)边际化
4.HMM–>CRF
4.1 HMM–是个序列
- x-观测到的
- 条件独立
- 给定yt
- yt−1和yt+1(所有的过去和未来也都独立)y_{t-1}和y_{t+1}(所有的过去和未来也都独立)yt−1和yt+1(所有的过去和未来也都独立)独立
- xu和xsx_{u}和x_{s}xu和xs独立
- 给定yt
- 表示
- 状态分布:πi=p(y1i=1)\pi_i=p(y_1^i=1)πi=p(y1i=1)
- 状态转移矩阵A,aij为转移概率
- P(yt+1j∣yti=1)P(y_{t+1}^j|y_t^i=1)P(yt+1j∣yti=1)
- 发射概率P(x∣y)P(x|y)P(x∣y)
- 则联合概率P(x,y)=p(y1)Πt=1T−1P(yt+1j∣yti)Πt=1TP(xt∣yt)P(x,y)=p(y_1)\Pi_{t=1}^{T-1}P(y_{t+1}^j|y_t^i)\Pi_{t=1}^{T}P(x_t|y_t)P(x,y)=p(y1)Πt=1T−1P(yt+1j∣yti)Πt=1TP(xt∣yt)
- 参数化P(x,y)=πy1Πt=1T−1ayt+1,ytΠt=1TP(xt∣yt)P(x,y)=\pi_{y_1}\Pi_{t=1}^{T-1}a_{y_{t+1},y_t}\Pi_{t=1}^{T}P(x_t|y_t)P(x,y)=πy1Πt=1T−1ayt+1,ytΠt=1TP(xt∣yt)
- 三个基础问题
- 状态序列解码(推断)问题:
- 给定x,θ−−>y:p(y∣x,θ)x,\theta-->y:p(y|x,\theta)x,θ−−>y:p(y∣x,θ)
- 似然评估问题evaluate
- 给定x,θ−−>似然函数P(x∣θ)x,\theta --> 似然函数P(x|\theta)x,θ−−>似然函数P(x∣θ)
- 参数估计问题(学习
- 给定x−−>θ=argmaxP(x∣θ)x --> \theta=argmax P(x|\theta)x−−>θ=argmaxP(x∣θ)
- 状态序列解码(推断)问题:
4.1.1 推断问题(evaluate)
- P(x)=Σy1,y2,...,yTP(x,y)=Σy1,y2,...,yTπy1Πt=1T−1ayt+1,ytΠt=1TP(xt∣yt)=ΣyP(x∣y)p(y)=Σy1Σy2...ΣyTπy1Πt=1T−1ayt+1,ytΠt=1TP(xt∣yt)P(x)=\Sigma_{y_1,y_2,...,y_T} P(x,y)=\Sigma_{y_1,y_2,...,y_T}\pi_{y_1}\Pi_{t=1}^{T-1}a_{y_{t+1},y_t}\Pi_{t=1}^{T}P(x_t|y_t)\\=\Sigma_y P(x|y)p(y)\\=\Sigma_{y_1}\Sigma_{y_2}...\Sigma_{y_T}\pi_{y_1}\Pi_{t=1}^{T-1}a_{y_{t+1},y_t}\Pi_{t=1}^{T}P(x_t|y_t)P(x)=Σy1,y2,...,yTP(x,y)=Σy1,y2,...,yTπy1Πt=1T−1ayt+1,ytΠt=1TP(xt∣yt)=ΣyP(x∣y)p(y)=Σy1Σy2...ΣyTπy1Πt=1T−1ayt+1,ytΠt=1TP(xt∣yt)
- yi={q1,q2,...,qN}−−−O(NT)太y_i=\{q_1,q_2,...,q_N\}---O(N^T)太yi={q1,q2,...,qN}−−−O(NT)太
- 很多连乘,但是并不是跟所有的都有关,就可以往后推求和
- P(yt∣x)=P(x∣yt)P(yt)P(x)=P(x1,...,xt∣yt)P(xt+1,...,xn∣yt)P(yt)P(x)P(y_t|x)=\frac{P(x|y_t)P(y_t)}{P(x)}=\frac{P(x1,...,x_t|y_t)P(x_{t+1},...,x_n|y_t)P(y_t)}{P(x)}P(yt∣x)=P(x)P(x∣yt)P(yt)=P(x)P(x1,...,xt∣yt)P(xt+1,...,xn∣yt)P(yt)
- P(yt∣x)=γ(yt)=P(x1,...,xt,yt)P(xt+1,...,xn∣yt)P(x)=α(yt)β(yt)P(x)P(y_t|x)=\gamma(y_t)=\frac{P(x1,...,x_t,y_t)P(x_{t+1},...,x_n|y_t)}{P(x)}=\frac{\alpha(y_t)\beta(y_t)}{P(x)}P(yt∣x)=γ(yt)=P(x)P(x1,...,xt,yt)P(xt+1,...,xn∣yt)=P(x)α(yt)β(yt)
- p(x)=Σytα(yt)β(yt)p(x)=\Sigma_{y_t}\alpha(y_t)\beta(y_t)p(x)=Σytα(yt)β(yt)
- 其中𝛼(𝑦𝑡)是产生部分输出序列 𝑥1, ⋯ , 𝑥𝑡并结束于𝑦𝑡的概率
- 其中β(𝑦𝑡)是从𝑦𝑡状态开始产生输出序列𝑥𝑡+1, ⋯ , 𝑥𝑇的概率
- P(yt∣x)=γ(yt)=P(x1,...,xt,yt)P(xt+1,...,xn∣yt)P(x)=α(yt)β(yt)P(x)P(y_t|x)=\gamma(y_t)=\frac{P(x1,...,x_t,y_t)P(x_{t+1},...,x_n|y_t)}{P(x)}=\frac{\alpha(y_t)\beta(y_t)}{P(x)}P(yt∣x)=γ(yt)=P(x)P(x1,...,xt,yt)P(xt+1,...,xn∣yt)=P(x)α(yt)β(yt)
- 递归的计算
- α(yt+1)=Σytα(yt)ayt+1,ytP(xt+1∣yt+1)\alpha(y_{t+1})=\Sigma_{y_t}\alpha(y_t)a_{y_{t+1},y_t}P(x_{t+1}|y_{t+1})α(yt+1)=Σytα(yt)ayt+1,ytP(xt+1∣yt+1)
- 初始化α(y0)=P(x0,y0)=p(x0∣y0)P(y0)=P(x0∣y0)πy0\alpha(y_0)=P(x_0,y_0)=p(x_0|y_0)P(y_0)=P(x_0|y_0)\pi_{y_0}α(y0)=P(x0,y0)=p(x0∣y0)P(y0)=P(x0∣y0)πy0
- β(yt)=Σyt+1β(yt+1)ayt+1,ytP(xt+1∣yt+1)\beta(y_{t})=\Sigma_{y_{t+1}}\beta(y_{t+1})a_{y_{t+1},y_t}P(x_{t+1}|y_{t+1})β(yt)=Σyt+1β(yt+1)ayt+1,ytP(xt+1∣yt+1)
- 初始化β(yT)=1就行了\beta(y_T)=1就行了β(yT)=1就行了
- 假定β(yT)为单位向量,我们可以准确计算出βyT−1假定\beta(y_T)为单位向量,我们可以准确计算出\beta_{y_{T-1}}假定β(yT)为单位向量,我们可以准确计算出βyT−1
- P(x)=Σiα(yTi)β(yTi)=Σiα(yTi)=P(x)P(x)=\Sigma_i\alpha(y_T^i)\beta(y_T^i)=\Sigma_i \alpha(y_T^i)=P(x)P(x)=Σiα(yTi)β(yTi)=Σiα(yTi)=P(x)
- 假定β(yT)为单位向量,我们可以准确计算出βyT−1假定\beta(y_T)为单位向量,我们可以准确计算出\beta_{y_{T-1}}假定β(yT)为单位向量,我们可以准确计算出βyT−1
- 初始化β(yT)=1就行了\beta(y_T)=1就行了β(yT)=1就行了
- 为了计算所有的yt的后验概率,需要为每一步计算alpha/beta—一次前向一次后向
- ξ(yt,yt+1)=P(yt,yt+1∣x)=P(x∣yt,yt+1)P(yt+1∣yt)P(yt)p(x)=P(x1,...xt∣yt)P(xt+1∣yt+1)P(xt+2,...xn∣yt+1)P(yt+1∣yt)P(yt)p(x)=α(yt)P(xt+1∣yt+1)β(yt+1)ayt+1,ytp(x)\xi(y_t,y_{t+1})=P(y_t,y_{t+1}|x)\\=\frac{P(x|y_t,y_{t+1})P(y_{t+1}|y_t)P(y_t)}{p(x)}\\=\frac{P(x1,...x_t|y_t)P(x_{t+1}|y_{t+1})P(x_{t+2},...x_n|y_{t+1})P(y_{t+1}|y_t)P(y_t)}{p(x)}\\=\frac{\alpha(y_t)P(x_{t+1}|y_{t+1})\beta(y_{t+1})a_{y_{t+1},y_t}}{p(x)}ξ(yt,yt+1)=P(yt,yt+1∣x)=p(x)P(x∣yt,yt+1)P(yt+1∣yt)P(yt)=p(x)P(x1,...xt∣yt)P(xt+1∣yt+1)P(xt+2,...xn∣yt+1)P(yt+1∣yt)P(yt)=p(x)α(yt)P(xt+1∣yt+1)β(yt+1)ayt+1,yt
- 似然函数–简单求和最终步的α\alphaα可得到
- 状态的后验概率–再使用β递归再使用\beta递归再使用β递归
- –>P(ytk=1∣x)=α(yt)β(yt)P(x)P(y_t^k=1|x)=\frac{\alpha(y_t)\beta(y_t)}{P(x)}P(ytk=1∣x)=P(x)α(yt)β(yt)
- –>如何得到整个序列的最大后验证概率
- α(yt+1)=Σytα(yt)ayt+1,ytP(xt+1∣yt+1)\alpha(y_{t+1})=\Sigma_{y_t}\alpha(y_t)a_{y_{t+1},y_t}P(x_{t+1}|y_{t+1})α(yt+1)=Σytα(yt)ayt+1,ytP(xt+1∣yt+1)
4.1.2 viterbi decoding解码
- y∗=argmaxyP(y∣x)=argmaxyP(x,y)y*=argmax_y P(y|x)=argmax_y P(x,y)y∗=argmaxyP(y∣x)=argmaxyP(x,y)
- Vtk=maxy1,...,yt−1P(x1,...,xt−1,y1,...,yt−1,xt,ytk=1)V_t^k=max_{y_1,...,y_{t-1}} P(x_1,...,x_{t-1},y_1,...,y_{t-1},x_t,y_t^k=1)Vtk=maxy1,...,yt−1P(x1,...,xt−1,y1,...,yt−1,xt,ytk=1)
- 结尾为yt=ky_t=kyt=k时,最可能状态序列的概率
- 递归形式Vtk=p(xt∣ytk=1)maxiVt−1iai,kai,k=p(yik∣yi):i−>kV_t^k=p(x_t|y_t^k=1)max_i V_{t-1}^ia_{i,k}\\a_{i,k}=p(y_ik|y_i):i->kVtk=p(xt∣ytk=1)maxiVt−1iai,kai,k=p(yik∣yi):i−>k
- 动态规划(路径规划)问题:距离=1/p,使得cost最小
- Vtk:t时刻,yt=k−−到达qk状态maxy1,...,yt−1终点已经确定,路径没有确定,找概率最大的路径V_t^k:t时刻,y_t=k--到达q_k状态\\max_{y_1,...,y_{t-1}} 终点已经确定,路径没有确定,找概率最大的路径Vtk:t时刻,yt=k−−到达qk状态maxy1,...,yt−1终点已经确定,路径没有确定,找概率最大的路径
4.1.3 学习,参数估计
-
极大似然估计:EM算法
- 最大化P(x∣θ)P(x|\theta)P(x∣θ)
- 参数A、π,输出分布的参数A、\pi,输出分布的参数A、π,输出分布的参数
-
P(x∣θ)=Σy1,y2,...,yTP(x,y)=Σy1,y2,...,yTπy1Πt=1T−1ayt+1,ytΠt=1TP(xt∣yt,η)P(x|\theta)=\Sigma_{y_1,y_2,...,y_T} P(x,y)=\Sigma_{y_1,y_2,...,y_T}\pi_{y_1}\Pi_{t=1}^{T-1}a_{y_{t+1},y_t}\Pi_{t=1}^{T}P(x_t|y_t,\eta)P(x∣θ)=Σy1,y2,...,yTP(x,y)=Σy1,y2,...,yTπy1Πt=1T−1ayt+1,ytΠt=1TP(xt∣yt,η)
-
假设P(xt∣yt,η)=Πi=1MΠj=1L[ηij]ytixtj假设P(x_t|y_t,\eta)=\Pi_{i=1}^M \Pi_{j=1}^L[\eta_{ij}]^{y_t^ix_t^j}假设P(xt∣yt,η)=Πi=1MΠj=1L[ηij]ytixtj
-
M
-
α^ij=mijΣk=1Nmikη^ij=nijΣk=1Nnikπ^i=y1i\hat{\alpha}_{ij}=\frac{m_{ij}}{\Sigma_{k=1}^N m_{ik}}\\ \hat{\eta}_{ij}=\frac{n_{ij}}{\Sigma_{k=1}^N n_{ik}}\\ \hat{\pi}_i=y_1^iα^ij=Σk=1Nmikmijη^ij=Σk=1Nniknijπ^i=y1i
-
E步
-
缺点
- 仅捕捉了状态之间和状态及其对应输出之间的关系(上下文)
- 学习目标和预测目标不匹配
- 我们只要p(y|x),但只知道p(x,y)—产生式模型
4.1.4计算实例
* A:aij:i->j
- 前向计算
- 时间1:
- α(y1=1)=P(x1∣y1=1)πy1=1=0.5∗0.2=0.1(x1=红)α(y1=2)=P(x1∣y1=2)πy1=2=0.4∗0.4=0.16α(y1=3)=P(x1∣y1=3)πy1=3=0.7∗0.4=0.28\alpha(y_1=1)=P(x_1|y_1=1)\pi_{y_1=1}=0.5*0.2=0.1\\(x1=红) \alpha(y_1=2)=P(x_1|y_1=2)\pi_{y_1=2}=0.4*0.4=0.16 \alpha(y_1=3)=P(x_1|y_1=3)\pi_{y_1=3}=0.7*0.4=0.28α(y1=1)=P(x1∣y1=1)πy1=1=0.5∗0.2=0.1(x1=红)α(y1=2)=P(x1∣y1=2)πy1=2=0.4∗0.4=0.16α(y1=3)=P(x1∣y1=3)πy1=3=0.7∗0.4=0.28
- 时间2:x2=白
- α(y2=1)=(Σy1α(y1)P(y2=1∣y1))P(x2∣y2)=(0.1∗0.5+0.16∗0.3+0.28∗0.2)∗0.5=0.077α(y2=2)=(α(y1=1)P(y2=2∣y1=1)+α(y1=2)P(y2=2∣y1=2)+α(y1=3)P(y2=2∣y1=3))∗P(x2∣y2=2)=(0.1∗0.2+0.16∗0.5+0.28∗0.3)∗0.6=0.1104α(y2=3)=(0.1∗0.3+0.16∗0.2+0.28∗0.5)∗0.3=0.0606\alpha(y_2=1)=(\Sigma_{y_1}\alpha(y_1)P(y_2=1|y_1))P(x_2|y_2)=(0.1*0.5+0.16*0.3+0.28*0.2)*0.5=0.077\\ \alpha(y_2=2)=(\alpha(y_1=1)P(y_2=2|y_1=1)+\alpha(y_1=2)P(y_2=2|y_1=2)+\alpha(y_1=3)P(y_2=2|y_1=3))*P(x_2|y_2=2)=(0.1*0.2+0.16*0.5+0.28*0.3)*0.6=0.1104\\ \alpha(y_2=3)=(0.1*0.3+0.16*0.2+0.28*0.5)*0.3=0.0606α(y2=1)=(Σy1α(y1)P(y2=1∣y1))P(x2∣y2)=(0.1∗0.5+0.16∗0.3+0.28∗0.2)∗0.5=0.077α(y2=2)=(α(y1=1)P(y2=2∣y1=1)+α(y1=2)P(y2=2∣y1=2)+α(y1=3)P(y2=2∣y1=3))∗P(x2∣y2=2)=(0.1∗0.2+0.16∗0.5+0.28∗0.3)∗0.6=0.1104α(y2=3)=(0.1∗0.3+0.16∗0.2+0.28∗0.5)∗0.3=0.0606
- 时间3:x3=红
- α(y3=1)=(0.077∗0.5+0.1104∗0.3+0.0606∗0.2)∗0.5=0.4187α(y3=2)=(0.077∗0.2+0.1104∗0.5+0.0606∗0.3)∗0.4=0.03551α(y3=3)=(0.077∗0.3+0.1104∗0.2+0.0606∗0.5)∗0.7=0.05284p(x)=Σiα(yTi)=α(y3=1)+α(y3=2)+α(y3=3)=0.13022\alpha(y_3=1)=(0.077*0.5+0.1104*0.3+0.0606*0.2)*0.5=0.4187\\ \alpha(y_3=2)=(0.077*0.2+0.1104*0.5+0.0606*0.3)*0.4=0.03551\\ \alpha(y_3=3)=(0.077*0.3+0.1104*0.2+0.0606*0.5)*0.7=0.05284\\ p(x)=\Sigma_i \alpha(y_T^i)=\alpha(y_3=1)+\alpha(y_3=2)+\alpha(y_3=3)=0.13022α(y3=1)=(0.077∗0.5+0.1104∗0.3+0.0606∗0.2)∗0.5=0.4187α(y3=2)=(0.077∗0.2+0.1104∗0.5+0.0606∗0.3)∗0.4=0.03551α(y3=3)=(0.077∗0.3+0.1104∗0.2+0.0606∗0.5)∗0.7=0.05284p(x)=Σiα(yTi)=α(y3=1)+α(y3=2)+α(y3=3)=0.13022
- 时间1:
- 后向计算:
- β(y3=1)=1,β(y3=2)=1,β(y3=3)=1\beta(y_3=1)=1,\beta(y_3=2)=1,\beta(y_3=3)=1β(y3=1)=1,β(y3=2)=1,β(y3=3)=1
- 时间2
- β(y2)=Σy3β(y3)ay3,y2P(x3∣y3)=β(y3=1)ay3=1,y2P(x3∣y3=1)+β(y3=2)ay3=2,y2P(x3∣y3=2)+β(y3=3)ay3,y2P(x3∣y3=3)\beta(y_2)=\Sigma_{y_3}\beta(y_3)a_{y_3,y_2}P(x_3|y_3)\\ =\beta(y_3=1)a_{y_3=1,y_2}P(x_3|y_3=1)+\beta(y_3=2)a_{y_3=2,y_2}P(x_3|y_3=2)+\beta(y_3=3)a_{y_3,y_2}P(x_3|y_3=3)β(y2)=Σy3β(y3)ay3,y2P(x3∣y3)=β(y3=1)ay3=1,y2P(x3∣y3=1)+β(y3=2)ay3=2,y2P(x3∣y3=2)+β(y3=3)ay3,y2P(x3∣y3=3)
- β(y2=1)=1∗0.5∗0.5+1∗0.2∗0.4+1∗0.2∗0.7=0.47\beta(y_2=1)=1*0.5*0.5+1*0.2*0.4+1*0.2*0.7=0.47β(y2=1)=1∗0.5∗0.5+1∗0.2∗0.4+1∗0.2∗0.7=0.47
- β(y2=2)=1∗0.3∗0.5+1∗0.5∗0.4+1∗0.2∗0.7=0.49\beta(y_2=2)=1*0.3*0.5+1*0.5*0.4+1*0.2*0.7=0.49β(y2=2)=1∗0.3∗0.5+1∗0.5∗0.4+1∗0.2∗0.7=0.49
- β(y2=3)=1∗0.2∗0.5+1∗0.3∗0.4+1∗0.5∗0.7=0.57\beta(y_2=3)=1*0.2*0.5+1*0.3*0.4+1*0.5*0.7=0.57β(y2=3)=1∗0.2∗0.5+1∗0.3∗0.4+1∗0.5∗0.7=0.57
- 时间1
- β(y2=1)=0.47∗0.5∗0.5+0.49∗0.2∗0.6+0.57∗0.2∗0.3=0.2105\beta(y_2=1)=0.47*0.5*0.5+0.49*0.2*0.6+0.57*0.2*0.3=0.2105β(y2=1)=0.47∗0.5∗0.5+0.49∗0.2∗0.6+0.57∗0.2∗0.3=0.2105
- β(y2=2)=0.47∗0.3∗0.5+0.49∗0.5∗0.6+0.57∗0.2∗0.3=0.2517\beta(y_2=2)=0.47*0.3*0.5+0.49*0.5*0.6+0.57*0.2*0.3=0.2517β(y2=2)=0.47∗0.3∗0.5+0.49∗0.5∗0.6+0.57∗0.2∗0.3=0.2517
- β(y2=3)=0.47∗0.2∗0.5+0.49∗0.3∗0.6+0.57∗0.5∗0.3=0.2207\beta(y_2=3)=0.47*0.2*0.5+0.49*0.3*0.6+0.57*0.5*0.3=0.2207β(y2=3)=0.47∗0.2∗0.5+0.49∗0.3∗0.6+0.57∗0.5∗0.3=0.2207
代码
import torch
import torch.nn as nn
import torch.optim as optim
y_size=3;
x_size=2;
transition=torch.tensor([[0.5,0.2,0.3],[0.3,0.5,0.2],[0.2,0.3,0.5]])
b=torch.tensor([[0.5,0.5],[0.4,0.6],[0.7,0.3]])
pi=torch.tensor([[0.2],[0.4],[0.4]])
x=[0,1,0]
def alpha(x):#前向算法p(x1,x2,x3,...,xt,yt)alpha=(b[:,x[0]]*pi[:].reshape(y_size)).reshape(1,y_size)# print(alpha)for i in range(1,len(x)):alpha=torch.cat((alpha,(torch.matmul(alpha[i-1],transition)*b[:,x[i]]).reshape(1,y_size)),0)return alpha
alpha=alpha(x)
print(alpha)
"""
tensor([[0.1000, 0.1600, 0.2800],[0.0770, 0.1104, 0.0606],[0.0419, 0.0355, 0.0528]])"""
def p(x,alpha):#p(x)# alpha=alpha(x);return torch.sum(alpha[len(x)-1])
p(x,alpha)
#tensor(0.1302)
def beta(x):beta=torch.ones(1,y_size)for i in range(len(x)-2,-1,-1):beta=torch.cat((torch.sum(beta[0]*transition*b[:,x[i+1]],axis=1).reshape(1,y_size),beta))return beta
beta=beta(x)
tensor([[0.2451, 0.2622, 0.2277],[0.5400, 0.4900, 0.5700],[1.0000, 1.0000, 1.0000]])
def gamma(alpha,beta,p_x):return alpha*beta/p_x
def xi(x,alpha,beta,p_x):# print(alpha_yt,b[y_t1,x_t1],beta_yt1,transition[y_t,y_t1])# return alpha_yt*b[y_t1,x_t1]*beta_yt1*transition[y_t,y_t1]/p_xxi=[]for t in range(0,len(x)-1):xi.append((alpha[t].reshape(y_size,1)*transition*b[:,x[t+1]]*beta[t+1]))# print(xi[t])return torch.cat(xi).reshape(len(xi),y_size,y_size)
- 求最优路径(维特比,贪心)
- δ(y1)=α(y1)=P(x1∣y1)πy1\delta(y_1)=\alpha(y_1)=P(x_1|y_1)\pi_{y_1}δ(y1)=α(y1)=P(x1∣y1)πy1
- δ(yt+1)=maxy1δ(y1)P(y2=1∣y1))P(x2∣y2)=max(δ(y1=1)P(y2=2∣y1=1),δ(y1=2)P(y2=2∣y1=2),δ(y1=3)P(y2=2∣y1=3))∗P(x2∣y2=1)\delta(y_{t+1})=max_{y_1}\delta(y_1)P(y_2=1|y_1))P(x_2|y_2)=max(\delta(y_1=1)P(y_2=2|y_1=1),\delta(y_1=2)P(y_2=2|y_1=2),\delta(y_1=3)P(y_2=2|y_1=3))*P(x_2|y_2=1)δ(yt+1)=maxy1δ(y1)P(y2=1∣y1))P(x2∣y2)=max(δ(y1=1)P(y2=2∣y1=1),δ(y1=2)P(y2=2∣y1=2),δ(y1=3)P(y2=2∣y1=3))∗P(x2∣y2=1)
- HMM(x–O)
- 则联合概率P(x,y)=p(y1)Πt=1T−1P(yt+1j∣yti)Πt=1TP(xt∣yt)P(x,y)=p(y_1)\Pi_{t=1}^{T-1}P(y_{t+1}^j|y_t^i)\Pi_{t=1}^{T}P(x_t|y_t)P(x,y)=p(y1)Πt=1T−1P(yt+1j∣yti)Πt=1TP(xt∣yt)
- 参数化P(x,y)=πy1Πt=1T−1ayt+1,ytΠt=1TP(xt∣yt)P(x,y)=\pi_{y_1}\Pi_{t=1}^{T-1}a_{y_{t+1},y_t}\Pi_{t=1}^{T}P(x_t|y_t)P(x,y)=πy1Πt=1T−1ayt+1,ytΠt=1TP(xt∣yt)
- P(x)=Σy1,y2,...,yTP(x,y)=Σy1,y2,...,yTπy1Πt=1T−1ayt+1,ytΠt=1TP(xt∣yt)=ΣyP(x∣y)p(y)=Σy1Σy2...ΣyTπy1Πt=1T−1ayt+1,ytΠt=1TP(xt∣yt)P(x)=\Sigma_{y_1,y_2,...,y_T} P(x,y)=\Sigma_{y_1,y_2,...,y_T}\pi_{y_1}\Pi_{t=1}^{T-1}a_{y_{t+1},y_t}\Pi_{t=1}^{T}P(x_t|y_t)\\=\Sigma_y P(x|y)p(y)\\=\Sigma_{y_1}\Sigma_{y_2}...\Sigma_{y_T}\pi_{y_1}\Pi_{t=1}^{T-1}a_{y_{t+1},y_t}\Pi_{t=1}^{T}P(x_t|y_t)P(x)=Σy1,y2,...,yTP(x,y)=Σy1,y2,...,yTπy1Πt=1T−1ayt+1,ytΠt=1TP(xt∣yt)=ΣyP(x∣y)p(y)=Σy1Σy2...ΣyTπy1Πt=1T−1ayt+1,ytΠt=1TP(xt∣yt)
- P(yt∣x)=γ(yt)=P(x1,...,xt,yt)P(xt+1,...,xn∣yt)P(x)=α(yt)β(yt)P(x)P(y_t|x)=\gamma(y_t)=\frac{P(x1,...,x_t,y_t)P(x_{t+1},...,x_n|y_t)}{P(x)}=\frac{\alpha(y_t)\beta(y_t)}{P(x)}P(yt∣x)=γ(yt)=P(x)P(x1,...,xt,yt)P(xt+1,...,xn∣yt)=P(x)α(yt)β(yt)
- 递归的计算
- α(yt+1)=Σytα(yt)ayt+1,ytP(xt+1∣yt+1)\alpha(y_{t+1})=\Sigma_{y_t}\alpha(y_t)a_{y_{t+1},y_t}P(x_{t+1}|y_{t+1})α(yt+1)=Σytα(yt)ayt+1,ytP(xt+1∣yt+1)
- 初始化α(y0)=P(x0,y0)=p(x0∣y0)P(y0)=P(x0∣y0)πy0\alpha(y_0)=P(x_0,y_0)=p(x_0|y_0)P(y_0)=P(x_0|y_0)\pi_{y_0}α(y0)=P(x0,y0)=p(x0∣y0)P(y0)=P(x0∣y0)πy0
- β(yt)=Σyt+1β(yt+1)ayt+1,ytP(xt+1∣yt+1)\beta(y_{t})=\Sigma_{y_{t+1}}\beta(y_{t+1})a_{y_{t+1},y_t}P(x_{t+1}|y_{t+1})β(yt)=Σyt+1β(yt+1)ayt+1,ytP(xt+1∣yt+1)
- 初始化β(yT)=1就行了\beta(y_T)=1就行了β(yT)=1就行了
- 假定β(yT)为单位向量,我们可以准确计算出βyT−1假定\beta(y_T)为单位向量,我们可以准确计算出\beta_{y_{T-1}}假定β(yT)为单位向量,我们可以准确计算出βyT−1
- P(x)=Σiα(yTi)β(yTi)=Σiα(yTi)=P(x)P(x)=\Sigma_i\alpha(y_T^i)\beta(y_T^i)=\Sigma_i \alpha(y_T^i)=P(x)P(x)=Σiα(yTi)β(yTi)=Σiα(yTi)=P(x)
- 假定β(yT)为单位向量,我们可以准确计算出βyT−1假定\beta(y_T)为单位向量,我们可以准确计算出\beta_{y_{T-1}}假定β(yT)为单位向量,我们可以准确计算出βyT−1
- 初始化β(yT)=1就行了\beta(y_T)=1就行了β(yT)=1就行了
- α(yt+1)=Σytα(yt)ayt+1,ytP(xt+1∣yt+1)\alpha(y_{t+1})=\Sigma_{y_t}\alpha(y_t)a_{y_{t+1},y_t}P(x_{t+1}|y_{t+1})α(yt+1)=Σytα(yt)ayt+1,ytP(xt+1∣yt+1)
- 则联合概率P(x,y)=p(y1)Πt=1T−1P(yt+1j∣yti)Πt=1TP(xt∣yt)P(x,y)=p(y_1)\Pi_{t=1}^{T-1}P(y_{t+1}^j|y_t^i)\Pi_{t=1}^{T}P(x_t|y_t)P(x,y)=p(y1)Πt=1T−1P(yt+1j∣yti)Πt=1TP(xt∣yt)
def Viterbi(x):#贪婪V=b[:,x[0]]*pi[:].reshape(y_size);list=[]print("V0:",V)# 前向计算各部分概率for t in range(1,len(x)):# max,indices=torch.max(V[t - 1].reshape(y_size, 1) * transition, axis=0)# list.append(indices)# V=torch.cat((V,(b[:,x[t]]*max).reshape(1,y_size)),axis=0)max, indices = torch.max(V.reshape(y_size,1) * transition, axis=0)list.append(indices)V=b[:,x[t]]*maxprint("V",t,V)#后向寻找路径print("max-pathchoice",list)max,indices=torch.max(V,axis=0)path=indices.reshape(1)print(indices)for i in range(len(list)-1,-1,-1):path=torch.cat((list[0][path[0]].reshape(1),path))return path;#y1=path0,y2=path1print("path",Viterbi(x))
V0: tensor([0.1000, 0.1600, 0.2800])
V 1 tensor([0.0280, 0.0504, 0.0420])
V 2 tensor([0.0076, 0.0101, 0.0147])
max-pathchoice [tensor([2, 2, 2]), tensor([1, 1, 2])]
tensor(2)
path tensor([2, 2, 2])
4.1.5 EM(baum-welch算法)的上溢出和下溢出
通过放缩α,β\alpha,\betaα,β解决
5 CRF
5.1 推断
- ◼实际上, 梯度上升收敛非常慢
- ⚫ 替代选择:
- ◆ 共轭梯度方法
- ◆ 内存受限拟牛顿法
4.PLSA
- ◼将文档中的词看做来自混合模型的采样.
- ◼每个词来自一个主题,同一个文档中不同词可能来自不同的主题.
- ◼每个文档被表示为可以被表示为主题(混合成分)的混合
- ◼对于每一个文档, 选择一个混合的主题
- ◼对于每个词, 从主题列表中采样一个词
- p(d,wn)=p(d)p(w∣d)=p(d)Σzp(Wn∣z)p(z∣d)=Σzp(z)p(d∣z)p(w∣z)p(z∣w,d)=Σzp(z)p(d∣z)p(w∣z)Σz′p(z′)p(d∣z′)p(w∣z′)p(d,w_n)=p(d)p(w|d)=p(d)\Sigma_z p(W_n|z)p(z|d)=\Sigma_z p(z)p(d|z)p(w|z)\\p(z|w,d)=\frac{\Sigma_z p(z)p(d|z)p(w|z)}{\Sigma_{z'} p(z')p(d|z')p(w|z')}p(d,wn)=p(d)p(w∣d)=p(d)Σzp(Wn∣z)p(z∣d)=Σzp(z)p(d∣z)p(w∣z)p(z∣w,d)=Σz′p(z′)p(d∣z′)p(w∣z′)Σzp(z)p(d∣z)p(w∣z)
- 学习参数
- E:p(z∣w,d)=Σzp(z)p(d∣z)p(w∣z)Σz′p(z′)p(d∣z′)p(w∣z′)p(z|w,d)=\frac{\Sigma_z p(z)p(d|z)p(w|z)}{\Sigma_{z'} p(z')p(d|z')p(w|z')}p(z∣w,d)=Σz′p(z′)p(d∣z′)p(w∣z′)Σzp(z)p(d∣z)p(w∣z)
- M:更新参数p(w∣z)∝Σdn(d,w)p(z∣w,d)p(d∣z)∝Σwn(d,w)p(z∣w,d)p(z)∝ΣdΣwn(d,w)p(z∣w,d)p(w|z)∝\Sigma_d n(d,w)p(z|w,d)\\p(d|z)∝\Sigma_w n(d,w)p(z|w,d)\\p(z)∝\Sigma_d\Sigma_w n(d,w)p(z|w,d)p(w∣z)∝Σdn(d,w)p(z∣w,d)p(d∣z)∝Σwn(d,w)p(z∣w,d)p(z)∝ΣdΣwn(d,w)p(z∣w,d)
- PLSA的问题
- •不完整: 没有提供文档层面的概率建模
- •模型的参数数量随着语料规模线性增长
- •没有明确训练数据外的文档如何计算概率
5.LDA狄利克雷分布
- • LDA是对整个语料的生成式建模
- • 符号约定:
- 一个文档由𝑁个词表示w= 𝑤1, 𝑤2, … , 𝑤𝑁 ,
- 语料D由M个文档表示D= 𝒘𝟏, 𝒘𝟐, … , 𝒘𝑴 ,
- V 表示词表大小.
- • 语料D 中每个文档w的生成过程:
- 采样𝑁~Poisson (𝜉)
- 从狄利克雷分布随机采样话题分布𝜃 ~Dir(𝛼)p(θ∣α)=Γ(Σi=1kαi)Πi=1kΓ(αi)θ1α1=1θ2α2=1...θkαk=1p(\theta|\alpha)=\frac{\Gamma(\Sigma_{i=1}^k \alpha_i)}{\Pi_{i=1}^k\Gamma(\alpha_i)}\theta_1^{\alpha_1=1}\theta_2^{\alpha_2=1}...\theta_k^{\alpha_k=1}p(θ∣α)=Πi=1kΓ(αi)Γ(Σi=1kαi)θ1α1=1θ2α2=1...θkαk=1
- 对于N 个词中的每一个词𝑤𝑛 ∶
- (a)选择一个话题𝑧𝑛~𝑀𝑢𝑙𝑡𝑖𝑛𝑜𝑚𝑖𝑎𝑙(𝜃)
- (b)按𝑝(𝑤𝑛|𝑧𝑛, 𝛽)选择一个词𝑤𝑛, 𝑝(𝑤𝑛|𝑧𝑛, 𝛽)是给定主题𝑧𝑛的条件概率分布
- 其中𝛽是𝑘 × 𝑉的矩阵,且𝛽𝑖𝑗 = 𝑝(𝑤𝑗 = 1|𝑧𝑖=1)
- ◼三个主题和三个词
- •LDA和PLSA的不同在于在主题的简单型上面LDA多了一个平滑的分布
[参考文献】
- •LDA和PLSA的不同在于在主题的简单型上面LDA多了一个平滑的分布
- 白板推导HMM
- 国科大prml–郭嘉丰老师ppt
- 李志鹏, 陈善广, 薛亮. 解决Baum-Welch算法下溢问题的参数重估公式中存在的问题及其更正[J]. 声学学报, 2001(05):468-475.