ブログではないです

ブログでなくはないです

Unsupervised Domain Adaptation by Backpropagation [Ganin+, ICML'15]

概要

Adversarial Multi-task Learning for Text Classification [Liu+, arXiv'17] の中で使われていたgradient reversal layerとは何だ?という事で読んだ.手法の部分しか読んでないので細かい実験結果などは省略.

文脈としてはMulti-task learningというよりDomain adaptationで,大まかなやりたいことは↑の論文と同じ. 入力から抽出した特徴量がf, fを入力として推定するソースドメインにおけるラベルをy, 同じくfを入力として推定する現在のドメインをdとして,y,d に関する損失を { \displaystyle L_y, L_d} とする.
y, d についてのパラメータ{ \displaystyle \theta_y, \theta_d}はそれぞれの損失{ \displaystyle L_y, L_d} を最小化するように,fについてのパラメータ{ \displaystyle \theta_f}{ \displaystyle L_y}を最小化し,かつ欲しいのはドメイン不変な特徴量であるため{ \displaystyle L_d}を最大化するように学習したい.つまり,以下が更新式になる.

{ \displaystyle
\theta_f \leftarrow \theta_f - \mu (
\frac{\partial L^i_y}{\partial \theta_f}
- \lambda \frac{\partial L^i_d}{\partial \theta_f})
}

{ \displaystyle
\theta_y \leftarrow \theta_y - \mu \frac{\partial L^i_y}{\partial \theta_y}
}

{ \displaystyle
\theta_d \leftarrow \theta_d - \mu \frac{\partial L^i_d}{\partial \theta_d}
}

この { \displaystyle \theta_f}の第二項目にあたる符合の逆転を誤差逆伝搬時に上手いことやっているのがgradient reversal layer.
{ \displaystyle R_{\lambda} (\textbf{x}) = \textbf{x}}
{ \displaystyle \frac{dR_{\lambda}}{d\textbf{x}} = - \lambda \textbf{I}}
となる関数がf -> d の間にあると考えれば良いとのこと。
DL系のフレームワークの内部で自動微分をどうやっているか詳しくないので何とも言えないが、関数を定義する時に順方向・逆方向の処理をそれぞれ持っておくような形になっているんだろうか? ここにCaffe実装のコードと補足資料があったのでどうやってるか今度確認・・・.

しかしこういうのがあるならなんでGANとかではDiscriminatorとGeneratorを交互に訓練するようなことをやっているんだろう?同じ理屈で一括で出来そうな気もする・・・。 (話は少し変わるが,過去に読んだGANのコードではGeneratorの訓練時にDiscriminatorのパラメータを固定していなかったのだが、これは一般的な実装?Discriminatorの方のパラメータをわざわざ悪い方向に動かす理由がないと思うのだが・・・。)