机器学习笔记之深度信念网络(二)模型构建思想(RBM叠加结构)

news2024/11/28 6:42:40

机器学习笔记之深度信念网络——模型构建思想

  • 引言
    • 回顾:深度信念网络的结构表示
    • 解析RBM隐变量的先验概率
    • 通过模型学习隐变量的先验概率

引言

上一节介绍了深度信念网络的模型表示,本节将介绍深度信念网络的模型构建思想——受限玻尔兹曼机叠加结构的基本逻辑。

回顾:深度信念网络的结构表示

深度信念网络是一个基于有向图、无向图的混合模型。它的概率图结构表示如下:
深度信念网络概率图结构——示例
通过概率图结构的描述,可以发现:

  • 观测变量层 v ( 1 ) v^{(1)} v(1),隐变量层 h ( 1 ) , h ( 2 ) h^{(1)},h^{(2)} h(1),h(2)三层的随机变量构成的概率图结构是Sigmoid信念网络;而隐变量层 h ( 2 ) , h ( 3 ) h^{(2)},h^{(3)} h(2),h(3)构成的概率图结构是受限玻尔兹曼机。
  • 通过对受限玻尔兹曼机的堆叠(Stacking)实现对深度信念网络向更深层次进行延伸。
    这里使用省略号替代了后续的堆叠部分。

如果将随机变量层 v ( 1 ) , h ( 1 ) , h ( 2 ) , h ( 3 ) , ⋯ v^{(1)},h^{(1)},h^{(2)},h^{(3)},\cdots v(1),h(1),h(2),h(3),看作是关于对应层所有随机变量的集合,那么联合概率分布则表示为:
这里仍然以 v ( 1 ) , h ( 1 ) , h ( 2 ) , h ( 3 ) v^{(1)},h^{(1)},h^{(2)},h^{(3)} v(1),h(1),h(2),h(3)这四层结构进行示例。
P ( v ( 1 ) , h ( 1 ) , h ( 2 ) , h ( 3 ) ) \mathcal P(v^{(1)},h^{(1)},h^{(2)},h^{(3)}) P(v(1),h(1),h(2),h(3))
实际上,非相邻层之间存在条件独立性。

  • 例如: v ( 1 ) v^{(1)} v(1)层与 h ( 2 ) h^{(2)} h(2)。这明显是有向图结构中的顺序结构。在 h ( 1 ) h^{(1)} h(1)可观测的条件下, h ( 2 ) h^{(2)} h(2)层中的任意结点 v ( 1 ) v^{(1)} v(1)层之间条件独立
    h ( 2 ) ⊥ v ( 1 ) ∣ h ( 1 ) h^{(2)} \perp v^{(1)} \mid h^{(1)} h(2)v(1)h(1)
  • 上述只是有向图结构。如果是混合结构呢?例如: h ( 1 ) h^{(1)} h(1)层与 h ( 3 ) h^{(3)} h(3)。虽然既包含有向图结构,也包含无向图结构,但它们依然满足条件独立性
    h ( 1 ) ⊥ h ( 3 ) ∣ h ( 2 ) h^{(1)} \perp h^{(3)} \mid h^{(2)} h(1)h(3)h(2)
    h ( 1 ) , h ( 2 ) , h ( 3 ) h^{(1)},h^{(2)},h^{(3)} h(1),h(2),h(3)层中的某一组结构为例,具体概率图结构表示如下(红色路径):
    混合模型的条件独立性——示例
    从有向图的角度观察,可以将红色部分表示为如下形式。如果在隐变量 h j ( 2 ) h_j^{(2)} hj(2)给定的条件下,隐变量 h k ( 3 ) , h i ( 1 ) h_k^{(3)},h_i^{(1)} hk(3),hi(1)之间要么是顺序结构关系,要么是同父结构关系,依然改变不了条件独立的本质。
    混合结构的有向图表达

至此,联合概率分布 P ( v ( 1 ) , h ( 1 ) , h ( 2 ) , h ( 3 ) ) \mathcal P(v^{(1)},h^{(1)},h^{(2)},h^{(3)}) P(v(1),h(1),h(2),h(3))可表示为:
P ( v ( 1 ) , h ( 1 ) , h ( 2 ) , h ( 3 ) ) = P ( v ( 1 ) ∣ h ( 1 ) , h ( 2 ) , h ( 3 ) ) ⋅ P ( h ( 1 ) , h ( 2 ) , h ( 3 ) ) = P ( v ( 1 ) ∣ h ( 1 ) ) ⋅ P ( h ( 1 ) ∣ h ( 2 ) , h ( 3 ) ) ⋅ P ( h ( 2 ) , h ( 3 ) ) = P ( v ( 1 ) ∣ h ( 1 ) ) ⋅ P ( h ( 1 ) ∣ h ( 2 ) ) ⋅ P ( h ( 2 ) , h ( 3 ) ) \begin{aligned} \mathcal P(v^{(1)},h^{(1)},h^{(2)},h^{(3)}) & = \mathcal P(v^{(1)} \mid h^{(1)},h^{(2)},h^{(3)}) \cdot \mathcal P(h^{(1)},h^{(2)},h^{(3)}) \\ & = \mathcal P(v^{(1)} \mid h^{(1)}) \cdot \mathcal P(h^{(1)} \mid h^{(2)},h^{(3)}) \cdot \mathcal P(h^{(2)},h^{(3)}) \\ & = \mathcal P(v^{(1)} \mid h^{(1)}) \cdot \mathcal P(h^{(1)} \mid h^{(2)}) \cdot \mathcal P(h^{(2)},h^{(3)}) \end{aligned} P(v(1),h(1),h(2),h(3))=P(v(1)h(1),h(2),h(3))P(h(1),h(2),h(3))=P(v(1)h(1))P(h(1)h(2),h(3))P(h(2),h(3))=P(v(1)h(1))P(h(1)h(2))P(h(2),h(3))
根据Sigmoid信念网络与受限玻尔兹曼机的定义,展开结果表示如下:
P ( v ( 1 ) , h ( 1 ) , h ( 2 ) , h ( 3 ) ) = ∏ i = 1 D P ( v i ( 1 ) ∣ h ( 1 ) ) ⋅ ∏ j = 1 P ( 1 ) P ( h j ( 1 ) ∣ h ( 2 ) ) ⋅ P ( h ( 2 ) , h ( 3 ) ) { P ( v i ( 1 ) ∣ h ( 1 ) ) = Sigmoid { [ W h ( 1 ) → v i ( 1 ) ] T h ( 1 ) + b i ( 0 ) } [ W h ( 1 ) → v i ( 1 ) ] P ( 1 ) × 1 ∈ W ( 1 ) P ( h j ( 1 ) ∣ h ( 2 ) ) = Sigmoid { [ W h ( 2 ) → h j ( 1 ) ] T h ( 2 ) + b j ( 1 ) } [ W h ( 2 ) → h j ( 1 ) ] P ( 2 ) × 1 ∈ W ( 2 ) P ( h ( 2 ) , h ( 3 ) ) = 1 Z exp ⁡ { [ h ( 3 ) ] T W ( 3 ) ⋅ h ( 2 ) + [ h ( 2 ) ] T ⋅ b ( 2 ) + [ h ( 3 ) ] T b ( 3 ) } \begin{aligned} & \mathcal P(v^{(1)},h^{(1)},h^{(2)},h^{(3)}) = \prod_{i=1}^{\mathcal D} \mathcal P(v_i^{(1)} \mid h^{(1)}) \cdot \prod_{j=1}^{\mathcal P^{(1)}} \mathcal P(h_j^{(1)} \mid h^{(2)}) \cdot \mathcal P(h^{(2)},h^{(3)}) \\ & \begin{cases} \mathcal P(v_i^{(1)} \mid h^{(1)}) = \text{Sigmoid} \left\{\left[\mathcal W_{h^{(1)} \to v_i^{(1)}}\right]^T h^{(1)} + b_i^{(0)}\right\} \quad \left[\mathcal W_{h^{(1)} \to v_i^{(1)}}\right]_{\mathcal P^{(1)} \times 1} \in \mathcal W^{(1)} \\ \mathcal P(h_j^{(1)} \mid h^{(2)}) = \text{Sigmoid} \left\{\left[\mathcal W_{h^{(2)} \to h_j^{(1)}}\right]^T h^{(2)} + b_j^{(1)}\right\} \quad \left[\mathcal W_{h^{(2)} \to h_j^{(1)}}\right]_{\mathcal P^{(2)} \times 1} \in \mathcal W^{(2)} \\ \mathcal P(h^{(2)},h^{(3)}) = \frac{1}{\mathcal Z} \exp \left\{ \left[h^{(3)}\right]^T \mathcal W^{(3)} \cdot h^{(2)} + \left[h^{(2)}\right]^T\cdot b^{(2)} + \left[h^{(3)}\right]^Tb^{(3)}\right\} \\ \end{cases} \end{aligned} P(v(1),h(1),h(2),h(3))=i=1DP(vi(1)h(1))j=1P(1)P(hj(1)h(2))P(h(2),h(3)) P(vi(1)h(1))=Sigmoid{[Wh(1)vi(1)]Th(1)+bi(0)}[Wh(1)vi(1)]P(1)×1W(1)P(hj(1)h(2))=Sigmoid{[Wh(2)hj(1)]Th(2)+bj(1)}[Wh(2)hj(1)]P(2)×1W(2)P(h(2),h(3))=Z1exp{[h(3)]TW(3)h(2)+[h(2)]Tb(2)+[h(3)]Tb(3)}

解析RBM隐变量的先验概率

深度信念网络被设计成 Sigmoid \text{Sigmoid} Sigmoid信念网络与若干受限玻尔兹曼机的叠加结构,它的设计思路具体是什么?
回顾受限玻尔兹曼机。其概率图结构表示如下:
受限波尔兹曼机——示例
其中 W ( 1 ) \mathcal W^{(1)} W(1)表示隐变量、观测变量之间关联关系的权重信息; b ( 0 ) , b ( 1 ) b^{(0)},b^{(1)} b(0),b(1)分别表示观测变量、隐变量的偏置信息。在受限玻尔兹曼机——对数似然梯度求解中,介绍了关于 模型参数 θ \theta θ 的求解过程:

  • 根据已知样本 V = { v ( i ) } i = 1 N \mathcal V = \{v^{(i)}\}_{i=1}^N V={v(i)}i=1N使用极大似然估计方法进行求解。其目标函数 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 ( θ ) = 1 N ∑ v ( i ) ∈ V ∇ θ [ log ⁡ P ( v ( i ) ; θ ) ] \nabla_{\theta} \mathcal L(\theta) = \frac{1}{N} \sum_{v^{(i)} \in \mathcal V} \nabla_{\theta} \left[ \log \mathcal P(v^{(i)};\theta)\right] θL(θ)=N1v(i)Vθ[logP(v(i);θ)]
  • 根据能量模型的对数似然梯度,将 ∇ θ [ log ⁡ P ( v ( i ) ; θ ) ] \nabla_{\theta} \left[\log \mathcal P(v^{(i)};\theta)\right] θ[logP(v(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 ) θ = W h k ( 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)} \quad \theta = \mathcal W_{h_k^{(i)} \Leftrightarrow 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)θ=Whk(i)vj(i)
    关于第一项:可以通过 Sigmoid \text{Sigmoid} Sigmoid函数直接求解后验概率 P ( h k ( i ) = 1 ∣ v ( i ) ) \mathcal P(h_k^{(i)} = 1 \mid v^{(i)}) P(hk(i)=1v(i))
    关于第二项:它是关于 N N N项的连加,其计算量极高。因而通过使用对比散度的方式对第二项进行近似:
    这里的 t t t表示吉布斯采样的迭代步骤。
    ∑ v ( i ) P ( v ( i ) ) ⋅ P ( h k ( i ) = 1 ∣ v ( i ) ) ⋅ v j ( i ) = E v ( k ) ∼ P ( V t = k ) [ 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)} = \mathbb E_{v^{(k)} \sim \mathcal P(\mathcal V^{t = k})} \left[\mathcal P(h_k^{(i)} = 1 \mid v^{(i)}) \cdot v_j^{(i)}\right] v(i)P(v(i))P(hk(i)=1v(i))vj(i)=Ev(k)P(Vt=k)[P(hk(i)=1v(i))vj(i)]
  • 关于参数 W h k ( i ) ⇔ v j ( i ) \mathcal W_{h_k^{(i)} \Leftrightarrow v_j^{(i)}} Whk(i)vj(i)的梯度求解完成后,使用梯度上升法近似求解 W h k ( i ) ⇔ v j ( i ) \mathcal W_{h_k^{(i)} \Leftrightarrow v_j^{(i)}} Whk(i)vj(i)。其余参数同理:
    θ ( t + 1 ) ⇐ θ ( t ) + η ∇ θ [ log ⁡ P ( v ( i ) ; θ ) ] θ = W h k ( i ) ⇔ v j ( i ) \theta^{(t+1)} \Leftarrow \theta^{(t)} + \eta \nabla_{\theta} \left[\log \mathcal P(v^{(i)};\theta)\right] \quad \theta = \mathcal W_{h_k^{(i)} \Leftrightarrow v_j^{(i)}} θ(t+1)θ(t)+ηθ[logP(v(i);θ)]θ=Whk(i)vj(i)

观察,上述关于模型参数的学习过程是复杂的,并且包含两次近似(对比散度、梯度上升),其核心原因在于:受限玻尔兹曼机是一个无向图模型,随机变量结点之间没有明确的因果关系
能否通过一些改进,让参数学习过程的效果更好?
以上述受限玻尔兹曼机概率图结构示例,再次将关注点转向 P ( v ) \mathcal P(v) P(v)
这里的上标就变成了网络层的编号,而不是样本编号。
P ( v ) = ∑ h ( 1 ) P ( h ( 1 ) , v ) = ∑ h ( 1 ) P ( h ( 1 ) ) ⋅ P ( v ∣ h ( 1 ) ) \begin{aligned} \mathcal P(v) & = \sum_{h^{(1)}} \mathcal P(h^{(1)},v) \\ & = \sum_{h^{(1)}} \mathcal P(h^{(1)}) \cdot \mathcal P(v \mid h^{(1)}) \end{aligned} P(v)=h(1)P(h(1),v)=h(1)P(h(1))P(vh(1))

  • 其中 h ( 1 ) h^{(1)} h(1)可看成 RBM \text{RBM} RBM中所有隐变量的随机变量集合 v v v则是所有观测变量的随机变量集合,而 h ( 1 ) h^{(1)} h(1)中的随机变量不是真实的,而是基于模型假定的。因此,称 P ( h ( 1 ) ) \mathcal P(h^{(1)}) P(h(1))先验概率
  • P ( v ∣ h ( 1 ) ) \mathcal P(v \mid h^{(1)}) P(vh(1))则是给定隐变量条件下,样本的 生成过程(Generative Process)。
    这些样本自然不是真实的,而是模型产生的‘幻想粒子’(Fantasy Particle).与幻想粒子相关的传送门

由于是无向图模型,因而同上,从有向图的角度观察,可以将图结构中的每一条边视作双向的。也就是相互关联
有向图视角观察受限玻尔兹曼机——示例
如果假设模型参数已经被学习完成,这意味着模型参数固定, P ( v ∣ h ( 1 ) ) \mathcal P(v \mid h^{(1)}) P(vh(1))也被固定住
这里的 n n n表示模型中观测变量的数量, m m m表示模型中隐变量的数量。相关推导过程见RBM推断任务——后验概率
P ( v ∣ h ( 1 ) ) = ∏ i = 1 n P ( v i ∣ h ( 1 ) ) P ( v i ∣ h ) = { P ( v i = 1 ∣ h ) ⇒ Sigmoid ( ∑ j = 1 m w i j ⋅ h j + b i ) P ( v i = 0 ∣ h ) ⇒ 1 − Sigmoid ( ∑ j = 1 m w i j ⋅ h j + b i ) \begin{aligned} \mathcal P(v \mid h^{(1)}) & = \prod_{i=1}^n \mathcal P(v_i \mid h^{(1)}) \\ \mathcal P(v_i \mid h) & = \begin{cases} \mathcal P(v_i = 1 \mid h) \Rightarrow \text{Sigmoid} \left(\sum_{j=1}^m w_{ij} \cdot h_j + b_i\right)\\ \mathcal P(v_i = 0 \mid h) \Rightarrow 1 - \text{Sigmoid} \left(\sum_{j=1}^m w_{ij} \cdot h_j + b_i\right) \end{cases} \end{aligned} P(vh(1))P(vih)=i=1nP(vih(1))= P(vi=1h)Sigmoid(j=1mwijhj+bi)P(vi=0h)1Sigmoid(j=1mwijhj+bi)
P ( v ) \mathcal P(v) P(v)真实样本关于随机变量的联合概率分布,自然是确定的:
相关推导过程详见RBM推断任务——边缘概率,这里的 b b b表示各观测变量与自身的关联关系(常数,偏置)组成的向量。
P ( v ) = 1 Z exp ⁡ { b T v + ∑ j = 1 m log ⁡ Softplus ( W j T v + c j ) } \mathcal P(v) = \frac{1}{\mathcal Z} \exp \left\{b^T v + \sum_{j=1}^m \log \text{Softplus}(\mathcal W_j^Tv + c_j) \right\} P(v)=Z1exp{bTv+j=1mlogSoftplus(WjTv+cj)}
那么根据上式,先验概率 P ( h ( 1 ) ) \mathcal P(h^{(1)}) P(h(1))自然也是确定的,它同样可以使用模型参数进行表示。

通过模型学习隐变量的先验概率

相比于使用模型参数表示先验概率 P ( h ( 1 ) ) \mathcal P(h^{(1)}) P(h(1)),一个新的思路是:针对隐变量先验概率 P ( h ( 1 ) ) \mathcal P(h^{(1)}) P(h(1))进行建模,通过模型将 P ( h ( 1 ) ) \mathcal P(h^{(1)}) P(h(1))学习出来。也就是说,通过的受限玻尔兹曼机将隐变量的联合概率分布求解出来。

观察上图(黑色箭头),利用真实样本使用醒眠算法的 Weak Phase \text{Weak Phase} Weak Phase方法能够获得关于隐变量后验的样本,并基于这些样本,专门对隐变量进行训练:
也就是说,为了学习‘Sigmoid信念网络’中的隐变量,需要对隐变量进行建模,构建‘隐变量的隐变量’对其进行学习。
构建新的隐变量对Sigmoid信念网络中的隐变量进行学习——示例
此时,关于 h ( 1 ) h^{(1)} h(1)边缘概率分布可表示为:
∑ h ( 2 ) P ( h ( 1 ) , h ( 2 ) ) \sum_{h^{(2)}} \mathcal P(h^{(1)},h^{(2)}) h(2)P(h(1),h(2))
很明显, P ( h ( 1 ) , h ( 2 ) ) \mathcal P(h^{(1)},h^{(2)}) P(h(1),h(2))就是新构建受限玻尔兹曼机(蓝色框部分)的联合概率分布。此时将 h ( 1 ) h^{(1)} h(1)受限玻尔兹曼机中视作观测变量,基于 P ( h ( 1 ) ∣ v ) \mathcal P(h^{(1)} \mid v) P(h(1)v)的后验样本,可以学习出该受限玻尔兹曼机参数信息。通过这些参数信息产生的关于 h ( 1 ) h^{(1)} h(1)概率分布 P ( h ( 1 ) ) \mathcal P(h^{(1)}) P(h(1))要优于原始模型参数学习的 P ( h ( 1 ) ) \mathcal P(h^{(1)}) P(h(1))

事实上,根据第一层受限玻尔兹曼机的逻辑,我们理论上可以将层数一直叠加上去,通过构建新的隐变量学习前一层隐变量的信息
需要注意的是,这种堆叠式结构的求解方式是有约束条件的。那就是Weak Phase中关于隐变量 h ( 1 ) h^{(1)} h(1)的后验概率分布 P ( h ( 1 ) ∣ v ) \mathcal P(h^{(1)} \mid v) P(h(1)v)固定的条件下实现的。

  • 如果不去固定 P ( h ( 1 ) ∣ v ) \mathcal P(h^{(1)} \mid v) P(h(1)v),在 h ( 2 ) h^{(2)} h(2)学习 P ( h ( 1 ) ) \mathcal P(h^{(1)}) P(h(1))过程中,由于 P ( h ( 1 ) ∣ v ) \mathcal P(h^{(1)} \mid v) P(h(1)v)产生样本对应分布的细微变化(可能存在波动、噪声),导致 h ( 1 ) , h ( 2 ) h^{(1)},h^{(2)} h(1),h(2)层之间的模型参数是无法被固定下来的。
  • 相反,如果没有固定 P ( h ( 1 ) ∣ v ) \mathcal P(h^{(1)} \mid v) P(h(1)v),假设 h ( 1 ) , h ( 2 ) h^{(1)},h^{(2)} h(1),h(2)之间的模型参数被学习出来,学习得到的 P ( h ( 1 ) ) \mathcal P(h^{(1)}) P(h(1)) P ( h ( 1 ) ∣ v ) \mathcal P(h^{(1)} \mid v) P(h(1)v)之间存在偏差,反而对 h ( 1 ) , v h^{(1)},v h(1),v层之间的权重信息产生影响。
    当然,也可以从有向图的角度去理解该问题。如果出现了如下结构
    未消除链接的情况
    这种结构保留了 v ⇒ h ( 1 ) v \Rightarrow h^{(1)} vh(1)之间的关联关系,我们会发现, v , h ( 2 ) v,h^{(2)} v,h(2)之间不是完全的‘无关联’关系。因为内部包含一个 V \mathcal V V型结构。一旦经过 Weak Phase \text{Weak Phase} Weak Phase算法,得到了关于后验 P ( h ( 1 ) ∣ v ) \mathcal P(h^{(1)} \mid v) P(h(1)v)的样本,此时结点 h ( 1 ) h^{(1)} h(1)被观测,那么 h ( 2 ) , v h^{(2)},v h(2),v之间是必不独立的。

终上,为了保证学习 h ( 1 ) h^{(1)} h(1)信息的受限玻尔兹曼机 Sigmoid \text{Sigmoid} Sigmoid信念网络之间相互不影响,将上图中 v ⇒ h ( 1 ) v \Rightarrow h^{(1)} vh(1) 部分去除:
深度信念网络生成思想——示例
上面过程就是深度信念网络模型的构建思想。
这里只是提到了使用受限玻尔兹曼机隐变量的学习效果优于模型参数对隐变量的表示效果。下一节将解释为什么对隐变量建模的效果更优

相关参考:
(系列二十七)深度信念网络2——叠加RBM的动机

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

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

相关文章

Flutter多分支打包持续化集成

一、使用效果演示 1.1、选择参数打包 以下为参数使用说明。 packingType枚举 android、ios android ios android&ios (新功能:并行打包)备注: android、ios:串行打包,即先打一个再打一个 android&ios:为并行…

与香港财政司司长同台,欧科云链在这场峰会上都说了啥?

今天,POWER 2023香港Web3创新者峰会在中国香港如期召开,香港特别行政区政府财政司司长陈茂波、财经事务及库务局副局长陈浩濂、全国政协委员、立法会议员吴杰庄等港府要员出席峰会。 作为本场峰会的受邀企业,欧科云链控股(01499.HK)公司执行董…

Kernel Pwn基础教程之 Double Fetch

一、前言 Double Fetch是一种条件竞争类型的漏洞,其主要形成的原因是由于用户态与内核态之间的数据在进行交互时存在时间差,我们在先前的学习中有了解到内核在从用户态中获取数据时会使用函数copy_from_user,而如果要拷贝的数据过于复杂的话…

人工智能-正则表达式

目录1、正则表达式概述2、re模块3、匹配单个字符4、匹配多个字符5、匹配开头和结尾6、匹配分组7、总结1、正则表达式概述 在实际开发过程中经常会需要查找某些复杂字符串的格式 正则表达式:记录文本规则的代码 正则表达式特点: 语法令人头疼&#xff…

立创eda专业版学习笔记(4)(隐藏铺铜)

这里的隐藏有两个意思,一个是铺铜过后把铺铜的填充区域隐藏,方便看图,另外一个是隐藏铺铜的轮廓,方便后续改进。 第一种隐藏,隐藏铺铜的填充区域(成片的图块),但是保留轮廓线 这是全…

联想LJ2655DN激光打印机清零方法

联想LJ2655DN激光打印机是市面上常见的打印机,为了节约成本,我们一般使用都是代用硒鼓来代替原装硒鼓,但是发现更换完硒鼓以后还是不能打印甚至有的机器能够打印但是打印速度会变慢或很慢,这个时候这就需要我们对打印机进行清零复位操作了,此款机器因用户更换的硒鼓类型不…

C++ 模板进阶

目录 1. 非类型模板参数 2. 模板的特化 2.1 概念 2.2 函数模板特化 2.3 类模板特化 2.3.1 全特化 2.3.2 偏特化 2.3.3 类模板特化应用示例 3. 模板总结 1. 非类型模板参数 我们在C语言中使用数组的时候可以定义静态数组,但是有个缺陷就是编译器在对越界检查…

Java自定义泛型类注意点

目录 自定义泛型类 如果定义了泛型类,实例化没有指明类的泛型,则认为此泛型类型为Object类型 由于子类在继承带泛型的父类时,指明了泛型类型。则实例化子类对象时,不需要指明类型 由于子类在继承带泛型的父类时,没有…

WebDAV之葫芦儿·派盘 + Photosync

PhotoSync 支持WebDAV方式连接葫芦儿派盘。 苹果手机通过无线传输,备份和共享照片/视频到计算机,其他手机,NAS和流行的云和照片服务的最佳解决办法,快来试下PhotoSync同步工具吧。 PhotoSync面向移动设备

安装部署wordpress(Ubuntu)

wordpress是一个目前流行的基于web的内容管理系统软件。它是基于PHP语言和MySQL数据库开发的,用户可以在支持 PHP 和 MySQL数据库的服务器上快速轻松的部署自己的网站(博客,外贸网站等等)。WordPress有非常多的第三方开发的免费模…

产线工控安全之现状分析及方案应对

产线安全现状 工业控制系统是支撑国民经济的重要设施,是工业领域的神经中枢。现在工业控制系统已经广泛应用于电力、通信、化工、交通、航天等工业领域,支撑起国计民生的关键基础设施。 随着传统的工业转型,数字化、网络化和智能化的工业控…

数学建模---数值微积分

目录 一.引言 二.数值微分 1.数值差分与差商 利用matlab观察差分与差商的区别: 例题: 二.数值积分 1.数值积分基本定理 2.常见的数值积分公式: 积分公式的精度: 3.数值积分的matlab实现 一.引言 在科学研究和工程计算中&…

LINUX提权之环境变量提权篇

前言 上一篇文章给大家介绍了linux中的内核提权的一些知识点不知道大家学的怎么样了,今天给大家带来一个全新的提权方法——“环境变量提权”,本文会介绍关于环境变量提权的基本知识以及利用方法。 环境变量提权 PATH是Linux系统中的环境变量,指定存储…

全球月活用户4年破10亿,TikTok的3大底层逻辑

武汉瑞卡迪电子商务有限公司:在即将过去的2022年,TikTok成为了众多出海品牌想要赢得新生意的重要平台。品牌应该如何看待TikTok?如何利用节点营销抓住机会?那些已经在TikTok上成功的品牌背后,是否有一些定式&#xff0…

centos7安装ansible

在ansible中主控机器必须是linux机器,不可以是windows,但是被控机器可以是windows。 control machine:192.168.184.128 target machine:192.168.184.129(被管理机器上不需要安装什么软件) 1.ansible的安装前提是要有python&…

vue的基础指令演示代码及简单案例

目录 一、内容绑定,事件绑定 v-text v-html v-on 案例:计数器 二、显示切换,属性绑定 v-show v-if v-bind 案例:图片切换 三、列表循环,表单元素绑定 v-for v-on补充 v-model 通过Vue实现常见的网页效果…

QSFP-DD封装小知识,你了解吗?

随着数据中心和高级网络应用中数据流量的上升,光模块市场向更高的速度,更低的功耗和更小的外形或尺寸发展。QSFP-DD封装有什么特征和优势?它与QSFP28/QSFP56模块有什么区别的?本期文章,我们一起了解一下QSFP-DD封装相关…

【Linux篇】之网络文件系统(nfs)配置

nfs : Network File System 网络文件系统 作用:linux内核启动之后,通过网络的方式从ubuntu服务器中挂载根文件系统, 而不需要将根文件系统部署到开发板。 1> 安装nfs服务器端 sudo apt-get install nfs-kernel-server2> 修改nfs服务的…

解读手机拍照的各个参数(AI水印)

AI水印就是在照片里面自动添加一些文字或者符号,里面有一些固定的水印,目前还不了解能不能识别一些不是固定地方的景色。(目前给出来的是黄山、张家界景点,不晓得华山这种能不能自动添加上水印)。

Go 1.19.3 channel原理简析

channel channel和goroutine是Go语言的核心命脉。这篇文章来简单介绍一下Go chan的原理,源码并不好读,应结合gmp调度模型来理解,后续补充吧。 由上图可见,chan的底层结构是一个hchan结构体,其中buf字段指向了一个环形…