• EMA


    Exponential moving average (EMA) 是一个非常有用的trick, 起到加速训练的作用. 近来发现, 该技巧还可以用于提高网络鲁棒性(约1% ~ 2%). EMA的流程很简单, (f(cdot; heta))是我们用于训练的网络, 则在每次迭代结束后进行:

    [ heta' = alpha cdot heta' + (1 - alpha) cdot heta, ]

    其中( heta')(f'(cdot; heta'))网络的参数, (f', f)的网络初始化是一致的, 另外(f')的网络参数的更新仅仅通过上式.

    一般情况下, 对抗训练用(f(cdot; heta))来生成对抗样本, 即

    [x_{adv} := arg max_{|x'-x|le epsilon} mathcal{L}(f(x'),y), ]

    来获得, 而我想的能不能

    [x_{adv} := arg max_{|x'-x|le epsilon} mathcal{L}(f'(x'),y). ]

    背后的直觉是, (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* image-20210509170154880 image-20210509170357674
    EMA image-20210509181734805 image-20210509181920224
    EMA + GroupNorm image-20210517075620892 image-20210517075759582

    上图中, EMA是原本的逻辑, 可见其的确能加速训练(Shadow表示(f')), 虽然最后的结果是降了点, 这主要是参数没调好, 毕竟对抗训练很容易过拟合. 但是我们的直接却完全不起作用, 这让我非常困惑, 因为, 我料想的最差的结果, 也应当是鲁棒性不怎样, 不能精度和鲁棒性都很差, 因为虽然是通过(f')生成的对抗样本, 这些对抗样本依旧是满足$|x_{adv} - x|_{infty} le 8 /255 $ 的,所以应该是没问题的.

    于是我又尝试让(alpha)(0)慢慢增加到(0.999), 但是结果依然不容乐观. 我料想是batch normalization的问题, 于是换了group normlization:

    虽然结果似乎表明我们的直觉完全是错误的, 但是还是体会到了 normalization 的重要性, BN很难应对不同分布.

  • 相关阅读:
    Struts2获取参数的几种方式
    Struts2的Action中访问servletAPI方式
    struts2中常用配置
    struts2发送ajax的几个问题(不使用struts2-json-plugin的情况下)
    深入Struts2的过滤器FilterDispatcher--中文乱码及字符编码过滤器
    Ironic 裸金属实例的部署流程
    Ironic 裸金属管理服务的底层技术支撑
    Cinder AZ 与 Nova AZ 的同步问题
    OpenStack 对接 Ceph 环境可以创建卷但不能挂载卷的问题
    OpenStack 节点重启后无法联网的问题
  • 原文地址:https://www.cnblogs.com/MTandHJ/p/14799970.html
Copyright © 2020-2023  润新知