有效运作神经网络

内容来自https://www.bilibili.com/video/BV1FT4y1E74V,仅为本人学习所用。

文章目录

  • 训练集、验证集、测试集
  • 偏差、方差
  • 正则化
    • 正则化参数
    • 为什么正则化可以减少过拟合
    • Dropout正则化
      • Inverted Dropout
      • 其他的正则化方法
        • 数据增广
        • Early stopping
  • 归一化
  • 梯度消失与梯度爆炸
    • 产生原因
    • 权重初始化
      • He初始化
      • Xavier初始化
  • 梯度检验
    • 梯度的数值逼近
    • 步骤(如上图)
    • 一些建议

训练集、验证集、测试集

  • 训练集:用于训练模型的数据集。通过学习训练集中的数据特征和标签之间的关系,来调整自身的参数,以尽可能准确地对数据进行拟合。
  • 验证集:在模型训练过程中对模型进行评估和调整。在训练过程中,使用验证集可以监控模型的性能,如准确率、损失函数值,根据验证集上的表现来选择最优的模型参数。
  • 测试集:在模型训练和调优完成后,最终评估模型的性能。是一组完全独立于训练集和验证集的数据,测试模型在实际应用中的泛化能力和准确性,判断模型是否能够很好地处理未见过的数据。

一般来说,数据集按照6:2:2或7:2:1的比例划分为训练集、验证集和测试集。对于数据量非常大的数据集,验证集和测试集的比例可以降低,比如95:2.5:2.5;而对于数据量较小的数据集,可以使用上述的原则。

有的时候会遇到这样的场景:训练一个识别猫的模型,训练的时候使用的训练集是大小固定,分辨率较低的图片,但是在测试的时候使用的验证集、测试集是随机大小的,分辨率比较高的图片。这两类图片是不同的,应该确保训练集和验证机、测试集的数据是同一个分布

在训练集上训练数据,尝试使用不同的模型框架;在验证集上评估这些模型,迭代选出适用的模型;最后测试。

偏差、方差

偏差是模型的预测值(期望输出)与真实值之间的差异。高偏差意味着模型过于简单,不能很好地捕捉数据中的复杂模式和特征,导致模型在训练集和测试集上的表现都较差,出现欠拟合现象。
方差描述的是模型对于给定数据集的预测结果的离散程度。如果模型在不同的训练数据集上训练后,得到的模型参数差异很大,导致预测结果波动较大,那么这个模型的方差就很高。高方差通常是因为模型过于复杂,对训练数据中的噪声和特定样本的特征过度拟合,在训练集上表现很好,但在测试集等新数据上表现不佳,出现过拟合现象。

偏差反映的是模型本身的拟合能力。从数学角度看,偏差衡量的是模型的期望预测与真实值之间的偏离程度;方差衡量的是模型预测结果的稳定性。
在这里插入图片描述

  • 左图 - high bias(高偏差):也叫欠拟合。模型过于简单,无法很好地捕捉数据中的规律和特征,导致在训练集上的表现就很差,对数据的拟合程度低。图中用一条简单的直线去划分两类数据点(圆圈和叉叉),明显没有很好地分开数据,在训练集上的误差就较大,更不用说在新数据上的表现了。
  • 中图 - just right(正好):也叫适度拟合。模型复杂度适中,能够较好地学习到数据中的模式,既不会过于简单而无法拟合数据,也不会过于复杂而只对训练数据表现好。图中用一条曲线比较合理地划分了两类数据点,在训练集上有较好的拟合效果,同时也有较好的泛化能力,在新数据上也能有不错的表现。
  • 右图 - high variance(高方差):也叫过拟合。模型过于复杂,把训练数据中的一些偶然的特征也学习了进去,导致在训练集上表现非常好,几乎能完美拟合训练数据,但在新数据上表现很差,泛化能力弱。图中曲线过度地围绕着数据点,甚至把一些可能是误差的数据点也考虑进去了,虽然在训练集上误差极小,但在新数据上难以有好的表现。

在二维中可以直接可视化偏差和方差。但是在更多维中描述较为困难,使用几个指标来描述偏差和方差。
在这里插入图片描述
识别一张猫的图片,假设人的识别率是0%的错误。

  • 在训练集和测试集上错误率分别为1%和11%:说明模型对训练集过拟合,对新的数据表现较差,称为高方差。
  • 在训练集和测试集上错误率分别为15%和16%:说明模型对训练集欠拟合,对新的数据表现也较差,称为高偏差。
  • 在训练集和测试集上错误率分别为15%和30%:说明模型对训练集欠拟合,但是对新的数据表现更差,称为高偏差和高方差。
  • 在训练集和测试集上错误率分别为0.5%和1%:说明模型对训练集和新的数据表现均较好,称为低偏差和低方差。

在这里插入图片描述

图中训练集的紫色部分表现为高方差和高偏差。两边部分几乎是一条直线,欠拟合,表现为高偏差,但是中间部分很灵活,对一些可能的错误点过拟合,(在新的数据上表现较差)表现为高方差。

对于高偏差的问题,尝试选择一个新的网络、花费更多时间去训练或者尝试更先进的优化算法,一直到解决这个问题。当偏差降低到可以接受的范围时,查看验证集性能,检查方差是否有问题。若方差较高,需要更多的数据去验证或寻找更合适的神经网络,但是有的时候并不能找到更多的数据的时候,可以采用正则化来减少过拟合。做到具体问题具体分析,比如算法存在高偏差的问题,采用更多的数据去训练作用则效果不大。

在这里插入图片描述

正则化

正则化参数

在模型的损失函数中添加一个惩罚项,对模型的参数进行约束。

以线性回归模型为例,其原始损失函数为 L ( w , b ) = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 L(w,b)=\frac{1}{n}\sum_{i = 1}^{n}(y_{i}-\hat{y}_{i})^2 L(w,b)=n1i=1n(yiy^i)2,添加正则化项后变为 L ( w , b ) = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 + λ 2 m R ( w ) L(w,b)=\frac{1}{n}\sum_{i = 1}^{n}(y_{i}-\hat{y}_{i})^2+ \frac{\lambda}{2m} R(w) L(w,b)=n1i=1n(yiy^i)2+2mλR(w)。其中 λ \lambda λ是正则化系数,用于控制正则化的强度。 2 m 2m 2m是样本数量的2倍,数字2主要是为了求导的方便。 R ( w ) R(w) R(w)是正则化项,它对模型参数 w w w进行约束,使模型参数不会过大,避免模型过于复杂而出现过拟合。

正则化项取 R ( w ) = ∑ j = 1 m w j 2 = w T w R(w)=\sum_{j=1}^{m}w_{j}^{2}=w^Tw R(w)=j=1mwj2=wTw称为L2正则化(岭回归),对模型参数的平方求和。L2正则化使得 参数趋于较小的值,但不会使参数变为0,通过减小参数的量级来降低模型的复杂度,防止过拟合。

L2距离(欧几里得距离)

  • 在二维空间中:假设有两个点 P ( x 1 , y 1 ) P(x_1,y_1) P(x1,y1) Q ( x 2 , y 2 ) Q(x_2,y_2) Q(x2,y2),它们之间的L2距离 d ( P , Q ) d(P,Q) d(P,Q)计算公式为 d ( P , Q ) = ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 d(P,Q)=\sqrt{(x_2 - x_1)^2+(y_2 - y_1)^2} d(P,Q)=(x2x1)2+(y2y1)2 。几何意义是两点之间直线段的长度。
  • 在n 维空间中:对于两个 n 维向量 x = ( x 1 , x 2 , ⋯   , x n ) \mathbf{x}=(x_1,x_2,\cdots,x_n) x=(x1,x2,,xn) y = ( y 1 , y 2 , ⋯   , y n ) \mathbf{y}=(y_1,y_2,\cdots,y_n) y=(y1,y2,,yn),它们之间的L2距离 d ( x , y ) d(\mathbf{x},\mathbf{y}) d(x,y)的计算公式为 d ( x , y ) = ∑ i = 1 n ( y i − x i ) 2 d(\mathbf{x},\mathbf{y})=\sqrt{\sum_{i = 1}^{n}(y_i - x_i)^2} d(x,y)=i=1n(yixi)2

正则化系数 λ \lambda λ是一个超参数,需要通过验证集等方法进行调整。 λ \lambda λ值过小,正则化效果不明显,无法有效防止过拟合; λ \lambda λ值过大,会过度约束模型参数,导致模型过于简单,出现欠拟合。采用交叉验证等方法,在不同的 λ \lambda λ取值下训练模型并在验证集上评估性能指标,选择使验证集性能最优的 λ \lambda λ值。

反向传播的时候,不要忘记对惩罚项的求导。
d w = ( 原损失函数求导的结果 ) + λ m w [ l ] \mathbf{d}w=(原损失函数求导的结果) + \frac{\lambda}{m}w^{[l]} dw=(原损失函数求导的结果)+mλw[l] w [ l ] : = w [ l ] − α d w [ l ] w^{[l]}:=w^{[l]}-\alpha\mathbf{d}w^{[l]} w[l]:=w[l]αdw[l]

为什么正则化可以减少过拟合

在这里插入图片描述
对于该损失函数,若 λ \lambda λ足够大,求导后的 d w \mathbf{d}w dw也大,导致梯度下降的 w w w更小,当接近于0时,相当于将神经网络的多个隐藏单元权重设置为0,整个大的神经网络简化成一个小的神经网络,导致网络欠拟合,更接近于高偏差的神经网络。在调整 λ \lambda λ的过程中,总有个值让神经网络适度拟合。

实际上不是隐藏单元消失了,而是其权重变的更小。
在这里插入图片描述

Dropout正则化

在这里插入图片描述
对于左边的过拟合的神经网络,采用Dropout正则化,在模型训练过程中,Dropout以一定的概率随机 丢弃(设置为 0)神经网络中隐藏层和输入层的一些神经元。右图中,假设有遍历每一层的神经元,假设每个神经元有50%的概率被丢弃。

Inverted Dropout

在普通Dropout中,训练时以概率 p p p随机将神经元的输出设置为0,测试时所有神经元都正常工作,这就导致训练和测试阶段网络的行为存在差异,测试时需要对网络输出进行额外的缩放调整来匹配训练时的预期输出。

反向随机失活(Inverted Dropout)在训练阶段对激活值进行缩放补偿,使测试阶段无需额外调整。具体做法是:在训练时,对于每个神经元,以概率 p p p将其输出设置为0,同时将保留(未被丢弃)的神经元输出除以 1 − p 1 - p 1p 。这样做的效果是,训练阶段神经元输出的期望值与测试阶段所有神经元都正常工作时的期望值保持一致。

假设一个神经元在未应用Dropout时的输出为 x x x ,Dropout概率为 p = 0.5 p = 0.5 p=0.5

  • 普通Dropout训练:该神经元有 0.5 0.5 0.5的概率输出为0, 0.5 0.5 0.5的概率输出为 x x x,其输出的期望值为 0.5 × 0 + 0.5 × x = 0.5 x 0.5\times0 + 0.5\times x = 0.5x 0.5×0+0.5×x=0.5x 。测试时,所有神经元正常工作,输出为 x x x ,因此测试时需要将训练阶段的输出乘以2来匹配测试时的输出。
  • inverted dropout训练:该神经元有 0.5 0.5 0.5的概率输出为0, 0.5 0.5 0.5的概率输出为 x 1 − 0.5 = 2 x \frac{x}{1 - 0.5}=2x 10.5x=2x ,其输出的期望值为 0.5 × 0 + 0.5 × 2 x = x 0.5\times0 + 0.5\times2x = x 0.5×0+0.5×2x=x 。测试时,所有神经元正常工作,输出同样为 x x x ,无需额外调整。

每一层的概率(keep-prob)可以设置为不同的值,1表示全部保留。如果担心某些层比其他层更容易发生拟合,可以将该层的keep-prob设置的比其他层更低,但这样做缺点是需要使用交叉验证搜寻更多的超参数。

Dropout正则化的缺点是损失函数 J J J不再有明确的定义,从而不能很好地绘制损失函数图像。

其他的正则化方法

数据增广

如果想要通过扩增训练数据来解决过拟合问题,但是扩增数据代价较高,这个时候,可以在原有的数据集上添加改变后的数据集来增加训练集(数据增广)。比如对图片进行反转或者裁剪;对文字旋转或者变形。

在这里插入图片描述

Early stopping

在模型训练过程中,模型在训练集上的损失通常会不断降低,而在验证集上的损失会先下降,到达某一时刻后可能开始上升,这表明模型开始过拟合训练数据。Early stopping 会在训练过程中持续监控验证集上的性能指标,当验证集上的性能指标出现过拟合时,就停止训练。
在这里插入图片描述

Early stopping提前停止训练可能导致模型没有充分学习到数据中的所有有用信息,没有达到全局最优解,使得模型性能未达到理论上的最佳状态。

归一化

  • 第一步,零均值化 μ = 1 m ∑ i = 1 m x ( i ) ,   x : = x − μ \mu=\frac{1}{m}\sum_{i=1}^{m}x^{(i)},\ x:=x-\mu μ=m1i=1mx(i), x:=xμ。将数据的均值调整为 0 。有助于使数据在特征空间中分布更加对称,减少数据的偏置影响。
  • 第二步,方差归一化 σ 2 = 1 m ∑ i = 1 m x ( i ) 2 ,   x / = σ 2 \sigma^2=\frac{1}{m}\sum_{i=1}^{m}x^{(i)^{2}},\ x/=\sigma^2 σ2=m1i=1mx(i)2, x/=σ2。调整数据的方差,使不同特征的方差保持一致。如果不同特征的方差差异较大,那么方差大的特征可能会在模型训练中占据主导地位,而方差小的特征的作用可能被忽视。
    在这里插入图片描述

如果没有归一化,损失函数图像像一个狭长的碗,在这样的图上运行梯度下降法,在更新参数时步伐不一致,可能导致在某些方向上过度更新,而在其他方向上更新不足,为了照顾不同的方向,学习率需设置的较小,从而需要更多的迭代次数才能收敛到最优解,增加了训练时间和计算成本;归一化使得损失函数更加对称,算法可以更有效地调整参数,学习率可以设置的更大,花费更低的成本达到最优解。

在这里插入图片描述

梯度消失与梯度爆炸

  • 梯度消失:在深度神经网络的反向传播过程中,梯度值随着网络层数的增加而逐渐变小,趋近于零。使得网络中靠近输入层的神经元的参数更新非常缓慢,甚至几乎不更新,导致模型无法学习到足够的信息,难以收敛到最优解。
  • 梯度爆炸:与梯度消失相反,在反向传播过程中,梯度值随着网络层数的增加而变得越来越大,导致参数更新步长过大,使得模型无法稳定收敛,甚至可能导致参数值变为NaN(非数值)。

产生原因

  • 激活函数选择:如果使用Sigmoid或Tanh等激活函数,它们的导数取值范围是有限的,Sigmoid函数的导数在输入值较大或较小时趋近于0。在深度网络中,经过多层的链式求导后,梯度会不断相乘,导致梯度值变得极小,从而引发梯度消失问题。
  • 网络层数过深:随着网络层数的增加,反向传播时梯度需要经过多次乘法运算,这使得梯度值容易出现指数级的衰减(梯度消失)或增长(梯度爆炸)。
  • 参数初始化不当:如果初始参数设置过大,在反向传播过程中可能会导致梯度爆炸;如果初始参数设置过小,则可能加剧梯度消失问题。

权重初始化

He初始化

当使用ReLU激活函数时,传统的初始化方法(如随机初始化)可能会导致某些神经元在训练初期就处于“死亡”状态(即输入小于0,输出恒为0),或者使得梯度在反向传播过程中迅速消失或爆炸。

He初始化是根据输入层的神经元数量来调整初始化参数的方差,使得每一层的输出方差在正向传播过程中保持大致不变,同时在反向传播时梯度的方差也能保持稳定,从而避免梯度消失和梯度爆炸问题,加速模型的收敛。

对于一个具有 n i n p u t (简写为 n i n ) n_{input}(简写为n_{in}) ninput(简写为nin个输入神经元的全连接层,其权重参数 W W W的每个元素 w i j w_{ij} wij按照以下方式进行初始化:

  • 从均值为0,标准差为 σ = 2 n i n \sigma = \sqrt{\frac{2}{n_{in}}} σ=nin2 的正态分布中随机采样得到,即 w i j ∼ N ( 0 , 2 n i n ) w_{ij} \sim N(0, \frac{2}{n_{in}}) wijN(0,nin2)
  • 也可以从均匀分布 U ( − 6 n i n , 6 n i n ) U(-\sqrt{\frac{6}{n_{in}}}, \sqrt{\frac{6}{n_{in}}}) U(nin6 ,nin6 )中进行采样。

对于卷积层, n i n n_{in} nin表示输入通道数乘以卷积核的高度和宽度。

Xavier初始化

对于一个具有 n i n n_{in} nin 个输入神经元和 n o u t n_{out} nout 个输出神经元的全连接层,其权重参数 W W W 的每个元素 w i j w_{ij} wij 可以按照以下两种方式进行初始化:

  • 正态分布初始化:从均值为 0,标准差为 σ = 2 n i n + n o u t \sigma = \sqrt{\frac{2}{n_{in} + n_{out}}} σ=nin+nout2 的正态分布中随机采样得到,即 w i j ∼ N ( 0 , 2 n i n + n o u t ) w_{ij} \sim N(0, \frac{2}{n_{in} + n_{out}}) wijN(0,nin+nout2)
  • 均匀分布初始化:从均匀分布 U ( − 6 n i n + n o u t , 6 n i n + n o u t ) U(-\sqrt{\frac{6}{n_{in} + n_{out}}}, \sqrt{\frac{6}{n_{in} + n_{out}}}) U(nin+nout6 ,nin+nout6 ) 中进行采样。

Xavier初始化比较适用于使用Sigmoid、Tanh等传统激活函数的神经网络。

梯度检验

在实现复杂的神经网络和反向传播算法时,代码中可能会出现各种错误,如索引错误、矩阵运算错误等。梯度检验可以帮助我们及时发现这些错误,确保反向传播算法的实现是正确的。

梯度的数值逼近

由导数的定义可知。在微积分中,函数 f ( x ) f(x) f(x) 在某一点 x x x 处的导数可以用极限来近似表示:
f ′ ( x ) ≈ f ( x + ϵ ) − f ( x − ϵ ) 2 ϵ f'(x) \approx \frac{f(x + \epsilon)-f(x - \epsilon)}{2\epsilon} f(x)2ϵf(x+ϵ)f(xϵ)
其中 ϵ \epsilon ϵ 是一个非常小的正数。

在神经网络中,我们通过反向传播算法计算损失函数 J ( θ ) J(\theta) J(θ) 关于参数 θ \theta θ 的导数 ∂ J ∂ θ \frac{\partial J}{\partial \theta} θJ,梯度检验就是将反向传播计算得到的梯度与使用上述近似公式计算得到的梯度进行比较,如果两者非常接近,则说明反向传播算法的实现是正确的。
在这里插入图片描述

g ( θ ) g(\theta) g(θ) f ( θ ) f(\theta) f(θ)的导数。

可以看出误差是0.0001,不是很大,说明该代码是正确的。

步骤(如上图)

  1. 定义损失函数和参数:明确神经网络的损失函数 J ( θ ) J(\theta) J(θ) 以及需要更新的参数 θ \theta θ
  2. 初始化参数:给参数 θ \theta θ 赋予初始值。
  3. 使用反向传播计算梯度:通过反向传播算法计算损失函数 J ( θ ) J(\theta) J(θ) 关于参数 θ \theta θ 的梯度 ∇ θ J \nabla_{\theta}J θJ(对损失函数求某个参数的导数)。
  4. 使用数值近似计算梯度:对于参数 θ \theta θ 中的每一个元素 θ i \theta_i θi,分别计算 J ( θ 1 , ⋯   , θ i + ϵ , ⋯   , θ n ) J(\theta_1, \cdots, \theta_i + \epsilon, \cdots, \theta_n) J(θ1,,θi+ϵ,,θn) J ( θ 1 , ⋯   , θ i − ϵ , ⋯   , θ n ) J(\theta_1, \cdots, \theta_i - \epsilon, \cdots, \theta_n) J(θ1,,θiϵ,,θn),然后使用近似公式 ∂ J ∂ θ i ≈ J ( θ 1 , ⋯   , θ i + ϵ , ⋯   , θ n ) − J ( θ 1 , ⋯   , θ i − ϵ , ⋯   , θ n ) 2 ϵ \frac{\partial J}{\partial \theta_i} \approx \frac{J(\theta_1, \cdots, \theta_i + \epsilon, \cdots, \theta_n)-J(\theta_1, \cdots, \theta_i - \epsilon, \cdots, \theta_n)}{2\epsilon} θiJ2ϵJ(θ1,,θi+ϵ,,θn)J(θ1,,θiϵ,,θn) 计算梯度的近似值。
  5. 比较两种梯度:计算反向传播得到的梯度 ∇ θ J \nabla_{\theta}J θJ 和数值近似得到的梯度之间的差异,通常使用相对误差来衡量:
    d = ∥ ∇ θ J − ∇ θ J a p p r o x ∥ 2 ∥ ∇ θ J ∥ 2 + ∥ ∇ θ J a p p r o x ∥ 2 d = \frac{\|\nabla_{\theta}J - \nabla_{\theta}J_{approx}\|_2}{\|\nabla_{\theta}J\|_2 + \|\nabla_{\theta}J_{approx}\|_2} d=θJ2+θJapprox2θJθJapprox2
    其中 ∥ ⋅ ∥ 2 \|\cdot\|_2 2 表示向量的 L2 范数(L2距离)。如果相对误差 d d d 非常小(例如小于 1 0 − 7 10^{-7} 107),则说明反向传播算法的实现是正确的;否则,可能存在代码实现错误。

一些建议

  • 梯度检验仅用于调试,不能训练过程中使用。
  • 若算法未能通过梯度检验,检查各个值,比如如 d z \mathbf{d}z dz d w \mathbf{d}w dw d a \mathbf{d}a da,大概定位。
  • 进行梯度检验时要考虑正则化项。
  • 梯度检验不适用于带有随机失活(Dropout)的情况。
  • 刚开始的时候初始化的W和b都很小,趋于0,而模型可能在W和b小的时候可以很好的计算梯度,但是当迭代了一段时间后,W和b变大,模型可能会在这一部分存在问题,因此这个时候在开启梯度检验比较合适。

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

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

相关文章

【深度优先搜索篇】走迷宫的魔法:算法如何破解迷宫的神秘密码

当你在夜晚孤军奋战时,满天星光以为你而闪烁。 欢迎拜访:羑悻的小杀马特.-CSDN博客 本篇主题:轻轻松松拿捏洛谷走迷宫问题 制作日期:2024.12.31 隶属专栏:C/C题海汇总 首先我…

SQL进阶实战技巧:如何分析浏览到下单各步骤转化率及流失用户数?

目录 0 问题描述 1 数据准备 2 问题分析 3 问题拓展 3.1 跳出率计算 3.2 计算从浏览商品到支付订单的不同路径的用户数,并按照用户数降序排列。 往期精彩 0 问题描述 统计从浏览商品到最终下单的各个步骤的用户数和流失用户数,并计算转化率 用户表结构和…

Autosar-Os是怎么运行的?(内存保护)

写在前面: 入行一段时间了,基于个人理解整理一些东西,如有错误,欢迎各位大佬评论区指正!!! 1.功能概述 以TC397芯片为例,英飞凌芯片集成了MPU模块, MPU模块采用了硬件机…

什么是Maxscript?为什么要学习Maxscript?

MAXScript是Autodesk 3ds Max的内置脚本语言,它是一种与3dsMax对话并使3dsMax执行某些操作的编程语言。它是一种脚本语言,这意味着您不需要编译代码即可运行。通过使用一系列基于文本的命令而不是使用UI操作,您可以完成许多使用UI操作无法完成的任务。 Maxscript是一种专有…

(一)QT的简介与环境配置WIN11

目录 一、QT的概述 二、QT的下载 三、简单编程 常用快捷键 一、QT的概述 简介 Qt(发音:[kjuːt],类似“cute”)是一个跨平台的开发库,主要用于开发图形用户界面(GUI)应用程序,…

vim交换文件的作用

1.数据恢复:因为vim异常的退出,使用交换文件可以恢复之前的修改内容。 2.防止多人同时编辑:vim检测到交换文件的存在,会给出提示,以避免一个文件同时被多人编辑。 (vim交换文件的工作原理:vim交换文件的工作…

SpringCloudGateWay和Sentinel结合做黑白名单来源控制

假设我们的分布式项目,admin是8087,gateway是8088,consumer是8086 我们一般的思路是我们的请求必须经过我们的网关8088然后网关转发到我们的分布式项目,那我要是没有处理我们绕过网关直接访问项目8087和8086不也是可以&#xff1…

将多目标贝叶斯优化与强化学习相结合用于TinyML

论文标题 Combining Multi-Objective Bayesian Optimization with Reinforcement Learning for TinyML 作者信息 Mark Deutel, Friedrich-Alexander-Universitt Erlangen-Nrnberg, Germany Georgios Kontes, Fraunhofer IIS, Fraunhofer Institute for Integrated Circuits …

Big Bird:适用于更长序列的Transformer模型

摘要 基于Transformer的模型,如BERT,已成为自然语言处理(NLP)中最成功的深度学习模型之一。然而,它们的一个核心限制是由于其全注意力机制,对序列长度的二次依赖(主要是在内存方面)…

26_DropDown使用方法

创建下拉框DropDown 其中样板Template 是展示的选项框 其中Caption 是选中某个选项之后 展示的内容(Caption Text 说明文字/Caption Image 说明图示) 修改其 说明文字Caption Text 创建一个说明图示Image 设置为居左 而Item是 展示的选项框所展示的文字与…

【redis进阶】redis 总结

目录 介绍一下什么是 Redis,有什么特点 Redis 支持哪些数据类型 Redis 数据类型底层的数据结构/编码方式是什么 ZSet 为什么使用跳表,而不是使用红黑树来实现 Redis 的常见应用场景有哪些 怎样测试 Redis 服务器的连通性 如何设置 key 的过期时间 Redis …

AI大模型开发原理篇-1:语言模型雏形之N-Gram模型

N-Gram模型概念 N-Gram模型是一种基于统计的语言模型,用于预测文本中某个词语的出现概率。它通过分析一个词语序列中前面N-1个词的出现频率来预测下一个词的出现。具体来说,N-Gram模型通过将文本切分为长度为N的词序列来进行建模。 注意:这…

Linux工具使用

1.gcc/g的使用 1.1程序翻译的过程 ①预处理:展开头文件,替换宏,调节编译,去注释。 ②编译:将代码变成汇编语言 ③汇编:将汇编代码变成二进制不可执行的目标文件。 ④链接:将多个我写的多个…

后端token校验流程

获取用户信息 前端中只有 await userStore.getInfo() 表示从后端获取数据 在页面中找到info对应的url地址,在IDEA中查找 这里是getInfo函数的声明,我们要找到这个函数的使用,所以点getInfo() Override public JSONObject getInfo() {JSO…

Python 梯度下降法(二):RMSProp Optimize

文章目录 Python 梯度下降法(二):RMSProp Optimize一、数学原理1.1 介绍1.2 公式 二、代码实现2.1 函数代码2.2 总代码 三、代码优化3.1 存在问题3.2 收敛判断3.3 函数代码3.4 总代码 四、优缺点4.1 优点4.2 缺点 Python 梯度下降法&#xff…

excel如何查找一个表的数据在另外一个表是否存在

比如“Sheet1”有“张三”、“李四”“王五”三个人的数据,“Sheet2”只有“张三”、“李四”的数据。我们通过修改“Sheet1”的“民族”或者其他空的列,修改为“Sheet2”的某一列。这样修改后筛选这个修改的列为空的或者为出错的,就能找到两…

2024年数据记录

笔者注册时间超过98.06%的用户 CSDN 原力是衡量一个用户在 CSDN 的贡献和影响力的系统,笔者原力值超过99.99%的用户 其他年度数据

7层还是4层?网络模型又为什么要分层?

~犬📰余~ “我欲贱而贵,愚而智,贫而富,可乎? 曰:其唯学乎” 一、为什么要分层 \quad 网络通信的复杂性促使我们需要一种分层的方法来理解和管理网络。就像建筑一样,我们不会把所有功能都混在一起…

JxBrowser 8.2.2 版本发布啦!

JxBrowser 8.2.2 版本发布啦! • 已更新 #Chromium 至更新版本 • 实施了多项质量改进 🔗 点击此处了解更多详情。 🆓 获取 30 天免费试用。

论文阅读(十五):DNA甲基化水平分析的潜变量模型

1.论文链接:Latent Variable Models for Analyzing DNA Methylation 摘要: 脱氧核糖核酸(DNA)甲基化与细胞分化密切相关。例如,已经观察到肿瘤细胞中的DNA甲基化编码关于肿瘤的表型信息。因此,通过研究DNA…