当前位置: 首页 > news >正文

ICLR2015 | FGSM | 解释并利用对抗样本

Explaining and Harnessing Adversarial Examples

  • 摘要-Abstract
  • 相关工作-Related Work
  • 对抗样本的线性解释-The Linear Explanation of Adversarial Examples
  • 非线性模型的线性扰动-Linear Pertubation of Non-Linear Models
  • 线性模型与权重衰减的对抗训练-Adversarial Training of Linear Models Versus Weight Decay
  • 深度网络的对抗训练-Adversarial Training Of Deep Networks
  • 不同类型的模型容量-Different Kinds of Model Capacity
  • 为什么对抗样本有泛化性-Why Do Adversarial Examples Generalize?
  • 替代假设-Alternative Hypotheses
  • 总结与讨论
  • 附录:垃圾类样本-Rubbish Class Examples


论文链接
本文 “Explaining and Harnessing Adversarial Examples” 探讨了机器学习模型中的对抗样本现象,认为神经网络易受其攻击的主因是线性性质,提出快速生成方法(Fast Gradient Sign Method, FGSM),经实验表明对抗训练可正则化模型,还讨论了模型容量、对抗样本泛化性及反驳了一些替代假设,总结了相关发现与影响。


摘要-Abstract

Several machine learning models, including neural networks, consistently misclassify adversarial examples—inputs formed by applying small but intentionally worst-case perturbations to examples from the dataset, such that the perturbed input results in the model outputting an incorrect answer with high confidence. Early attempts at explaining this phenomenon focused on nonlinearity and overfitting. We argue instead that the primary cause of neural networks’ vulnerability to adversarial perturbation is their linear nature. This explanation is supported by new quantitative results while giving the first explanation of the most intriguing fact about them: their generalization across architectures and training sets. Moreover, this view yields a simple and fast method of generating adversarial examples. Using this approach to provide examples for adversarial training, we reduce the test set error of a maxout network on the MNIST dataset.

包括神经网络在内的多种机器学习模型,一直会错误分类对抗样本,即对数据集中的样本施加微小但有意为之的最坏情况扰动而形成的输入,使得受扰动的输入导致模型以高置信度输出错误答案。早期解释这一现象的尝试集中在非线性和过拟合上。我们则认为神经网络易受对抗扰动影响的主要原因是其线性本质。 这一解释得到了新的定量结果的支持,同时首次解释了关于它们的最有趣的事实:它们在不同架构和训练集之间的泛化能力。此外,这一观点产生了一种简单快速的生成对抗样本的方法。 使用这种方法为对抗训练提供样本,我们降低了一个maxout网络在MNIST数据集上的测试集误差。

相关工作-Related Work

该部分主要回顾了与对抗样本相关的前期研究成果,包括神经网络及相关模型在对抗样本方面展现出的多种特性,具体内容如下:

  1. 可靠生成对抗样本的方法:Szegedy等人研究表明,Box - constrained L - BFGS能够可靠地找到对抗样本,这为后续研究提供了基础。
  2. 对抗样本的视觉特性:在一些数据集(如ImageNet)上,对抗样本与原始样本极为接近,人眼难以区分其差异,但却能导致模型误分类,这一现象揭示了模型在处理看似相似输入时的脆弱性。
  3. 对抗样本的泛化性:同一对抗样本常被不同架构或在不同训练子集上训练的多种分类器误分类,这表明对抗样本暴露了训练算法的根本性盲点,模型可能并未真正学习到数据背后的本质概念。
  4. 浅层模型的脆弱性:浅层softmax回归模型同样易受对抗样本影响,说明对抗样本问题不仅存在于深度神经网络中,也存在于较为简单的模型结构中。
  5. 对抗训练的正则化效果及局限性:早期研究发现,基于对抗样本的训练可对模型起到一定的正则化作用,但当时由于生成对抗样本需要昂贵的约束优化计算,使得该方法在实际应用中不具实用性,限制了其进一步发展和应用。

对抗样本的线性解释-The Linear Explanation of Adversarial Examples

  1. 线性模型存在对抗样本的原因
    • 在许多问题中,输入特征精度有限,例如数字图像每像素仅用8位,会丢弃动态范围1/255以下的信息。对于分类器,若扰动 η \eta η 各元素小于特征精度,从理性上讲,它对输入 x x x 和对抗输入 x ~ = x + η \tilde{x}=x+\eta x~=x+η 应给出相同分类。
    • 考虑权重向量 w w w 与对抗样本 x ~ \tilde{x} x~ 的点积 w ⊤ x ~ = w ⊤ x + w ⊤ η w^{\top}\tilde{x}=w^{\top}x + w^{\top}\eta wx~=wx+wη,对抗扰动使激活增长 w ⊤ η w^{\top}\eta wη。在 η \eta η 的最大范数约束下,通过令 η = s i g n ( w ) \eta = sign(w) η=sign(w) 可使激活增长最大化。若 w w w n n n 维且权重向量元素平均幅度为 m m m,激活将增长 ϵ m n \epsilon mn ϵmn。由于 ∥ η ∥ ∞ \|\eta\|_{\infty} η 不随问题维度增长,但扰动引起的激活变化可随 n n n 线性增长,在高维问题中,许多微小输入变化可累积成输出的大变化,就像“意外隐写术”,线性模型会专注于与权重最对齐的信号,即便存在其他信号且幅度更大。
  2. 与先前解释的对比
    • 先前解释对抗样本存在时,常假设神经网络具有高度非线性等特性,而本文基于线性的假设更简单,且能解释为何softmax回归也易受对抗样本影响。这表明简单线性模型在输入维度足够高时就会有对抗样本,而非仅神经网络的非线性特性所致。

非线性模型的线性扰动-Linear Pertubation of Non-Linear Models

  1. 生成对抗样本的快速方法
    • 神经网络的线性行为使其难以抵抗线性对抗扰动。许多神经网络(如LSTMs、ReLUs、maxout网络)有意设计为线性方式,以便优化,更非线性的模型(如sigmoid网络)也常处于非饱和、更线性的状态。基于此,线性模型的廉价解析扰动也可能影响神经网络。
    • 对于模型参数 θ \theta θ、输入 x x x、目标 y y y 和成本函数 J ( θ , x , y ) J(\theta, x, y) J(θ,x,y),可通过线性化成本函数得到最优最大范数约束扰动 η = ϵ s i g n ( ∇ x J ( θ , x , y ) ) \eta=\epsilon sign(\nabla_{x}J(\theta, x, y)) η=ϵsign(xJ(θ,x,y)),这就是“快速梯度符号法”生成对抗样本。其所需梯度可通过反向传播高效计算。
  2. 方法的有效性及其他相关方法
    • 该方法能使多种模型可靠地误分类输入,例如在ImageNet上对GoogLeNet的演示,以及在MNIST和CIFAR - 10测试集上对不同模型的实验,都显示了该方法的有效性(如在MNIST上使浅层softmax分类器错误率达99.9%,平均置信度79.3%;在CIFAR - 10上使卷积maxout网络错误率达87.15%,平均错误标签概率96.6%)。
    • 还发现其他简单方法如沿梯度方向小角度旋转 x x x 也能产生对抗样本。这些简单算法能生成误分类样本,支持了对抗样本源于线性的解释,同时这些算法有助于加速对抗训练或分析训练好的网络。

在这里插入图片描述
图1:在ImageNet上对GoogLeNet(Szegedy等人,2014a)应用快速生成对抗样本的演示。通过添加一个难以察觉的小向量,其元素等于成本函数相对于输入的梯度元素的符号,我们可以改变GoogLeNet对图像的分类。这里我们的 ϵ \epsilon ϵ值为0.007,对应于GoogLeNet转换为实数后8位图像编码的最小位的大小。

线性模型与权重衰减的对抗训练-Adversarial Training of Linear Models Versus Weight Decay

  1. 逻辑回归中的对抗训练与权重衰减对比
    • 以逻辑回归为例,其训练目标是对标签 y ∈ { − 1 , 1 } y\in\{-1,1\} y{1,1} 进行预测,概率为 P ( y = 1 ) = σ ( w ⊤ x + b ) P(y = 1)=\sigma(w^{\top}x + b) P(y=1)=σ(wx+b),训练通过梯度下降最小化 E x , y ∼ p d ζ ( − y ( w ⊤ x + b ) ) E_{x,y\sim p_{d}} \zeta(-y(w^{\top}x + b)) Ex,ypdζ(y(wx+b)) ζ ( z ) = log ⁡ ( 1 + exp ⁡ ( z ) ) \zeta(z)=\log(1+\exp(z)) ζ(z)=log(1+exp(z)) 为softplus函数)。
    • 对于逻辑回归,快速梯度符号法是精确的,其对抗版本是最小化 E x , y ∼ p d ζ ( y ( ϵ ∥ w ∥ 1 − w ⊤ x − b ) ) E_{x,y\sim p_{d}} \zeta(y(\epsilon\|w\|_{1}-w^{\top}x - b)) Ex,ypdζ(y(ϵw1wxb))。这与 L 1 L^{1} L1 正则化有些相似,但有重要区别, L 1 L^{1} L1 惩罚在训练时从模型激活中减去,而不是加到训练成本上,且在模型预测足够自信饱和时,惩罚可能消失;在欠拟合情况下,对抗训练可能加剧欠拟合。所以 L 1 L^{1} L1 权重衰减比对抗训练更“悲观”,因为它在模型有良好边界时不能像对抗训练那样调整。
  2. 多类softmax回归及深层网络中的情况
    • 在多类softmax回归中, L 1 L^{1} L1 权重衰减更悲观,因为它将softmax的每个输出视为独立可扰动的,而实际上通常找不到与所有类权重向量对齐的单个 η \eta η,在深层网络中这种高估扰动损害的情况更严重。因此,使用 L 1 L^{1} L1 权重衰减时,需用比特征精度 ϵ \epsilon ϵ 更小的系数,如在MNIST上训练maxout网络, ϵ = 0.25 \epsilon = 0.25 ϵ=0.25 的对抗训练效果好,但 L 1 L^{1} L1 权重衰减系数为0.0025就过大,导致模型在训练集上出错率超5%,更小系数虽能训练但无正则化效果。这表明 L 1 L^{1} L1 权重衰减因高估对抗扰动损害,在实际应用中需要谨慎选择系数以平衡模型性能。

在这里插入图片描述
图2:应用于逻辑回归的快速梯度符号法(在此情况下它不是近似,而是在最大范数框内真正最具破坏性的对抗样本)。a) 在MNIST上训练的逻辑回归模型的权重。b) 在MNIST上训练的逻辑回归模型权重的符号。这是最优扰动。尽管模型容量低但拟合良好,人类观察者很难看出这种扰动与3和7之间的关系有任何关联。c) MNIST中的3和7。在此示例中,逻辑回归模型在3与7的区分任务上错误率为1.6%。d) 对于(\epsilon = 0.25)的逻辑回归模型的快速梯度符号对抗样本。在此类样本上,逻辑回归模型的错误率为99%。

深度网络的对抗训练-Adversarial Training Of Deep Networks

  1. 深度网络对抗训练的有效性
    • 深度网络虽因易受对抗样本攻击而受批评,但与浅层线性模型不同,深度网络至少能表示抵抗对抗扰动的函数(依据通用逼近定理,有至少一个隐藏层且隐藏单元足够多的神经网络可任意精度逼近任何函数)。不过标准监督训练未指定所选函数需抵抗对抗样本,这需在训练过程中体现。
    • 基于快速梯度符号法的对抗目标函数训练是有效的正则化方法,如 J ~ ( θ , x , y ) = α J ( θ , x , y ) + ( 1 − α ) J ( θ , x + ϵ s i g n ( ∇ x J ( θ , x , y ) ) ) \tilde{J}(\theta, x, y)=\alpha J(\theta, x, y)+(1 - \alpha)J(\theta, x+\epsilon sign(\nabla_{x}J(\theta, x, y))) J~(θ,x,y)=αJ(θ,x,y)+(1α)J(θ,x+ϵsign(xJ(θ,x,y)))(实验中 α = 0.5 \alpha = 0.5 α=0.5),该方法通过持续更新对抗样本,使模型能抵抗当前版本的扰动。以maxout网络为例,结合对抗训练和dropout,可将错误率从无对抗训练的0.94%降至0.84%。
  2. 对抗训练中的相关问题及解决方法
    • 训练中发现对抗训练在训练集上无法达到零错误率,解决方法是增大模型规模(每层用1600个单元而非原240个),同时结合早期停止策略(基于对抗验证集错误率),多次训练试验后,测试集错误率可达0.782%(与其他方法结果相近),且模型对对抗样本的抵抗力增强(错误率从89.4%降至17.9%),但误分类时预测仍高度自信(平均置信度81.4%),同时模型权重变得更局部化和可解释。
  3. 不同扰动方式及层的比较
    • 比较了不同的扰动方式(如基于快速梯度符号法的扰动、旋转或添加缩放梯度的扰动)和扰动层(输入层或隐藏层)的效果。发现基于快速梯度符号法的扰动,对激活无界的隐藏单元网络,扰动输入层效果更好;对饱和模型(如Rust模型),扰动输入层和隐藏层效果相当;旋转隐藏层的扰动可解决无界激活增长问题,但正则化效果不如输入层的加法扰动。还指出对抗训练在模型有能力学习抵抗对抗样本时才有用,对最后一层(线性 - sigmoid或线性 - softmax层)应用对抗扰动可能导致欠拟合,实验中最佳结果不涉及对最后隐藏层的扰动。
  4. 与其他正则化方法对比
    • 对抗训练可视为在噪声输入中进行困难样本挖掘,而添加零均值零协方差噪声(如在 ϵ \epsilon ϵ 最大范数框内训练或采样)在防止对抗样本方面效率低下,因为噪声在很多情况下无影响甚至降低目标函数值。实验中用随机添加 ± ϵ \pm\epsilon ±ϵ U ( − ϵ , ϵ ) U(-\epsilon, \epsilon) U(ϵ,ϵ) 噪声训练maxout网络,在面对快速梯度符号法的对抗样本时错误率较高(分别为86.2%和90.4%),进一步证明对抗训练的有效性。同时,基于快速梯度符号法的对抗目标函数的梯度下降无法让模型预测对手对参数变化的反应,而可微的扰动过程(如旋转或添加缩放梯度)虽能考虑对手反应,但正则化效果不如快速梯度符号法。

在这里插入图片描述
图3:在MNIST上训练的maxout网络的权重可视化。每一行显示单个maxout单元的滤波器。左)未经对抗训练的模型。右)经过对抗训练的模型。

不同类型的模型容量-Different Kinds of Model Capacity

  1. 高维空间与对抗样本的关系
    • 对抗样本的存在与高维空间有关,人类直觉在理解高维空间时存在困难,因为我们生活在三维空间,难以想象小扰动在高维空间中累积产生大影响,这使得对抗样本的存在看似反直觉。
  2. 模型容量与对抗样本的关系
    • 低容量模型并不一定意味着不能做出多种自信预测,如浅层RBF网络,其形式为 p ( y = 1 ∣ x ) = exp ⁡ ( ( x − μ ) ⊤ β ( x − μ ) ) p(y = 1|x)=\exp((x - \mu)^{\top}\beta(x - \mu)) p(y=1∣x)=exp((xμ)β(xμ)),仅在 μ \mu μ 附近能自信预测正类,其他地方预测能力有限(默认预测类不存在或低置信度预测)。
    • RBF网络自然对对抗样本有一定抵抗性,在MNIST数据集上,使用快速梯度符号法生成的对抗样本( ϵ = 0.25 \epsilon = 0.25 ϵ=0.25),浅层RBF网络错误率为55.4%,但错误示例上的置信度仅为1.2%,而在干净测试示例上平均置信度为60.6%,说明它在不确定时能降低置信度。不过RBF单位对显著变换不具有不变性,导致其泛化能力差。
    • 线性单位和RBF单位可视为精度 - 召回权衡曲线上的不同点,线性单位通过对特定方向的所有输入响应实现高召回,但在不熟悉情况可能因响应过强导致低精度;RBF单位仅对空间中特定点响应实现高精度,但牺牲了召回率。受此启发,探索了含二次单元的模型(如深RBF网络),但发现用随机梯度下降训练时,具有足够二次抑制以抵抗对抗扰动的模型训练集错误率高,训练困难。

为什么对抗样本有泛化性-Why Do Adversarial Examples Generalize?

  1. 对抗样本泛化现象
    • 对抗样本的一个有趣现象是,为一个模型生成的对抗样本常被其他模型误分类,即使模型架构不同或在不相交训练集上训练,且不同模型对对抗样本的分类常一致,这一行为难以用基于极端非线性和过拟合的解释来说明,因为按这些解释,不同的过参数化非线性模型不应一致地标记分布外的点。
  2. 线性观点下的解释
    • 从线性角度看,对抗样本出现在广泛子空间中,只要扰动方向 η \eta η 与成本函数梯度的点积为正且 ϵ \epsilon ϵ 足够大,对抗样本就会出现(如图4所示,通过追踪不同 ϵ \epsilon ϵ 值,可见对抗样本在由快速梯度符号法定义的一维子空间的连续区域出现,而非精细的小区域),这解释了对抗样本的丰富性以及为何一个被一个分类器误分类的样本有较高概率被另一个分类器误分类。
  3. 模型学习相似函数导致泛化
    • 假设用当前方法训练的神经网络类似于在相同训练集上学习的线性分类器,由于机器学习算法的泛化能力,在不同训练子集上训练时能学习到近似的分类权重,这导致了对抗样本在不同模型间的稳定性,即不同模型学习到相似函数,从而使对抗样本的行为在不同模型间具有一致性。
  4. 实验验证假设
    • 通过在深度maxout网络上生成对抗样本,然后用浅层softmax网络和浅层RBF网络对这些样本分类来测试上述假设。结果发现,在maxout网络误分类的样本上,RBF网络预测maxout网络分类的准确率仅为16.0%,softmax分类器准确率为54.6%;排除两个模型都犯错的情况,softmax回归预测maxout分类的准确率为84.6%,RBF网络为54.3%,而RBF网络预测softmax回归分类的准确率为53.6%,表明RBF网络自身行为有较强线性成分,说明假设虽不能解释所有模型错误或跨模型泛化的错误,但很大一部分与线性行为是跨模型泛化的主要原因一致。

替代假设-Alternative Hypotheses

  1. 生成式训练的假设
    • 一种假设认为生成式训练可对训练过程提供更多约束,或使模型学会区分“真实”与“虚假”数据,从而仅对“真实”数据有信心。通过对MP - DBM模型(其推理过程可微且在MNIST上分类准确率达0.88%)的测试,发现该模型仍易受对抗样本影响(使用 ϵ = 0.25 \epsilon = 0.25 ϵ=0.25 时,对抗样本错误率达97.5%),这表明仅生成式训练本身不足以使模型抵抗对抗样本,虽然不排除其他形式的生成式训练可能有抵抗效果。
  2. 模型平均的假设
    • 另一种假设是单个模型虽有奇特问题,但多个模型平均可消除对抗样本的影响。为此训练了12个maxout网络的集成模型,每个网络用不同随机数种子初始化权重、生成dropout掩码和选择小批量数据进行随机梯度下降。结果发现,用 ϵ = 0.25 \epsilon = 0.25 ϵ=0.25 设计扰动整个集成模型的对抗样本时,错误率为91.1%;仅扰动集成中一个成员时,错误率降至87.9%,表明集成模型仅提供有限的对抗扰动抵抗能力,反驳了该假设。

在这里插入图片描述
图4:通过追踪不同的(\epsilon)值,我们可以看到,只要方向正确,对于几乎任何足够大的(\epsilon)值,对抗样本都会可靠地出现。正确分类仅发生在数据中(x)出现的薄流形上。(\mathbb{R}^{n})的大部分由对抗样本和垃圾类样本组成(见附录)。此图是由一个未经对抗训练的maxout网络生成的。左)当我们在单个输入示例上改变(\epsilon)时,显示10个MNIST类中每个类到softmax层的参数的图。正确类别是4。我们看到每个类的未归一化对数概率与(\epsilon)明显分段线性,并且错误分类在较宽的(\epsilon)值区域内是稳定的。此外,当我们将(\epsilon)增加到足以进入垃圾输入区域时,预测变得非常极端。右)用于生成曲线的输入(左上角 = 负(\epsilon),右下角 = 正(\epsilon),黄色框表示正确分类的输入)。

总结与讨论

  1. 主要发现总结
    • 对抗样本源于高维点积,是模型过于线性而不是非线性所致;其在不同模型间的泛化可解释为对抗扰动与模型权重向量高度对齐,且不同模型学习相似任务时学到相似函数,扰动方向比具体空间点更重要,对抗扰动在不同干净样本间具有泛化性。
    • 引入了快速生成对抗样本的方法,证明对抗训练可实现比dropout更强的正则化效果,而 L 1 L^{1} L1 权重衰减和添加噪声等简单正则化方法无法达到此效果。
    • 容易优化的模型也容易被扰动,线性模型无法抵抗对抗扰动,只有具有隐藏层(适用通用逼近定理)的结构应训练以抵抗对抗扰动;RBF网络对对抗样本有抵抗性,而训练建模输入分布的模型或集成模型对对抗样本不具抵抗力。
  2. 对模型理解与优化的启示
    • 基于梯度的优化是现代AI的主力,但对抗样本的存在表明,能解释训练数据或正确标记测试数据不意味着模型真正理解任务,其线性响应在数据分布外的点过于自信且常错误。虽然可通过对抗训练部分纠正,但也可认为当前模型家族存在固有缺陷,容易优化的代价是易被误导,这促使开发能训练行为更局部稳定模型的优化程序。
  3. 附录中的相关观察(关于垃圾类样本)
    • 垃圾类样本普遍且易生成,浅层线性模型对此不具抵抗力,RBF网络则有抵抗力。传统减少对垃圾输入脆弱性的方法是在模型中引入额外代表垃圾类的常数输出。
    • 实验表明优化算法可能过度复杂(如Nguyen等人在生成欺骗图像时),简单方法(如从高斯样本添加梯度符号步)即可找到高置信度垃圾类假阳性样本。虽然可训练模型对高斯垃圾样本零错误率,但对测试集错误率无显著降低。这表明线性部分构建的模型在处理随机输入时易出错,仅在包含训练数据的薄流形上行为合理。

附录:垃圾类样本-Rubbish Class Examples

  1. 垃圾类样本概念及传统处理方法
    • 垃圾类样本是人类认为不属于训练集中任何类别的退化输入,在多类别分类中,希望模型对这类样本输出低概率或高熵分布以避免误分类(如在单独二分类器中输出接近零概率,在多项式分布中输出高熵分布)。传统处理方法是在模型中引入额外代表垃圾类的常数输出。
  2. 不同模型对垃圾类样本的处理结果
    • 在MNIST和CIFAR - 10数据集上的实验表明,不同模型对垃圾类样本处理表现不同。例如,在MNIST上,朴素训练的maxout网络(顶部为softmax层)对高斯垃圾样本错误率达98.35%,平均置信度92.8%;将顶部改为独立sigmoid后错误率降至68%,平均置信度87.9%。在CIFAR - 10上,卷积maxout网络错误率为93.4%,平均置信度84.4%。浅层线性模型(如softmax回归模型)也有类似问题,错误率为59.8%,平均置信度70.8%。而RBF网络对垃圾类样本错误率为0%。
  3. 生成特定类欺骗图像的方法及效果
    • Nguyen等人关注生成特定类的欺骗图像,这比单纯找模型误分类为任意类的垃圾样本更难,且上述方法生成的垃圾样本在类别分布上有偏(如MNIST中maxout网络误分类多为5s,CIFAR - 10中卷积网络误分类多为青蛙)。本文提出通过向高斯样本 x x x 添加 ϵ ∇ x p ( y = i ∣ x ) \epsilon\nabla_{x}p(y = i|x) ϵxp(y=ix) 来生成分类为 i i i 类的欺骗图像,在CIFAR - 10上对不同类成功率不同(如青蛙和卡车100%成功,飞机成功率为24.7%,平均成功率75.3%),且生成特定类成功率可能随数据集类别增多而降低。实验还表明可训练maxout网络对高斯垃圾样本零错误率,但这对其干净样本分类能力无显著提升,进一步说明线性模型在处理随机输入时的问题,即仅在训练数据所在薄流形上表现合理,对随机输入易出错。

在这里插入图片描述
图5:为在CIFAR - 10上训练的卷积网络随机生成的欺骗图像。这些示例是通过从各向同性高斯分布中抽取一个样本,然后在增加“飞机”类概率的方向上采取梯度符号步骤生成的。黄色框表示成功欺骗模型使其以至少50%的置信度相信飞机存在的样本。在CIFAR - 10上,“飞机”是最难构建欺骗图像的类别,因此此图代表了成功率方面的最坏情况。

相关文章:

ICLR2015 | FGSM | 解释并利用对抗样本

Explaining and Harnessing Adversarial Examples 摘要-Abstract相关工作-Related Work对抗样本的线性解释-The Linear Explanation of Adversarial Examples非线性模型的线性扰动-Linear Pertubation of Non-Linear Models线性模型与权重衰减的对抗训练-Adversarial Training …...

Python 迭代器与生成器

Python 中的迭代器和生成器是处理集合元素的重要工具,它们在处理大量数据时特别有用,因为它们不需要一次性将所有数据加载到内存中。 迭代器(Iterator) 迭代器是一个实现了迭代器协议的对象,这意味着它有两个方法&am…...

MySQL数据库——索引结构之B+树

本文先介绍数据结构中树的演化过程,之后介绍为什么MySQL数据库选择了B树作为索引结构。 文章目录 树的演化为什么其他树结构不行?为什么不使用二叉查找树(BST)?为什么不使用平衡二叉树(AVL树)&a…...

3_TCP/IP连接三次握手与断开四次挥手

TCP/IP 通信是网络通信的基础协议,分为以下主要步骤: 1、建立连接(三次握手) 目的:保证双方建立可靠的通信连接。 过程: 1>客户端发送 SYN:客户端向服务器发送一个 SYN(同步&…...

【LC】3159. 查询数组中元素的出现位置

题目描述: 给你一个整数数组 nums ,一个整数数组 queries 和一个整数 x 。 对于每个查询 queries[i] ,你需要找到 nums 中第 queries[i] 个 x 的位置,并返回它的下标。如果数组中 x 的出现次数少于 queries[i] ,该查…...

《机器学习》——KNN算法

文章目录 KNN算法简介KNN算法——sklearnsklearn是什么?sklearn 安装sklearn 用法 KNN算法 ——距离公式KNN算法——实例分类问题完整代码——分类问题 回归问题完整代码 ——回归问题 KNN算法简介 一、KNN介绍 全称是k-nearest neighbors,通过寻找k个距…...

GAMES101:现代计算机图形学入门-作业五

作业五 这次作业给了许多脚本,我们现在可以把每个脚本的代码逐行细细分析一下。 main.cpp #include "Scene.hpp" #include "Sphere.hpp" #include "Triangle.hpp" #include "Light.hpp" #include "Renderer.hpp&quo…...

GPU 进阶笔记(二):华为昇腾 910B GPU

大家读完觉得有意义记得关注和点赞!!! 1 术语 1.1 与 NVIDIA 术语对应关系1.2 缩写2 产品与机器 2.1 GPU 产品2.2 训练机器 底座 CPU功耗操作系统2.3 性能3 实探:鲲鹏底座 8*910B GPU 主机 3.1 CPU3.2 网卡和网络3.3 GPU 信息 3.3…...

Spring AOP:this 调用当前类方法无法被拦截

问题复现 假设我们正在开发一个宿舍管理系统,这个模块包含一个负责电费充值的类 ElectricService,它含有一个充电方法 charge(): Service public class ElectricService {public void charge() throws Exception {System.out.println("E…...

K8S-LLM:用自然语言轻松操作 Kubernetes

在 Kubernetes (K8s) 的日常管理中,复杂的命令行操作常常让开发者感到头疼。无论是部署应用、管理资源还是调试问题,都需要记住大量的命令和参数。Kubernetes 作为容器编排的行业标准,其强大的功能伴随着陡峭的学习曲线和复杂的命令行操作。这…...

lua和C API库一些记录

相关头文件解释 lua.h:声明lua提供的基础函数,所有内容都有个前缀lua_; luaxlib.h:声明辅助库提供的函数,所有内容都有个前缀luaL_; lualib.h:声明了打开标准库的函数; 辅助库对…...

SpringSecurity中的过滤器链与自定义过滤器

关于 Spring Security 框架中的过滤器的使用方法,系列文章: 《SpringSecurity中的过滤器链与自定义过滤器》 《SpringSecurity使用过滤器实现图形验证码》 1、Spring Security 中的过滤器链 Spring Security 中的过滤器链(Filter Chain)是一个核心的概念,它定义了一系列过…...

Slate文档编辑器-Decorator装饰器渲染调度

Slate文档编辑器-Decorator装饰器渲染调度 在之前我们聊到了基于文档编辑器的数据结构设计,聊了聊基于slate实现的文档编辑器类型系统,那么当前我们来研究一下slate编辑器中的装饰器实现。装饰器在slate中是非常重要的实现,可以为我们方便地…...

本地Docker部署Flowise并实现远程构建LLM应用程序原型高效开发

文章目录 前言1. Docker安装Flowise2. Ubuntu安装Cpolar3. 配置Flowise公网地址4. 远程访问Flowise5. 固定Cpolar公网地址6. 固定地址访问 前言 相信很多对AI感兴趣的小伙伴都会觉得正在逐渐流行的工作流自动化和AI集成特别酷炫,没错,这些技术像“秘密武…...

多点通信、流式域套接字

一、广播 1.1广播的发送端模型&#xff1a; #include<myhead.h>#define BEN_IP "192.168.191.129" #define BEN_PORT 8888#define PORT 6666int main(int argc, const char *argv[]) {int oldfd socket(AF_INET,SOCK_DGRAM,0);if(oldfd -1){perror("soc…...

vue3使用video-player实现视频播放(可拖动视频窗口、调整大小)

1.安装video-player npm install video.js videojs-player/vue --save在main.js中配置全局引入 // 导入视频播放组件 import VueVideoPlayer from videojs-player/vue import video.js/dist/video-js.cssconst app createApp(App) // 视频播放组件 app.use(VueVideoPlayer)2…...

模块化和面向接口的设计:深入理解和应用

模块化和面向接口的设计&#xff1a;深入理解和应用 在面向对象编程中&#xff0c;模块化 和 面向接口设计 是两种非常重要的编程理念。它们能帮助开发人员构建更加清晰、可维护和易于扩展的系统。接下来&#xff0c;我们将详细解释这两种设计思想&#xff0c;并结合 Python 中…...

《SwiftUI 实现点击按钮播放 MP3 音频》

功能介绍 点击按钮时&#xff0c;应用会播放名为 yinpin.mp3 的音频文件。使用 AVAudioPlayer 来加载和播放音频。 关键点&#xff1a; 按钮触发&#xff1a;点击按钮会调用 playAudio() 播放音频。音频加载&#xff1a;通过 Bundle.main.url(forResource:) 加载音频文件。播…...

微机接口课设——基于Proteus和8086的打地鼠设计(8255、8253、8259)Proteus中Unknown 1-byte opcode / Unknown 2-byte opcode错误

原理图设计 汇编代码 ; I/O 端口地址定义 IOY0 EQU 0600H IOY1 EQU 0640H IOY2 EQU 0680HMY8255_A EQU IOY000H*2 ; 8255 A 口端口地址 MY8255_B EQU IOY001H*2 ; 8255 B 口端口地址 MY8255_C EQU IOY002H*2 ; 8255 C 口端口地址 MY8255_MODE EQU IOY003H*2 ; …...

MySQL如何执行.sql 文件:详细教学指南

在使用MySQL数据库过程中&#xff0c;我们经常需要执行包含SQL语句的.sql文件。这些文件通常用于数据库的备份和恢复或批量执行SQL脚本。本文将详细介绍如何在不同环境下执行MySQL的.sql文件。 前置准备 在开始之前&#xff0c;请确保以下条件已经满足&#xff1a; 已经安装…...

非周期性脑活动的动态重构支持癫痫患者的认知功能:一种神经指纹识别方法

摘要 颞叶癫痫(TLE)的特征是大脑活动模式发生大规模的变化&#xff0c;并且这种变化与患者的认知功能受损密切相关。本研究旨在使用神经指纹方法分析大脑活动的动态重构&#xff0c;以描绘TLE患者的个体特征及其认知功能相关性。本研究收集了68名TLE患者和34名对照组的10min静息…...

ZYNQ初识6(zynq_7010)clock时钟IP核

基于板子的PL端无时钟晶振&#xff0c;需要从PS端借用clock1&#xff08;50M&#xff09;晶振 接下去是自定义clock的IP核封装&#xff0c;为后续的simulation可以正常仿真波形&#xff0c;需要注意顶层文件的设置&#xff0c;需要将自定义的IP核对应的.v文件设置为顶层文件&a…...

使用MFC编写一个paddleclas预测软件

目录 写作目的 环境准备 下载编译环境 解压预编译库 准备训练文件 模型文件 图像文件 路径整理 准备预测代码 创建预测应用 新建mfc应用 拷贝文档 配置环境 界面布局 添加回cpp文件 修改函数 报错1解决 报错2未解决 修改infer代码 修改MFCPaddleClasDlg.cp…...

SAP SD BP名称和销售订单描述的对应不起来的问题

问题 VBPA-ADRNR地址 和 KNA1-ADRNR 指向同一个号码 销售订单读取这个地址 改正后恢复正常 原因&#xff1a;推测 应该是创建Y0 电商客户的时候&#xff0c;引起锁和混乱导致的。 具体实际时什么样&#xff0c;不太清楚 写于20241230 浙江台州...

FlastOcc-网络复现-1.环境配置及问题

研究OCC网络 1.RuntimeError: Ninja is required to load C extensions RuntimeError: Ninja is required to load C extensions #32 Ninja is required to load C extensions File “/FlashOCC/projects/mmdet3d_plugin/core/evaluation/ray_metrics.py”, line 12, in dvr …...

Go语言中值接收者和指针接收者的区别?

在 Go 语言中&#xff0c;值接收者和指针接收者是方法定义中的两种接收者类型。它们的主要区别在于方法调用时的行为、接收者是否可以被修改&#xff0c;以及性能上的差异。 值接收者 定义 值接收者的方法接收的是调用对象的一个副本&#xff0c;方法内部对该副本的修改不会影…...

kafka小实站

需要先在前面的文章里面照着下载好kafka&#xff0c;并且启动 先启动zookeeper 项目目录 package kafka; import lombok.extern.slf4j.Slf4j; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.springframework.kafka.annotation.KafkaListener; import…...

基于Python实现车辆检测、机动车检测、识别位置标记、计数

目录 引言背景与应用场景车辆检测的研究意义相关工作车辆检测概述机动车检测方法分类基于传统计算机视觉的检测方法基于深度学习的检测方法技术与方法车辆检测技术概述基于Python的车辆检测方法图像处理与特征提取深度学习方法(如YOLO、SSD、Faster R-CNN等)数据集与标注常用…...

心理学硕士

心理学硕士的主要研究方向包括基础心理学、发展心理学和应用心理学‌。 基础心理学研究一般的心理现象与规律&#xff0c;如心理的实质及神经机制、感觉与知觉、意识与注意、学习与记忆、思维与语言、情绪与意识、人格等‌。发展心理学研究人类个体心理发生发展的特点和规律&a…...

python量化分析学习与实践1:API接口篇

业内比较流行的几款API数据接口&#xff0c;有聚宽、TuShare&#xff0c;yfinance&#xff0c;以及pandas的pandas_datareader等。国内的一般都需要用户认证&#xff0c;才能下载数据。国外的yfinance与pandas_datareader等则不需要&#xff0c;但需要科学上网。 聚宽 测试下…...