EMA
源
Exponential moving average (EMA) 是一个非常有用的trick, 起到加速训练的作用. 近来发现, 该技巧还可以用于提高网络鲁棒性(约1% ~ 2%). EMA的流程很简单, \(f(\cdot;\theta)\)是我们用于训练的网络, 则在每次迭代结束后进行:
\]
其中\(\theta'\)是\(f'(\cdot; \theta')\)网络的参数, \(f', f\)的网络初始化是一致的, 另外\(f'\)的网络参数的更新仅仅通过上式.
一般情况下, 对抗训练用\(f(\cdot; \theta)\)来生成对抗样本, 即
\]
来获得, 而我想的能不能
\]
背后的直觉是, \(f'\)相较于\(f\)更为平稳, 则由其产生的对抗样本的分布更加稳定, 则\(f\)拟合起来会不会更加容易?
我在一个8层的网络上进行测试, 结果不如人意:
设置
model | cifar |
---|---|
dataset | CIFAR-10 |
attack | PGD |
epsilon | 8/255 |
stepsize | 2/255 |
steps | 10 |
loss | cross entropy |
optimizer | sgd |
momentum | 0.9 |
beta1 | 0.9 |
beta2 | 0.999 |
weight_decay | 2e-4 |
leaning_rate | 0.1 |
learning_policy | AT |
epochs | 200 |
batch_size | 128 |
transform | default |
seed | 1 |
alpha | 0.999 |
结果
Accuracy | Robustness | |
---|---|---|
EMA* | ||
EMA | ||
EMA + GroupNorm |
上图中, EMA是原本的逻辑, 可见其的确能加速训练(Shadow表示\(f'\)), 虽然最后的结果是降了点, 这主要是参数没调好, 毕竟对抗训练很容易过拟合. 但是我们的直接却完全不起作用, 这让我非常困惑, 因为, 我料想的最差的结果, 也应当是鲁棒性不怎样, 不能精度和鲁棒性都很差, 因为虽然是通过\(f'\)生成的对抗样本, 这些对抗样本依旧是满足$|x_{adv} - x|_{\infty} \le 8 /255 $ 的,所以应该是没问题的.
于是我又尝试让\(\alpha\)由\(0\)慢慢增加到\(0.999\), 但是结果依然不容乐观. 我料想是batch normalization的问题, 于是换了group normlization:
虽然结果似乎表明我们的直觉完全是错误的, 但是还是体会到了 normalization 的重要性, BN很难应对不同分布.
最新文章
- react自学笔记总结不间断更新
- Delegate、Predicate、Action和Func
- ASM FailGroup验证
- 17.linux下root用户与普通用户
- iOS 代理协议
- Windows Directory ACL Security Check By ACL Baseline
- 信頼済みサイト对window.open窗体大小影响原因之一
- ios开发解决遍历删除数组对象报错
- [Angular2 Router] Understand the Angular 2 Base href Requirement
- NodeJS服务器:一行代码 = 一个的HTTP服务器
- 获取资源ID
- cocos2dx系列笔记(2)- windows环境配置后续之 Android环境配置
- 【转】 NSString什么时候用copy,什么时候用strong
- 设计模式C++实现(1)——工厂模式
- 《Linux内核分析》 week6作业-Linux内核fork()系统调用的创建过程
- 用Stack实现对多线程的管理范例
- Session分布式共享 = Session + Redis + Nginx
- AO之Addins开发[杂谈1] Toolbar中添加一条分割线
- Linux下批量修改后缀名
- java学习之—队列
热门文章
- 系列好文 | Kubernetes 弃用 Docker,我们该何去何从?
- adjust, administer
- 【Go语言学习笔记】包
- 零基础学习java------day18------properties集合,多线程(线程和进程,多线程的实现,线程中的方法,线程的声明周期,线程安全问题,wait/notify.notifyAll,死锁,线程池),
- android:textAppearance解析
- Actuator监控器
- pipeline groovy
- Python matplotlib绘图设置坐标轴的标题
- Windows下安装xampp的PHP扩展(redis为例)
- Pytorch入门下 —— 其他