💻
QMMMS的笔记
博客
  • QMMMS的笔记
  • agent
    • MCP的背景、原理和开发
    • Agent 历史与背景
    • Agentic Workflows
    • 环境检查与基础工具
    • Tool Call
    • 工具与运行时的值
    • temp
    • 处理 Tool Call error
    • trick
  • algorithm
    • 线性结构
    • 二叉树
    • 图
    • 查找
    • 排序
    • 动态规划
    • 优化方法
    • 数学
    • 迁移至Java
  • computer_composition
    • 系统总线
    • 存储器
    • 输入输出系统
    • 计算机的运算方法
    • 指令系统
    • 补充
  • computer_network
    • 引入
    • 应用层
    • 传输层
    • 网络层(数据平面)
    • 网络层(控制平面)
    • 链路层
    • 常见问答
    • 实验
  • database
    • SQL实战
    • 关系代数
    • 数据库设计
    • 规范化
    • 数据库基本概念
    • 查询原理
    • 数据库恢复技术
    • 并发控制
  • dev_tools
    • Git
    • Nginx
    • Spring
    • LangChain
    • PyTorch Cheat Sheet
    • MyBatis
    • MySQL Cheat Sheet
    • MySQL 补充
    • Redis
    • Docker
    • RocketMQ
    • Chrome
  • linux
    • Linux基础命令与使用
    • 文件与权限
    • 文件与目录操作
    • 权限属性高级
    • 命令与文件的查找
    • 文件压缩和打包
    • vim编辑器
    • shell变量
    • 命令补充
    • 数据流重定向
    • 管道命令
    • shell脚本
    • 用户管理
    • 用户间交流
    • 计划任务
    • 进程管理
    • 软件管理
    • 认识系统服务
    • 运维常用命令
    • 常用命令
  • llm
    • 大规模语言模型概述
    • 分布式训练概述
    • 有监督微调概述
    • 强化学习与LLM
    • LLM评估概述
    • 大模型应用
    • 理解大模型
    • 量化
    • 预训练
    • 上下文学习
  • machine_learning
    • 引入
    • 大致正确学习
    • 一致收敛
    • 偏差还是过拟合?
    • 可学习的充要条件
    • 非均匀可学习性
    • 计算复杂性
  • mathematics
    • 概率与统计基础
    • 线性代数基础
  • operating_system
    • 操作系统基本概念
    • 进程和线程
    • 同步,互斥与死锁
    • 内存管理
    • 文件系统
    • I/O系统
    • 保护与安全
    • 《现代操作系统》
  • statistical_learning
    • 统计学习引入
    • 线性回归
    • 分类
    • 重抽样方法
    • 线性模型选择与正则化
    • 非线性模型
    • 基于树的方法
    • 支持向量机
    • 无指导学习
    • 马尔科夫链和蒙托卡罗方法简明理解
    • R语言速查
  • deep_learning
    • basic_concepts
      • 逻辑回归与损失函数
      • 神经网络
      • 正则化、预处理、权重初始化
      • 优化算法
      • 机器学习策略
      • 复习:从计算机视觉的角度
      • 卷积神经网络
      • 深度卷积网络示例
      • 计算机视觉任务
      • 循环神经网络
      • 自然语言处理任务
      • 注意力
      • Transformers 家族
      • 显卡扫盲
      • 强化学习概述
    • semi-supervise
      • 半监督学习简介
      • Consistency Regularization
      • Proxy-label Methods
      • Holistic Methods
      • Generative Models
      • Graph-Based SSL
      • Self-Supervision for SSL
      • Other SSL methods
  • programming
    • cpp
      • STL
      • C++基础
      • 内存管理
      • 面向对象
    • java
      • 环境和介绍
      • 注释
      • String
      • 面向对象思想
      • Object
      • 包
      • 访问权限修饰符
      • 初始化块
      • 接口
      • 内部类
      • 注解
      • 枚举
      • 集合框架
      • List
      • Map
      • 泛型
      • 迭代
      • IO与流
      • 序列化
      • 异常
      • Lambda
      • Stream流
      • Socket
      • 缓冲
      • 命名规范
      • 拆箱装箱
      • 值传递
      • 深拷贝
      • 反射
      • JVM
      • 并发编程基础
    • python
      • 并发编程
      • 环境管理
  • software_engineering
    • basic_concepts
      • 系统分析与设计概述
      • 规划
      • 需求分析与原型设计
      • 项目管理
      • 建模
      • 数据库设计
      • 架构
      • 配置管理
      • 测试管理
      • 安全
      • 编码原则
      • 微服务
      • 补充内容
    • software_testing
      • CMMI基础
      • PPQA与SQA
      • 软件测试基础
      • 黑盒测试
      • 白盒测试
      • 集成测试
      • 系统测试
      • 测开面试补充
由 GitBook 提供支持
在本页
  • Ladder Networks
  • Pi-Model
  • Temporal Ensembling
  • Mean teachers
  • Dual Students
  • Fast-SWA
  • Virtual Adversarial Training
  • Adversarial Dropout
  • Interpolation Consistency Training
  • Unsupervised Data Augmentation
在GitHub上编辑
  1. deep_learning
  2. semi-supervise

Consistency Regularization

上一页半监督学习简介下一页Proxy-label Methods

最后更新于3个月前

半监督学习的假设之一是,学习的决策边界必须位于低密度区域。换句话说,如果将扰动用于未标记的样本,则预测不应发生大变化

正式地说,通过一致性正则化 Consistency Regularization,我们倾向于选择对相似数据点给出一致预测的函数 fθf_{\theta}fθ​

正则化模型不是在输入空间的零维数据点上最小化分类成本,而是在每个数据点周围的流形上最小化成本,将决策边界推离未标记的数据点,并平滑数据所在的流形

具体来说,给定一个未标记的数据点 x∈Dux \in \mathcal{D}_ux∈Du​及其扰动版本 x^u\hat{x}_ux^u​,目标是最小化两个输出和之间的距离 d(fθ(x),fθ(x^))d(f_{\theta}(x),f_{\theta}(\hat{x}))d(fθ​(x),fθ​(x^))。常用的距离度量除了MSE,还有其他的距离,比如Kullback-Leiber divergence和JenSen-Shannon divergence

dMSE(fθ(x),fθ(x^))=1C∑k=1C(fθ(x)k−fθ(x^)k)2dKL(fθ(x),fθ(x^))=1C∑k=1Cfθ(x)klog⁡fθ(x)kfθ(x^)kdJS(fθ(x),fθ(x^))=12dKL(fθ(x),m)+12dKL(fθ(x^),m)\begin{align*} d_{\text{MSE}}(f_{\theta}(x), f_{\theta}(\hat{x}))&=\frac{1}{C}\sum_{k = 1}^{C}(f_{\theta}(x)_k - f_{\theta}(\hat{x})_k)^2\\ d_{\text{KL}}(f_{\theta}(x), f_{\theta}(\hat{x}))&=\frac{1}{C}\sum_{k = 1}^{C}f_{\theta}(x)_k \log \frac{f_{\theta}(x)_k}{f_{\theta}(\hat{x})_k}\\ d_{\text{JS}}(f_{\theta}(x), f_{\theta}(\hat{x}))&=\frac{1}{2}d_{\text{KL}}(f_{\theta}(x), m) + \frac{1}{2}d_{\text{KL}}(f_{\theta}(\hat{x}), m) \end{align*}dMSE​(fθ​(x),fθ​(x^))dKL​(fθ​(x),fθ​(x^))dJS​(fθ​(x),fθ​(x^))​=C1​k=1∑C​(fθ​(x)k​−fθ​(x^)k​)2=C1​k=1∑C​fθ​(x)k​logfθ​(x^)k​fθ​(x)k​​=21​dKL​(fθ​(x),m)+21​dKL​(fθ​(x^),m)​

其中,一共 C 种类别,m=12(fθ(x)+fθ(x^))m=\frac{1}{2}(f_{\theta}(x)+f_{\theta}(\hat{x}))m=21​(fθ​(x)+fθ​(x^))

Ladder Networks

如果需要网络对噪声不敏感,那不如训练的时候就直接加上噪声!然后把噪声项放到损失函数里面去

如图,假设神经网络是一个编码层,那么Ladder Networks就加入了解码层,编码层分成两部分:

  • 一部分是干净的编码层,x 输入后直接输出 y

  • 另一部分是 x 输入后,在批次归一化时中加入噪声,然后输出被污染后的输出 y~\tilde{y}y~​,然后 y~\tilde{y}y~​ 再进入解码层,还原出 x 在编码层中的每一个输出,能还原的越好,就说明网络编码的越好,损失也就越低

损失函数如下,Lu\mathcal{L}_uLu​ 为无监督学习损失,在所有层上计算两种激活值的MSE,λt\lambda_tλt​ 代表权重。Ls\mathcal{L}_sLs​ 代表监督损失,例如交叉熵 H(y~,t)\mathrm{H}(\tilde{y}, t)H(y~​,t),t 代表真实标签

L=Lu+Ls=1∣D∣∑x∈D∑l=0LλtdMSE(z(l),z^(l))+1∣Dl∣∑x,t∈DlH(y~,t)\begin{align*} \mathcal{L}&=\mathcal{L}_u+\mathcal{L}_s\\&=\frac{1}{|\mathcal{D}|}\sum_{x\in\mathcal{D}}\sum_{l = 0}^{L}\lambda_t d_{\text{MSE}}(z^{(l)}, \hat{z}^{(l)})+\frac{1}{|\mathcal{D}_l|}\sum_{x,t\in\mathcal{D}_l}\mathrm{H}(\tilde{y}, t) \end{align*}L​=Lu​+Ls​=∣D∣1​x∈D∑​l=0∑L​λt​dMSE​(z(l),z^(l))+∣Dl​∣1​x,t∈Dl​∑​H(y~​,t)​

这种编码结构可以在卷积神经网络中很好的应用,通常在卷积神经网络的最后一层是全连接层,正好可以通过这种方式来代替,而前面的特征提取部分则不用改动。

然而,梯形网络 Ladder Networks 的计算量相当大,大约是一次训练迭代所需的计算量的三倍。为了缓解这种情况,作者提出了一种称为 Γ 模型的梯形网络变体。当 l<Ll<Ll<L 时 λt=0\lambda_t=0λt​=0。在这种情况下,省略解码器,Lu\mathcal{L}_uLu​ 为 y 和 y~\tilde{y}y~​ 之间的 MSE

Pi-Model

dropout是一个正则化的好方法,同时,对数据进行增强(对于图像数据而言,可以有仿射变换或者裁剪)也是一个好方法。pi-model是这两个方法的一个应用

L=w1∣Du∣∑x∈DudMSE(y~1,y~2)+1∣Dl∣∑x,y∈DlH(y,f(x))\mathcal{L} = w\frac{1}{|\mathcal{D}_u|}\sum_{x\in\mathcal{D}_u}d_{\text{MSE}}(\tilde{y}_1, \tilde{y}_2) + \frac{1}{|\mathcal{D}_l|}\sum_{x,y\in\mathcal{D}_l}\mathrm{H}(y, f(x))L=w∣Du​∣1​x∈Du​∑​dMSE​(y~​1​,y~​2​)+∣Dl​∣1​x,y∈Dl​∑​H(y,f(x))

其中 w 是一个加权函数,在给定的 epoch 数(例如,训练时间的 20%)后从 0 开始增加到固定权重 λ。因为在刚开始训练时监督学习更可靠。注意在无监督训练损失中,需要计算两次,由于增强和dropout两次输出会有轻微不同,为了让模型更鲁棒,使其一致性正则化

Temporal Ensembling

如图,时间集成 Temporal Ensembling 中,目标 yemay_{\text{ema}}yema​ 是所有先前预测的聚合:

yema=αyema+(1−α)y~y_{\text{ema}} = \alpha y_{\text{ema}} + (1 - \alpha)\tilde{y}yema​=αyema​+(1−α)y~​

在训练开始时,yema=0y_{\text{ema}}=0yema​=0,需要使用类似于 Adam 优化器中使用的偏差校正技巧,校正目标 y~\tilde{y}y~​

yema=(αyema+(1−α)y~)/(1−αt)y_{\text{ema}} = (\alpha y_{\text{ema}} + (1 - \alpha)\tilde{y})/(1 - \alpha^t)yema​=(αyema​+(1−α)y~​)/(1−αt)

关于 α\alphaα ,假设值设的很大,那么新的新学到的信息需要完全被模型考虑到,需要经过很长的时间。而值设的很小,之前的信息又不会被考虑的那么充分

时间集成中的损失计算与 Pi-Model 保持一致

L=w1∣Du∣∑x∈DudMSE(y~,y^)+1∣Dl∣∑x,y∈DlH(y,f(x))\mathcal{L} = w\frac{1}{|\mathcal{D}_u|}\sum_{x\in\mathcal{D}_u}d_{\text{MSE}}(\tilde{y}, \hat{y}) + \frac{1}{|\mathcal{D}_l|}\sum_{x,y\in\mathcal{D}_l}\mathrm{H}(y, f(x))L=w∣Du​∣1​x∈Du​∑​dMSE​(y~​,y^​)+∣Dl​∣1​x,y∈Dl​∑​H(y,f(x))

总结一下,相比Pi-Model有两个重要优势:

  • 训练速度更快,因为我们只需要通过网络进行一次前向传播即可获得,从而将训练时间加快约 2 倍

  • Pi-Model在无监督训练损失中计算了两次,然后通过 MSE 一致性正则化,这样有些“随意”并且不稳定。时间集成使用所有先前预测的聚合,在训练过程中目标更加稳定,从而产生更好的结果

时间集成的缺点是需要大量内存来保存所有训练样本的预测聚合,对于大型数据集和密集任务(例如,语义分割),这可能会非常占用内存。

Mean teachers

Pi-model和时间集成模型在每一次训练中,都是“自己教自己”,如果分类错误,而且无监督的损失的权重超过了有监督的损失,那模型就会被阻止学习新的正确的信息。解决方法包括

  1. 仔细的选择噪声,而不是仅仅选择加性或乘性噪声。

  2. 仔细的选择导师模型,这个导师模型要对生成的学习目标负责,而不是简单的用学生模型来“自己教自己”。即 平均值教师 Mean teachers的思路

本质是,教师模型的权重 θ′\theta'θ′ 也做一次指数加权平均(Exponential Moving Average,EMA)

θt′=αθt−1′+(1−α)θtL=w1∣Du∣∑x∈DudMSE(fθ(x),fθ′(x))+1∣Dl∣∑x,y∈DlH(y,fθ(x))\begin{align*} \theta_t'&=\alpha\theta_{t - 1}'+(1 - \alpha)\theta_t\\ \mathcal{L}&=w\frac{1}{|\mathcal{D}_u|}\sum_{x\in\mathcal{D}_u}d_{\text{MSE}}(f_{\theta}(x), f_{\theta'}(x))+\frac{1}{|\mathcal{D}_l|}\sum_{x,y\in\mathcal{D}_l}\mathrm{H}(y, f_{\theta}(x)) \end{align*}θt′​L​=αθt−1′​+(1−α)θt​=w∣Du​∣1​x∈Du​∑​dMSE​(fθ​(x),fθ′​(x))+∣Dl​∣1​x,y∈Dl​∑​H(y,fθ​(x))​

Dual Students

Mean Teacher 的主要缺点之一是,在大量训练迭代下,教师模型的权重将收敛到学生模型的权重,并且任何有偏差和不稳定的预测都会转移到学生身上

双元制学生 Dual Students 方法中,同时训练两个具有不同初始化的学生模型,在给定的迭代中,其中一个模型为另一个模型提供目标。那么谁是老师呢?需要满足以下两个条件

  • 对于干净的x和扰动版本 x~\tilde{x}x~,做老师的那个学生需要 f(x)=f(x~)f(x)=f(\tilde{x})f(x)=f(x~)

  • 对于干净的x和扰动版本 x~\tilde{x}x~,做老师的那个学生对于预测都很自信,f(x)f(x)f(x) 和 f(x~)f(\tilde{x})f(x~) 都大于阈值 ϵ\epsilonϵ

两个学生的损失如下:

L=Ls+λ1Lu=1∣Dl∣∑x,y∈DlH(y,fθi(x))+λ11∣Du∣∑x∈DudMSE(fθi(x),fθi(x~))\mathcal{L}=\mathcal{L}_s+\lambda_1\mathcal{L}_u=\frac{1}{|\mathcal{D}_l|}\sum_{x,y\in\mathcal{D}_l}\mathrm{H}(y, f_{\theta_i}(x))+\lambda_1\frac{1}{|\mathcal{D}_u|}\sum_{x\in\mathcal{D}_u}d_{\text{MSE}}(f_{\theta_i}(x), f_{\theta_i}(\tilde{x}))L=Ls​+λ1​Lu​=∣Dl​∣1​x,y∈Dl​∑​H(y,fθi​​(x))+λ1​∣Du​∣1​x∈Du​∑​dMSE​(fθi​​(x),fθi​​(x~))

此外,还需要额外更新不稳定的学生,即 Ei=∥fi(x)−fi(x~)∥2\mathcal{E}^i = \left\lVert f_i(x) - f_i(\tilde{x}) \right\rVert^2Ei=∥fi​(x)−fi​(x~)∥2 最大的学生:

λ2∑x∈DudMSE(fθi(x),fθj(x))\lambda_2\sum_{x\in\mathcal{D}_u}d_{\text{MSE}}(f_{\theta_i}(x), f_{\theta_j}(x))λ2​x∈Du​∑​dMSE​(fθi​​(x),fθj​​(x))

Fast-SWA

前面的几种方法,其实都是在网络的权重空间上做文章,最后尝试走到一个最好的地方。但是各种方法通过SGD随机梯度下降到最后,参数的改变往往都会非常小,也就是走到了一个所谓的“平坦”的区域。任何一种训练方法其实都是在不断的逼近局部最优点,由于之前一致性正则化的要求,就算有很多个网络共同参与训练,那么他们最后也会收敛至一个局部最优。

虽然每一个函数都没有到达局部最优,但是他们的参数都是一个局部最优的估计量。根据大数定律,假设网络的个数足够多,并且都已经在之前的一致性正则化算法比较趋近于最优点,那么他们参数的平均值就是最优点的无偏估计量,这就是Stochastic Weight Averaging 的 SWA算法。

SWA基于在训练结束时以循环学习率对 SGD 遍历的权重进行平均。在给定的 epoch 数后,学习率变为循环学习率(类似退火),训练重复几个周期,每个周期 Cycle 结束时对应于学习率最小值的权重被存储,并平均在一起得到一个平均权重为 fθSWAf_{\theta_{\text{SWA}}}fθSWA​​ 的模型,然后用于进行预测

与退火的思想比较:学习率在网络开始训练的时候学习率一般比较大,收敛的比较快。到网络训练的后期,学习率应该逐渐减小,不然就会产生振荡的过程。而在第一次训练逐渐收敛到一个值的时候,原本学习率也很小了,训练接近结束。

但是我们可以忽然把学习率设为一个比较高的值(就实现了退火)。这时候再进行训练,网络的损失函数要是处于一个比较sharp的区域,会有很大的可能就跳出了这个局部最小,转而去寻找其他的局部最小,这样就实现了退火功能。

由于 SWA 每个周期只收集一次权重,这意味着需要许多额外的训练 epoch 才能收集足够的权重进行平均。fast-SWA 是 SWA 的修改版,它对同一周期内对应于许多点的网络进行平均,从而产生更好的最终模型和更快的集成过程。

Virtual Adversarial Training

以前的方法侧重于对每个输入应用随机扰动以生成人工输入点。事实上,我们可以找到模型的弱点,用最具针对性的扰动来优化,而不是随机生成扰动

有时在一张图上改变一个像素点,网络的预测就会发生巨大的变化。而VAT就是通过生成一些攻击样本,来找出网络的弱点

对于给定数据点 x ,我们需要计算能够最大程度改变模型预测的对抗扰动 radvr_{adv}radv​

  1. 从高斯分布中采样与输入 x 同维度的噪声 r∼N(0,ξdim(x)I)r \sim \mathcal{N}(0, \frac{\xi}{\sqrt{\text{dim}(x)}}I)r∼N(0,dim(x)​ξ​I)

  2. 计算噪声 r 在加或不加噪声模型预测loss上的梯度 gradr=∇rdKL(fθ(x),fθ(x+r))\text{grad}_r = \nabla_r d_{\text{KL}}(f_{\theta}(x), f_{\theta}(x + r))gradr​=∇r​dKL​(fθ​(x),fθ​(x+r))

  3. 对梯度进行归一化(确定方向)并按超参数 ϵ 缩放(确定大小)radv=ϵgradr∥gradr∥r_{adv} = \epsilon \frac{\text{grad}_r}{\lVert \text{grad}_r \rVert}radv​=ϵ∥gradr​∥gradr​​

若需更精确估计,可将当前 radvr_{adv}radv​ 作为新的初始噪声 r,重复步骤2-3进行迭代。但计算成本较高

梯度 gradr\text{grad}_rgradr​ 指向使 KL 散度(即预测差异)增加最快的方向。沿着此方向施加扰动,能最大程度改变模型的预测结果,加上扰动的例子如下:

无监督训练 Loss 改为

Lu=w1∣Du∣∑x∈DudMSE(fθ(x),fθ(x+radv))\mathcal{L}_u = w\frac{1}{|\mathcal{D}_u|}\sum_{x\in\mathcal{D}_u}d_{\text{MSE}}(f_{\theta}(x), f_{\theta}(x + r_{adv}))Lu​=w∣Du​∣1​x∈Du​∑​dMSE​(fθ​(x),fθ​(x+radv​))

为了实现更稳定的训练,可以通过 Mean teachers 将 fθ(x)f_{\theta}(x)fθ​(x) 替换为 fθ′(x)f_{\theta'}(x)fθ′​(x)

Adversarial Dropout

除了在数据上加对抗性噪声之外,对于模型也可以加上对抗性 Dropout,诱导了稀疏的神经网络结构,对噪声更鲁棒

与 VAT 类似,我们从随机 dropout 掩码开始,计算输出有和没有 dropout之间的 KL 散度损失,并给定损失相对于 dropout 层之前的激活的梯度,以对抗方式更新 dropout 掩码。换句话说,增大模型输出分布差异。

预测函数 fθ(x)f_{\theta}(x)fθ​(x) 分为两部分 fθ(x,ϵ)=fθ2(fθ1(x)⊙ϵ)f_{\theta}(x,\epsilon)=f_{\theta_2}(f_{\theta_1}(x)\odot\epsilon)fθ​(x,ϵ)=fθ2​​(fθ1​​(x)⊙ϵ) ,符号 ⊙ 表示元素逐位相乘,dropout掩码会根据其值随机地将一些输出值置0,然后计算雅可比矩阵的近似值如下:

J(x,ϵ)≈fθ1(x)⊙∇fθ1(x)dKL(fθ(x),fθ(x,ϵ))J(x,\epsilon)\approx f_{\theta_1}(x)\odot\nabla_{f_{\theta_1}(x)}d_{\text{KL}}(f_{\theta}(x), f_{\theta}(x,\epsilon))J(x,ϵ)≈fθ1​​(x)⊙∇fθ1​​(x)​dKL​(fθ​(x),fθ​(x,ϵ))

复习一下雅可比矩阵,对于多元向量值函数 f:Rn→Rm\mathbf{f}: \mathbb{R}^{n} \rightarrow \mathbb{R}^{m}f:Rn→Rm

Jf=[∂f∂x1⋯∂f∂xn]=[∂f1∂x1∂f1∂x2⋯∂f1∂xn⋮⋱⋮∂fm∂x1∂fm∂x2⋯∂fm∂xn]\begin{align*} J_{\mathbf{f}}&=\left[\begin{array}{ccc} \frac{\partial \mathbf{f}}{\partial x_1}&\cdots&\frac{\partial \mathbf{f}}{\partial x_n} \end{array}\right]\\ &=\left[\begin{array}{cccc} \frac{\partial f_1}{\partial x_1}&\frac{\partial f_1}{\partial x_2}&\cdots&\frac{\partial f_1}{\partial x_n}\\ \vdots&\ddots&\vdots\\ \frac{\partial f_m}{\partial x_1}&\frac{\partial f_m}{\partial x_2}&\cdots&\frac{\partial f_m}{\partial x_n} \end{array}\right] \end{align*}Jf​​=[∂x1​∂f​​⋯​∂xn​∂f​​]=​∂x1​∂f1​​⋮∂x1​∂fm​​​∂x2​∂f1​​⋱∂x2​∂fm​​​⋯⋮⋯​∂xn​∂f1​​∂xn​∂fm​​​​​

ablafθ1(x)abla_{f_{\theta_1}(x)}ablafθ1​​(x)​ 是对 fθ1(x)f_{\theta_1}(x)fθ1​​(x) 的梯度计算,当它在某一位置为正,说明在该位置上,fθ1(x)f_{\theta_1}(x)fθ1​​(x) 有一个微小的正向变化时,会导致 dKL(fθ(x),fθ(x,ϵ))d_{\text{KL}}(f_{\theta}(x), f_{\theta}(x,\epsilon))dKL​(fθ​(x),fθ​(x,ϵ)) 增大。也就是有 dropout 和无 dropout 时模型输出分布之间的差异会增大

再通过⊙按照元素乘 fθ1(x)f_{\theta_1}(x)fθ1​​(x),得到雅可比矩阵,它表示了输入 x 和 dropout 掩码 ϵ 对模型输出的影响

然后我们需要调整随机 ϵ\epsilonϵ 在给定位置 i 的值,得到 ϵadv\epsilon^{adv}ϵadv

  • 如果 ϵ(i)=0\epsilon(i)=0ϵ(i)=0 (当前该特征被屏蔽) 且 J(x,ϵ)(i)>0J(x,\epsilon)(i) > 0J(x,ϵ)(i)>0,则反转 ϵ\epsilonϵ 该位置的值。因为这个特征是比较敏感的(能增大KL散度),于是激活它,使得该特征能够参与计算,进一步增大模型输出分布差异。

  • 如果 ϵ(i)=1\epsilon(i)=1ϵ(i)=1 且 J(x,ϵ)(i)<0J(x,\epsilon)(i) <0J(x,ϵ)(i)<0,则反转 ϵ\epsilonϵ 该位置的值

  • 其他情况不变

然后计算损失:

Lu=w1∣Du∣∑x∈DudMSE(fθ(x),fθ(x,ϵadv))\mathcal{L}_u = w\frac{1}{|\mathcal{D}_u|}\sum_{x\in\mathcal{D}_u}d_{\text{MSE}}(f_{\theta}(x), f_{\theta}(x,\epsilon^{\text{adv}}))Lu​=w∣Du​∣1​x∈Du​∑​dMSE​(fθ​(x),fθ​(x,ϵadv))

以上方法为element-wise adversarial dropout (EAdD),元素级别,仅限于全连接网络。为了将这种方法扩展到更多网络结构(例如卷积),可以使用 channel-wise AdD (CAdD) ,如图:

此外,在更新 ϵadv\epsilon^{adv}ϵadv 的时候,不能让它丢弃全部的激活值(因为最简单的对抗就是把激活值全部丢掉),我们需要加上限制,以下是 EAdD 和 CAdD 的限制

∥ϵadv−ϵ∥2≤δH1HW∑i=1C∥ϵadv(i)−ϵ(i)∥≤δC\left\lVert \epsilon^{adv} - \epsilon \right\rVert_2 \leq \delta H \\ \frac{1}{HW} \sum_{i = 1}^{C} \lVert \epsilon^{adv}(i) - \epsilon(i) \rVert \leq \delta C​ϵadv−ϵ​2​≤δHHW1​i=1∑C​∥ϵadv(i)−ϵ(i)∥≤δC

Interpolation Consistency Training

VAT和AdD模型要求的计算量都十分大。插值一致性训练 ICT 作为替代方法被提出,我们不再苛求于找一个“最好”的优化方向,而是找一个“相对好”的优化方向

随机找两个数据点 xi,xjx_i,x_jxi​,xj​ 很可能位于不同的集群中并属于不同的类。我们可以将决策边界向其插值处移动,扰动为 xi+δ=Mixλ(xi,xj)x_i+\delta=\text{Mix}_{\lambda}(x_i, x_j)xi​+δ=Mixλ​(xi​,xj​)

如图,使用 MixUp 插值公式 Mixλ(a,b)=λ⋅a+(1−λ)⋅b\text{Mix}_{\lambda}(a, b) = \lambda \cdot a + (1 - \lambda) \cdot bMixλ​(a,b)=λ⋅a+(1−λ)⋅b ,ICT 训练预测函数 fθ(x)f_{\theta}(x)fθ​(x) ,在未标记数据点 xix_ixi​ 和 xjx_jxj​ 的不同插值处提供一致的预测,目标是使用教师模型 fθ′(x)f_{\theta'}(x)fθ′​(x) 生成的,该模型是 fθ(x)f_{\theta}(x)fθ​(x) 的 EMA

fθ(Mixλ(xi,xj))≈Mixλ(fθ′(xi),fθ′(xj))f_{\theta}(\text{Mix}_{\lambda}(x_i, x_j)) \approx \text{Mix}_{\lambda}(f_{\theta'}(x_i), f_{\theta'}(x_j))fθ​(Mixλ​(xi​,xj​))≈Mixλ​(fθ′​(xi​),fθ′​(xj​))

无监督目标是在给定两个未标记数据点的混合输入的情况下,学生模型的预测与教师模型的混合输出之间具有相似的值。

Lu=w1∣Du∣∑xi,xj∈DudMSE(fθ(Mixλ(xi,xj)),Mixλ(fθ′(xi),fθ′(xj)))\mathcal{L}_u = w\frac{1}{|\mathcal{D}_u|} \sum_{x_i, x_j \in \mathcal{D}_u} d_{\text{MSE}}(f_{\theta}(\text{Mix}_{\lambda}(x_i, x_j)), \text{Mix}_{\lambda}(f_{\theta'}(x_i), f_{\theta'}(x_j)))Lu​=w∣Du​∣1​xi​,xj​∈Du​∑​dMSE​(fθ​(Mixλ​(xi​,xj​)),Mixλ​(fθ′​(xi​),fθ′​(xj​)))

Unsupervised Data Augmentation

无监督的数据增强有如下好处:

  • 生成真实的增强示例,可以安全地鼓励对原始示例和增强示例的预测之间的一致性

  • 可以生成相当多与不同种类的样本,增加采样效率

  • 可以防止对于不同任务的归纳偏置(inductive biasas)

归纳偏置和贝叶斯分布的“先验条件”比较相似。就是说,我们在建立模型开始训练的时候,可能就认为的给模型增加了一些先验的条件,这些条件导致模型的训练有些偏差。按照我们的理解,增加一些先验的条件,常常是好的(比如让模型学球的识别时候,让他先知道是个圆),但是有时候也会造成一些误判

常见方法有:

  • AutoAugment:创建一个数据增强策略的搜索空间,直接在感兴趣的数据集上评估特定策略的质量,这样在每一次数据增强时就可以自动选取最佳的增强策略进行训练。

  • RandAugment:就是简单的对图像随机使用仿射变换。

  • Back-translation:通常用于文本翻译任务,比如要把A先翻译成另外一个语言B,然后再让其翻译回A,来实现增强。