Semi-Supervised Learning with Ladder Networks
参考
関連
-
Deconstructing the Ladder Network Architecture (2016)
- Ladder Network の各部品を除去したり交換したりして、どこが貢献しているのかを調べる
- 全部品良い
- ただし combinator の部分はMLPにしたほうがいい場合があった
-
A Semisupervised Approach for Language Identification based on Ladder Network
- 音声を入力に何語であるかを推定するのに Ladder Network を使った
- 音声は i-vector (その筋の定番) に変換したものを入力にした
概要
-
Ladder Networks (Valpola, 2015)
- ノイズへの頑強を目指す (denoising)
-
もともと教師ナシ学習を想定
-
この論文では、組み合わせて半教師アリに適用させる
- たぶん先に普通の教師アリでパラメータを訓練すると書いてある
手法
-
所謂普通のネットワーク (
:: x -> y
) を Encoder と呼ぶ
-
実際には制限は無いが、簡単のため、 \(N\) 層のMLPを想定する
- 第 \(i\) 層での値を \(z_i\) 、活性化したあとのそれを \(h_i\) とする.
- ただし、 \(x = z_0 = h_0\) , \(z_n = h_n = y\)
-
各 \(z_i\) は正規化しませう
-
オプションとして、各層ではノイズを加えられることにする
- \(z_i\) は (正規化した直後) 正規分布に乗ったノイズが乗る
-
Encoder をちょうど逆に辿るような Decoder を想定する
- Decoder とは、 Encoder における各層にそれぞれ denoiser を並べたものである
-
第 \(i\) 層にある denoiser は、 \(z_i, u_{i+1}\) から \(u_i\) を求めるもの
- \(z_i\) とは Encoder によって計算される (ノイズが加わった) 値
- \(u_i\) とは、 \(z_i\) (からノイズを除いたもの) を近似するものである
- ただし \(y = u_n\)
学習
-
学習には2種類ある
- すなわち、ラベルありの学習事例 \((x, y)\) を用いるものと、
- ラベルなしの学習事例 (ただの \(x\) ) だけを用いるものである
-
教師アリ
- \((x, y)\) を用いる
- ノイズの入ったEncoder で \(y'\) を計算して \(y\) との差で訓練
-
教師ナシ
- \(x\) を用いる
- ノイズの入った Encoder で \(y'\) を計算
- Decoder で \(y'\) から \(x'\) を計算
- Decoder における各層での \(u_i\) と、ノイズのない Encoder での \(z_i\) との差で訓練
実装
-
mattya さんによる Python 2.x/chainer な実装がある
- https://github.com/mattya/chainer-semi-supervised