Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[1810.00740] Improving the Generalization of Adversarial Training with Domain Adaptation [paper-reading] #49

Open
yoheikikuta opened this issue Jan 6, 2020 · 11 comments

Comments

@yoheikikuta
Copy link
Owner

論文リンク

https://arxiv.org/abs/1810.00740

公開日(yyyy/mm/dd)

2018/10/01

概要

adversarial training は汎化性能(この文脈では言葉の使い方が少し難しいが、test の adversarial example に対する精度と test の clean data に対する精度があり、前者のみを指す場合も見受けられるが個人的には両方含めたものとして使う)を上げ得るものと期待されるが、従来の手法ではそう単純には汎化性能が上がらない。
(この論文では)その原因を adversarial training において使う adversarial example が限られた手法で生成したものでしかないので十分な representation learning になっていないせいだと考える。
従来の手法ではアンサンブルを使ったり如何にして良い adversarial example を入手して adversarial training するかに注目したものが多いが、それは計算コスト的にも高くつく。
この論文では違うアプローチを取り、問題設定を clean, adversarial の二つの domain が存在するような限られたデータでの domain adaptation の問題と捉えて、domain adaptation 的な loss を導入して adversarial training をする。adversarial example 自体は単純な FGSM などで作る。
実験では test clean data に対して degradation を起こさず(CIFAR-100 ではむしろ精度が高くなる)、test adversarial example に対しても良い精度を発揮することを示した。

@yoheikikuta
Copy link
Owner Author

画像データに対しては adversarial training をすると、test clean data に対して degradation をしているような結果を見ることが多かった。

実用上は clean data に対して性能が落ちないような adversarial training が欲しいところなので、そういうことができてる論文はないかなと思っていたら見つけた論文。

ということで読んでいく。

@yoheikikuta
Copy link
Owner Author

adversarial training の基本は何かしらの攻撃方法に基づいて adversarial example を作成してそれを学習データとすることにあるが、どうしても特定の攻撃方法で生成した adversarial example に過学習しやすい。

この論文は、学習手順を target domain のサンプルが少ないという状況での domain adaptation として定式化してその問題を解決しよう、という狙い。
ここで、 source domain は clean data から成るもので target domain は adversarial data から成るものと定義している。

具体的には unsupervised と supervised の両方で domain adaptation の loss を導入して、clean 分布と adversarial 分布間の gap を最小化するのと類似度を最大化することで、うまく汎化してくれることを期待する。

@yoheikikuta
Copy link
Owner Author

yoheikikuta commented Jan 7, 2020

この論文では adversarial training をする際の adversarial example を作る際の手法は従来の主要なものを使うのみで特筆すべき点はない。

adversarial training の loss の作り方が手が混んでいるものになっていて、そこが論文の主たる貢献になっている。これは、典型的な adversarial training (clean と adv. に対して loss を計算して α, (1 - α) で重みづけて足す) では clean data に対する adv. data の領域は大きいので、そのままでは学習に適した adv. data を選ぶのが難しいという問題意識に起因している。

この論文で使う攻撃方法を挙げておく。

  • Fast Gradient Method (FGSM)
    微分を計算して ε 倍して足すのみのシンプルでよく使われる手法。

  • Projected Gradient Descent (PGD)
    FGSM を繰り返して適用する手法。何度も足すと摂動が大きくなりすぎる可能性があるので、元のデータから ε 以内に収まるように clip する。以下のものは論文から取ってきているが、clip は x - ε, x + ε の間違いである。

  • RAND+FGSM (R+FGSM)
    FGSM の適用に際して gaussian noise を入れておく手法。単純に微分に沿って更新するだけだとそのサンプルに過学習するのでノイズを入れておくという考え。

  • Momentum Iterative Method (MIM)
    PGD でノイズを加えるときに decay factor μ でノイズの大きさが decay するように改善したもの。これも clip の式は間違っている(単にコピペしただけだろう)。

@yoheikikuta
Copy link
Owner Author

yoheikikuta commented Jan 7, 2020

label leaking (https://arxiv.org/abs/1611.01236 で指摘されたもの) について。

元々、adversarial example を作る時の微分の計算には、y_true を用いていた。これはナイーブにはそれで良さそうに思える。
しかしこれには問題が生じ得る。具体的には以下のような状況が発生し得る。

  • 対象となるモデルが、true label を当てることのできないサンプル x のことを考える
  • このとき、true label を使って adv. example $ x_{adv} $ を作ると、元の x は当てられないけど $ x_{adv} $ は当てられるということがあり得る
  • このノイズの作り方は adversarial example のみを当てやすくするという状況を発生させる
  • この状況でテストデータを考えると、clean なデータでは当てれなかったサンプルに対して、adv. example にすると真のラベルが当てられてしまう、というある種の leak になっている
  • これは不当に adv. example に対する精度を高めてしまうため、テストデータでの評価が信頼できない

これを防ぐために、true label を作るのではなく、x に対するモデルのラベル出力 argmax(f(x)) を使う。

@yoheikikuta
Copy link
Owner Author

yoheikikuta commented Jan 7, 2020

本題の loss function の提案。
clean data 分布と adv. data 分布には高レベルの表現空間で大きな分布シフトがあることが知られている(だからこそ誤認識する)ので、いかにしてモデルがそれらを近しいものと認識するように loss を作るのかという問題になる。

まずは全体像として以下の loss になる。
未定義のものはすぐに説明するとして、最初の二項が clean, adv. に対する単純な classification loss となり、残りの項が domain adaptation を取り入れた loss になっている。domain adaptation の項は
Unsupervised Domain Adaptation (UDA) と Supervised Domain Adaptation (SDA) とから成る。

まずは UDA の項から。
これは CORrelation ALignment (CORAL) と Maximum Mean Discrepancy (MMD) の二つの寄与から成る。
CORAL は、logit space (k 次元空間) において clean と adv. がそれぞれ別の多変数正規分布から成るものと仮定して、covariant matrix C の $ l_1 $ loss として定義する。簡単な分布に従うことは仮定し、その上で(平均の違いは無視して)同じ分布になることを要請している。

MMD は標準的な分布間距離を測る指標である。clean と adv. の平均ベクトルの違いが $ l_1 $ の意味で最小になることを要請している。下の式で第一項は $ x ∈ D $ (clean data) の間違いである。arXiv でまあまあ revise されている割にはミスが多い論文だな。

次いで SDA に関して。
まず $ c_j $ をクラス $ j $ の logit space での中心とする。$ c^n ∈ C/{c_{y_{true}}} $ は正解ラベル以外のラベルの logit space での中心。
これを用いて、softplus: $ \ln(1 + \exp()) $ で以下のように loss を構築する。正しいラベルの中心には近づくようにして、正しくないラベルの中心からは離れるようにするというものになっている。

logit space での label の中心は model 出力によって計算するものなので、学習とともに変動していくものである。最初はランダムに設定し、それ以降は以下の更新式で更新していく。1_condition は condition が true なら 1 でそうでなければ 0 を取るものとして定義している。

@yoheikikuta
Copy link
Owner Author

yoheikikuta commented Jan 7, 2020

loss は項の数が多いのでうまくバランスして学習が進むのかなという懸念はありつつも、それぞれは特に難しいところはない。

更新アルゴリズムは以下。
adv. example を使うのでネットワークの更新状態に応じて都度 $ x_{adv} $ を生成しないといけないのと、上で書いたように logit space でのクラス中心を更新しないといけないが、それ以外は特に注意すべき点はない。

@yoheikikuta
Copy link
Owner Author

yoheikikuta commented Jan 7, 2020

ということで実験。まずはセットアップを確認しておく。

データは Fashion-MNIST, SVHN, CIFAR10, CIFAR100 を使う(どれもデータは [0, 1] に正規化)。

baseline model は以下の 4 つを使用。

  • Normal Training (NT)
    clean data で cross-entropy を使って学習したもの
  • Standard Adversarial Training (SAT)
    従来の adversarial training で学習したもの。
  • Ensemble Adversarial Training (EAT)
    adversarial training の adversarial example を作る際に対象の学習モデル以外に複数の pre-trained モデルで作ったものを使う。このモデルはデータセット毎にシンプルなモデルを構築している。
  • Provably Robust Training (PRT)
    adv. example を使って cross-entropy loss で計算するが、clean data に対して摂動の $ l_∞ $ が ε 以内のもので worst case (loss の意味) のものを使用する。論文は https://arxiv.org/abs/1711.00851

実験は white-box と black-box setting で実施していて、white-box はそのままだが black-box は学習したモデルの test データでの評価の際にテストデータは学習モデル以外のモデルで構築した adv. example を使用するというもの。

@yoheikikuta
Copy link
Owner Author

結果は以下。
全データセットで完全勝利というわけではないが、この中で最も難しい CIFAR-100 では特に優秀な成績を収めている。

特に CIFAR-100 では clean data に対しても性能がかなり上がっている点が面白い。

一方で簡単なデータセットでは他の手法よりも adv. data に対しては優秀だが clean data での degradation の程度は大きいという結果になっている。
簡単なデータのテストデータではそもそも適切に汎化性能を評価できてないという可能性もあると思うのだが、そういうのを真面目に調べている論文とかってのはあるんかな。

ともかく、提案手法である ATDA はなかなか優秀な手法であることが示された。

@yoheikikuta
Copy link
Owner Author

yoheikikuta commented Jan 7, 2020

他の指標として Local Loss Sensitivity という量も計算している。
これは clean data の test data に対して loss を計算するもので、loss に対するある種の滑らかさを測るものになっている。

この Local Loss Sensitivity という指標で見ると、提案手法が全データセットで他の手法を outperform している。

その他にも clean と adv. 間の MMD distance を計算して提案手法が優れているとも言っているが、これは直接 loss に設定しているのでまあ当然だろう。

@yoheikikuta
Copy link
Owner Author

embedding space で t-SNE を調べた結果もなかなか面白い。
各種手法で学習したモデルで {training, test, FGSM adv. data, PGD adv. data} それぞれで embedding sp. の可視化をしたものが以下(データは Fashion-MNIST を使用)。

NT や SAT では adv. data での分布がだいぶ歪められてしまっているが、提案手法では分布が保たれていて狙い通り adv. example も clean data と同じようにモデルが解釈できていることが分かる。

ちょっと気になるのは NT とか SAT と比べるとそもそも training data での embdedding sp. でクラス間のマージンが少なくてギュッと詰まっているように見えるという点だ。これのせいで clean data での性能劣化が起きているのだろうか?metric learning とかでも使われるように margin を確保するような工夫も加えることでその辺も解決できたら面白そう。

@yoheikikuta
Copy link
Owner Author

ということで一通り読んだ。
domain adaptation とかやったことなかったけど、こういうところで関連が出てくるとちょっとずつ勉強できるのでいいね。

adversarial example のみならず clean data に対する汎化性能がどうなるのかというのも興味があるので、この辺の話題はちょこちょこ追っていきたいところ。

@yoheikikuta yoheikikuta changed the title [2019] Improving the Generalization of Adversarial Training with Domain Adaptation [2018] Improving the Generalization of Adversarial Training with Domain Adaptation Jan 7, 2020
@yoheikikuta yoheikikuta changed the title [2018] Improving the Generalization of Adversarial Training with Domain Adaptation [2018] Improving the Generalization of Adversarial Training with Domain Adaptation Jan 9, 2020
@yoheikikuta yoheikikuta changed the title [2018] Improving the Generalization of Adversarial Training with Domain Adaptation [1810.00740] Improving the Generalization of Adversarial Training with Domain Adaptation [paper-reading] Aug 20, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant