ホーム » Edward » TensorFlow : Edward Tutorials : ガウス過程 (教師あり学習: 分類)

TensorFlow : Edward Tutorials : ガウス過程 (教師あり学習: 分類)

TensorFlow : Edward Tutorials : ガウス過程 (教師あり学習: 分類) (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 10/17/2018

* 本ページは、Edward サイトの Tutorials : Supervised Learning (Classification) を翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

教師あり学習 (分類)

教師あり学習では、タスクは訓練サンプル $\{(x_n, y_n)\}$ から成る、ラベル付けられたデータから隠れ構造を推論することです。分類は出力 $y$ が離散値を取ることを意味します。

Edward の例で示します。Jupyter notebook による対話的バージョンは こちら で利用可能です。

 

データ

私達は カニのデータセット を使用します、これはカニの種の形態学上の尺度から成ります。与えられたカニが色形状ブルー (0 としてエンコード) かオレンジ (1 としてエンコード) を持つかを予測することに興味があります。データセットの総ての数値特徴を使用します。

from observations import crabs

data, metadata = crabs("~/data")
X_train = data[:100, 3:]
y_train = data[:100, 1]

N = X_train.shape[0]  # number of data points
D = X_train.shape[1]  # number of features

print("Number of data points: {}".format(N))
print("Number of features: {}".format(D))
Number of data points: 100
Number of features: 5

 

モデル

ガウス過程はランダム変数のペアの間の非線形関係をモデル化するためのパワフルなオブジェクトです。それは (多分非線形) 関数に渡る分布を定義します、これは真の関数関係まわりの不確かさを表わすために適用可能です。ここでは分類のためにガウス過程モデルを定義します (Rasmussen & Williams, 2006)。

形式的には、関数 $f:\mathbb{R}^D\to\mathbb{R}$ に渡る分布は次のガウス過程で定義できます :

\[
\begin{aligned}
p(f)
&=
\mathcal{GP}(f\mid \mathbf{0}, k(\mathbf{x}, \mathbf{x}^\prime)),\end{aligned}
\]

その mean 関数は zero 関数で、その共分散関数は (この関数への) 入力の任意のセット間の依存性を記述する、あるカーネルです。

入出力ペア $\{\mathbf{x}_n\in\mathbb{R}^D,y_n\in\mathbb{R}\}$ のセットが与えられたとき、尤度は多変量正規分布として書かれます :

\[
\begin{aligned}
p(\mathbf{y})
&=
\text{Normal}(\mathbf{y} \mid \mathbf{0}, \mathbf{K})\end{aligned}
\]

ここで $\mathbf{K}$ はデータセットの入力の各ペアに対して $k(\mathbf{x}_n, \mathbf{x}_m)$ を評価することにより与えられる共分散行列です。

上は $\mathbb{y}$ が実数値の応答 (= response) である回帰には直接的に当てはまりますが、$\mathbb{y}$ が $\{0,1\}$ のラベルである (二値) 分類のためにはそうではありません。分類を扱うために、応答を $[0,1]$ にスカッシュされた潜在変数として解釈します。それからラベルを決定するために Bernoulli 分布からドローします、スカッシュされた値で与えられた確率によってです。

観測 $(\mathbf{x}_n, y_n)$ の尤度を次として定義します :

\[
\begin{aligned}
p(y_n \mid \mathbf{z}, x_n)
&=
\text{Bernoulli}(y_n \mid \text{logit}^{-1}(z_n))\end{aligned}
\]

事前分布を前述のように与えられた共分散行列を持つ多変量正規分布として定義します :

\[
\begin{aligned}
p(\mathbf{z})
&=
\text{Normal}(\mathbf{z} \mid \mathbf{0}, \mathbf{K})\end{aligned}
\]

モデルを Edward で構築しましょう。(squared exponential または exponentiated 二次 (= quadratic) としても知られる、) RBF (= radial basis function) カーネルを使用します。それはデータポイントの総てのペアに渡り評価されたカーネル行列を返します ; それから多変量正規分布をパラメータ化するために行列をコレスキー分解します。

from edward.models import Bernoulli, MultivariateNormalTriL
from edward.util import rbf

X = tf.placeholder(tf.float32, [N, D])
f = MultivariateNormalTriL(loc=tf.zeros(N), scale_tril=tf.cholesky(rbf(X)))
y = Bernoulli(logits=f)

ここで、プレースホルダ X を定義します。推論の間、データに従ってこのプレースホルダに値を渡します。

 

推論

変分推論を遂行します。変分モデルを fully factorized normal と定義します。

qf = Normal(loc=tf.get_variable("qf/loc", [N]),
            scale=tf.nn.softplus(tf.get_variable("qf/scale", [N])))

500 反復の間変分推論を実行します。

inference = ed.KLqp({f: qf}, data={X: X_train, y: y_train})
inference.run(n_iter=500)

この場合 KLqp は再パラメータ化勾配を使用する $\text{KL}(q\|p)$ ダイバージェンス measure の最小化にデフォルト設定されます。

推論のより詳細については、$\text{KL}(q\|p)$ チュートリアル を見てください。(ガウス過程における完全な共分散の評価と逆にすることは偶々遅いのでこの例は偶々遅いです。)

 

References

  • Rasmussen, C. E., & Williams, C. (2006). Gaussian processes for machine learning. MIT Press.
 

以上






AI導入支援 #2 ウェビナー

スモールスタートを可能としたAI導入支援   Vol.2
[無料 WEB セミナー] [詳細]
「画像認識 AI PoC スターターパック」の紹介
既に AI 技術を実ビジネスで活用し、成果を上げている日本企業も多く存在しており、競争優位なビジネスを展開しております。
しかしながら AI を導入したくとも PoC (概念実証) だけでも高額な費用がかかり取組めていない企業も少なくないようです。A I導入時には欠かせない PoC を手軽にしかも短期間で認知度を確認可能とするサービの紹介と共に、AI 技術の特性と具体的な導入プロセスに加え運用時のポイントについても解説いたします。
日時:2021年10月13日(水)
会場:WEBセミナー
共催:クラスキャット、日本FLOW(株)
後援:働き方改革推進コンソーシアム
参加費: 無料 (事前登録制)
人工知能開発支援
◆ クラスキャットは 人工知能研究開発支援 サービスを提供しています :
  • テクニカルコンサルティングサービス
  • 実証実験 (プロトタイプ構築)
  • アプリケーションへの実装
  • 人工知能研修サービス
◆ お問合せ先 ◆
(株)クラスキャット
セールス・インフォメーション
E-Mail:sales-info@classcat.com