机器学习笔记之受限玻尔兹曼机(六)对数似然梯度求解

news2025/1/11 21:38:33

机器学习笔记之受限玻尔兹曼机——对数似然梯度求解

  • 引言
    • 回顾:含隐变量能量模型的对数似然梯度
    • 受限玻尔兹曼机的对数似然梯度
      • 模型参数求解主体思路
      • 求解过程

引言

上一节介绍了含隐变量能量模型的对数似然梯度求解。本节针对受限玻尔兹曼机,对模型参数进行求解。

回顾:含隐变量能量模型的对数似然梯度

已知一个随机变量集合 X \mathcal X X,随机变量间关系可描述成马尔可夫随机场,并包含观测变量 v v v隐变量 h h h两种。
根据能量模型的描述,将联合概率分布 P ( X ) \mathcal P(\mathcal X) P(X)表示为如下形式:
P ( X ) = P ( h , v ) = 1 Z exp ⁡ { − E [ h , v ] } \mathcal P(\mathcal X) = \mathcal P(h,v) = \frac{1}{\mathcal Z} \exp\{ - \mathbb E[h,v]\} P(X)=P(h,v)=Z1exp{E[h,v]}
其中, Z \mathcal Z Z表示配分函数。如果此时给定样本集合(基于观测变量的集合):
V = { v ( i ) } i = 1 N v ( i ) ∈ R n \mathcal V = \{v^{(i)}\}_{i=1}^N \quad v^{(i)} \in \mathbb R^n V={v(i)}i=1Nv(i)Rn
关于样本集合 V \mathcal V V对数似然 L ( θ ) \mathcal L(\theta) L(θ)可表示为:
各样本间依然服从‘独立同分布’。
L ( θ ) = 1 N ∑ v ( i ) ∈ V log ⁡ P ( v ( i ) ; θ ) \mathcal L(\theta) = \frac{1}{N} \sum_{v^{(i)} \in \mathcal V} \log \mathcal P(v^{(i)};\theta) L(θ)=N1v(i)VlogP(v(i);θ)
对于对数似然 L ( θ ) \mathcal L(\theta) L(θ)的梯度 ∇ θ L ( θ ) \nabla_{\theta}\mathcal L(\theta) θL(θ)可表示为:
∇ θ L ( θ ) = ∂ ∂ θ [ 1 N ∑ v ( i ) ∈ V log ⁡ P ( v ( i ) ; θ ) ] = 1 N ∑ v ( i ) ∈ V ∇ θ log ⁡ P ( v ( i ) ; θ ) ∇ θ log ⁡ P ( v ( i ) ; θ ) = ∑ h ( i ) , v ( i ) { P ( h ( i ) , v ( i ) ) ⋅ ∂ ∂ θ [ E ( h ( i ) , v ( i ) ) ] } − ∑ h ( i ) { P ( h ( i ) ∣ v ( i ) ) ⋅ ∂ ∂ θ [ E ( h ( i ) , v ( i ) ) ] } ⇒ { h ( i ) = ( h 1 ( i ) , h 2 ( i ) , ⋯   , h m ( i ) ) T v ( i ) = ( v 1 ( i ) , v 2 ( i ) , ⋯   , v n ( i ) ) T m + n = p \begin{aligned} \nabla_{\theta}\mathcal L(\theta) & = \frac{\partial}{\partial \theta} \left[\frac{1}{N} \sum_{v^{(i)} \in \mathcal V} \log \mathcal P(v^{(i)};\theta)\right] \\ & = \frac{1}{N} \sum_{v^{(i)} \in \mathcal V} \nabla_{\theta} \log \mathcal P(v^{(i)};\theta) \\ \nabla_{\theta} \log \mathcal P(v^{(i)};\theta) & = \sum_{h^{(i)},v^{(i)}} \left\{\mathcal P(h^{(i)},v^{(i)}) \cdot \frac{\partial}{\partial \theta} \left[\mathbb E(h^{(i)},v^{(i)})\right]\right\} - \sum_{h^{(i)}} \left\{\mathcal P(h^{(i)} \mid v^{(i)})\cdot \frac{\partial}{\partial \theta} \left[\mathbb E(h^{(i)},v^{(i)})\right]\right\} \\ & \Rightarrow \begin{cases} h^{(i)} = (h_1^{(i)},h_2^{(i)},\cdots,h_m^{(i)})^T \\ v^{(i)} = (v_1^{(i)},v_2^{(i)},\cdots,v_n^{(i)})^T \\ m + n = p \end{cases} \end{aligned} θL(θ)θlogP(v(i);θ)=θN1v(i)VlogP(v(i);θ)=N1v(i)VθlogP(v(i);θ)=h(i),v(i){P(h(i),v(i))θ[E(h(i),v(i))]}h(i){P(h(i)v(i))θ[E(h(i),v(i))]}h(i)=(h1(i),h2(i),,hm(i))Tv(i)=(v1(i),v2(i),,vn(i))Tm+n=p

受限玻尔兹曼机的对数似然梯度

模型参数求解主体思路

基于受限玻尔兹曼机结构的联合概率分布 P ( X ) \mathcal P(\mathcal X) P(X)表示如下:
P ( X ) = P ( h , v ) = 1 Z exp ⁡ [ v T W h + b T v + c T h ] \mathcal P(\mathcal X) = \mathcal P(h,v) = \frac{1}{\mathcal Z} \exp \left[v^T \mathcal W h + b^Tv + c^Th \right] P(X)=P(h,v)=Z1exp[vTWh+bTv+cTh]
关于模型参数 θ \theta θ的描述,自然是 θ = { W , b , c } \theta = \{\mathcal W,b,c\} θ={W,b,c}。但本质上只有一种信息表示结点之间关联关系的表示。其中 b , c b,c b,c分别表示某观测变量/某隐变量与自身的关联关系,这种关系被视作特殊的节点间关系。在本节中,仅求解一般性的关联关系——存在边的,隐变量与观测变量之间的关联关系,也就是模型参数 W \mathcal W W
W = ( w 11 , w 12 , ⋯   , w 1 n w 21 , w 22 , ⋯   , w 2 n ⋮ w m 1 , w m 2 , ⋯   , w m n ) m × n W ( i ) = [ w k j ( i ) ] m × n \mathcal W = \begin{pmatrix} w_{11},w_{12},\cdots,w_{1n} \\ w_{21},w_{22},\cdots,w_{2n} \\ \vdots \\ w_{m1},w_{m2},\cdots,w_{mn} \\ \end{pmatrix}_{m \times n} \quad \mathcal W^{(i)} = [w_{kj}^{(i)}]_{m \times n} W=w11,w12,,w1nw21,w22,,w2nwm1,wm2,,wmnm×nW(i)=[wkj(i)]m×n

主体思路:如果能够将 W \mathcal W W的梯度求解出来,自然就可以使用极大似然估计,基于梯度上升法,将 W \mathcal W W近似出来:
W ( t + 1 ) ⇐ W ( t ) + η ∇ W L ( W ) \mathcal W^{(t+1)} \Leftarrow \mathcal W^{(t)} + \eta \nabla_{\mathcal W} \mathcal L(\mathcal W) W(t+1)W(t)+ηWL(W)

求解过程

基于能量模型的对数似然梯度,将受限玻尔兹曼机的结构表示代入公式中:
依然仅针对一个观测样本 v ( i ) v^{(i)} v(i),该样本的第 k k k个分量(维度) v k ( i ) v_k^{(i)} vk(i)和对应隐变量 h ( i ) h^{(i)} h(i)的第 j j j个分量 h j ( i ) h_j^{(i)} hj(i)之间的模型参数 w k j ( i ) w_{kj}^{(i)} wkj(i)进行积分。
符号描述
∇ θ [ log ⁡ P ( v ( i ) ; θ ) ] = ∂ ∂ w k j ( i ) [ log ⁡ P ( v ( i ) ; θ ) ] = − ∑ h ( i ) { P ( h ( i ) ∣ v ( i ) ) ⋅ ∂ ∂ w k j ( i ) [ E [ h ( i ) , v ( i ) ] ] } + ∑ h ( i ) , v ( i ) { P ( h ( i ) , v ( i ) ) ⋅ ∂ ∂ w k j ( i ) [ E ( h ( i ) , v ( i ) ) ] } \begin{aligned} \nabla_{\theta}\left[\log \mathcal P(v^{(i)};\theta)\right] & = \frac{\partial}{\partial w_{kj}^{(i)}} \left[ \log \mathcal P(v^{(i)};\theta)\right] \\ & = - \sum_{h^{(i)}} \left\{\mathcal P(h^{(i)} \mid v^{(i)}) \cdot \frac{\partial}{\partial w_{kj}^{(i)}} \left[ \mathbb E [h^{(i)},v^{(i)}]\right]\right\} + \sum_{h^{(i)},v^{(i)}} \left\{\mathcal P(h^{(i)},v^{(i)}) \cdot \frac{\partial}{\partial w_{kj}^{(i)}} \left[\mathbb E(h^{(i)},v^{(i)})\right]\right\} \end{aligned} θ[logP(v(i);θ)]=wkj(i)[logP(v(i);θ)]=h(i){P(h(i)v(i))wkj(i)[E[h(i),v(i)]]}+h(i),v(i){P(h(i),v(i))wkj(i)[E(h(i),v(i))]}
由于这里不考虑模型参数 b , c b,c b,c的影响,使用 Δ \Delta Δ进行表示。因而 能量函数 E [ h ( i ) , v ( i ) ] \mathbb E[h^{(i)},v^{(i)}] E[h(i),v(i)]可表示为如下形式:
E [ h ( i ) , v ( i ) ] = − { [ h ( i ) ] T W ( i ) v ( i ) + Δ ( i ) } = − ( ∑ k = 1 m ∑ j = 1 n h k ( i ) ⋅ w k j ( i ) ⋅ v j ( i ) + Δ ( i ) ) \begin{aligned} \mathbb E[h^{(i)},v^{(i)}] & = - \left\{[h^{(i)}]^T \mathcal W^{(i)} v^{(i)} + \Delta^{(i)}\right\} \\ & = - \left(\sum_{k=1}^m \sum_{j=1}^n h_k^{(i)} \cdot w_{kj}^{(i)} \cdot v_j^{(i)} + \Delta^{(i)} \right) \end{aligned} E[h(i),v(i)]={[h(i)]TW(i)v(i)+Δ(i)}=(k=1mj=1nhk(i)wkj(i)vj(i)+Δ(i))
将其代入,有:
能量函数 E [ h ( i ) , v ( i ) ] \mathbb E[h^{(i)},v^{(i)}] E[h(i),v(i)]仅对 w k j ( i ) w_{kj}^{(i)} wkj(i)一项进行求导,连加号 ∑ ≠ k m , ∑ ≠ j n \sum_{\neq k}^m,\sum_{\neq j}^n =km,=jn均视作常数:
∂ ∂ w k j ( i ) [ E [ h ( i ) , v ( i ) ] ] = ∂ ∂ w k j ( i ) [ − ( h 1 ( i ) ⋅ w 11 ( i ) ⋅ v 1 ( i ) + ⋯ h k ( i ) ⋅ w k j ( i ) ⋅ v j ( i ) + ⋯ + h m ( i ) ⋅ w m n ( i ) ⋅ v n ( i ) + Δ ( i ) ) ] = ∂ ∂ w k j ( i ) [ − ( h k ( i ) ⋅ w k j ( i ) ⋅ v j ( i ) ) ] = − h k ( i ) v j ( i ) ∇ θ [ log ⁡ P ( v ( i ) ; θ ) ] = − ∑ h ( i ) { P ( h ( i ) ∣ v ( i ) ) ⋅ ( − h k ( i ) v j ( i ) ) } + ∑ h ( i ) , v ( i ) { P ( h ( i ) , v ( i ) ) ⋅ ( − h k ( i ) v j ( i ) ) } \begin{aligned} \frac{\partial}{\partial w_{kj}^{(i)}} \left[\mathbb E[h^{(i)},v^{(i)}]\right] & = \frac{\partial}{\partial w_{kj}^{(i)}} \left[- \left(h_1^{(i)} \cdot w_{11}^{(i)} \cdot v_1^{(i)} + \cdots h_k^{(i)} \cdot w_{kj}^{(i)} \cdot v_j^{(i)} + \cdots + h_m^{(i)} \cdot w_{mn}^{(i)} \cdot v_{n}^{(i)} + \Delta^{(i)}\right)\right] \\ & = \frac{\partial}{\partial w_{kj}^{(i)}} \left[ -\left(h_k^{(i)} \cdot w_{kj}^{(i)} \cdot v_j^{(i)}\right)\right] \\ & = - h_{k}^{(i)} v_j^{(i)} \\ \nabla_{\theta}\left[\log \mathcal P(v^{(i)};\theta)\right] & = -\sum_{h^{(i)}} \left\{\mathcal P(h^{(i)} \mid v^{(i)}) \cdot (-h_k^{(i)}v_j^{(i)})\right\} + \sum_{h^{(i)},v^{(i)}} \left\{\mathcal P(h^{(i)},v^{(i)}) \cdot (-h_k^{(i)} v_j^{(i)})\right\} \end{aligned} wkj(i)[E[h(i),v(i)]]θ[logP(v(i);θ)]=wkj(i)[(h1(i)w11(i)v1(i)+hk(i)wkj(i)vj(i)++hm(i)wmn(i)vn(i)+Δ(i))]=wkj(i)[(hk(i)wkj(i)vj(i))]=hk(i)vj(i)=h(i){P(h(i)v(i))(hk(i)vj(i))}+h(i),v(i){P(h(i),v(i))(hk(i)vj(i))}
继续化简,有:
∇ θ [ log ⁡ P ( v ( i ) ; θ ) ] = ∑ h ( i ) { P ( h ( i ) ∣ v ( i ) ) ⋅ h k ( i ) v j ( i ) } − ∑ h ( i ) , v ( i ) { P ( h ( i ) , v ( i ) ) ⋅ h k ( i ) v j ( i ) } \begin{aligned} \nabla_{\theta}\left[\log \mathcal P(v^{(i)};\theta)\right] & = \sum_{h^{(i)}} \left\{\mathcal P(h^{(i)} \mid v^{(i)}) \cdot h_k^{(i)}v_j^{(i)}\right\} - \sum_{h^{(i)},v^{(i)}} \left\{\mathcal P(h^{(i)},v^{(i)}) \cdot h_k^{(i)} v_j^{(i)}\right\} \end{aligned} θ[logP(v(i);θ)]=h(i){P(h(i)v(i))hk(i)vj(i)}h(i),v(i){P(h(i),v(i))hk(i)vj(i)}
这里依然假设变量信息(隐变量、观测变量)服从伯努利分布(Bernoulli Distribution),因而所有变量均是离散型随机变量,并且仅有两种取值: 0 , 1 0,1 0,1。基于这种假设,可以继续向下化简:

  • 先观察等号右侧第一项
    ∑ h ( i ) \sum_{h^{(i)}} h(i)按照随机变量维度展开.
    除去 ∑ h k ( i ) \sum_{h_k^{(i)}} hk(i)项之外的其他项全被积分掉了。例如:
    ∑ h 1 ( i ) P ( h 1 ( i ) , h 2 ( i ) , ⋯   , h m ( i ) ∣ v ( i ) ) ⋅ h k ( i ) v j ( i ) = h k ( i ) v j ( i ) ⋅ ∑ h 1 ( i ) P ( h 1 ( i ) , h 2 ( i ) , ⋯   , h m ( i ) ∣ v ( i ) ) = h k ( i ) v j ( i ) ⋅ P ( h 2 ( i ) , ⋯   , h m ( i ) ∣ v ( i ) ) \begin{aligned} & \quad \sum_{h_1^{(i)}} \mathcal P(h_1^{(i)},h_2^{(i)},\cdots,h_m^{(i)} \mid v^{(i)}) \cdot h_k^{(i)}v_j^{(i)} \\ & = h_k^{(i)}v_j^{(i)} \cdot \sum_{h_1^{(i)}} \mathcal P(h_1^{(i)},h_2^{(i)},\cdots,h_m^{(i)} \mid v^{(i)}) \\ & = h_k^{(i)}v_j^{(i)} \cdot \mathcal P(h_2^{(i)},\cdots,h_m^{(i)} \mid v^{(i)}) \end{aligned} \\ h1(i)P(h1(i),h2(i),,hm(i)v(i))hk(i)vj(i)=hk(i)vj(i)h1(i)P(h1(i),h2(i),,hm(i)v(i))=hk(i)vj(i)P(h2(i),,hm(i)v(i))
    剩余的项以此类推~从而有:
    ∑ h ( i ) { P ( h ( i ) ∣ v ( i ) ) ⋅ h k ( i ) v j ( i ) } = ∑ h 1 ( i ) , ⋯   , ∑ h k ( i ) , ⋯   , ∑ h m ( i ) { P ( h 1 ( i ) , ⋯   , h k ( i ) , ⋯   , h m ( i ) ∣ v ( i ) ) ⋅ h k ( i ) v j ( i ) } = ∑ h k ( i ) P ( h k ( i ) ∣ v ( i ) ) ⋅ h k ( i ) v j ( i ) \begin{aligned} \sum_{h^{(i)}} \left\{\mathcal P(h^{(i)} \mid v^{(i)}) \cdot h_k^{(i)}v_j^{(i)}\right\} & = \sum_{h_1^{(i)}},\cdots,\sum_{h_k^{(i)}},\cdots,\sum_{h_m^{(i)}} \left\{\mathcal P(h_1^{(i)},\cdots,h_k^{(i)},\cdots,h_m^{(i)} \mid v^{(i)}) \cdot h_k^{(i)}v_j^{(i)}\right\} \\ & = \sum_{h_k^{(i)}} \mathcal P(h_k^{(i)} \mid v^{(i)}) \cdot h_k^{(i)}v_j^{(i)} \end{aligned} h(i){P(h(i)v(i))hk(i)vj(i)}=h1(i),,hk(i),,hm(i){P(h1(i),,hk(i),,hm(i)v(i))hk(i)vj(i)}=hk(i)P(hk(i)v(i))hk(i)vj(i)
    h k ( i ) = { 0 , 1 } h_k^{(i)} = \{0,1\} hk(i)={0,1}分别代入,有:
    P ( h k ( i ) = 1 ∣ v ( i ) ) ⋅ v j ( i ) + 0 \mathcal P(h_k^{(i)}=1 \mid v^{(i)}) \cdot v_j^{(i)} + 0 P(hk(i)=1v(i))vj(i)+0
  • 再观察等号右侧第二项
    P ( h ( i ) , v ( i ) ) \mathcal P(h^{(i)},v^{(i)}) P(h(i),v(i))按照条件概率公式展开.
    将仅和 v ( i ) v^{(i)} v(i)相关的和仅和 h ( i ) h^{(i)} h(i)相关的项分开.
    第一项的结果 ∑ h ( i ) { P ( h ( i ) ∣ v ( i ) ) ⋅ h k ( i ) v j ( i ) } = P ( h k ( i ) = 1 ∣ v ( i ) ) ⋅ v j ( i ) \sum_{h^{(i)}}\left\{\mathcal P(h^{(i)} \mid v^{(i)}) \cdot h_k^{(i)}v_j^{(i)}\right\} = \mathcal P(h_k^{(i)}=1 \mid v^{(i)}) \cdot v_j^{(i)} h(i){P(h(i)v(i))hk(i)vj(i)}=P(hk(i)=1v(i))vj(i)直接拿来用就可以。
    ∑ h ( i ) , v ( i ) { P ( h ( i ) , v ( i ) ) ⋅ h k ( i ) v j ( i ) } = ∑ h ( i ) , v ( i ) { P ( v ( i ) ) ⋅ P ( h ( i ) ∣ v ( i ) ) ⋅ h k ( i ) v j ( i ) } = ∑ v ( i ) P ( v ( i ) ) ∑ h ( i ) { P ( h ( i ) ∣ v ( i ) ) ⋅ h k ( i ) v j ( i ) } = ∑ v ( i ) P ( v ( i ) ) ⋅ P ( h k ( i ) = 1 ∣ v ( i ) ) ⋅ v j ( i ) \begin{aligned} \sum_{h^{(i)},v^{(i)}} \left\{\mathcal P(h^{(i)},v^{(i)}) \cdot h_k^{(i)} v_j^{(i)}\right\} & = \sum_{h^{(i)},v^{(i)}} \left\{\mathcal P(v^{(i)}) \cdot \mathcal P(h^{(i)} \mid v^{(i)}) \cdot h_k^{(i)}v_j^{(i)}\right\} \\ & = \sum_{v^{(i)}} \mathcal P(v^{(i)}) \sum_{h^{(i)}} \left\{\mathcal P(h^{(i)} \mid v^{(i)}) \cdot h_k^{(i)}v_j^{(i)}\right\} \\ & = \sum_{v^{(i)}} \mathcal P(v^{(i)}) \cdot \mathcal P(h_k^{(i)} = 1 \mid v^{(i)}) \cdot v_j^{(i)} \end{aligned} h(i),v(i){P(h(i),v(i))hk(i)vj(i)}=h(i),v(i){P(v(i))P(h(i)v(i))hk(i)vj(i)}=v(i)P(v(i))h(i){P(h(i)v(i))hk(i)vj(i)}=v(i)P(v(i))P(hk(i)=1v(i))vj(i)

最终,受限玻尔兹曼机的梯度可表示为:
∇ θ [ log ⁡ P ( v ( i ) ; θ ) ] = P ( h k ( i ) = 1 ∣ v ( i ) ) ⋅ v j ( i ) − ∑ v ( i ) P ( v ( i ) ) ⋅ P ( h k ( i ) = 1 ∣ v ( i ) ) ⋅ v j ( i ) \nabla_{\theta}\left[\log \mathcal P(v^{(i)};\theta)\right] = \mathcal P(h_k^{(i)}=1 \mid v^{(i)}) \cdot v_j^{(i)} - \sum_{v^{(i)}} \mathcal P(v^{(i)}) \cdot \mathcal P(h_k^{(i)} = 1 \mid v^{(i)}) \cdot v_j^{(i)} θ[logP(v(i);θ)]=P(hk(i)=1v(i))vj(i)v(i)P(v(i))P(hk(i)=1v(i))vj(i)

继续观察等号右侧第一项 P ( h k ( i ) = 1 ∣ v ( i ) ) ⋅ v j ( i ) \mathcal P(h_k^{(i)}=1 \mid v^{(i)}) \cdot v_j^{(i)} P(hk(i)=1v(i))vj(i)由于 v ( i ) v^{(i)} v(i)是一个样本,那么 v j ( i ) v_j^{(i)} vj(i)自然是已知的;而 P ( h k ( i ) = 1 ∣ v ( i ) ) \mathcal P(h_k^{(i)}=1 \mid v^{(i)}) P(hk(i)=1v(i))在受限玻尔兹曼机——推断任务(后验概率)可以将其表示为Sigmoid函数的形式:
P ( h k ( i ) = 1 ∣ v ( i ) ) = Sigmoid ( ∑ l = 1 n w l k ( i ) ⋅ v l + c l ) \mathcal P(h_k^{(i)}=1 \mid v^{(i)}) = \text{Sigmoid}(\sum_{l=1}^n w_{lk}^{(i)} \cdot v_l + c_l) P(hk(i)=1v(i))=Sigmoid(l=1nwlk(i)vl+cl)
因此可以判定:第一项是可求的。

关于等号右侧第二项 ∑ v ( i ) P ( v ( i ) ) ⋅ P ( h k ( i ) = 1 ∣ v ( i ) ) ⋅ v j ( i ) \sum_{v^{(i)}} \mathcal P(v^{(i)}) \cdot \mathcal P(h_k^{(i)} = 1 \mid v^{(i)}) \cdot v_j^{(i)} v(i)P(v(i))P(hk(i)=1v(i))vj(i)
这里关于 v ( i ) v^{(i)} v(i)的积分是约不掉的,基于它的伯努利分布,v^{(i)}的 n n n维随机变量,其时间复杂度 O ( n ) = 2 n \mathcal O(n) = 2^n O(n)=2n。因此不能硬求它的梯度结果。需要使用吉布斯采样/对比散度的方式进行求解。

下一节将继续介绍关于受限玻尔兹曼机使用对比散度的方式求解对数似然梯度

相关参考:
直面配分函数:6-Log-Likelihood Gradient of RBM

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

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

相关文章

c#入门-完全限定名,引用命名空间

完全限定名 包含完整命名空间的类名,称为完全限定名。 namespace 黄野平原.古堡 {class 蜡烛怪 { } }例如 黄野平原.古堡.蜡烛怪 a new 黄野平原.古堡.蜡烛怪();引用命名空间 但是很多的类都会写在命名空间下,如果全都这么写代码太长了。 为了省略掉…

Unity-Photon Pun2个人总结

进入房间前的配置 1、使用设定好的Setting private void Start(){PhotonNetwork.ConnectUsingSettings();} 2、MonoBehaviour改为MonoBehaviourPunCallbacks public class NetworkLauncher : MonoBehaviourPunCallbacks{} 这样我们才可以获得Photon服务端的一些反馈资料 3…

高考题改成IB试题,会是什么样子?

从2019年浙江高考语文卷的一篇现代文阅读说起的,振语看过了这道题和推文作者的解读后,一时兴起,就想着能不能把它改成一道IB考题,顺带着也把这篇选文细读评点了一番。(一)高考试题再现: 这道高考…

百趣代谢组学分享:HSFB2b通过促进类黄酮生物合成赋予大豆耐盐能力

​我国大豆的产量远远不能满足国内需求,提高大豆的耐逆性可以充分利用边际土地增加大豆种植面积从而提高大豆产量。百趣代谢组学分享,热激转录因子基因在植物生长过程中发挥了重要作用,然而在大豆耐盐反应中热激转录因子的功能及机理仍不清楚…

A-Level商务例题解析及练习Cash flow forecasting

今日知识点: Cash flow forecasting Cash inflows Cash outflows Limitations of cash flow forecasting例题 Q: Discuss the view that cash flow forecasts for a newly operating international airport may be of limited use to its senior managers. 解析 Ans…

Mysql 进阶(面向面试篇)事务篇

1、事务 1.1 事务简介 事务 是一组操作的集合,它是不可分割的工作单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。保证原子性 就比如: 张三给李四转账1000块钱&#x…

仿英雄联盟网页HTML代码 学生网页设计与制作期末作业下载 大学生网页设计与制作成品下载 DW游戏介绍网页作业代码下载

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

推荐系统CTR方向相关论文一句话总结

Fearure Interaction // CTR纯FM模型及其演变Factorization Machines. 2010Field-aware Factorization Machines for CTR Prediction. 2016Neural Factorization Machines for Sparse Predictive Analytics. 2017Attentional Factorization Machines: Learning the Weight of F…

StringBuffer类

StringBuffer基本介绍 StringBuff代表可变的字符串,可以对字符串内容进行增删很多方法与String相同,但StringBuff是可变长度的StringBuff是一个容器 了解StringBuffer StringBuffer的继承关系: 可以看到StringBuffer继承AbstractStringBu…

【计网实验】思科CiscoPacketTracer仿真实验

本文参考B站up主:湖科大教书匠 软件版本:Cisco Packet Tracer 6.1.1sv ❓ 实验01的内容较为简单,所以不写了~ 🌹 因作者水平有限,若有遗漏、错误等地方,请大佬批评指正 实验02:访问Web服务器 实…

设计必备,5个png免抠素材网站,建议收藏

做设计、PPT都需要用到大量的免抠素材,职场中熟练使用Photoshop的人毕竟是少数,也很少有人愿意花费时间去精细抠图。那这5个免抠素材网站一定要收藏好,可以有效帮你节省时间,提高工作效率。1、菜鸟图库 https://www.sucai999.com/…

计算机毕业设计php+vue基于微信小程序的员工宿舍报修系统

项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理系统应运而生,各行各业相继进入信息管理时代,员工宿舍报修系统就是信息时代变革中的产物之一。 任何系统都要遵循系…

进程被杀Task被移除

现象 Kill查杀 Task被移除 当Task处于前台&Task中唯一的activity不处于onStop(可能处于onResume/onPause等)状态时,当前进程被kill查杀,当前activity会被finish导致task中因无activity而被移除。 12-08 15:20:54.991 18018…

Windows11去掉桌面快捷方式箭头

有部分强迫症用户,看到桌面每个图标都有一个小箭头,只想去掉看着舒服一点 但是Win10的大部分脚本都不能使用了,而且有可能导致桌面图标显示异常,不建议大家再去用脚本尝试(Win11也有脚本,但是随便更新版本&#xff0c…

深入理解Kafka Producer内部机制

总的来说,Kafka Producer是将数据发送到kafka集群的客户端。其组成部分如下图所示: 基本组件: Producer Metadata——管理生产者所需的元数据:集群中的主题和分区、充当分区领导者的代理节点等。Partitioner——计算给定记录的分…

Pygame入门-游戏代码结构及背景轮播、声音音效及图像动态效果

一、游戏代码结构 代码结构是代码的组织方式,也是游戏编程的思考框架。pygame官方文档中给出了以下建议,将游戏代码结构分为以下六个部分。 1导入游戏模块。 2资源处理类;定义一些类来处理最基本的资源,包括加载图像和声音,连接和…

C#(csharp)这门语言的优势在哪?

确实有不少人因为unity入坑C#,unity刚开始使用的语言也有很多,比如Unity(一种Java的扩展)或者Boo(一种受Python启发的语言),但C#坚持至今甚至成为unity使用主流,C#当然有它的优点。 …

实测 ChatGPT 编程效果被其发现,这波我先站队 Stack Overflow

本文对 ChatGPT 解答编程问题的情况进行了测试。测试了不同难度的问题,并对 ChatGPT 的回答结果进行了鉴别。测试结果表明,ChatGPT 在解答简单的编程问题时表现较为出色,但在解决复杂的问题时则不太理想。因此,也总结出了如何更好…

Vulnhub靶机:SICKOS_ 1.1

目录介绍信息收集主机信息探测主机信息探测网站探测Getshell敏感信息收集SUDO提权第2种通关思路nikto扫描站点验证破壳漏洞破壳漏洞利用计划任务提权修复文件内容错乱 & 提权总结介绍 系列:SickOs(此系列共2台) 发布日期:201…

springboot+netty实现站内消息通知(完整代码)

代码用到的组件介绍 ChannelInitializer 见名知意,就是channel 初始化器,当每个客户端创建连接时这里面的代码都会执行一遍。由于,连接建立之后,这个channel就会常驻内存,所以这里就有个值得思考的问题: …