機械学習とかコンピュータビジョンとか

CVやMLに関する勉強のメモ書き。

Adversarial Examples Improve Image Recognitionを読んだのでメモ.

はじめに

Adversarial Examples Improve Image Recognitionを読んだのでメモ. 端的にはadversarial examplesを頑健性向上などではなく単純なモデルの精度向上に使うというもの.

手法

手法としては,通常のデータ(clean examples)と敵対的データ(adversarial examples)に内在する生成分布が異なることを仮説とし,BatchNormで計算する統計量をcleanとadversarialで別々に処理するという方法で非常に単純.

予備実験として,clean examplesのみの通常の学習をおこなったモデル,両方を使ったadversarial trainingをおこなったモデル,adversarial training後にclean examplesのみを使ったfine-tuningをおこなったモデルの3つを比較.その際,fine-tuningしたモデルが通常の学習時より精度が向上する場合があることを確認している.すなわち,adversarial examplesがプラスの効果をもたらしているという主張につながる(実際0.3%の向上と,乱数でどうにでもなる程度の差な気もするが).ただ,fine-tuningしても精度が向上しない場合もあったため,論文ではパフォーマンスを向上させるような汎化した特徴をadversarial examplesを利用して取り出せるかという問いを投げかけてる.

論文としては上記の問いに対し,fine-tuningではそのような検証を行うことができないとし(というのもadversarial examplesで得られた特徴がfine-tuningにより書き換えられる可能性があるため),AdvPropという手法を提案する.

Adversarial Tranining

ベースとなる目的関数を以下のように定義する.

\displaystyle
\underset{\theta}{\mathrm{arg}\min}\mathbb{E}_{(x,y)\sim\mathbb{D}}\left[L(\theta,x,y)\right]

\mathbb{D}は内在するデータ分布でL(\cdot,\cdot,\cdot)は損失関数,\thetaはモデルのパラメータ,x,yは学習サンプルと対になるラベル.

今回の目標は通常のモデルに対する性能を向上させることなので,adversarial examplesを使った目的関数を次のように定義する.

\displaystyle
\underset{\theta}{\mathrm{arg}\min}\left[\mathbb{E}_{(x,y)\sim\mathbb{D}}\left(L(\theta,x,y)+\max_{\epsilon\in\mathbb{S}}L(\theta,x+\epsilon,y)\right)\right]

\epsilonはadversarial perturbationで\mathbb{S}はadversarial perturbationの集合.

AdvProp

最初に述べたように,adversarial examples用のBNを追加で一つ用意するというものなので特に説明することはない. 正直言ってしまえば,単一のBNでadversarial examplesに対しては移動平均と分散の計算に含めないという方法ではダメなのかという感想. 論文見る限りでは異なるBNを用意しているように見えるのでアフィンパラメータも分けてる可能性があるが,正直どこまで効果があるかは不明(実験をちゃんと読んでないので実際色々検証しているかもしれないが).

まとめ

Adversarial exapmlesが特徴量説を考えると結構解釈が難しい気もするが,adversarial trainingで精度向上が可能という点を示したのは大きいかなと.