机器学习笔记之条件随机场(六)学习任务介绍(Learning)

news2025/4/13 11:25:10

机器学习笔记之条件随机场——学习任务介绍

引言

上一节介绍了使用前向后向算法求解基于链式条件随机场某隐状态的边缘概率分布,本节将介绍条件随机场中模型参数的学习任务

回顾:条件随机场求解边缘概率分布

场景设计

条件随机场使用的数据集合是一个序列信息。以词性标注为例,已知数据集合 X \mathcal X X以及对应的序列标注标签 Y \mathcal Y Y表示如下:
其中 T T T表示序列长度。
X = { x ( 1 ) , x ( 2 ) , ⋯   , x ( N ) } Y = { y ( 1 ) , y ( 2 ) , ⋯   , y ( N ) } x ( i ) , y ( i ) ∈ R T ; i = 1 , 2 , ⋯   , N \begin{aligned} \mathcal X = \{x^{(1)},x^{(2)},\cdots,x^{(N)}\} \\ \mathcal Y = \{y^{(1)},y^{(2)},\cdots,y^{(N)}\} \\ x^{(i)},y^{(i)} \in \mathbb R^T;i=1,2,\cdots,N \end{aligned} X={x(1),x(2),,x(N)}Y={y(1),y(2),,y(N)}x(i),y(i)RT;i=1,2,,N
推断任务中的边缘概率分布的求解问题即:模型给定的条件下,对于陌生样本序列 x 1 : T x_{1:T} x1:T,求解其词性标注序列某一时刻结果 y t y_t yt的条件概率
这里设定隐状态的取值是‘离散型随机变量’,如[名词,动词,形容词,副词,...],它的取值集合用 K \mathcal K K表示。
P ( y t = j ∣ x 1 : T ) { t ∈ { 1 , 2 , ⋯ T } j ∈ K = { 1 , 2 , ⋯   , K } \mathcal P(y_t=j \mid x_{1:T}) \begin{cases} t \in \{1,2,\cdots T\} \\ j \in \mathcal K = \{1,2,\cdots,\mathcal K\} \end{cases} P(yt=jx1:T){t{1,2,T}jK={1,2,,K}

前向后向算法

前向后向算法(Forward-Backward Algorithm)对应概率图模型描述表示如下:
条件随机场-前向后向算法
P ( y t ∣ x 1 : T ) \mathcal P(y_t \mid x_{1:T}) P(ytx1:T)因子分解求解过程划分为两部分:
其中 Z \mathcal Z Z表示配分函数~
P ( y t ∣ x 1 : T ) = ∑ y 1 , ⋯   , y t − 1 ∑ y t + 1 , ⋯   , y T 1 Z ∏ t = 1 T − 1 ψ t ( y t , y t + 1 , x 1 : T ) = 1 Z [ ∑ y 1 , ⋯ y t − 1 ∏ i = 1 t − 1 ψ i ( y i , y i + 1 , x 1 : T ) ] ⋅ [ ∑ y t + 1 , ⋯   , y T ∏ i = t T − 1 ψ i ( y i , y i + 1 , x 1 : T ) ] = 1 Z Δ l e f t ⋅ Δ r i g h t \begin{aligned} \mathcal P(y_t \mid x_{1:T}) & = \sum_{y_1,\cdots,y_{t-1}} \sum_{y_{t+1},\cdots,y_T}\frac{1}{\mathcal Z} \prod_{t=1}^{T-1} \psi_t(y_t,y_{t+1},x_{1:T}) \\ & = \frac{1}{\mathcal Z} \left[\sum_{y_1,\cdots y_{t-1}} \prod_{i=1}^{t-1}\psi_i(y_i,y_{i+1},x_{1:T})\right] \cdot \left[\sum_{y_{t+1},\cdots,y_T} \prod_{i=t}^{T-1} \psi_i(y_i,y_{i+1},x_{1:T})\right] \\ & = \frac{1}{\mathcal Z} \Delta_{left} \cdot \Delta_{right} \end{aligned} P(ytx1:T)=y1,,yt1yt+1,,yTZ1t=1T1ψt(yt,yt+1,x1:T)=Z1[y1,yt1i=1t1ψi(yi,yi+1,x1:T)][yt+1,,yTi=tT1ψi(yi,yi+1,x1:T)]=Z1ΔleftΔright
对于链式条件随机场,无论前向还是后向,它们都可以用变量消去法(Variable Elimination,VE)的方式进行化简:
Δ l e f t = α t ( k ) = ∑ y t − 1 ψ t − 1 ( y t − 1 , y t = k , x 1 : T ) ⋯ ∑ y 2 ψ 2 ( y 2 , y 3 , x 1 : T ) ∑ y 1 ψ 1 ( y 1 , y 2 , x 1 : T ) Δ r i g h t = β t ( m ) = ∑ y t + 1 ψ t ( y t = m , y t + 1 , x 1 : T ) ∑ y t + 2 ψ t + 1 ( y t + 1 , y t + 2 , x 1 : T ) ⋯ ∑ y T ψ T − 1 ( y T − 1 , y T , x 1 : T ) \begin{aligned} \Delta_{left} = \alpha_t(k) & = \sum_{y_{t-1}} \psi_{t-1}(y_{t-1},y_t = k,x_{1:T}) \cdots \sum_{y_2}\psi_2(y_2,y_3,x_{1:T})\sum_{y_1}\psi_1(y_1,y_2,x_{1:T}) \\ \Delta_{right} = \beta_t(m) & = \sum_{y_{t+1}} \psi_t(y_t = m,y_{t+1},x_{1:T}) \sum_{y_{t+2}} \psi_{t+1}(y_{t+1},y_{t+2},x_{1:T})\cdots \sum_{y_T} \psi_{T-1}(y_{T-1},y_T,x_{1:T}) \end{aligned} Δleft=αt(k)Δright=βt(m)=yt1ψt1(yt1,yt=k,x1:T)y2ψ2(y2,y3,x1:T)y1ψ1(y1,y2,x1:T)=yt+1ψt(yt=m,yt+1,x1:T)yt+2ψt+1(yt+1,yt+2,x1:T)yTψT1(yT1,yT,x1:T)

关于条件随机场的学习任务

在条件随机场要解决的任务中介绍了学习任务本质是求解最优模型参数 θ ^ \hat {\theta} θ^,而判别标准是 P ( Y ∣ X ) \mathcal P(\mathcal Y\mid \mathcal X) P(YX)
集合 X , Y \mathcal X,\mathcal Y X,Y中的各样本均服从‘独立同分布’。
θ ^ = arg ⁡ max ⁡ θ P ( Y ∣ X ) = arg ⁡ max ⁡ θ ∏ i = 1 N P ( y ( i ) ∣ x ( i ) ) \begin{aligned} \hat {\theta} & = \mathop{\arg\max}\limits_{\theta} \mathcal P(\mathcal Y \mid \mathcal X) \\ & = \mathop{\arg\max}\limits_{\theta} \prod_{i=1}^{N} \mathcal P(y^{(i)} \mid x^{(i)}) \end{aligned} θ^=θargmaxP(YX)=θargmaxi=1NP(y(i)x(i))
在建模对象的表示中,模型参数 θ \theta θ共包含两个部分: λ , η \lambda,\eta λ,η。它门分别表示转移特征函数 s ( y t + 1 , y t , x 1 : T ) s(y_{t+1},y_t,x_{1:T}) s(yt+1,yt,x1:T)状态特征函数 g ( y t , x 1 : T ) g(y_t,x_{1:T}) g(yt,x1:T)参数信息
θ = ( λ , η ) T = ( λ 1 , ⋯   , λ M , η 1 , ⋯   , η L ) T \begin{aligned} \theta & = (\lambda,\eta)^T & = (\lambda_1,\cdots,\lambda_{\mathcal M},\eta_1,\cdots,\eta_{\mathcal L})^T \end{aligned} θ=(λ,η)T=(λ1,,λM,η1,,ηL)T
对应建模对象 P ( y ∣ x ) \mathcal P(y \mid x) P(yx)表示如下:
其中 P ( y ∣ x ) \mathcal P(y \mid x) P(yx) x , y x,y x,y分别表示数据集合 X \mathcal X X中的任意样本以及对应标注信息,这里 x x x x 1 : T x_{1:T} x1:T等价。
P ( y ∣ x ) = 1 Z ( x 1 : T , λ , η ) exp ⁡ [ λ T ∑ t = 1 T − 1 s ( y t , y t + 1 , x 1 : T ) + η T ∑ t = 1 T g ( y t , x 1 : T ) ] \mathcal P(y \mid x) = \frac{1}{\mathcal Z(x_{1:T},\lambda,\eta)} \exp \left[\lambda^T \sum_{t=1}^{T-1} s(y_{t},y_{t+1},x_{1:T}) + \eta^T \sum_{t=1}^Tg(y_t,x_{1:T})\right] P(yx)=Z(x1:T,λ,η)1exp[λTt=1T1s(yt,yt+1,x1:T)+ηTt=1Tg(yt,x1:T)]
最优参数 θ ^ \hat {\theta} θ^进行细分,并将 x ( i ) , y ( i ) x^{(i)},y^{(i)} x(i),y(i)代入有:
在展开过程中加入一个 l o g log log,和极大似然估计的思路相同, l o g log log函数不影响函数的单调性,因而不影响最优参数的选择。
θ ^ ⇒ λ ^ , η ^ = arg ⁡ max ⁡ λ , η ∏ i = 1 N P ( y ( i ) ∣ x ( i ) ) ⇒ arg ⁡ max ⁡ λ , η [ log ⁡ ∏ i = 1 N P ( y ( i ) ∣ x ( i ) ) ] = arg ⁡ max ⁡ λ , η ∑ i = 1 N log ⁡ P ( y ( i ) ∣ x ( i ) ) = arg ⁡ max ⁡ λ , η ∑ i = 1 N log ⁡ { 1 Z ( x 1 : T ( i ) , λ , η ) exp ⁡ [ λ T ∑ t = 1 T − 1 s ( y t ( i ) , y t + 1 ( i ) , x 1 : T ( i ) ) + η T ∑ t = 1 T g ( y t ( i ) , x 1 : T ( i ) ) ] } \begin{aligned} \hat {\theta} \Rightarrow \hat \lambda,\hat {\eta} & = \mathop{\arg\max}\limits_{\lambda,\eta} \prod_{i=1}^N \mathcal P(y^{(i)} \mid x^{(i)}) \\ & \Rightarrow \mathop{\arg\max}\limits_{\lambda,\eta} \left[\log \prod_{i=1}^N \mathcal P(y^{(i)} \mid x^{(i)})\right] \\ & = \mathop{\arg\max}\limits_{\lambda,\eta} \sum_{i=1}^N \log \mathcal P(y^{(i)} \mid x^{(i)}) \\ & = \mathop{\arg\max}\limits_{\lambda,\eta} \sum_{i=1}^N \log\left\{\frac{1}{\mathcal Z(x_{1:T}^{(i)},\lambda,\eta)} \exp \left[\lambda^T\sum_{t=1}^{T-1}s(y_t^{(i)},y_{t+1}^{(i)},x_{1:T}^{(i)}) + \eta^T \sum_{t=1}^T g(y_t^{(i)},x_{1:T}^{(i)})\right]\right\} \end{aligned} θ^λ^,η^=λ,ηargmaxi=1NP(y(i)x(i))λ,ηargmax[logi=1NP(y(i)x(i))]=λ,ηargmaxi=1NlogP(y(i)x(i))=λ,ηargmaxi=1Nlog{Z(x1:T(i),λ,η)1exp[λTt=1T1s(yt(i),yt+1(i),x1:T(i))+ηTt=1Tg(yt(i),x1:T(i))]}
继续对上式进行展开,有:
log ⁡ \log log exp ⁡ \exp exp消掉了~
λ ^ , η ^ = arg ⁡ max ⁡ λ , η ∑ i = 1 N [ log ⁡ 1 Z ( x 1 : T ( i ) , λ , η ) + log ⁡ exp ⁡ ( λ T ∑ t = 1 T − 1 s ( y t ( i ) , y t + 1 ( i ) , x 1 : T ( i ) ) + η T ∑ t = 1 T g ( y t ( i ) , x 1 : T ( i ) ) ) ] = arg ⁡ max ⁡ λ , η ∑ i = 1 N [ − log ⁡ Z ( x 1 : T ( i ) , λ , η ) + λ T ∑ t = 1 T − 1 s ( y t ( i ) , y t + 1 ( i ) , x 1 : T ( i ) ) + η T ∑ i = 1 T g ( y t ( i ) , x 1 : T ( i ) ) ] \begin{aligned} \hat {\lambda},\hat {\eta} & = \mathop{\arg\max}\limits_{\lambda,\eta} \sum_{i=1}^N \left[\log \frac{1}{\mathcal Z(x_{1:T}^{(i)},\lambda,\eta)} + \log \exp \left(\lambda^T\sum_{t=1}^{T-1} s(y_t^{(i)},y_{t+1}^{(i)},x_{1:T}^{(i)}) + \eta^T\sum_{t=1}^T g(y_t^{(i)},x_{1:T}^{(i)})\right)\right]\\ & = \mathop{\arg\max}\limits_{\lambda,\eta} \sum_{i=1}^N\left[-\log \mathcal Z\left(x_{1:T}^{(i)},\lambda,\eta\right) + \lambda^T \sum_{t=1}^{T-1} s(y_t^{(i)},y_{t+1}^{(i)},x_{1:T}^{(i)}) + \eta^T \sum_{i=1}^T g(y_t^{(i)},x_{1:T}^{(i)}) \right] \end{aligned} λ^,η^=λ,ηargmaxi=1N[logZ(x1:T(i),λ,η)1+logexp(λTt=1T1s(yt(i),yt+1(i),x1:T(i))+ηTt=1Tg(yt(i),x1:T(i)))]=λ,ηargmaxi=1N[logZ(x1:T(i),λ,η)+λTt=1T1s(yt(i),yt+1(i),x1:T(i))+ηTi=1Tg(yt(i),x1:T(i))]
定义目标函数 J ( λ , η , x 1 : T ( i ) ) \mathcal J(\lambda,\eta,x_{1:T}^{(i)}) J(λ,η,x1:T(i))表示如下:
J ( λ , η , x 1 : T ( i ) ) = ∑ i = 1 N [ − log ⁡ Z ( x 1 : T ( i ) , λ , η ) + λ T ∑ t = 1 T − 1 s ( y t ( i ) , y t + 1 ( i ) , x 1 : T ( i ) ) + η T ∑ i = 1 T g ( y t ( i ) , x 1 : T ( i ) ) ] λ ^ , η ^ = arg ⁡ max ⁡ λ , η J ( λ , η , x 1 : T ( i ) ) \mathcal J(\lambda,\eta,x_{1:T}^{(i)}) = \sum_{i=1}^N\left[-\log \mathcal Z\left(x_{1:T}^{(i)},\lambda,\eta\right) + \lambda^T \sum_{t=1}^{T-1} s(y_t^{(i)},y_{t+1}^{(i)},x_{1:T}^{(i)}) + \eta^T \sum_{i=1}^T g(y_t^{(i)},x_{1:T}^{(i)}) \right] \\ \hat {\lambda},\hat \eta = \mathop{\arg\max}\limits_{\lambda,\eta} \mathcal J(\lambda,\eta,x_{1:T}^{(i)}) J(λ,ηx1:T(i))=i=1N[logZ(x1:T(i),λ,η)+λTt=1T1s(yt(i),yt+1(i),x1:T(i))+ηTi=1Tg(yt(i),x1:T(i))]λ^,η^=λ,ηargmaxJ(λ,η,x1:T(i))
针对 最大化问题,常用的方法:梯度上升(Gradient Ascent)。

  • 需要针对目标函数 J \mathcal J J关于 λ , η \lambda,\eta λ,η求解梯度:
    ∇ λ J ( λ , η , x 1 : T ( i ) ) , ∇ η ( λ , η , x 1 : T ( i ) ) \begin{aligned} \nabla_{\lambda} \mathcal J(\lambda,\eta,x_{1:T}^{(i)}),\nabla_{\eta}(\lambda,\eta,x_{1:T}^{(i)}) \end{aligned} λJ(λ,η,x1:T(i)),η(λ,η,x1:T(i))
  • 模型参数在迭代过程中向梯度方向变化,从而逼近最优解:
    λ ( k + 1 ) = λ k + d λ ⋅ ∇ λ J ( λ ( k ) , η ( k ) , x 1 : T ( i ) ) η ( k + 1 ) = η k + d η ⋅ ∇ η J ( λ ( k ) , η ( k ) , x 1 : T ( i ) ) \begin{aligned} \lambda^{(k+1)} = \lambda^{k} + d_{\lambda} \cdot \nabla_{\lambda} \mathcal J(\lambda^{(k)},\eta^{(k)},x_{1:T}^{(i)}) \\ \eta^{(k+1)} = \eta^{k} + d_{\eta} \cdot \nabla_{\eta} \mathcal J(\lambda^{(k)},\eta^{(k)},x_{1:T}^{(i)}) \end{aligned} λ(k+1)=λk+dλλJ(λ(k),η(k),x1:T(i))η(k+1)=ηk+dηηJ(λ(k),η(k),x1:T(i))

关于模型参数 λ \lambda λ求解梯度

以求解 λ \lambda λ为例,求解步骤如下:

梯度求解

求解梯度 ∇ λ J ( λ , η , x 1 : T ( i ) ) \nabla_{\lambda}\mathcal J(\lambda,\eta,x_{1:T}^{(i)}) λJ(λ,η,x1:T(i))
观察 J ( λ , η , x 1 : T ( i ) ) \mathcal J(\lambda,\eta,x_{1:T}^{(i)}) J(λ,η,x1:T(i)),其中 ∑ i = 1 T η T g ( y t ( i ) , x 1 : T ( i ) ) \sum_{i=1}^T \eta^Tg(y_t^{(i)},x_{1:T}^{(i)}) i=1TηTg(yt(i),x1:T(i)) λ \lambda λ无关。同理,对 η \eta η求解梯度 ∇ η J ( λ , η , x 1 : T ( i ) ) \nabla_{\eta}\mathcal J(\lambda,\eta,x_{1:T}^{(i)}) ηJ(λ,η,x1:T(i))过程中, ∑ t = 1 T − 1 λ T s ( y t ( i ) , y t + 1 ( i ) , x 1 : T ( i ) ) \sum_{t=1}^{T-1} \lambda^Ts(y_t^{(i)},y_{t+1}^{(i)},x_{1:T}^{(i)}) t=1T1λTs(yt(i),yt+1(i),x1:T(i)) η \eta η无关,本文仅对 λ \lambda λ进行梯度求解。
∇ λ J ( λ , η , x 1 : T ( i ) ) = ∑ i = 1 N [ ∑ t − 1 T − 1 s ( y t ( i ) , y t + 1 ( i ) , x 1 : T ( i ) ) − ∇ λ log ⁡ Z ( x 1 : T ( i ) , λ , η ) ] \begin{aligned} \nabla_{\lambda}\mathcal J(\lambda,\eta,x_{1:T}^{(i)}) = \sum_{i=1}^N \left[\sum_{t-1}^{T-1} s(y_{t}^{(i)},y_{t+1}^{(i)},x_{1:T}^{(i)}) - \nabla_{\lambda} \log \mathcal Z(x_{1:T}^{(i)},\lambda,\eta)\right] \end{aligned} λJ(λ,η,x1:T(i))=i=1N[t1T1s(yt(i),yt+1(i),x1:T(i))λlogZ(x1:T(i),λ,η)]
其中 log ⁡ Z ( x 1 : T ( i ) , λ , η ) \log \mathcal Z(x_{1:T}^{(i)},\lambda,\eta) logZ(x1:T(i),λ,η)被称作对数配分函数(log Partition Function)。最早在指数族分布介绍中出现的概念。在指数族分布——充分统计量与模型参数关系中介绍了 对数配分函数的导数与充分统计量之间的关联关系
A ′ ( η ) = ∂ A ( η ) ∂ η = ∫ x 1 e A ( η ) ⋅ h ( x ) e η T ϕ ( x ) ⋅ ϕ ( x ) d x = ∫ x P ( x ∣ η ) ⋅ ϕ ( x ) d x = E P ( x ∣ η ) [ ϕ ( x ) ] \begin{aligned} \mathcal A'(\eta) = \frac{\partial \mathcal A(\eta)}{\partial \eta} & = \int_{x} \frac{1}{e^{\mathcal A(\eta)}} \cdot h(x)e^{\eta^T \phi(x)} \cdot \phi(x) dx \\ & = \int_{x} \mathcal P(x \mid \eta) \cdot \phi(x) dx \\ & = \mathbb E_{\mathcal P(x \mid \eta)}[\phi(x)] \end{aligned} A(η)=ηA(η)=xeA(η)1h(x)eηTϕ(x)ϕ(x)dx=xP(xη)ϕ(x)dx=EP(xη)[ϕ(x)]
其中, A ( η ) \mathcal A(\eta) A(η)表示对数配分函数 ϕ ( x ) \phi(x) ϕ(x)表示样本 x x x充分统计量 P ( x ∣ η ) \mathcal P(x\mid \eta) P(xη)(也有写作 P ( x ; η ) \mathcal P(x;\eta) P(x;η) 表示 x x x服从的概率分布
需要注意的是:

  • 在条件随机场的学习任务中将‘对数配分函数’写成 log ⁡ Z ( x 1 : T ( i ) , λ , η ) \log \mathcal Z(x_{1:T}^{(i)},\lambda,\eta) logZ(x1:T(i),λ,η)的形式,但实际上, x 1 : T ( i ) x_{1:T}^{(i)} x1:T(i)仅表示已知的观测变量(样本数据),并不是‘对数配分函数’的变量,变量只有 λ , η \lambda,\eta λ,η两个。
  • 在‘建模对象’ P ( y ( i ) ∣ x ( i ) ) \mathcal P(y^{(i)} \mid x^{(i)}) P(y(i)x(i))中,某一具体样本 x ( i ) x^{(i)} x(i)的充分统计量该如何表示?回顾‘建模对象’ P ( y ∣ x ) \mathcal P(y \mid x) P(yx)的展开式
    P ( y ∣ x ) = 1 Z ( x 1 : T , λ , η ) exp ⁡ [ λ T ∑ t = 1 T − 1 s ( y t , y t + 1 , x 1 : T ) + η T ∑ t = 1 T g ( y t , x 1 : T ) ] = { 1 Z ( x 1 : T , λ , η ) exp ⁡ [ λ T ( ∑ t = 1 T − 1 s ( y t , y t + 1 , x 1 : T ) ) ] } ⋅ exp ⁡ [ η T ∑ t = 1 T g ( y t , x 1 : T ) ] \begin{aligned} \mathcal P(y \mid x) & = \frac{1}{\mathcal Z(x_{1:T},\lambda,\eta)} \exp \left[\lambda^T \sum_{t=1}^{T-1} s(y_{t},y_{t+1},x_{1:T}) + \eta^T \sum_{t=1}^Tg(y_t,x_{1:T})\right] \\ & = \left\{\frac{1}{\mathcal Z(x_{1:T},\lambda,\eta)} \exp \left[\lambda^T \left(\sum_{t=1}^{T-1} s(y_{t},y_{t+1},x_{1:T})\right)\right]\right\} \cdot \exp \left[\eta^T\sum_{t=1}^T g(y_t,x_{1:T})\right] \end{aligned} P(yx)=Z(x1:T,λ,η)1exp[λTt=1T1s(yt,yt+1,x1:T)+ηTt=1Tg(yt,x1:T)]={Z(x1:T,λ,η)1exp[λT(t=1T1s(yt,yt+1,x1:T))]}exp[ηTt=1Tg(yt,x1:T)]
    观察,由于条件随机场依然使用‘最大熵模型’作为底层逻辑,因此能够看出, { \{ {大括号 } \} }中的项就是‘最大熵模型’的描述形式。而最大熵模型的定义式就是从‘指数族分布’的定义式演化而来。详见最大熵定理与指数族分布的关系。因此,充分统计量就是 ∑ t = 1 T − 1 s ( y t , y t + 1 , x 1 : T ) \sum_{t=1}^{T-1} s(y_{t},y_{t+1},x_{1:T}) t=1T1s(yt,yt+1,x1:T).
  • 即便找到了充分统计量,并没有结束。因为我们要找的是 x 1 : T ( i ) x_{1:T}^{(i)} x1:T(i)这个样本的充分统计量。在这里自然是对‘隐状态’ y t , y t + 1 y_t,y_{t+1} yt,yt+1进行统计。看看 y t , y t + 1 y_t,y_{t+1} yt,yt+1具体代表什么:
    y t = ( y t ( 1 ) , y t ( 2 ) , ⋯   , y t ( N ) ) T y t + 1 = ( y t + 1 ( 1 ) , y t + 1 ( 2 ) , ⋯   , y t + 1 ( N ) ) T y_t = \left(y_t^{(1)},y_t^{(2)},\cdots,y_t^{(N)}\right)^T \\ y_{t+1} = \left(y_{t+1}^{(1)},y_{t+1}^{(2)},\cdots,y_{t+1}^{(N)}\right)^T yt=(yt(1),yt(2),,yt(N))Tyt+1=(yt+1(1),yt+1(2),,yt+1(N))T
    通过上式,可以发现,统计的对象就是‘所有样本’在 t , t + 1 t,t+1 t,t+1时刻的‘离散取值结果’,并进行统计。具体是怎么统计的,这并不是我们关注的重点。 x 1 : T ( i ) x_{1:T}^{(i)} x1:T(i)样本的‘充分统计量’表示如下:
    ϕ ( x 1 : T ( i ) ) = ∑ t = 1 T − 1 s ( y t , y t + 1 , x 1 : T ( i ) ) \phi(x_{1:T}^{(i)}) = \sum_{t=1}^{T-1}s(y_t,y_{t+1},x_{1:T}^{(i)}) ϕ(x1:T(i))=t=1T1s(yt,yt+1,x1:T(i))
    说了这么多,这里最重要的点即: y t , y t + 1 y_t,y_{t+1} yt,yt+1右上角没有样本编号,它表示所有样本 t , t + 1 t,t+1 t,t+1时刻的隐状态集合,它和上面‘建模对象中的’ y t , y t + 1 y_t,y_{t+1} yt,yt+1不是一个东西。建模对象的 y t , y t + 1 y_t,y_{t+1} yt,yt+1中的 y y y表示样本集合 X \mathcal X X任意一个样本 x x x对应的标注序列。

对数配分函数的导数结果带入,有:
个人理解:在整个隐状态分布下求解期望。
∇ λ [ log ⁡ Z ( x 1 : T ( i ) , λ , η ) ] = E Y [ ∑ t = 1 T − 1 s ( y t , y t + 1 , x 1 : T ( i ) ) ] Y = ( y 1 , ⋯   , y T ) T \nabla_{\lambda} \left[\log \mathcal Z(x_{1:T}^{(i)},\lambda,\eta)\right] = \mathbb E_{\mathcal Y}\left[\sum_{t=1}^{T-1}s(y_t,y_{t+1},x_{1:T}^{(i)})\right] \quad \mathcal Y = (y_1,\cdots,y_T)^T λ[logZ(x1:T(i),λ,η)]=EY[t=1T1s(yt,yt+1,x1:T(i))]Y=(y1,,yT)T
接下来对上述期望结果进行求解:
E Y [ ∑ t = 1 T − 1 s ( y t , y t + 1 , x 1 : T ( i ) ) ] = ∑ Y P ( Y ∣ x 1 : T ( i ) ) [ ∑ t = 1 T − 1 f ( y t , y t + 1 , x 1 : T ( i ) ) ] \begin{aligned} \mathbb E_{\mathcal Y}\left[\sum_{t=1}^{T-1}s(y_t,y_{t+1},x_{1:T}^{(i)})\right] = \sum_{\mathcal Y} \mathcal P(\mathcal Y \mid x_{1:T}^{(i)}) \left[\sum_{t=1}^{T-1}f(y_{t},y_{t+1},x_{1:T}^{(i)})\right] \end{aligned} EY[t=1T1s(yt,yt+1,x1:T(i))]=YP(Yx1:T(i))[t=1T1f(yt,yt+1,x1:T(i))]
观察一下计算该式的时间复杂度 Y \mathcal Y Y包含 y 1 , ⋯   , y T y_1,\cdots,y_T y1,,yT,并且每一个隐状态 y t ( t = 1 , 2 , ⋯   , T ) y_t(t=1,2,\cdots,T) yt(t=1,2,,T)包含 ∣ K ∣ |\mathcal K| K个取值,因此时间复杂度为:
O ( ∣ K ∣ T ) ⋅ O ( T − 1 ) = O [ ( T − 1 ) ∣ K ∣ T ] O(|\mathcal K|^T) \cdot O(T-1) = O[(T-1)|\mathcal K|^T] O(KT)O(T1)=O[(T1)KT]
可以看出,这个复杂度是指数级别的,极难求解。

梯度的简化过程

观察上式, Y \mathcal Y Y和单个的 t t t无关,因此将 ∑ Y P ( Y ∣ x 1 : T ( i ) ) \sum_{\mathcal Y}\mathcal P(\mathcal Y \mid x_{1:T}^{(i)}) YP(Yx1:T(i))看成整体, ∑ t = 1 T − 1 \sum_{t=1}^{T-1} t=1T1提到前面
∇ λ [ log ⁡ Z ( x 1 : T ( i ) , λ , η ) ] = ∑ t = 1 T − 1 [ ∑ Y P ( Y ∣ x 1 : T ( i ) ) s ( y t , y t + 1 , x 1 : T ( i ) ) ] \nabla_{\lambda}\left[\log \mathcal Z(x_{1:T}^{(i)},\lambda,\eta)\right] = \sum_{t=1}^{T-1} \left[\sum_{\mathcal Y} \mathcal P(\mathcal Y \mid x_{1:T}^{(i)}) s(y_{t},y_{t+1},x_{1:T}^{(i)})\right] λ[logZ(x1:T(i),λ,η)]=t=1T1[YP(Yx1:T(i))s(yt,yt+1,x1:T(i))]
∑ Y \sum_{\mathcal Y} Y拆成三部分
∑ Y = ∑ y 1 , ⋯   , y T = ∑ y 1 , ⋯   , y t − 1 ∑ y t , y t + 1 ∑ y t + 2 , ⋯   , y T \sum_{\mathcal Y} = \sum_{y_1,\cdots,y_T} = \sum_{y_1,\cdots,y_{t-1}} \sum_{y_{t},y_{t+1}} \sum_{y_{t+2},\cdots,y_{T}} Y=y1,,yT=y1,,yt1yt,yt+1yt+2,,yT
交换一下顺序,最终结果表示如下:
其中,中括号中的项可以使用‘概率密度积分’的方式积分掉 Y \mathcal Y Y中的 y 1 , ⋯   , y t − 1 , y t + 2 , ⋯   , y T y_1,\cdots,y_{t-1},y_{t+2},\cdots,y_T y1,,yt1,yt+2,,yT,只剩下 y t , y t + 1 y_{t},y_{t+1} yt,yt+1两项
∑ y 1 , ⋯   , y t − 1 ∑ y t + 2 , ⋯   , y T P ( Y ∣ x 1 : T ( i ) ) = ∑ y 1 , ⋯   , y t − 1 ∑ y t + 2 , ⋯   , y T P ( y 1 , y 2 , ⋯   , y T ∣ x 1 : T ( i ) ) = P ( y t , y t + 1 ∣ x 1 : T ( i ) ) \begin{aligned} \sum_{y_1,\cdots,y_{t-1}}\sum_{y_{t+2},\cdots,y_{T}}\mathcal P(\mathcal Y\mid x_{1:T}^{(i)}) & = \sum_{y_1,\cdots,y_{t-1}}\sum_{y_{t+2},\cdots,y_{T}}\mathcal P(y_1,y_2,\cdots,y_T\mid x_{1:T}^{(i)}) \\ & = \mathcal P(y_{t},y_{t+1} \mid x_{1:T}^{(i)}) \end{aligned} y1,,yt1yt+2,,yTP(Yx1:T(i))=y1,,yt1yt+2,,yTP(y1,y2,,yTx1:T(i))=P(yt,yt+1x1:T(i))
此时发现,化简后的结果就是关于 y t , y t + 1 y_t,y_{t+1} yt,yt+1的边缘概率分布( x 1 : T ( i ) x_{1:T}^{(i)} x1:T(i)不是变量,是已知信息)。
∇ λ [ log ⁡ Z ( x 1 : T ( i ) , λ , η ) ] = ∑ t = 1 T − 1 ∑ y t , y t + 1 [ ∑ y 1 , ⋯   , y t − 1 ∑ y t + 2 , ⋯   , y T P ( Y ∣ x 1 : T ( i ) ) ⋅ s ( y t , y t + 1 , x 1 : T ( i ) ) ] = ∑ t = 1 T − 1 ∑ y t , y t + 1 P ( y t , y t + 1 ∣ x 1 : T ( i ) ) ⋅ s ( y t , y t + 1 , x 1 : T ( i ) ) \begin{aligned} \nabla_{\lambda}\left[\log \mathcal Z(x_{1:T}^{(i)},\lambda,\eta)\right] & = \sum_{t=1}^{T-1} \sum_{y_{t},y_{t+1}} \left[\sum_{y_1,\cdots,y_{t-1}}\sum_{y_{t+2},\cdots,y_{T}}\mathcal P(\mathcal Y\mid x_{1:T}^{(i)}) \cdot s(y_{t},y_{t+1},x_{1:T}^{(i)})\right] \\ & = \sum_{t=1}^{T-1} \sum_{y_{t},y_{t+1}} \mathcal P(y_t,y_{t+1} \mid x_{1:T}^{(i)}) \cdot s(y_{t},y_{t+1},x_{1:T}^{(i)}) \end{aligned} λ[logZ(x1:T(i),λ,η)]=t=1T1yt,yt+1[y1,,yt1yt+2,,yTP(Yx1:T(i))s(yt,yt+1,x1:T(i))]=t=1T1yt,yt+1P(yt,yt+1x1:T(i))s(yt,yt+1,x1:T(i))
观察上式,上式已经被化简成只包含 y t , y t + 1 y_t,y_{t+1} yt,yt+1两个变量的式子。 s s s定义的特征函数,可求; P ( y t , y t + 1 ∣ x 1 : T ( i ) ) \mathcal P(y_t,y_{t+1} \mid x_{1:T}^{(i)}) P(yt,yt+1x1:T(i))使用前向后向算法进行求解。对应概率图表示如下:
由于求解两个隐状态整体的边缘分布,需要空出一个团来。
前向后向算法求解边缘概率
对应公式表示如下:
P ( y t , y t + 1 ∣ x 1 : T ( i ) ) = ∑ y 1 , ⋯   , y t − 1 ∑ y t + 2 , ⋯   , y T 1 Z ∏ t = 1 T − 1 ψ t ( y t , y t + 1 , x 1 : T ( i ) ) = 1 Z { [ ∑ y 1 , ⋯   , y t − 1 ψ 1 ( y 1 , y 2 , x 1 : T ( i ) ) ⋯ ψ t − 1 ( y t − 1 , y t , x 1 : T ( i ) ) ] ⋅ ψ t ( y t , y t + 1 , x 1 : T ( i ) ) ⋅ [ ∑ y t + 2 , ⋯   , y T ψ t + 1 ( y t + 1 , y t + 2 , x 1 : T ( i ) ) ⋯ ψ T − 1 ( y T − 1 , y T , x 1 : T ( i ) ) ] } = 1 Z ( Δ l e f t ⋅ ψ t ( y t , y t + 1 , x 1 : T ( i ) ) ⋅ Δ r i g h t ) { Δ l e f t = ∑ y 1 ψ 1 ( y 1 , y 2 , x 1 : T ( i ) ) ⋯ ∑ y t − 1 ψ t − 1 ( y t − 1 , y t , x 1 : T ( i ) ) Δ r i g h t = ∑ t t + 2 ψ t + 1 ( y t + 1 , y t + 2 , x 1 : T ( i ) ) ⋯ ∑ y T ψ T − 1 ( y T − 1 , y T , x 1 : T ( i ) ) \begin{aligned} & \mathcal P(y_t,y_{t+1} \mid x_{1:T}^{(i)}) \\ & = \sum_{y_1,\cdots,y_{t-1}} \sum_{y_{t+2},\cdots,y_T} \frac{1}{\mathcal Z} \prod_{t=1}^{T-1}\psi_t(y_t,y_{t+1},x_{1:T}^{(i)}) \\ & = \frac{1}{\mathcal Z}\left\{\left[\sum_{y_1,\cdots,y_{t-1}} \psi_1(y_1,y_2,x_{1:T}^{(i)}) \cdots \psi_{t-1}(y_{t-1},y_t,x_{1:T}^{(i)})\right] \cdot \psi_{t}(y_t,y_{t+1},x_{1:T}^{(i)}) \cdot \left[\sum_{y_{t+2},\cdots,y_T}\psi_{t+1}(y_{t+1},y_{t+2},x_{1:T}^{(i)}) \cdots \psi_{T-1}(y_{T-1},y_{T},x_{1:T}^{(i)})\right]\right\} \\ & = \frac{1}{\mathcal Z} \left(\Delta_{left} \cdot \psi_{t}(y_t,y_{t+1},x_{1:T}^{(i)}) \cdot \Delta_{right}\right) \begin{cases} \Delta_{left} = \sum_{y_1}\psi_1(y_1,y_2,x_{1:T}^{(i)})\cdots \sum_{y_{t-1}} \psi_{t-1}(y_{t-1},y_t,x_{1:T}^{(i)}) \\ \Delta_{right} = \sum_{t_{t+2}} \psi_{t+1}(y_{t+1},y_{t+2},x_{1:T}^{(i)}) \cdots\sum_{y_{T}} \psi_{T-1}(y_{T-1},y_T,x_{1:T}^{(i)}) \end{cases} \end{aligned} P(yt,yt+1x1:T(i))=y1,,yt1yt+2,,yTZ1t=1T1ψt(yt,yt+1,x1:T(i))=Z1{[y1,,yt1ψ1(y1,y2,x1:T(i))ψt1(yt1,yt,x1:T(i))]ψt(yt,yt+1,x1:T(i))[yt+2,,yTψt+1(yt+1,yt+2,x1:T(i))ψT1(yT1,yT,x1:T(i))]}=Z1(Δleftψt(yt,yt+1,x1:T(i))Δright){Δleft=y1ψ1(y1,y2,x1:T(i))yt1ψt1(yt1,yt,x1:T(i))Δright=tt+2ψt+1(yt+1,yt+2,x1:T(i))yTψT1(yT1,yT,x1:T(i))
设置 α t ( k ) = Δ l e f t ( y t = k ) , β t + 1 ( j ) = Δ r i g h t ( y t + 1 = j ) \alpha_t(k) = \Delta_{left}(y_t = k),\beta_{t+1}(j) = \Delta_{right}(y_{t+1} = j) αt(k)=Δleft(yt=k),βt+1(j)=Δright(yt+1=j),则有:
P ( y t , y t + 1 ∣ x 1 : T ( i ) ) = 1 Z α t ( k ) ⋅ ψ t ( y t , y t + 1 , x 1 : T ( i ) ) ⋅ β t + 1 ( j ) \mathcal P(y_t,y_{t+1} \mid x_{1:T}^{(i)}) = \frac{1}{\mathcal Z}\alpha_t(k) \cdot \psi_{t}(y_t,y_{t+1},x_{1:T}^{(i)}) \cdot\beta_{t+1}(j) P(yt,yt+1x1:T(i))=Z1αt(k)ψt(yt,yt+1,x1:T(i))βt+1(j)
至此,关于 λ \lambda λ的梯度结果 ∇ λ [ log ⁡ Z ( x 1 : T ( i ) , λ , η ) ] \nabla_{\lambda}\left[\log \mathcal Z(x_{1:T}^{(i)},\lambda,\eta)\right] λ[logZ(x1:T(i),λ,η)]求解过程没有障碍:
∇ λ [ log ⁡ Z ( x 1 : T ( i ) , λ , η ) ] = ∑ t = 1 T − 1 ∑ y t , y t + 1 P ( y t , y t + 1 ∣ x 1 : T ( i ) ) ⋅ s ( y t , y t + 1 , x 1 : T ( i ) ) = 1 Z ∑ t = 1 T − 1 ∑ y t , y t + 1 α t ( k ) ⋅ ψ t ( y t , y t + 1 , x 1 : T ( i ) ) ⋅ β t + 1 ( j ) ⋅ s ( y t , y t + 1 , x 1 : T ( i ) ) \begin{aligned} \nabla_{\lambda}\left[\log \mathcal Z(x_{1:T}^{(i)},\lambda,\eta)\right] & = \sum_{t=1}^{T-1} \sum_{y_{t},y_{t+1}} \mathcal P(y_t,y_{t+1} \mid x_{1:T}^{(i)}) \cdot s(y_{t},y_{t+1},x_{1:T}^{(i)}) \\ & = \frac{1}{\mathcal Z}\sum_{t=1}^{T-1} \sum_{y_t,y_{t+1}} \alpha_t(k) \cdot \psi_{t}(y_t,y_{t+1},x_{1:T}^{(i)}) \cdot\beta_{t+1}(j) \cdot s(y_{t},y_{t+1},x_{1:T}^{(i)}) \end{aligned} λ[logZ(x1:T(i),λ,η)]=t=1T1yt,yt+1P(yt,yt+1x1:T(i))s(yt,yt+1,x1:T(i))=Z1t=1T1yt,yt+1αt(k)ψt(yt,yt+1,x1:T(i))βt+1(j)s(yt,yt+1,x1:T(i))
最终关于模型参数 λ \lambda λ的梯度 ∇ λ J ( λ , η , x 1 : T ( i ) ) \nabla_{\lambda}\mathcal J(\lambda,\eta,x_{1:T}^{(i)}) λJ(λ,η,x1:T(i))结果表示如下:
∇ λ J ( λ , η , x 1 : T ( i ) ) = ∑ i = 1 N [ ∑ t − 1 T − 1 s ( y t ( i ) , y t + 1 ( i ) , x 1 : T ( i ) ) − ∇ λ log ⁡ Z ( x 1 : T ( i ) , λ , η ) ] = ∑ i = 1 N [ ∑ t − 1 T − 1 s ( y t ( i ) , y t + 1 ( i ) , x 1 : T ( i ) ) − 1 Z ∑ t = 1 T − 1 ∑ y t , y t + 1 α t ( k ) ⋅ ψ t ( y t , y t + 1 , x 1 : T ( i ) ) ⋅ β t + 1 ( j ) ⋅ s ( y t , y t + 1 , x 1 : T ( i ) ) ] \begin{aligned} \nabla_{\lambda}\mathcal J(\lambda,\eta,x_{1:T}^{(i)}) & = \sum_{i=1}^N \left[\sum_{t-1}^{T-1} s(y_{t}^{(i)},y_{t+1}^{(i)},x_{1:T}^{(i)}) - \nabla_{\lambda} \log \mathcal Z(x_{1:T}^{(i)},\lambda,\eta)\right] \\ & = \sum_{i=1}^N \left[\sum_{t-1}^{T-1} s(y_{t}^{(i)},y_{t+1}^{(i)},x_{1:T}^{(i)}) - \frac{1}{\mathcal Z}\sum_{t=1}^{T-1} \sum_{y_t,y_{t+1}} \alpha_t(k) \cdot \psi_{t}(y_t,y_{t+1},x_{1:T}^{(i)}) \cdot\beta_{t+1}(j) \cdot s(y_{t},y_{t+1},x_{1:T}^{(i)})\right] \end{aligned} λJ(λ,η,x1:T(i))=i=1N[t1T1s(yt(i),yt+1(i),x1:T(i))λlogZ(x1:T(i),λ,η)]=i=1N[t1T1s(yt(i),yt+1(i),x1:T(i))Z1t=1T1yt,yt+1αt(k)ψt(yt,yt+1,x1:T(i))βt+1(j)s(yt,yt+1,x1:T(i))]
确定了模型参数 λ \lambda λ的迭代方向,可以通过迭代逼近最优解:
这里就不复述 η \eta η的求解过程了。有感兴趣的小伙伴留言交流。
λ ( k + 1 ) = λ k + d λ ⋅ ∇ λ J ( λ ( k ) , η ( k ) , x 1 : T ( i ) ) \lambda^{(k+1)} = \lambda^{k} + d_{\lambda} \cdot \nabla_{\lambda} \mathcal J(\lambda^{(k)},\eta^{(k)},x_{1:T}^{(i)}) λ(k+1)=λk+dλλJ(λ(k),η(k),x1:T(i))

总结

回顾求解模型参数的流程:

  • 将原问题转化为最大化目标函数问题,使用梯度上升法;
  • 在求解梯度的过程中,利用了对数函数求导
  • 在最终求解边缘概率分布过程中,再次使用了前向后向算法

至此,条件随机场的相关信息介绍完毕,下一节将返回高斯分布,介绍一些关于高斯分布的基础逻辑

相关参考:
机器学习-条件随机场(8)-CRF模型-Learning-参数估计

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/13395.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySQL—优化数据库

优化MySQL数据库是数据库管理员的必备技能,通过不同的优化方式达到提高MySQL数据库性能的目的。本节将介绍优化的基本知识。 MySQL数据库的用户和数据非常少的时候,很难判断一个MySQL数据库性能的好坏。只有当长时间运行,并且有大量用户进行…

GoogLenet网络详解

GoogLenet VGG在2014年由牛津大学著名研究组vGG (Visual Geometry Group)提出,斩获该年lmageNet竞赛中Localization Task (定位任务)第一名和 Classification Task (分类任务)第二名。Classification Task (分类任务)的第一名则是GoogleNet 。GoogleNet是Google研发…

vue-router 使用与原理分析,测试结果来啦

简介 Vue Router 是Vue.js的官方路由。与Vue.js核心深度集成,让用Vue.js构建单页应用(SPA)变得更加简单。 对于开发和维护管理后台类的前端项目,页面结构和组合可能非常复杂,所以正确的理解和使用Vue Router就显得尤为…

[附源码]SSM计算机毕业设计ssm新冠疫苗预约接种信息管理JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Spring事务管理

认识事务 可以把一系列(多条sql语句)要执行的操作称为事务,而事务管理就是管理这些操作要么完全执行,要么完全不执行(很经典的一个例子是:A要给B转钱,首先A的钱减少了,但是突然的数…

EMQX数据流转MySQL踩坑日记:EMQX VER 4.2.3

总结: (0)数据库报错问题,详细参考这篇文档,链接,ln -s 源 目标 https://blog.csdn.net/weixin_42110159/article/details/118945136 (1)数据库建立数据,要注意大小写&am…

数字化开采|AIRIOT智慧矿山自动化生产解决方案

由于矿山地形复杂,生产自动化水平低,安全监管技术落后,事故频发等很多因素对煤矿开采技术提出了数据化、可视化、智能化的要求。通过目前的煤矿开采现状可以发现煤矿开采过程中,在生产、监管、巡检、安全、效率等方面还存在许多有…

图文详解Linux基础经典教程(08)——CentOS安装MySQL数据库

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 概述 之前,我们在CentOS中安装了JDK、Tomcat;接下来,我们在CentOS中采用YUM的方式安装MySQL5.6数据库。 安装前准备工作 在此&#xf…

面试常用算法归纳

最长子串、子序列 先说明下子串和子序列的问题:对于s “pwwkew"来说,其中一个子串为"wke”,而"pwke" 是一个子序列。 子序列:一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改…

基于Matlab通用视频处理系统的设计-含Matlab代码

⭕⭕ 目 录 ⭕⭕⏩ 一、引言⏩ 二、系统总体方案设计⏩ 2.1 方案设计⏩ 2.2 界面设计⏩ 三、实例分析⏩ 四、参考文献⏩ 五、Matlab程序获取⏩ 一、引言 随着信息技术的发展,基于视频图像中对感兴趣的目标提取,已经逐渐渗透到人们生活的方方面面&#x…

[附源码]SSM计算机毕业设计“拥抱爱心”公益网站管理系统JAVA

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

VMware Workstation 与 Device/Credential Guard 不兼容问题

系列文章目录 VMware Workstation 与 Device/Credential Guard 不兼容问题 VMware Workstation 与 Device/Credential Guard 不兼容问题系列文章目录一、原因二、解决办法2.1修改虚拟化安全设备为禁用2.2HV主机服务启动类型设置 为 “禁用”2.3关闭 Hyper-V 并且打开虚拟机平台…

CUDA By Example(六)——纹理内存

在本章中,我们将学习如何分配和使用纹理内存(Texture Memory)。和常量内存一样,纹理内存是另一种类型的只读内存,在特定的访问模式中,纹理内存同样能够提升性能并减少内存流量。虽然纹理内存最初是针对传统的图形处理应用程序而设…

Linux学习-43-挂载Linux系统外的文件mount和卸载文件系统umount命令用法

10.10 mount命令详解:挂载Linux系统外的文件 所有的硬件设备必须挂载之后才能使用(新硬盘先格式化后创建分区,再对分区进行挂载),只不过,有些硬件设备(比如硬盘分区)在每次系统启动…

记录一次我虚拟机好不容易连上后的配置

有一说一,看到这个响应,人都麻了 在此我记录一下我检查了哪些,做了哪些 一、Windows本地服务 这一块,有一个算一个,没起的启动,启动的重启 二、VMware的虚拟网络编辑器设置 因为我这次成功用的是NAT模式&a…

图像分割 - 阈值处理 - 多阈值处理(OTSU)

目录 1. 多阈值处理介绍 2. 代码讲解 3. 完整代码 1. 多阈值处理介绍 之前介绍的都是全局单个阈值对图像的分割。固定阈值法,阈值是人工根据灰度直方图的波谷进行设置的。全局阈值法,根据不停的迭代两个区域间的平均灰度进行分割。OUST最大类间方差法…

centos7 环境安装 PM2 管理 node

前言: 由于最新的项目中用到的框架是 ssr 框架。 Vue使用的ssr是 nuxt.js,由于 nuxt.js 和普通的Vue项目不同,所以部署到Linux服务器的方式和普通的Vue项目是有区别的。 1、PM2 介绍 PM2 是一款非常优秀的 Node 进程管理工具,它…

用于科学研究的TCO反式环辛烯:1312010-03-9,(4E)-TCO-CycP-O-PNB ester

(4E)-TCO-CycP-O-PNB ester物理数据: CAS:1312010-03-9| 中文名:(4E)-反式环辛烯-CycP-O-PNB ester, (4E)-反式环辛烯-CYCP-O-PNB-酯 | 英文名:(4E)-TCO-CycP-O-PNB ester 结构式: 英文别名: …

试用信号灯实现如图所示的进程同步关系

试用信号灯实现如图所示的进程同步关系 信号量的个数要等于具有直接前驱的进程个数 P2,P3,P4,P5这些进程有前驱,所以设S2S3S4S50 因为P1执行完,P2,P3,P4才能执行因为P1没有直接前驱,所以直接释放P2.P3.P4的信号量S2,S3,S4P1{V(S2)V(S3)V(…

03-HTML

1 HTML入门 1.1 初识HTML 1.1.1 概述 网络世界已经跟我们息息相关,当我们打开一个网站,首先映入眼帘的就是一个个华丽多彩的网页。这些网页,不仅呈现着基本的内容,还具备优雅的布局和丰富的动态效果,这一切都是如何…