论文《A recurrent latent variable model for sequential data》笔记:详解VRNN

A recurrent latent variable model for sequential data

背景

1 通过循环神经网络的序列建模

循环神经网络(RNN)可以接收一个可变长度的序列 x = ( x 1 , x 2 , . . . , x T ) x = (x_1, x_2, ..., x_T) x=(x1,x2,...,xT)作为输入,并通过递归地处理每个符号同时维持其内部隐藏状态 h h h。在每个时间步 t t t,RNN读取符号 x t x_t xt并更新其隐藏状态 h t ∈ R p h_t \in \mathbb{R}^p htRp如下:

h t = f θ ( x t , h t − 1 ) (1) h_t = f_\theta (x_t, h_{t-1})\tag{1} ht=fθ(xt,ht1)(1)

其中 f f f是一个确定性的非线性转移函数, θ \theta θ f f f的参数集。转移函数 f f f可以通过长短期记忆(LSTM)[9]或门控循环单元(GRU)[5]等具有门控激活函数的方式实现。RNN通过参数化联合序列概率分布的条件概率的乘积来建模序列:

p ( x 1 , x 2 , . . . , x T ) = ∏ t = 1 T p ( x t ∣ x < t ) p(x_1, x_2, ..., x_T) = \prod_{t=1}^{T} p(x_t | x_{<t}) p(x1,x2,...,xT)=t=1Tp(xtx<t)

p ( x t ∣ x < t ) = g τ ( h t − 1 ) (2) p(x_t | x_{<t}) = g_\tau (h_{t-1}) \tag{2} p(xtx<t)=gτ(ht1)(2)

其中 g g g是一个将 RNN 隐藏状态 h t − 1 h_{t-1} ht1映射到可能输出上的概率分布的函数, τ \tau τ g g g的参数集。

决定 RNN 表征能力的主要因素之一是输出函数 g g g在方程(2)中的定义。通过一个确定性的转移函数 f f f g g g的选择实际上定义了 RNN 能够表达的联合概率分布 p ( x 1 , . . . , x T ) p(x_1, ..., x_T) p(x1,...,xT)的家族。

我们可以将方程(2)中的输出函数 g g g表达为由两部分组成。第一部分 ϕ τ \phi_\tau ϕτ是一个函数,它根据隐藏状态 h t − 1 h_{t-1} ht1返回参数集 ϕ t \phi_t ϕt,即 ϕ t = ϕ τ ( h t − 1 ) \phi_t = \phi_\tau (h_{t-1}) ϕt=ϕτ(ht1),而 g g g的第二部分返回 x t x_t xt的密度,即 p ϕ t ( x t ∣ x < t ) p_{\phi_t} (x_t | x_{<t}) pϕt(xtx<t)

在建模高维和实值序列时,一个合理的观察模型选择是高斯混合模型(GMM),如在[7]中使用。对于 GMM, ϕ τ \phi_\tau ϕτ返回一组混合系数 α t \alpha_t αt,均值 μ t \mu_t μt,和协方差 Σ t \Sigma_t Σt,它们定义了对应混合组件下 x t x_t xt的概率。在混合分布下 x t x_t xt的概率是:

p α t , μ t , Σ t ( x t ∣ x < t ) = ∑ j α t , j N ( x t ; μ t , j , Σ t , j ) p_{\alpha_t, \mu_t, \Sigma_t} (x_t | x_{<t}) = \sum_j \alpha_{t,j} \mathcal{N}(x_t; \mu_{t,j}, \Sigma_{t,j}) pαt,μt,Σt(xtx<t)=jαt,jN(xt;μt,j,Σt,j)

除了[7]的显著例外,很少有工作研究了针对实值序列的 RNN 的结构化输出密度模型。

RNN模型输出可变性的方式可能存在一个显著问题。鉴于确定性转移函数是唯一的可变性来源,唯一的可变性来源在于条件输出概率密度。这在建模高度可变且需要高信号保真度的序列时会带来问题。为了有效地模拟这些类型的序列,RNN必须能够映射 x t x_t xt中非常微小的变化(即,随机性的唯一来源)到 h t h_t ht中可能非常大的变化。限制网络的表达能力,如必须通过提高隐藏状态的维度来对抗过拟合,将迫使在生成清晰信号和编码足够的输入可变性以捕捉高层次的可变性之间进行折中。

RNN中对高度结构化输出函数的需求已经被之前注意到过。Boulanger-Lewandowski等人[4]广泛测试了NADE和基于RBM的输出密度,用于模拟音乐的二进制向量表示的序列。Bayer和Osendorfer[2]引入了一个序列的独立潜变量表示的压缩传递到状态的RNN。他们的模型,称为STORN,首先从序列的独立潜变量中生成一系列样本 z = ( z 1 , . . . , z T ) z = (z_1, ..., z_T) z=(z1,...,zT),然后在每个时间步骤上,转移函数 f f f根据方程(1)从先前的状态 h t − 1 h_{t-1} ht1,先前的输出 x t − 1 x_{t-1} xt1和采样的潜变量 z t z_t zt计算下一个隐藏状态 h t h_t ht。他们提出根据VAE原则来训练这个模型(见第2.2节)。同样,Pachitariu和Sahani[16]早期提出了一个序列的独立潜变量和随机隐藏状态的RNN。

这些方法与本文提出的方法密切相关。然而,有一个主要差异在于如何对潜在随机变量的先验分布进行建模。与上述方法不同,我们的方法使潜在随机变量的先验分布依赖于通过RNN隐藏状态 h t − 1 h_{t-1} ht1传递的所有前序输入(见方程(5))。引入时间结构到先验分布中预计会提高模型的表征能力,这一点我们在实验中实证观察到(见表1)。然而,重要的是要注意,任何基于具有随机潜在状态的方法与拥有结构化输出函数的方法是正交的,这两者可以一起使用以形成一个单一模型。

2 变分自编码器 (Variational Autoencoder)

对于非序列化数据,变分自编码器(VAEs)[11, 17] 最近已经被证明是一个有效的建模范式,用于恢复数据空间上的复杂多模态分布。VAE引入了一组潜在随机变量 z z z,旨在捕捉观测变量 x x x 的变化。作为一个有向图模型的例子,联合分布被定义为:

p ( x , z ) = p ( x ∣ z ) p ( z ) . (3) p(x, z) = p(x | z)p(z).\tag{3} p(x,z)=p(xz)p(z).(3)

潜在随机变量的先验 p ( z ) p(z) p(z) 通常选择为一个简单的高斯分布,而条件分布 p ( x ∣ z ) p(x | z) p(xz) 是一个任意观测模型,其参数由 z z z 的参数函数计算得出。重要的是,VAE通常用一个高度灵活的函数逼近器(如神经网络)来参数化 p ( x ∣ z ) p(x | z) p(xz) 。尽管潜在随机变量模型的形式如方程 (4) 中所示并不少见,这使得条件 p ( x ∣ z ) p(x | z) p(xz) 作为从潜在变量 z z z 到观测变量 x x x 的非线性映射是VAE的一个独特特征。

然而,从 z 到 x 的高度非线性映射导致后验 p ( z ∣ x ) p(z | x) p(zx) 的推理难以处理。相反,VAE使用后验的变分近似 q ( z ∣ x ) q(z | x) q(zx) ,从而允许使用下界:

log ⁡ p ( x ) ≥ − K L ( q ( z ∣ x ) ∣ ∣ p ( z ) ) + E q ( z ∣ x ) [ log ⁡ p ( x ∣ z ) ] , (4) \log p(x) \geq -KL(q(z | x) || p(z)) + \mathbb{E}_{q(z|x)} [\log p(x | z)],\tag{4} logp(x)KL(q(zx)∣∣p(z))+Eq(zx)[logp(xz)],(4)

其中 K L ( Q ∣ ∣ P ) KL(Q||P) KL(Q∣∣P) 是两个分布 Q 和 P 之间的Kullback-Leibler散度。

在 [11] 中,近似后验 q ( z ∣ x ) q(z | x) q(zx)是一个高斯 N ( μ , d i a g ( σ 2 ) ) N(\mu, diag(\sigma^2)) N(μ,diag(σ2)),其均值 μ \mu μ和方差 σ 2 \sigma^2 σ2是 x 的高度非线性函数的输出,通常再次是一个神经网络。

生成模型 p ( x ∣ z ) p(x | z) p(xz)和推断模型 q ( z ∣ x ) q(z | x) q(zx)然后通过最大化它们的参数的变分下界共同训练,其中积分通过随机近似。这个估计的梯度可以有一个低方差估计,通过重新参数化 z = μ + σ ⊗ ϵ z = \mu + \sigma \otimes \epsilon z=μ+σϵ并重写:

E q ( z ∣ x ) [ log ⁡ p ( x ∣ z ) ] = E p ( ϵ ) [ log ⁡ p ( x ∣ z = μ + σ ⊗ ϵ ) ] , \mathbb{E}_{q(z|x)}[\log p(x | z)] = \mathbb{E}_{p(\epsilon)}[\log p(x | z = \mu + \sigma \otimes \epsilon)], Eq(zx)[logp(xz)]=Ep(ϵ)[logp(xz=μ+σϵ)],

其中 ϵ \epsilon ϵ是标准高斯变量的向量。推断模型可以通过标准的反向传播技术来进行随机梯度下降训练。

变分循环神经网络(VRNN)

在本节中,我们介绍了VAE的递归版本,目的是为了模拟序列。受到简单动态贝叶斯网络(DBNs)如HMMs和卡尔曼滤波器启发,提出的变分递归神经网络(VRNN)明确模型了潜在随机变量在连续时间步之间的依赖性。然而,不像这些更简单的DBN模型,VRNN保留了模拟高度非线性动态的灵活性。

VRNN每个操作的图形说明:(a) 使用方程(5)计算条件先验;(b) 使用方程(6)的生成函数;© 使用方程(7)更新RNN隐藏状态;(d) 使用方程(9)推断近似后验;(e) VRNN的整体计算路径。
image.png

Generation

VRNN在每个时间步包含一个VAE。然而,这些VAEs是基于RNN的状态变量 h t − 1 h_{t-1} ht1 的条件。这一新增功能将帮助VAE考虑到序列数据的时间结构。与标准VAE不同,潜在随机变量的先验不再是标准高斯分布,而是遵循以下分布:

z t ∼ N ( μ 0 , t , d i a g ( σ 0 , t 2 ) ) ,  where  [ μ 0 , t , σ 0 , t ] = ϕ t p r i o r ( h t − 1 ) , (5) z_t \sim \mathcal{N}(\mu_{0,t}, diag(\sigma_{0,t}^2)), \text{ where } [\mu_{0,t}, \sigma_{0,t}] = \phi^{prior}_t (h_{t-1}),\tag{5} ztN(μ0,t,diag(σ0,t2)), where [μ0,t,σ0,t]=ϕtprior(ht1),(5)

上述公式说明 z t z_t zt h t − 1 h_{t-1} ht1通过一个神经网络提取特征得到的 μ 0 , t , σ 0 , t \mu_{0,t}, \sigma_{0,t} μ0,t,σ0,t进行计算得到

其中 μ 0 , t \mu_{0,t} μ0,t σ 0 , t \sigma_{0,t} σ0,t 表示条件先验分布的参数。此外,生成分布不仅基于 z t z_t zt 进行条件化,也基于 h t − 1 h_{t-1} ht1,如下:

x t ∼ N ( μ x , t , d i a g ( σ x , t 2 ) ) ,  where  [ μ x , t , σ x , t ] = ϕ t d e c ( ϕ t p r i o r ( z t , h t − 1 ) ) , (6) x_t \sim \mathcal{N}(\mu_{x,t}, diag(\sigma_{x,t}^2)), \text{ where } [\mu_{x,t}, \sigma_{x,t}] = \phi^{dec}_t (\phi^{prior}_t (z_t, h_{t-1})),\tag{6} xtN(μx,t,diag(σx,t2)), where [μx,t,σx,t]=ϕtdec(ϕtprior(zt,ht1)),(6)

其中 μ x , t \mu_{x,t} μx,t σ x , t \sigma_{x,t} σx,t 表示生成分布的参数。生成分布的参数 ϕ t p r i o r \phi^{prior}_t ϕtprior ϕ t d e c \phi^{dec}_t ϕtdec 可以是任何高度灵活的函数,比如神经网络。 ϕ t p r i o r \phi^{prior}_t ϕtprior ϕ t d e c \phi^{dec}_t ϕtdec 也可以是神经网络,这些网络从 x t x_t xt z t z_t zt 提取特征,我们发现这些特征提取器对于学习复杂序列至关重要。RNN使用以下递归方程更新其隐藏状态:

h t = f θ ( ϕ t e n c ( x t ) , ϕ t p r i o r ( z t ) , h t − 1 ) , (7) h_t = f_{\theta}(\phi^{enc}_t (x_t), \phi^{prior}_t (z_t), h_{t-1}),\tag{7} ht=fθ(ϕtenc(xt),ϕtprior(zt),ht1),(7)

其中 f f f 最初是从方程(1)的过渡函数。从方程(7)我们发现 h t h_t ht x ≤ t x_{\leq t} xt z < t z_{<t} z<t 的函数。因此,方程(5)和方程(6)定义了分布 p ( z t ∣ x ≤ t , z < t ) p(z_t | x_{\leq t}, z_{<t}) p(ztxt,z<t) p ( x t ∣ z ≤ t , x < t ) p(x_t | z_{\leq t}, x_{<t}) p(xtzt,x<t),生成模型的参数化导致了以下因式分解的动机:

p ( x ≤ T , z ≤ T ) = ∏ t = 1 T p ( x t ∣ z ≤ t , x < t ) p ( z t ∣ x ≤ t , z < t ) . (8) p(x_{\leq T}, z_{\leq T}) = \prod_{t=1}^T p(x_t | z_{\leq t}, x_{<t})p(z_t | x_{\leq t}, z_{<t}).\tag{8} p(xT,zT)=t=1Tp(xtzt,x<t)p(ztxt,z<t).(8)

Inference

以类似的方式,近似后验不仅仅是 x t x_t xt 的函数,也是 h t − 1 h_{t-1} ht1 的函数,如下式所示:

z t ∣ x t ∼ N ( μ z , t , d i a g ( σ z , t 2 ) ) ,  其中  [ μ z , t , σ z , t ] = ϕ t e n c ( ϕ t x ( x t ) , h t − 1 ) , (9) z_t | x_t \sim \mathcal{N}(\mu_{z,t}, diag(\sigma_{z,t}^2)), \text{ 其中 } [\mu_{z,t}, \sigma_{z,t}] = \phi_t^{enc}(\phi_t^x(x_t), h_{t-1}),\tag{9} ztxtN(μz,t,diag(σz,t2)), 其中 [μz,t,σz,t]=ϕtenc(ϕtx(xt),ht1),(9)

其中 μ z , t \mu_{z,t} μz,t σ z , t \sigma_{z,t} σz,t 表示近似后验的参数。我们注意到,近似后验的编码和生成的解码通过RNN隐藏状态 h t − 1 h_{t-1} ht1 进行关联。我们也观察到,对 h t − 1 h_{t-1} ht1 的这种条件化导致了因子分解:

q ( z ≤ T ∣ x ≤ T ) = ∏ t = 1 T q ( z t ∣ x ≤ t , z < t ) . (10) q(z_{\leq T} | x_{\leq T}) = \prod_{t=1}^T q(z_t | x_{\leq t}, z_{<t}).\tag{10} q(zTxT)=t=1Tq(ztxt,z<t).(10)

Learning

目标函数变为使用方程(8)和方程(10)的时间步长变分下界:

E q ( z ≤ T ∣ x ≤ T ) [ ∑ t = 1 T ( − K L ( q ( z t ∣ x ≤ t , z < t ) ∣ ∣ p ( z t ∣ x ≤ t , z < t ) ) + log ⁡ p ( x t ∣ z ≤ t , x < t ) ) ] . (11) \mathbb{E}_{q(z_{\leq T} | x_{\leq T})} \left[ \sum_{t=1}^T \left( -KL(q(z_t | x_{\leq t},z_{<t}) || p(z_t | x_{\leq t},z_{<t})) + \log p(x_t | z_{\leq t},x_{<t}) \right) \right].\tag{11} Eq(zTxT)[t=1T(KL(q(ztxt,z<t)∣∣p(ztxt,z<t))+logp(xtzt,x<t))].(11)

如同标准VAE,我们通过最大化它们参数的变分下界共同学习生成模型和推断模型。VRNN的示意图如图1所示,操作(a)-(d)分别对应于方程(1)-(7),方程(9)。VRNN在计算条件先验时应用操作(a)(见方程(5))。如果VRNN的变体(VRNN-I)不应用操作(a),那么先验在时间步之间变得独立。实际上,STORN[2]可以被认为是VRNN-I模型家族的一个实例。我们在实验评估中包括了这个模型版本(VRNN-I),以便直接研究先验(即条件先验)在潜在随机变量上的时间依赖结构的影响。

vrnn_gmm详解

代码:https://github.com/jych/nips2015_vrnn

模型的架构和数据流动如下:

模型架构

  1. 输入层

    • 数据通过train_data.theano_vars()valid_data.theano_vars()被加载为Theano变量xm_x,分别用于训练和验证。
  2. 全连接层(FullyConnectedLayer

    • x_1x_4z_1z_4是一系列用于特征变换的全连接层。每个x层处理来自上一层或原始输入x_t的信息,而每个z层处理来自潜在变量z_t的信息。
    • phi_1phi_4用于构建近似后验分布的参数。
    • prior_1prior_4用于构建先验分布的参数。
    • theta_1theta_4用于构建生成模型的参数。
  3. LSTM层

    • rnn层是一个长短时记忆单元,用于捕获数据的时序特征。
  4. 输出层

    • phi_muphi_sig层分别用于输出近似后验分布的均值和标准差。
    • prior_muprior_sig层分别用于输出先验分布的均值和标准差。
    • theta_mutheta_sig层分别用于输出生成分布的均值和标准差。

数据流动

  1. 前向传播

    • 原始输入数据x经过一系列全连接层(x_1x_4)被转换为适合LSTM层处理的形式。
  2. 递归处理

    • inner_fn函数定义了每个时间步的处理方式。它首先通过phi_*层处理输入x_t和先前的状态s_tm1来获取近似后验分布的参数,然后从该分布中采样得到z_t
    • z_t接着经过全连接层z_1z_4处理,并和x_t一起被送入rnn层得到新的状态s_t
  3. 后向传播和参数更新

    • Theano的scan函数被用来迭代整个序列,应用inner_fn函数,并收集每个时间步的输出。
    • 通过比较每一步生成的均值和标准差与先验和后验的相应值,使用KLGaussianGaussian计算Kullback-Leibler散度,作为正则化项。
    • 使用Gaussian函数计算重构损失,与KL散度相加得到变分下界(也即负对数似然)。
  4. 优化

    • 通过定义的Adam优化器和Theano函数进行梯度下降,更新模型的参数以最小化变分下界。
  5. 监控

    • monitor_fn函数用于在验证数据上计算和监控各种统计量,如模型的上界负对数似然、重构项、KL项以及各参数的最大值、最小值和均值。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaWeb开发——文件上传

1 简介 文件上传&#xff1a;将本地图片、视频、音频等文件上传到服务器&#xff0c;供其他用户浏览或下载的过程 文件上传涉及到两部分&#xff1a;前端程序 服务端程序 前端程序 【三要素】&#xff1a;① 需要定义一个form 表单&#xff0c;且表单里需定义一个类型为“ …

Qt专栏3—Qt项目创建Hello World

setp1 打开软件 双击Qt Creator 11.0.3 (Community)&#xff0c;打进入软件界面 step2 创建项目 点击创建项目 step3 选择模板 选着Application&#xff08;Qt&#xff09;->Qt Widgets Application setp4 设置项目 名称中填入项目号名&#xff0c;创建路径中填入项目保存位…

基于C#实现KMP算法

一、BF 算法 如果让你写字符串的模式匹配&#xff0c;你可能会很快的写出朴素的 bf 算法&#xff0c;至少问题是解决了&#xff0c;我想大家很清楚的知道它的时间复杂度为 O&#xff08;MN&#xff09;&#xff0c;原因很简单&#xff0c;主串和模式串失配的时候&#xff0c;我…

django restful framework序列化与反序列化

在前后端分离开发中&#xff0c;对于RESTfulAPI设置&#xff0c;一般需要将查询/更新数据以JSON方式进行返回。 序列化 Model.py from django.db import models class User(models.Model):username models.CharField(verbose_name用户名,max_length10)age models.IntegerF…

服务器数据恢复—raid5上层NTFS分区误删除/格式化的数据恢复案例

NTFS是windows操作系统服务器应用最为广泛的文件系统之一。理论上&#xff0c;NTFS文件系统格式化操作虽然不会对数据造成太大的影响&#xff0c;但是有可能会出现部分文件目录结构丢失的情况。下面介绍一台服务器误操作导致raid5阵列上层的NTFS分区被格式化后如何逆向操作恢复…

Altium Designer学习笔记4

学会添加库。 元器件添加成功。 放置TYPE-C元器件。 绘制网络标识和电源端口&#xff0c;并且添加文字备注。 修改元器件的属性。

Hive安装配置 - 本地模式

文章目录 一、Hive运行模式二、安装配置本地模式Hive&#xff08;一&#xff09;安装配置MySQL1、删除系统自带的MariaDB2、上传MySQL组件到虚拟机3、在主节点上安装MySQL组件4、在主节点上配置MySQL&#xff08;1&#xff09;查看MySQL服务状态&#xff08;2&#xff09;查看M…

Softing mobiLink助力过程自动化——兼容HART、FF、PA的多协议接口工具

由于全球人口增加和气候变化等因素&#xff0c;“水”比以往任何时候都更具有价值。与此同时&#xff0c;环境法规和水处理标准也变得愈加严格。在这一大环境下&#xff0c;自来水公司不得不应对一些新的挑战&#xff0c;例如&#xff0c;更好地提高能源效率、最大程度地减少资…

【完全攻略】Gradio:建立机器学习网页APP

目录 前言一、Gradio介绍以及安装1-1、Gradio介绍1-2、安装 二、快速开始&#xff08;初步了解&#xff09;2-1、简单小栗子2-2、多输入多输出2-3、简易聊天机器人 三、关键技术3-1、带有样例的输入3-2、提示弹窗3-3、描述内容3-4、风格3-5、流式输出3-6、进度条3-7、分享APP 总…

个人如何进行深度复盘?这6大高效的复盘模型,让你的年终总结如虎添翼!

一年之计在于春&#xff0c;一日之计在于晨&#xff0c;而一年的收获与成长&#xff0c;在于这个年终的深度复盘。自我复盘&#xff0c;是对过去一年生活、工作、学习的反思和总结&#xff0c;能帮助我们提炼经验&#xff0c;发现不足&#xff0c;规划未来&#xff0c;以便更好…

利用AlphaMissense准确预测蛋白质组范围内的错义变体效应

Editor’s summary 蛋白质中单个氨基酸的变化有时影响不大&#xff0c;但通常会导致蛋白质折叠、活性或稳定性方面的问题。只有一小部分变体进行了实验研究&#xff0c;但有大量的生物序列数据适合用作机器学习方法的训练数据。程等人开发了AlphaMissense&#xff0c;这是一种…

动捕设备如何推动线下活动以虚拟主持人创新升级互动形式

随着元宇宙概念兴起&#xff0c;虚拟主持人结合全身动捕设备可以依托大屏、全息等形式直观呈现于线下活动&#xff0c;通过动捕设备实时驱动虚拟主持人&#xff0c;将现实活动场景与虚拟相连接&#xff0c;让活动以科技感、多元化的形式呈现&#xff0c;给活动参与者一种新的视…

redis之高可用

&#xff08;一&#xff09;redis之高可用 1、在集群当中有一个非常重要的指标&#xff0c;提供正常服务的时间的百分比&#xff08;365天&#xff09;99.9% 2、redis的高可用的含义更加广泛&#xff0c;正常服务是指标之一&#xff0c;数据容量的扩展、数据的安全性 3、在r…

基于C#实现协同推荐 SlopeOne 算法

一、概念 相信大家对如下的 Category 都很熟悉&#xff0c;很多网站都有类似如下的功能&#xff0c;“商品推荐”,"猜你喜欢“&#xff0c;在实体店中我们有导购来为我们服务&#xff0c;在网络上我们需要同样的一种替代物&#xff0c;如果简简单单的在数据库里面去捞&am…

【ISP】噪声--sensor(2)

1.热噪声 也叫KT/C噪声&#xff0c;或者叫暗电流噪声。电子的热运动的导致&#xff0c;温度上升&#xff0c;噪声增大。 2.FPN固定模式噪声 由于每个像素点的元器件制造的会有偏差&#xff0c;也就是这些器件的工作参数相对理论值的漂移就构成一种固定模式噪声。 3.光子散粒噪…

No appropriate protocol -- Mysql

DataGrip连接mysql报以下异常信息&#xff1a; javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate) The following required algorithms might be disabled: SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5wi…

网站为什么一定要安装SSL证书

随着互联网的普及和发展&#xff0c;网络安全问题日益凸显。在这个信息爆炸的时代&#xff0c;保护用户隐私和数据安全已经成为各大网站和企业的首要任务。而SSL证书作为一种网络安全技术&#xff0c;已经成为网站必备的安全工具。那么&#xff0c;为什么网站一定要安装SSL证书…

C编译流程

1.预处理 hello.c 经过预处理得到 hello.i gcc -E hello.c -o hello.i -E的含义&#xff1a;说明这是一个预处理操作 生成预处理文件(.i) 预处理阶段做了什么事&#xff1a; 1.1 头文件展开 我们发现 原先只有几行的hello.c变成了上千行的hello.i 实际上 预处理完成的是 将头…

二百零五、Flume——数据流监控工具Ganglia单机版安装以及使用Ganglia监控Flume任务的数据流(附流程截图)

一、目的 Flume采集Kafka的数据流需要实时监控&#xff0c;这时就需要用到监控工具Ganglia 二、Ganglia简介 Ganglia 由 gmond、gmetad 和 gweb 三部分组成。 &#xff08;一&#xff09;第一部分&#xff1a;gmond gmond&#xff08;Ganglia Monitoring Daemon&#xff09;…

.Net6 Api Swagger配置

1、定义个Swagger版本&#xff08;组&#xff09;的枚举 namespace WebApp.Enums {/// <summary>/// api版本枚举/// </summary>public enum ApiVersion{/// <summary>/// v1版本/// </summary>v1 1,/// <summary>/// v2版本/// </summary&…