日本語解説はどうやらないみたい。
こっちのGitHubレポジトリに3mの発表動画やスライドがある。テストコードも。
Introduction #
Positiveデータしか持たないが、その中で各データに信頼度というパラメタがある。Unknown、Negativeはない。
1クラス分類はあるが、ハイパーパラメタの調整ができない手法しかなかった。しかも、どんなにデータを増やしても、分布の境界を予測はできない。類似したものを見つけることができても、分類=境界線をいい感じに引く、ことはできない。
このPConfは、ハイパーパラメタを客観的に選ぶこともできる。これは、ERM(経験損失最小化 = 選んだ標本誤差の最小化)を使って実現されている。
PU学習とも似てる手法ではあるが、PU学習で必要なPositiveのデータの事前確率の推定(2007年のPU学習では、$p(ラベル付き|データ)$を推定していた(結局あんま精度高くないよね) これを指してるのだと思う)は不要。これを高精度で求めるのは苦労がかかるので、朗報。実は各データについての信頼度という情報には、事前確率、条件付確率、事後確率はすべて含まれている。
問題の定式化 #
データは$\mathbf{x} \in \mathbb{R}^d$の形。ラベルは二値分類なので、$-1, 1$。これらは、未知の分布関数$p(\mathbf{x}, y)$に従う。
実現したいのは、$g(\mathbf{}) : \mathbb{R}^d \to \mathbb{R}$という二値分類器(出力が二値ではないのは、確からしさを残すため? by me)
例によって、損失がどれぐらい出てくるのかのリスク関数を定義する。
$$ R(g) = \mathbb{E} _{p(\mathbf{x}, y)} [l(y g(\mathbf{x}))] $$
$l(m)$は損失関数。ラベルと予測器が同じ符合なら$l(m)$は0に、違う符合なら関数に渡されるのは負値で、より自信満々に間違えるほど大きな負値を渡すことになる。$l(m)$は大きなマイナスほど大きな値を返す。
例によって、このリスク関数を最小化していく。
ここで、$p(\mathbf{x}, y)$は未知なので、普通のERM(経験損失最小化)では、真の期待値を今あるテストデータの期待値で代用する。それはそう。しかし、PConfでは、違う。
PConfでは、与えられたデータ群(と言ってもPositiveしかないが)に対して、$\chi$という集合で、信頼度を定義する。
$$ \chi := (\mathbf{x}_i, r_i) で、iは全てのデータ $$
$r_i$は各データの信頼度
$$ r_i = p(y = +1 | \mathbf{x}_i) $$
$\mathbf{x}_i$はあるデータを全数つかわない場合、データ群から一様ランダムに抽出したものである。
Negativeデータがないので、普通のERMの計算方法ではリスク関数を計算するできない。次のセクションでは信頼度で代わりに表示する方法を表す。
PConf分類のやり方 #
ERM(経験損失最小化)の枠組み #
$\pi _{+} = p(y=+1)$これは全データのうち、Positiveのデータの割合。あれ、Negativeとか見えないんじゃなかったっけ?by me
$r(\mathbf{x}) = p(y=+1 | \mathbf{x})$ $r_i$はデータ$\mathbf{x}_i$についての信頼度だった。これは、引数に渡したデータ$\mathbf{x}$の信頼度。
$\mathbb{E} _{+}$は、$\mathbb{E} _{p(\mathbf{x} | y = +1)}$の場合、つまりPositiveのデータに限った場合の条件付期待値である。これらを使って、以下のように$R(g)$を表せる。
$$ R(g) = \pi _{+} \mathbb{E} _{+} [ l(g(\mathbf{x})) + \frac{1 - r(\mathbf{x})}{r(\mathbf{x})} l(-g(\mathbf{x}))] $$
当然だが全部Positiveなので、$r(\mathbf{x}) \neq 0$である。
式変形の意味 #
意味としては、以下の通り。(本来はAppendix Aにある)
$$ R(g) = \sum _{y = +1, -1} l(y g(\mathbf{x})) p(\mathbf{x}, y) d\mathbf{x} = \sum _{y = +1, -1} l(y g(\mathbf{x})) p(\mathbf{x}| y) p(y)d\mathbf{x} $$
$\pi _{+} = p(y = +1)$、$\pi _{-} = p(y = -1)$は積分の外に出せるので、
$$ =\pi _{+} \mathbb{E} _{p(\mathbf{x} | y = +1)} [l(yg(x))] + \pi _{-} \mathbb{E} _{p(\mathbf{x} | y = -1)} [l(-yg(x))] $$
第2項では、$y=-1$なので損失関数のなかには負の符号がつく**。ここで、一旦以下の値の変形を見る。
$$ \pi _{+} p(\mathbf{x} | y = +1) + \pi _{-} p(\mathbf{x} | y = -1) $$
$$ = p(\mathbf{x}, y = +1) + p(\mathbf{x}, y = -1) = p(\mathbf{x}) $$
$$ = \frac{p(\mathbf{x}, y = +1)}{p(p(y = +1 | \mathbf{x}))} = \frac{\pi _{+} p(\mathbf{x} | y = +1)}{r(\mathbf{x})} $$
ここで、式の両辺に$\pi _{+} p(\mathbf{x} | y = +1)$が出てきてるので、$\pi _{-} p(\mathbf{x} | y = -1)$について解けば、
$$ \pi _{-} p(\mathbf{x} | y = -1) = \pi _{+} p(\mathbf{x} | y = +1) (\frac{1 - r(\mathbf{x})}{r(\mathbf{x})}) $$
とえられる。これを代入すれば元の式が得られる。
本筋の続き #
$$ R(g) = \pi _{+} \mathbb{E} _{+} [ l(g(\mathbf{x})) + \frac{1 - r(\mathbf{x})}{r(\mathbf{x})} l(-g(\mathbf{x}))] $$
上のように上手いこと変形することで、Negativeのデータにおける期待値を消去してる。さらに言えばこの$R(g)$の最小化を考えるにあたり、未知の量$\pi _{+}$は比例定数なので考えなくてもいい。
では、この$R(g)$は理想的な分布を使っていたわけだが、これを実際にあるデータの平均で期待値を代用すると、以下のような最適化問題を解く形になる。
$$ \min _{g} \sum _{i = 1} ^ {n} [ l(g(\mathbf{x}_i)) + \frac{r_i}{1 - r_i} l(-g(\mathbf{x}_i)) ] $$
最適化問題だから分母消してもいいだろ←いいの? #
これに$r_i$を乗じた以下のもの
$$ \min _{g} \sum _{i = 1} ^ {n} [ r_i l(g(\mathbf{x}_i)) + (1 - r_i) l(-g(\mathbf{x}_i)) ] $$
この式、更に簡約できる。
$$ = \min _{g} \sum _{i = 1} ^ {n} p(y = +1 | \mathbf{x}_i) l(g(\mathbf{x}_i)) + p(y = -1 | \mathbf{x}_i) l(-g(\mathbf{x}_i)) $$
$$ = \min _{g} \sum _{i = 1} ^ {n} \sum _{y = -1, 1} p(y | \mathbf{x} _i) l(y g(\mathbf{x} _i)) $$
このように簡約できる。だが、実はこれは等価ではない。外側の$\sum$が、$p(\mathbf{x})$に対してだが、これが$p(\mathbf{x} | y = +1)$ならば正しい。なぜなら、$r_i=p(y = +1 | \mathbf{x}_i)$を掛けたので、
$$ p(\mathbf{x}_i | y = +1) = \frac{r_i p(\mathbf{x}_i)}{p(y = +1)} $$
$$ r_i = \frac{p(\mathbf{x}_i | y = + 1) p(y = +1)}{p(\mathbf{x}_i)} $$
ここで、$p(y = +1)$は定数?なので、まあ掛けないとあかん理由わかるね。
本筋に戻る #
重点サンプリングとは 以下に簡単に書く。
$$ \mathbb{E} _{\mu} [f(x)] = \int f(x) \mu(x) dx = \int f(x) \frac{\mu(x)}{\nu(x)} \nu(x) dx $$
$w(x) = \frac{\mu(x)}{\nu(x)}$と言い換えておくと、この上の式は
$$ \int f(x) w(x) \mu(x) dx = \mathbb{E} _{\nu} [ f(x)w(x) ] $$
と言い換えられる。つまり、重み関数$w(x)$を掛ければ、別の分布についての期待値となる。この手法を重点サンプリング=Importance Samplingという。
上の2つの式は、互いに重点サンプリングである、とも見れる。$p(\mathbf{x})$と$p(\mathbf{x} | y = +1)$についての期待値。
性能評価 #
長すぎて略したい…むずかしいし。
結論として、
$$ \min _{g} \sum _{i = 1} ^ {n} [ l(g(\mathbf{x}_i)) + \frac{r_i}{1 - r_i} l(-g(\mathbf{x}_i)) ] $$
は真のリスク関数に収束するが、
$$ \min _{g} \sum _{i = 1} ^ {n} \sum _{y = -1, 1} p(y | \mathbf{x} _i) l(y g(\mathbf{x} _i)) $$
は真のリスク関数には収束しない。
実装するには #
$$ g(\mathbf{x}) = \mathbf{w} ^ T \mathbf{\Phi(\mathbf{x})} $$
こんな風に線形識別器$g(\mathbf{x})$を作るとする。
L2正規化をしたERMは、以下の最小化を行う。$\lambda$は正規化定数であり、$R$は半正定値行列。
$$ \min _{\mathbf{a}} \frac{\lambda}{2} \mathbf{w} ^ T R \mathbf{w} + \sum _{i = 1} ^ {n} [ l( \mathbf{w}^T \mathbf{\Phi(\mathbf{x}_i)}) + \frac{r_i}{1 - r_i} l(-\mathbf{w}^T \mathbf{\Phi(\mathbf{x}_i)}) ] $$
正規化項はいつもの$|| \mathbf{w} ||^2$ではないが、これは$R$が半正定値行列なので、コレスキー分解$R = C^T C$とすることができる。こうすると、$\mathbf{w} ^ T R \mathbf{w} = ((C\mathbf{w}) ^T (C\mathbf{w}))$と、別の線形空間に写像したうえでのL2正規化と見れる。
損失関数は
- $l(z) = (z - 1)^2$
- $l(z) = \max(0, 1 - z)$
- $l(z) = \log(1 + e^{-z})$ これが一番よかった。
これは確率的勾配法とかを使えば最適化できる。
これ、**SVMで行けるんじゃね?????**by me(たぶんやってる)
実験 #
どうやら線形モデルでも、DNNでも有効らしい。DNNで更に有効らしい。なんだこれは。
線形モデルの合成実験 #
平均が$\mathbf{\mu} _{+}, \mathbf{\mu} _{-}$であり、共分散行列が$\Sigma _{+} \Sigma _{-}$であるデータを使う。
- 提案した手法
- 提案した手法に$r_i$掛けて、違うよね?とした手法
- 回帰ベースの手法。信頼度事態を予測して、0.5以上か以下で判断する
- 1クラスSVMはGaussianカーネルを使う。性質上、正例データのみ使う。
- 完全にラベル付けされた例も、比較実験として使う。
提案手法、違うよね?手法、完全にラベル付けした手法は、$g(\mathbf{x}) = \mathbf{w} ^ T \mathbf{x} + b$を使ったらしい。最適化ではエポック数5000、学習率0.001で行った。
なお、$r(\mathbf{x})$はどう計算されるんだ?に関しては「2つのガウス密度から解析的に計算される」そう。なにこれ???何も言ってないけど、2つのクラスの真の中心の距離の逆比っすかね???まあ、$r(\mathbf{x}) = p(y = +1 | \mathbf{x})$なので、$p(\mathbf{x} | y = +1)$からベイズの定理で求めるのかね?
結果としては、提案手法のPConfは、完全にラベル判明したものと同等の精度があると判明。
なお、真の確信度わからずにガウス分布に従うノイズを加えると、性能が低下することにはするが、全然使える範囲でもあると。
DNNにおいての手法適用 #
Fashion-MNISTという服関連のデータセットでやった。1つのクラス(T-shirts Top)だけをPositive、他をNegativeにした。データは以下の4つに分ける。
- 訓練
- 検証
- テスト
- Positiveのデータに対して、$r(\mathbf{x}_i)$を推定するための確率的分類器の学習用データ
- 本来は人がやるけど、ここはこれで代用や!
- ロジスティック回帰で実装した。
- ここらの前提はまだそれなりにある 把握しきれない。
3つの隠れ層でそれぞれ100個のニューロンがあり、最後に1つで総結合するニューロンを持つネットワークで、活性化関数はReLU関数を使った。
あといろいろある。CIFAR-10についてもやってる。
結果 #
提案したPconfはやはり素晴らしい性能だった。完全にラベル付けしたものの性能にも迫るぐらいね。
ほんへ終了