Domain Adaptation — About ADDA, CyCADA and MCD

Lento
12 min readMar 26, 2019

--

Introduction

機械学習において各データセット固有の特徴であるドメインは非常に重要です。例えば標識認識において昼に撮られた標識だけを集めた学習用データセットで学習を行ったとしても、夜に撮られた標識だけを集めたテストデータに対してはうまく認識出来ないと思われます。これは下図に示すように学習データとテストデータが異なる真の分布からサンプルされているため、学習データの真の分布を仮に求められたとしてもテストデータには適用出来ないからです。このような問題に対応するためDomain Adaptationという分野があります。今回の記事では、現在まで論文化されているDomain Adaptationにおいて自分が興味を持った手法を検討した結果について述べます。

Task

今回は各手法の精度比較をおこなっていくため行うタスクを統一します。Domain Adaptation論文では非常によく見られるタスクであまり面白味のないものですが、数字分類タスクです。具体的にはSVHNのデータで学習したモデルを用いてMNISTのテストデータでのAccuracyを求めます。この時、MNISTのラベル情報は一切用いません。あくまでもSVHNの画像とラベル、MNISTの画像だけを用います。また以後、ラベル付きの学習データのドメインをソース、ラベルの付いてない学習データのドメインをターゲットとします。

Method

今回のような分類タスクでは、以下の図のようにEncoderで特徴抽出を行い、Classifierにおいて全結合層を用いてクラス数次元のベクトルを求めます。ここで、Encoder出力における分布がソースとターゲットで等しければ同じClassifierモデルを用いることで同じラベルへと分類されます。即ちEncoderはドメイン不変な特徴量を獲得することの出来る必要があります。従って、このEncoder出力の分布をソースとターゲットで近づけることが重要になります。分布を近づけるということは、分布間の距離を最小化することに繋がります。この分布間の距離の最小化に対してL1-distance等ではなくAdversarial Learningを使って最小化しようとするADDAと、分布間の距離ではなくクラス分布も考慮したMCDを試しました。

また、Encoder出力の分布間距離を小さくする他にソース画像をドメイン変換し、ソースのラベルをターゲットの疑似ラベルとしてターゲット側のEncoderを学習する手法も存在します。そのような手法の一例としてCyCADAを試したのでそちらも紹介します。

① Adversarial Discriminative Domain Adaptation (ADDA)

手法の概要を以下に示します。

Eric Tzeng et al., “Adversarial Discriminative Domain Adaptation”

手順としては

  • Pre-training — ソースの画像とラベルを用いて、SourceCNNとClassifierを学習します。今回の例だとSVHNの画像とラベルを用いて学習をします。損失関数としてはラベル予測で用いられるクロスエントロピーを用います。
  • Adversarial Adaptation — 学習済SourceCNNを用いてソース画像から特徴抽出を行う一方、学習済SourceCNNのパラメータで初期化したTargetCNNを用いてターゲット画像から特徴抽出を行います。後段にどちらのドメインからその特徴がやってきたかを識別するDiscriminatorを配置し、Adversarial Learningを行います。このようにすることでTargetCNNの出力分布とSourceCNNの出力分布は近づけられ、Discriminatorはどちらのドメインからやってきたかを判別出来なくなります。損失関数としてはAdversarial Lossを用います。
  • Testing — Pre-trainingで学習したClassifierとAdversarial Adaptationで学習したTargetCNNを用いて、ターゲットのテスト画像でラベル予測を行います。

以上が学習の手順となります。この学習によりEncoderの出力はDiscriminatorが識別出来ない特徴空間へ飛ばされるはずです。

② CyCADA: Cycle-Consistent Adversarial Domain Adaptation

手法の概要を以下に示します。

Judy Hoffman et al., “CYCADA: CYCLE-CONSISTENT ADVERSARIAL DOMAIN ADAPTATION”

学習すべき学習器が多くて気が滅入ります。GがGenerator、DがDiscriminator、fがEncoder + Classifierです。SがソースでTがターゲットを表します。
CycleGANと構成が似ていますが、CycleGANで用いられるAdversarial loss(図中のGAN loss)とCycle-consistency loss(図中のCycle loss)に加えてオレンジ色のGAN lossとTask loss、Semantic Consistency lossを考慮します。それぞれについて説明いたします。

  • Feature GAN loss — ターゲット画像とソースのドメイン変換画像からの特徴抽出後の分布は近い必要があります。このため先ほどのADDAと同様のAdversarial Learningを使って近づけます。
  • Task Loss — ソース画像をドメイン変換した画像は、ソース画像のラベルと同じラベルを有しているはずです。従ってソース画像のラベルを疑似ラベルとしてクロスエントロピーで学習を行います。
  • Semantic Consistency loss — Semanticな情報はドメイン変換したとしても維持されている必要があります。学習済のソース側の特徴抽出器を用いて特徴抽出後の分布の距離を近づけます。

全ての損失関数項をまとめたものが以下の式です。

③ Maximum Classifier Discrepancy for Unsupervised Domain Adaptation (MCD)

ADDAでは、いかにターゲットとソースの特徴抽出後の分布を近づけるのかに注力していました。しかし下図のように特徴抽出後の分布を近づけているだけで各クラスの分布を考慮していません。そこでこの手法では各クラス分布を考慮するために、二つの識別器を用意しそれら識別器の出力結果の不一致に注視しました。

Kuniaki Saito et al., “Maximum Classifier Discrepancy for Unsupervised Domain Adaptation”

具体的には以下のように三つのステップを踏んだ学習を進めます。今回は特徴抽出を行うGenerator(以下G)と二つの分類器(以下F1とF2)を用意します。

  • Step A — ソースの画像とラベルを用いてGとF1、F2をクロスエントロピーを用いて学習します。
  • Step B — このStepでは二つの損失関数項を計算します。Gのパラメータは更新せずF1とF2のみパラメータを更新します。一項目はStep Aと同様ソース画像とラベルを用いたクロスエントロピーです。二項目がこの手法の肝です。今回はランダムに初期化した二つの分類器を用いますが、この分類器の出力分布の距離を離すように学習します。論文ではこの距離はL1-distanceです(L2-distanceではうまくいかなかったようです)。
  • Step C — 今度はF1とF2のパラメータは更新せずGのパラメータだけを更新します。Step Bでも求めた二つの分類器の出力分布の距離を今度は小さくなるように学習します。このようにすることでクラス内の分散を抑えます。また、このStepだけ複数回行います。論文中では2~4回を試しておりタスクによりますが4回が最適と考え、後で行う実験についても4回としました。

このStepA→StepB→StepCのサイクルを一回のiterationとします。

Kuniaki Saito et al., “Maximum Classifier Discrepancy for Unsupervised Domain Adaptation”

以上が学習方法の手順でしたが、今までの手法と違う点は学習済のソース側のEncoderを用意しなくていいということです。この手間が省けるのは大きいですね。
また、今回の論文では二つの識別器の出力分布の距離としてL1-distanceを用いていますが、CVPR2019でAcceptされた論文の中に距離としてSliced Wasserstein Distanceを用いてより精度を向上させた論文があります。この手法も試して効果を確かめたかったのですが自分の実装が間違っているのか論文ほどの精度が確認出来なかったため、紹介だけに留めておきます。

Experiments

では上記で紹介した手法を用いて実験を行なっていきます。Taskの節でも述べたようにSVHNの学習用画像とラベル、MNISTの学習用画像だけを用いてMNISTのテストデータのラベル予測のAccuracyを求めます。SVHNとMNISTの学習データはデータセットにある分は全て用いています。また、今回はなるべく手法による差を出したいため共通しているニューラルネットワークのモデルは同じ構造になるようにしています。具体的にはEncoderとClassifierはどのモデルでも同じようにしています。詳細は下図に載せます。

Results

では、MNISTのテストデータに対するAccuracyを求めたものを以下の表に示します。 Source onlyはソース画像とラベルだけで学習したモデルをDomain Adaptationせずそのままテスト画像のラベル予測に使用した場合です。

この表の通りMCDが0.97で最も精度が高いです。これは論文中の値(0.962)より僅かに高いレベルです。ADDAやCyCADAについても論文にあるAccuracyと値が異なっていますがモデルのパラメータ等でも変わってきますのであくまでも相対評価です。
また、精度面以外においてMCDの良い点が2点あります。

  • 1点目は先ほども述べましたが、ソース側の特徴抽出器の事前学習が不要ということです。
  • 2点目は学習のしやすさです。ADDAはまだDiscriminatorとの均衡を考慮するだけでいいのですが、CyCADAは二つのGeneratorとDiscriminator、ターゲット側の特徴抽出器、抽出された特徴のDiscriminatorと6つの学習器を同時にAdversarial Learningを交えながら学習を行うので均衡点を探すのが難しいです。GANの学習ではありがちですが、途中まではうまくいっていたのにいきなりロスが発散したりもしました。学習がうまくいっていると下図のようにラベル情報も維持したままドメイン変換を行うことが可能なので個人的には面白いのですが….
CyCADAで学習したSVHN → MNISTのドメイン変換例

Summary

今回は簡単な実験でしたがDomain Adaptationの興味を持った手法について検討しました。結論としてはMaximum Classifier Disperancyが最も精度高く学習もしやすいというものでした。精度の面でよりいいものとしては、MCDの項目でも述べた二つの識別器の出力の距離にSliced Wasserstein Distanceを用いたものやECCV2018で登場したDeepJDOT等があります。どちらもOptimal Transportに着目しています。
今回Domain Adaptationについて検討したのは単に興味が湧いたからという他に、私がよく用いているキャラクターに関するデータセットのラベル付けに応用できないかと考えているからです。キャラクターに関するデータセットを作る際にラベル付けを行うことは多々ありますが、ラベル付けは時間がかなりかかります。従って既にラベル付けされた公開データセットを使用してキャラクターデータセットに適用できないかと思っていました。今回はまだ初期検討段階なので実際に適用できるかは不明ですが、次からは検討を進めていきます。
また、ここ間違ってますよとかこういう論文もありますよというのがありましたら是非仰ってくださると非常に助かります。

--

--