对抗训练-smart 论文阅读笔记

SMART: 通用对抗式训练 背景 纯粹的微调下,由于目标函数设置过于简单,神经网络很容易急不可耐地收敛到最近的局部最优点。这些最优点不仅并非全局最优点,同时不抗攻击。只要在模型输入上稍加扰动,输出的概率分布便会产生大幅度的偏移。为此,一些研究潜心于此,希望能让神经网络学习到的映射能力更为 平滑,从而进一步地提高 泛化能力。如果你对深度学习有一定深入的了解,对于这一点一定不陌生。 这些研究里最为经典的当属 VAE (变分自编码器),通过 reparameterization,将噪声结合到模型前馈的中间流程,基于不变的输入和输出,提高中间 阅读详情

对抗训练-smart 论文阅读笔记

SMART: Robust and Efficient Fine-Tuning for Pre-trained NaturalLanguage Models through Principled Regularized Optimization


  • 论文地址 :https://arxiv.org/abs/1911.03437
  • code地址 : Fine-tuning code and models
  • 时间 : 2020-10
  • 机构 : microsoft,gatech
  • 关键词: 对抗训练 NLP BERT
  • 效果评估:(2020-10) pro-posed framework achieves new state-of-the-artperformance on a number of NLP tasks includ-ing GLUE, SNLI, SciTail and ANLI. More-over, it also outperforms the state-of-the-art T5model, which is the largest pre-trained modelcontaining 11 billion parameters, on GLUE

简介

文中作者提出了一个新的框架SMART,用于对预先训练好的语言模型进行微调时 增加其鲁棒性,关键点有两处:

  1. Smoothness-Inducing Adversarial Regularization
  2. Bregman Proximal Point Optimization

Smoothness-Inducing Adversarial Regularization

模型: f ( ⋅ ; θ ) f(\cdot;\theta) f(⋅;θ)
数据个数: n n n
数据: { ( x i , y i ) } i = 1 n \{(x_i,y_i)\}_{i=1}^n {(xi​,yi​)}i=1n​
\qquad x i x_i xi​表示输入语句的embedding,可以从模型的第一个embedding层获取到。
\qquad y i y_i yi​表示对应的label
文中主要是在fine-tuning时优化的下面的函数:
m i n θ F ( θ ) = L ( θ ) + λ s R ( θ ) (1) min_\theta\mathcal{F}(\theta)=\mathcal{L}(\theta) + \lambda_s\mathcal{R}(\theta) \tag1 minθ​F(θ)=L(θ)+λs​R(θ)(1)
这里:
\qquad L ( θ ) \mathcal{L}(\theta) L(θ) 是整体的loss: L = 1 n ∑ i = 1 n l ( f ( x i ; θ ) , y i ) \mathcal{L} = \frac{1}{n}\sum_{i=1}^{n} \mathcal{l}(f(x_i;\theta),y_i) L=n1​∑i=1n​l(f(xi​;θ),yi​), 其 中 l ( ⋅ , ⋅ ) 其中\mathcal{l}(\cdot,\cdot) 其中l(⋅,⋅) 是损失函数由具体的任务决定;
\qquad λ s > 0 \lambda_s > 0 λs​>0是一个可调的参数;
R s ( θ ) \qquad\mathcal{R}_s(\theta) Rs​(θ)就是 smoothness-inducing adversarial regularizer,具体如下:
R ( θ ) = 1 n ∑ i = 1 n m a x ∥ x i ~ − x i ∥ p ≤ ϵ l s ( f ( x i ~ ; θ ) , f ( x i ; θ ) ) \mathcal{R}(\theta)=\frac{1}{n}\sum_{i=1}^{n}max_{\rVert{\tilde{x_i}-x_i}\rVert_{\mathcal{p}}\le\epsilon}\mathcal{l_s}(f(\tilde{x_i};\theta),f(x_i;\theta)) R(θ)=n1​i=1∑n​max∥xi​~​−xi​∥p​≤ϵ​ls​(f(xi​~​;θ),f(xi​;θ))
\qquad\qquad 其中 ϵ > 0 \epsilon>0 ϵ>0是一个可调的参数,比如在一个分类任务中模型 f ( ⋅ ; θ ) f(\cdot;\theta) f(⋅;θ)输出概率分布, l s \mathcal{l_s} ls​可以选择为对称KL-散度如:
l s ( P , Q ) = D K L ( P ∥ Q ) + D K L ( Q ∥ P ) \mathcal{l_s}(P,Q) = \mathcal{D}_{KL}(P\rVert Q) + \mathcal{D}_{KL}(Q\rVert P) ls​(P,Q)=DKL​(P∥Q)+DKL​(Q∥P)
\qquad\qquad 在一个回归任务中,模型 f ( ⋅ ; θ ) f(\cdot;\theta) f(⋅;θ)输出一个值, l s \mathcal{l_s} ls​可以选择为方差损失如: l s ( p , q ) = ( p − q ) 2 \mathcal{l_s}(p,q)=(p-q)^2 ls​(p,q)=(p−q)2.这样就将 R ( θ ) \mathcal{R}(\theta) R(θ)的计算转为一个求最大值的问题,并且通过映射到梯度上升中被有效解决。

作者又介绍了这个smoothness-inducing adversarial regularizer 本质是用来衡量 f f f在度量函数 l s l_s ls​下的局部利普希茨连续条件性,更谨慎的说是当我们给一个小的干扰( l p l_p lp​ 范数小于 ϵ \epsilon ϵ)到 x i x_i xi​时, f f f的输出不会有太大变化。简而言之:smoothness-inducing adversarial regularizer 就 是 在 一 定 扰 动 范 围 内 要 求 模 型 输 出 尽 可 能 一 致 的 概 率 分 布 [ 2 ] 就是在一定扰动范围内要求模型输出尽可能一致的概率分布^{[2]} 就是在一定扰动范围内要求模型输出尽可能一致的概率分布[2] 因此通过对公式(1)求最小值来达到 使 f f f对于 所有 x i x_i xi​的领域输出更平滑,这样一个平滑引导对解决数据量比较缺乏的的目标任务的过拟合问题与提升泛化能力有特别的帮助。如下面插图所示:
图1: (a)(b)分别是没有使用smoothness-indusing adversarial regularization 和使用 学习到的决策边界,b图中红色的虚线表示a中的决策边界,正如我们所看到的,b中的输出在训练数据点的周围输出并没有太大改变

图1: (a)(b)分别是没有使用smoothness-indusing adversarial regularization 和使用 学习到的决策边界,b图中红色的虚线表示a中的决策边界,正如我们所看到的,b中 f f f的输出在训练数据点的周围输出并没有太大改变。

\qquad 作者指出衡量局部的lipschitz连续性的想法类似于可以追溯到1960年代的有关稳健统计文献中的局部偏移敏感度准则。这个准则被用于衡量一个估计值对样本点中某一个值的依赖性。

Bregman Proximal Point Optimization

作者提出了一个类似于Bregman 近似点优化的方法来解决公式(1),这个优化方法采用对每次迭代都施加较大的惩罚。具体来说,我们使用一个预训练的模型作为初始化,用 f ( ⋅ ; θ 0 ) f(\cdot;\theta_0) f(⋅;θ0​)表示,在第 ( t + 1 ) (t+1) (t+1) 次迭代, v a n i l l a B r e g m a n p r o x i m a l p o i n t ( V B P P ) vanilla Bregman proximal point(VBPP) vanillaBregmanproximalpoint(VBPP) 方法使用:
θ t + 1 = a r g m i n θ F ( θ ) + μ D B r e g ( θ , θ t ) , (2) \theta_{t+1} = argmin_\theta\mathcal F(\theta) + \mu\mathcal D_{Breg}(\theta,\theta_t), \tag 2 θt+1​=argminθ​F(θ)+μDBreg​(θ,θt​),(2)

这里 μ > 0 \mu > 0 μ>0是一个可调的参数, D B r e g ( ⋅ , ⋅ ) \mathcal D_{Breg}(\cdot,\cdot) DBreg​(⋅,⋅) 是Bregman divergence [ 4 ] ^{[4]} [4](布雷格曼散度),定义如下:
D B r e g ( θ , θ t ) = 1 n ∑ i = 1 n l s ( f ( x i ; θ ) , f ( x i ; θ t ) ) , \mathcal D_{Breg}(\theta,\theta_t)=\frac{1}{n}\sum_{i=1}^n\mathcal l_s(f(x_i;\theta),f(x_i;\theta_t)), DBreg​(θ,θt​)=n1​i=1∑n​ls​(f(xi​;θ),f(xi​;θt​)),
l s l_s ls​已在上节定义,可以看出当 μ \mu μ比较大的时候,在VBPP 方法的每一轮迭代时, 布雷格曼散度本质上是一个强大的正则化器,可以防止 θ t + 1 \theta_{t+1} θt+1​ 与之前迭代的 θ t \theta_t θt​相差太大。这种方法在现有的优化相关的文献中被称为信任区域类型的迭代。因此Bregman近似点法可以有效的保留预训练模型中的使用的预训练数据里的知识。由于对于VBPP每个子问题(2) 并不允许一个封闭式的解决方案,因此需要使用类似于随机梯度下降类型的算法解决如(adam).作者指出不需要每一步都解决每个子问题,除非到最后收敛时。少量的迭代足以输出可靠的初始解决方案来解决下一个子问题。(这句话不太明白)
此外,布雷格曼近似点方法能够适应机器学习模型的信息几何学,并且与标准近似点方法(如 D B r e g ( θ , θ t ) = ∥ θ − θ t ∥ 2 2 \mathcal D_{Breg}(\theta,\theta_t) =\rVert \theta -\theta_t\rVert_2^2 DBreg​(θ,θt​)=∥θ−θt​∥22​)相比在很多应用场景下具有更好的计算性能。

Acceleration by Momentum(动量加速)

与现有的文献中的其他优化方法类似,作者也通过加入额外的动量到更新过程中来加速Bregman 近点方法。具体来说,在第 ( t + 1 ) (t+1) (t+1)此迭代中,动量布雷格曼近似点(MBPP) 使用:
θ t + 1 = a r g m i n θ F ( θ ) + μ D B r e g ( θ , θ t ~ ) , (3) \theta_{t+1} = argmin_{\theta}\mathcal F(\theta) + \mu \mathcal D_{Breg}(\theta,\tilde{\theta_t}), \tag 3 θt+1​=argminθ​F(θ)+μDBreg​(θ,θt​~​),(3)
这里 θ t ~ = ( 1 − β ) θ t + β θ t − 1 ~ \tilde{\theta_t}=(1-\beta)\theta_t+\beta\tilde{\theta_{t-1}} θt​~​=(1−β)θt​+βθt−1​~​ 是指数移动平均, β ∈ ( 0 , 1 ) \beta \in (0,1) β∈(0,1) 是动量参数。MBPP方法在已知的文献中也被称为“Mean Teacher” 方法,并且也在一些流行的半监督学习的基准上取得了sota的效果。 为方便起见,作者总结MBPP方法为如下的 A l g o r i t h m − 1 Algorithm-1 Algorithm−1:

在这里插入图片描述

翻译一下

算法SMART:我们使用 p = ∞ p=\infty p=∞,smoothness-inducing adversarial regularizer(光滑诱导对抗正则化) 和 动量布雷格曼近似点法。
符号定义: 为了简单起见, g i ( x i ~ , θ s ˉ ) = 1 B ∑ x i ∈ B ∇ x ~ l s ( f ( x i ; θ ˉ s ) , f ( x ~ i ; θ ˉ s ) ) g_i(\tilde{x_i},\bar{\theta_s} )=\frac{1}{\mathcal{B}}\sum_{x_i \in \mathcal B }\nabla_{\tilde{x}}\mathcal l_s(f(x_i;\bar\theta_s),f(\tilde x_i;\bar\theta_s)) gi​(xi​~​,θs​ˉ​)=B1​∑xi​∈B​∇x~​ls​(f(xi​;θˉs​),f(x~i​;θˉs​)) ; A d a m U p d a t e B AdamUpdate_{\mathcal{B}} AdamUpdateB​ 表示ADAM 使用batchsize为 B \mathcal{B} B,在公式(3)的优化上的更新规则; ∏ A \prod_{\mathcal A} ∏A​ 表示投影到 A \mathcal A A
输入: T T T : 总共的迭代的次数, X \mathcal X X:数据集, θ 0 \theta_0 θ0​:预训练模型的参数, S S S:解决公式(2)需要的迭代步数, σ 2 \sigma^2 σ2:表示 x ~ i \tilde x_i x~i​随机初始化的方差, T x ~ T_{\tilde x} Tx~​:表示更新 x ~ i \tilde x_i x~i​迭代的次数, η \eta η:表示更新 x ~ i \tilde x_i x~i​的学习率, β \beta β:表示动量参数。
$\tilde\theta_i \leftarrow \theta_0 $
for t = 1 , . . , T t=1,..,T t=1,..,T do
θ ˉ i ← θ t − 1 \qquad \bar\theta_i \leftarrow \theta_{t-1} θˉi​←θt−1​
\qquad for s = 1 , . . , S s=1,..,S s=1,..,S do
\qquad \qquad 从数据集 X \mathcal X X中取mini-batch B \mathcal B B个样本
\qquad \qquad 对于所有的 x i ∈ B x_i \in \mathcal B xi​∈B,初始化增加扰动后的 x ~ i ← x i + v i , v i ∼ N ( 0 , σ 2 I ) \tilde x_i \leftarrow x_i + v_i,v_i\sim \mathcal N(0,\sigma^2I) x~i​←xi​+vi​,vi​∼N(0,σ2I)
\qquad\qquad for m = 1 , . . , T x ~ m = 1,..,T_{\tilde x} m=1,..,Tx~​ do
g i ← g i ( x i ~ , θ s ˉ ) ∥ g i ( x i ~ , θ s ˉ ) ∥ ∞ \qquad\qquad\qquad g_i \leftarrow \frac{g_i(\tilde{x_i},\bar{\theta_s} )}{\rVert g_i(\tilde{x_i},\bar{\theta_s} )\rVert_\infty} gi​←∥gi​(xi​~​,θs​ˉ​)∥∞​gi​(xi​~​,θs​ˉ​)​
x ~ i ← ∏ ∥ x ~ i − x ∥ ∞ ≤ ϵ ( x ~ i + η g ~ i ) \qquad\qquad\qquad \tilde x_i \leftarrow \prod_{\rVert \tilde x_i -x \rVert_\infty}\le \epsilon(\tilde x_i + \eta\tilde g_i) x~i​←∏∥x~i​−x∥∞​​≤ϵ(x~i​+ηg~​i​)
\qquad\qquad end for
θ ˉ s + 1 ← A d a m U p d a t e B ( θ ˉ s ) \qquad\qquad\bar\theta_s+1 \leftarrow AdamUpdate_{\mathcal{B}}(\bar\theta_s) θˉs​+1←AdamUpdateB​(θˉs​)
θ t ← θ ˉ S \qquad\theta_t \leftarrow \bar\theta_S θt​←θˉS​
θ t + 1 ← ( 1 − β ) θ ˉ S + β θ ~ t \qquad\theta_{t+1} \leftarrow (1-\beta)\bar\theta_S+\beta\tilde\theta_t θt+1​←(1−β)θˉS​+βθ~t​

end for
δ \delta δ

后面是实验时使用的各种参数与配置,就不再描述了,下面结合下源码分析下作者是如何实现上面两个步骤的。

总结

文中通过两种方法来提高微调的结果:
1、训练过程中加入对embded的随机扰动,要求模型输出尽可能与扰动前一致的概率分布。
2、在模型参数更新时,修改Adam的结果,要求尽可能参数与预训练时的参数分布相近。尽可能少改变。。

源码分析

作者源代码如下:
https://github.com/namisan/mt-dnn/blob/471f717a25ab744e710591274c3ec098f5f4d0ad/mt_dnn/perturbation.py

from copy import deepcopy
import torch
import logging
import random
from torch.nn import Parameter
from functools import wraps
import torch.nn.functional as F
from data_utils.task_def import TaskType
from data_utils.task_def import EncoderModelType
from .loss import stable_kl 

logger = logging.getLogger(__name__)

def generate_noise(embed, mask, epsilon=1e-5):
	#生成与embed 同尺寸方差为epsion的符合正态分布的noise
    noise = embed.data.new(embed.size()).normal_(0, 1) *  epsilon
    noise.detach()
    noise.requires_grad_()
    return noise


class SmartPerturbation():
    def __init__(self,
                 epsilon=1e-6,
                 multi_gpu_on=False,
                 step_size=1e-3,
                 noise_var=1e-5,
                 norm_p='inf',
                 k=1,
                 fp16=False,
                 encoder_type=EncoderModelType.BERT,
                 loss_map=[],
                 norm_level=0):
        super(SmartPerturbation, self).__init__()
        self.epsilon = epsilon 
        # eta 更新扰动后的x_i的学习率
        self.step_size = step_size
        self.multi_gpu_on = multi_gpu_on
        self.fp16 = fp16
        self.K = k
        # sigma 生成扰动噪音的方差
        self.noise_var = noise_var 
        self.norm_p = norm_p
        self.encoder_type = encoder_type 
        self.loss_map = loss_map 
        self.norm_level = norm_level > 0
        assert len(loss_map) > 0


    def _norm_grad(self, grad, eff_grad=None, sentence_level=False):
    	# 计算梯度 以及 有效梯度的 方向
        if self.norm_p == 'l2':
            if sentence_level:
                direction = grad / (torch.norm(grad, dim=(-2, -1), keepdim=True) + self.epsilon)
            else:
                direction = grad / (torch.norm(grad, dim=-1, keepdim=True) + self.epsilon)
        elif self.norm_p == 'l1':
            direction = grad.sign()
        else:
            if sentence_level:
                direction = grad / (grad.abs().max((-2, -1), keepdim=True)[0] + self.epsilon)
            else:
                direction = grad / (grad.abs().max(-1, keepdim=True)[0] + self.epsilon)
                eff_direction = eff_grad / (grad.abs().max(-1, keepdim=True)[0] + self.epsilon)
        return direction, eff_direction

    def forward(self, model,
                logits,
                input_ids,
                token_type_ids,
                attention_mask,
                premise_mask=None,
                hyp_mask=None,
                task_id=0,
                task_type=TaskType.Classification,
                pairwise=1):
        # adv training
        assert task_type in set([TaskType.Classification, TaskType.Ranking, TaskType.Regression]), 'Donot support {} yet'.format(task_type)
        vat_args = [input_ids, token_type_ids, attention_mask, premise_mask, hyp_mask, task_id, 1] 

        # init delta
        # 输出 embded 
        embed = model(*vat_args)
        noise = generate_noise(embed, attention_mask, epsilon=self.noise_var)
        for step in range(0, self.K):
            vat_args = [input_ids, token_type_ids, attention_mask, premise_mask, hyp_mask, task_id, 2, embed + noise]
            # 使用加入噪音的embed 输出预测结果
            adv_logits = model(*vat_args)
            if task_type == TaskType.Regression:
            	# 回归问题使用 mse loss 评估与原始embedded输出的差异
                adv_loss = F.mse_loss(adv_logits, logits.detach(), reduction='sum')
            else:
                if task_type == TaskType.Ranking:
                    adv_logits = adv_logits.view(-1, pairwise)
                # 排序或者分类使用kl散度衡量两者之间的差异
                adv_loss = stable_kl(adv_logits, logits.detach(), reduce=False) 
            #  分布损失与 扰动之间的梯度
            delta_grad, = torch.autograd.grad(adv_loss, noise, only_inputs=True, retain_graph=False)
            # 梯度的范数
            norm = delta_grad.norm()
            if (torch.isnan(norm) or torch.isinf(norm)):
                return 0
            # 更新到主要训练过程中的梯度 为扰动与原始输出差异损失对扰动求出的梯度 乘以 扰动的学习率
            eff_delta_grad = delta_grad * self.step_size
            # 
            delta_grad = noise + delta_grad * self.step_size
            noise, eff_noise = self._norm_grad(delta_grad, eff_grad=eff_delta_grad, sentence_level=self.norm_level)
            noise = noise.detach()
            noise.requires_grad_()
        vat_args = [input_ids, token_type_ids, attention_mask, premise_mask, hyp_mask, task_id, 2, embed + noise]
        adv_logits = model(*vat_args)
        if task_type == TaskType.Ranking:
            adv_logits = adv_logits.view(-1, pairwise)
        adv_lc = self.loss_map[task_id]
        adv_loss = adv_lc(logits, adv_logits, ignore_index=-1)
        return adv_loss, embed.detach().abs().mean(), eff_noise.detach().abs().mean()

(备注) 暂时没有看到作者源码中有关于bregman divergence 与optimizer相结合的源码实现。

只有smart 扰动

参考文献

[1]SMART: Robust and Efficient Fine-Tuning for Pre-trained Natural Language Models through Principled Regularized Optimization
[2]SMART: 通用对抗式训练
[3]百度百科:lipschitz条件
[4]维基百科:Bregman divergence
[5]smart pytorch 代码
[6]Improving BERT Fine-Tuning via Self-Ensemble and Self-Distillation

SMART: Robust and Efficient Fine-Tuning for Pre-trained Natural Language Models 近年来,随着Transformer的出现,NLP领域的重心逐渐向迁移学习转变,也出现了BERT、GPT2等基于非监督学习的大型模型,有很多文章关注如何对其进行有效的预训练,但如何针对下游任务进行微调也是很值得研究的问题。本文介绍一篇2019年底的文章,《SMART: Robust and Efficient Fine-Tuning for Pre-trained Natural Language ... 阅读详情

相关推荐

【综述】NLP 对抗训练(FGM、PGD、FreeAT、YOPO、FreeLB、SMART)

在对抗训练中关键的是需要找到对抗样本,通常是对原始的输入添加一定的扰动来构造,然后放给模型训练,这样模型就有了识别对抗样本的能力。其中的关键技术在于如果构造扰动,使得模型在不同的攻击样本中均能够具备较强的识别性 对抗训练,简单来说,就是在原始输入样本 xxx 上加上一个扰动 radvr_{adv}radv​​(在下文中有时记为 δ\deltaδ),得到对抗样本后,用其进行训练。2018 年 Madry 针对对抗学习定义了一个 Min-Max 的公式1,即 minθE(x,y)∼D[maxradv∈S&nbs

Aries_young的博客 6491

NLP中的对抗训练

NLP中的对抗训练 FGM PGD FreeLB SMART import torch class FGM(): ''' Example # 初始化 fgm = FGM(model,epsilon=1,emb_name='word_embeddings.') for batch_input, batch_label in data: # 正常训练 loss = model(batch_input, batch_label)

HUSTHY的博客 8024

对抗学习总结:FGSM->FGM->PGD->FreeAT, YOPO ->FreeLb->SMART->LookAhead->VAT

对抗训练基本思想——Min-Max公式 中括号里的含义为我们要找到一组在样本空间内、使Loss最大的的对抗样本(该对抗样本由原样本x和经过某种手段得到的扰动项r_adv共同组合得到)。这样一组样本组成的对抗样本集,它们所体现出的数据分布,就是该中括号中所体现的。 外层min()函数指的则是,我们面对这种数据分布的样本集,要通过对模型参数的更新,使模型在该对抗样本集上的期望loss最小 对抗训练的核心步骤是: 用被对抗性样本污染过的训练样本来训练模型,直到模型能学习到如此类型的抵抗。从而保证模型的安全.

weixin_36378508的博客 1万+

[论文阅读]Large Language Models Are Reasoning Teachers

最近的研究表明,思维链(CoT)提示可以诱导语言模型逐步解决复杂的推理任务。然而,基于提示的 CoT 方法依赖于非常大的模型,如 GPT-3 175B,这对于大规模部署来说是难以承受的。在本文中,我们利用这些大型模型作为推理教师,在较小的模型中实现复杂推理,并将对模型大小的要求降低几个数量级。我们提出了 Fine-tune-CoT,这是一种从超大型教师模型中生成推理样本来微调较小模型的方法。我们在广泛的公共模型和复杂任务中对我们的方法进行了评估。

m0_52911108的博客 1389

【论文阅读】AdvSCanner: Generating Adversarial Smart Contracts to Exploit Reentrancy Vulnerabilities Using

作者首先通过静态分析工具识别智能合约中的漏洞,尤其是重入漏洞(Reentrancy Vulnerability)。这些工具可以提取与漏洞相关的函数和调用流信息。例如,Slither工具可以标记出修改外部调用变量状态的函数,如“withdrawAll()”。这些函数被称为“可利用函数”(utilizable functions),但并不是所有被标记的函数都容易受到重入攻击。因此,需要进一步分析以确定哪些函数确实存在这种风险。

网络空间安全|人工智能|计算机科学 1257

【网安AIGC专题】46篇前沿代码大模型论文、24篇论文阅读笔记汇总_大模型在代码缺陷检测领域的应用实践

网络安全专题是针对当前热点安全问题进行研讨,通常分成四类热门主题进行介绍和研讨,包括的热门主题有:攻击行为与漏洞分析,分享最新的攻防进展;下一代网络安全,分享物联网、工控网络等相关协议安全、网络防御等技术;动态行为分析,分享内存相关安全以及动态污点技术等;人工智能安全,分享人工智能,人工智能安全应用,以及联邦学习安全等最新知识。围绕着几个热门主题,在最近五年的信息安全顶尖会议上挑选一些代表性论文,组织学生研讨,启发他们理解最新成果,并发现最新成果的不足,从而达到培养创新能力的目的;

2401_84972930的博客 1027

ARIS 实战指南:用纯 Markdown 技能构建跨模型对抗式自主科研流水线

> 本文基于 ARIS(Auto-Research-In-Sleep)开源仓库的 README 与源码,系统讲解这套"纯 Markdown 技能层 + 跨模型对抗式评审 + 研究全生命周期自动化"方案的设计理念、安装配置、核心工作流与深度定制方式。读完你将掌握:如何在 Claude Code / Codex CLI / Cursor / Trae / Copilot CLI 等任意 LLM Age

gitblog_01197的博客 637

告别命令行恐惧!用TBtools的MCScanX插件,5分钟搞定拟南芥和水稻的基因组共线性分析

本文介绍如何利用TBtools的MCScanX插件快速完成拟南芥和水稻的基因组共线性分析,无需命令行操作,5分钟即可生成专业可视化结果。通过图形化界面简化传统MCScanX的复杂流程,特别适合非生物信息背景的研究者,显著提升基因组数据分析效率。

dianzhuique8587的博客 377

SMART: Robust and Efficient Fine-Tuning for Pre-trainedNatural Language Models

SMART: Robust and Efficient Fine-Tuning for Pre-trainedNatural Language Models through Principled RegularizedOptimization Smoothness-inducing Adversarial Regularization fine-tunning的优化如下 min⁡θF(θ)=L(θ)+λSRS(θ)whereL(θ)=1n∑i=1nℓ(f(xi;θ),yi)(损失函数) \min_{\the

Facico的博客 631

汇川伺服Modbus-RTU通讯实战:从帧结构解析到西门子PLC配置

本文详细解析了汇川伺服与西门子PLC通过Modbus-RTU协议进行通讯的实战步骤,包括帧结构解析、硬件连接、参数设置及PLC程序配置。通过具体案例和常见问题排查指南,帮助工程师快速掌握工业自动化中的通讯技术,提升设备调试效率。

weixin_33670713的博客 453

手把手复现金蝶云星空V8.1文件上传漏洞(附完整POC与修复方案)

本文深度解析金蝶云星空V8.1文件上传漏洞,提供详细的漏洞复现步骤与完整POC,涵盖技术原理、测试环境搭建及验证流程。同时给出多维防护方案,包括官方补丁部署、临时缓解措施和长期安全加固建议,帮助企业有效防范任意文件上传风险。

weixin_30505225的博客 179

一文搞懂NLP中的对抗训练

本文主要串烧了FGSM, FGM, PGD, FreeAT, YOPO, FreeLB, SMART这几种对抗训练方法,希望能使各位大佬炼出的丹药更加圆润有光泽,一颗永流传来自:NLPC...

zenRRan的博客 2258

Vivado与VCS+Verdi联合仿真环境搭建全攻略

本文详细介绍了如何搭建Vivado与VCS+Verdi联合仿真环境,旨在解决Vivado Simulator在大型FPGA验证中速度慢、调试弱的问题。通过指导工具版本配对、环境变量设置、关键参数配置及Xilinx仿真库编译,帮助工程师高效整合Vivado的设计管理、VCS的高速仿真与Verdi的深度调试能力,从而显著提升验证效率。

weixin_29219189的博客 576

对抗学习在NLP中的应用

本文主要串烧了FGSM, FGM, PGD, FreeAT, YOPO, FreeLB, SMART这几种对抗训练方法,希望能使各位大佬炼出的丹药更加圆润有光泽,一颗永流传 简介 对抗训练是一种引入噪声的训练方式,可以对参数进行正则化,提升模型鲁棒性和泛化能力。 对抗训练的假设是:给输入加上扰动之后,输出分布和原Y的分布一致 有监督的数据下使用交叉熵作为损失: −logp(y∣x+radv;θ...

夕小瑶科技说 1973

6.5 构网型储能系统的协同控制策略

本文系统阐述了构网型储能系统的协同控制策略,重点分析了多机组群协同运行面临的功率分配不均、动态响应失配等挑战。研究提出了改进型下垂控制与虚拟阻抗法、基于一致性算法的分布式协同控制等解决方案,探讨了构网型储能与同步发电机在惯性响应、一次调频等方面的协同机制,以及与跟网型电源在电压支撑、阻抗重塑等方面的互补作用。文章构建了分层控制架构,为实现多类型电源的全局优化运行提供了技术路径,对提升高比例新能源电力系统的稳定性具有重要意义。

技术工作者 1000

IEC103协议实战指南:报文解析与传输优化策略

本文深入解析IEC103协议在电力自动化系统中的核心应用,重点拆解其固定帧与可变帧两种报文格式,并详细阐述了主从问答与非平衡传输机制。文章结合实战经验,针对报文解析中的常见问题(如字节序、超时重发)提供了解决方案,并探讨了传输层优化策略,旨在帮助工程师实现更可靠、高效的通信链路。

r2s3t4的博客 541

冲击SuperGLUE:基于多任务与对抗训练的Finetune方案解析

©PaperWeekly 原创 ·作者|Frank Luo单位|追一科技AI Lab研究员研究方向|自然语言处理前言英文通用语言理解评测基准 GLUE [1] 自提出以来,吸引了一大批...

Paper weekly 1995

【2026华为OD新规机考】最新套题持续更新【完全原创题解 | 详细考点分类 | 不断更新题目 | 六种主流语言Py+Java+Cpp+C+Js+Go】

可上练习华子OD、大厂真题绿色聊天软件戳od1441了解算法冲刺训练(备注【优快云】否则不通过)

weixin_48157259的博客 505

【NLP】NLP中的对抗训练

作者|王嘉宁@华师数据学院整理|NewBeeNLPhttps://blog.youkuaiyun.com/qq_36426650/article/details/122807916对抗训练本质是为了提高模型的鲁棒性,一般情况下在传统训练的基础上,添加了对抗训练是可以进一步提升效果的,在比赛打榜、调参时是非常重要的一个trick。对抗训练在CV领域内非常常用,那么在NLP领域如何使用呢?本文简单...

fengdu78的博客 1528

麒麟V10 SP1系统下编译linuxdeployqt并打包Qt 5.15.2程序完整指南

麒麟V10 SP1系统下编译linuxdeployqt并打包Qt 5.15.2程序完整指南

ChenJin_2的博客 273

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

对抗攻击算法总结论文集合(白盒、黑盒、目标检测、对抗训练等)

文章目录一、白盒攻击1.FGSM2.JSMA:3.DeepFool:4.CW:5.PGD:二、黑盒攻击1.单像素攻击2.基于查询3.基于迁移4.基于替代5.其他三、对抗攻击与目标检测四、对抗训练&鲁棒性 只是一个自己看过的论文小汇总,还不能当综述,但也包含了很多经典的对抗攻击算法,方便回顾和查询,自己看的第一篇综述是: Advances in adversarial attacks and defenses in computer vision: A survey 论文这件事,真的只能多看,上学期看

ji_meng的博客 2万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

对抗训练及其代码实现

对抗训练及其代码实现 1: fgm 对于输入X, 正常训练得到梯度,然后给X的embeddings加一个扰动获得扰动后的梯度 (扰动根据embedding的梯度计算得来),两个梯度相加更新模型。 代码实现 import torch class FGM(): def __init__(self, model): self.model = model self.backup = {} def attack(self, epsilon=1., emb_name=

weixin_42145837的博客 4144

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

对抗训练

Adversarial Training for Supervised and Semi-Supervised Learning(对抗训练在监督和半监督学习上的应用) 在对图像算法研究的过程中发现,一些机器学习方法(包括深度学习)对对抗样本非常敏感,这些对抗样本和非对抗样本非常相似,但是模型(已经在非对抗样本中训练好的模型)却会错分这些样本。为了能更好的分类该类样本,提出了对抗训练的概念,非GAN...

qingmengshuo的博客 2万+

对抗训练浅谈:意义、方法和思考(附Keras实现)

©PaperWeekly 原创 ·作者|苏剑林单位|追一科技研究方向|NLP、神经网络当前,说到深度学习中的对抗,一般会有两个含义:一个是生成对抗网络...

Paper weekly 7711

对抗样本与对抗训练

对抗样本 简单的说,就是会使得机器学习的算法产生误判的样本 在数据集中通过故意添加细微的干扰所形成的输入样本,受干扰之后的输入导致模型以高置信度给出一个错误的输出 如深度神经网络把左图看成狗,右图看成鸵鸟。 对抗训练 通过在原有的模型训练过程中注入对抗样本,从而提升模型对于微小扰动的鲁棒性 ...

hxxjxw的博客 1601

AAAI 2021 | 近期必读对抗训练精选论文

对抗训练(adversarial training)是增强神经网络鲁棒性的重要方式。在对抗训练的过程中,样本会被混合一些微小的扰动(改变很小,但是很可能造成误分类),然后使神经网络适应这种改变,从而对对抗样本具有鲁棒性。 在图像领域,采用对抗训练通常能提高鲁棒性,但是通常都会造成泛化性降低,也就是说,虽然对对抗样本的抵抗力提升了,但是有可能影响普通样本的分类能力。神奇的是,在语言模型领域却观察到不一致的结果——对抗训练既提高了鲁棒性也提高了泛化性。 1.论文名称:Amata: An Annealing M.

AI_Conf的博客 1584
上一篇: 自定义gym环境并使用RL训练--寻找宝石
下一篇: 将pytorch 模型转为 ncnn模型
Magicapprentice
博客等级 码龄12年 111粉丝 42原创
评论 11
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值