要このコラムでは確率モデルによる情報処理について、その概要をいくつかの具体例と共に見ていきます。確率モデルの利点は確率的な潜在要因を柔軟に組み合わせることができる事です。最初の例では確率的潜在要因をどのように取り扱うかを簡単な例で紹介します。変分ベイズ法と呼ばれる手法による潜在要因の推定方法の概要を説明します。最後に二つの全く違った例を同じ考え方でモデル化する事で、確率モデルの持つ柔軟性を示したいと思います。まとめ不確実性を考慮したモデル現実のデータを分析するとき、データの背後の不確実性や潜在的な要因が重要であることがしばしばあります。コンビニ店舗でのアイスクリームの需要を予測する時、気温や個人の嗜好のように不確実な要素を考慮する必要があります。1週間後の気温が暑ければ高い確度で需要は増えますし、寒ければ高い確度で需要は減るでしょう。その中間くらいの気温では需要の不確実さが高いと考えられます。その不確実さを予測できれば、例えば「中間くらいの気温では実際の需要がその気温における平均の予測値より10%以上低下する確率が30%なので、予測値より少なめに発注する」という判断が可能になります。以下の説明では、不確実さという言葉の代わりに、その具体的な指標である分散という言葉を用います。需要と実際の売り上げを同一視すれば、すなわち需要から売り上げが一意に決まるとすれば、気温から売り上げを予測するモデルは次のように図示できます。上記のように需要の平均と分散を取り入れたモデルでは次のように表現きます。後者のように、潜在要因(ここでは需要の平均と分散)に基づいて観測値(実際の売り上げ)が決まるモデルを一般的に潜在変数モデルと呼びます。潜在変数モデルは分析者が仮定した潜在変数に価値がある場合に有効です。潜在的な中間表現を持つという意味ではディープラーニングも同様です。潜在変数モデルと異なり、ディープラーニングでは一般的に潜在変数よりも最終的な出力である予測値に関心があります(ただし、近年ディープラーニングの説明性という観点から潜在変数への関心も高まっています)。確率的要素の組み合わせ平均と分散を取り入れたモデルは確率分布で表現できます。そのために条件付き分布について説明します。条件付き分布は\(p(y|x)\)のように表記して、\(x\)という条件の下で\(y\)が起こる確率を表します。サイコロを振ったときにその目が奇数であることが分かった場合、その目が2である確率は0なので、\(p(x=2|x~is~odd)=0\)のように表記します。今考えているモデルで、気温を\(x\)、実際の売り上げを\(y\)とします。需要の平均と分散は気温に依存すると仮定したので、それぞれ\(μ_y(x)\)、\(\sigma^2_y(x)\)と表記します。すると、売り上げが\(y\)となる確率は\[p(y|μ_y(x),\sigma^2_y(x))\]と表すことができます。\(μ_y(x)\)の具体的な表現として、例えば\(x\)に関する線形関数を仮定するのは自然でしょう。気温が極端に暑くも寒くもないときに分散が大きいという仮定をモデル化するためには、\(\sigma^2_y(x)\)をそのような関数で表現する必要があります。ここまでの説明では\(μ_y(x)\)と\(\sigma^2_y(x)\)はある確定した値としていました。これらの値が確率的である場合があります。\(μ_y\)を\(x\)から予測するモデルをデータから学習するとき、もしデータが少ないと予測の不確実性は大きくなるでしょう。\(\sigma^2_y(x)\)についても同様です。\(p(x|μ_y(x),\sigma^2_y(x))\)は分析者が仮定したデータ自体の不確実性を表現します。それに対して、ここではモデル推定の不確実性を述べている事に注意してください。後者の不確実性も、売り上げの場合と同様に、条件付き条件付き分布を用いて、\(p(μ_y|x)\)、\(p(\sigma^2_y|x)\)のように表します。複数の確率的事象が同時に起こる確率は確率の積となるので、このモデルの全ての確率的要素をまとめると次式のように表現されます。\[p(y,μ_y,\sigma^2_y|x)=p(y|μ_y,\sigma^2_y)p(μ_y|x)p(\sigma^2_y|x)\]左辺は気温が\(x\)の時に、売り上げ\(y\)が、需要の平均が\(μ_y\)、分散が\(\sigma^2_y\)が同時に起こる確率を表します。このような表現は確率モデル、あるいは確率的生成モデルと呼ばれます。長くなりますが、確率的潜在変数モデルと言ってもいいでしょう。参考までに、先ほどの図に変数名を加えた図は次のようになります。確率モデルの式は潜在変数の推定において重要です。この点について次に説明します。確率モデルでは潜在変数の確率分布の推定に関心があります。今回のモデルでは\(μ_y\)と\(\sigma_y\)に対応します。これら二つの変数をまとめて\(z\)と表す事にします。すると先ほどの式は\(p(y,z|x)\)と表されます。\(z\)は実際に観測できないため、気温\(x\)と売り上げ\(y\)が観測されたという条件の下での条件付き確率、すなわち\[p(z|x,y)\]を考えます。これは\(z\)の事後分布と呼ばれ、\(p(y,z|x)\)に基づいて計算されます。本当に求めたいものは\(x\)の値から上記の条件付き分布にできるだけ近い分布を予測するモデルです。この分布を\(q_\phi(z;x)\)と表します。入力\(x\)に対して確率分布を出力する関数だと考えてください。\(\phi\)はその関数のパラメータです。すると、問題は結局\(p(z|x,y)\)と\(q_\phi(z;x)\)の確率分布間の距離をできるだけ近くするような\(\phi\)を求める事であり、\(\phi\)に関する最適化問題に帰着されます。\(p(z|x,y)\)が計算できれば問題は容易に解けるのですが、実際に事後分布を計算するのは困難です。bound(ELBO)と呼ばれる次の量を最大化する事で\(\phi\)の最適値の近似解を得られることが知られています。q_\phi(z;x)]\right]\]ここで\(E_{q{(z|x)}}[·]\)は括弧の中の\(q_\phi(z;x)\)に関する期待値で、計算機上で実装するときは\(q_\phi(z|x)\)から生成した\(z\)のサンプル平均で近似されます。内側の括弧の中の最初の項は\(y\)と\(z\)が同時に起こる確率で、まさに確率モデルの表現そのものです。確率の計算は単なる積なので(対数確率なので実際は和になります)、\(p(y,z|x)\)は\(p(z|x,y)\)と比べて容易に計算できます。したがって、\(q_\phi(z;x)\)のサンプル生成と確率計算が容易であれば(そのような\(q_\phi(z;x)\)を用いることが多いです)、ELBOもまた容易に計算できます。ここでソフトウェアについて少し触れておきます。ELBOの最大化に基づく潜在変数の分布推定は変分ベイズと呼ばれます。変分ベイズはELBOに対して確率勾配法を適用するだけで実現できるという容易さと、Tensorflowに代表される近年の自動微分のライブラリの発展から、変分ベイズを容易に実行できるライブラリがいくつか提案されています。これらのライブラリを使えば、確率モデルを記述すれば潜在変数の推定を自動的に実行することができます。これらのライブラリは、様々な確率分布関数やそれらを組み合わせるためのユーティリティ関数から構成されます。adversarialnetwork(GAN)もサポートされている場合があります。probability(Edward2)などがあります。複雑な確率モデル確率モデルの構成は高い柔軟性を持ち、確率分布を組み合わせる事で様々なモデルを表現できます。例として、ここではトピックモデルとSLAMを紹介します。トピックモデルトピックモデルは元々は文書データ分析のために提案された代表的な確率モデルの一つで、文書を構成するトピックの組み合わせを潜在変数として推定します。トピックモデルでは、各文書を語順を無視した単語出現回数のベクトルで表現します。データの中の\(d(=1,\cdots,D)\)番目の文書に対するベクトルを\(\omega_d\)と表します。10,000の単語を分析対象に含める場合、\(\omega_d\)は10,000次元の非負整数のベクトルとなります。トピックモデルの目的は、文書ベクトルの集合から各文書のトピックと各トピックを構成する単語の分布を求めることです。トピックモデルでは、トピックを単語の確率分布として定義します。「野球」というトピックを考えると、「球場」「ボール」「バット」といった単語の出現確率が高くなるでしょう。「食べ物」というトピックなら「レストラン」「八百屋」「カレー」のような単語の出現確率が高くなるかもしれません。\(k(=1,\cdots,K)\)番目のトピックの確率分布のパラメータを\(\phi_k\)とします。文書\(d\)を構成するトピックの割合(確率)を\(K\)次元ベクトル\(\theta_d\)で表します。文書\(d\)の「野球」トピックの確率が\(\theta_{d,野球}=0.3\)、「野球」トピックが単語「バット」を含む確率が\(\phi_{野球,バット}=0.2\)の場合、文書\(d\)に単語「バット」が出現する確率は\(0.3\times0.2=0.06\)となります。最後に、文書\(d\)の\(n\)番目の単語の確率分布を考えます。そのために、\(n\)番目の単語に対して選ばれたトピックの番号を\(z_{dn}\)と表します。すると、\(z_{dn}\)が与えられた場合の\(\omega_{dn}\)の確率分布は\(p(\omega_{dn}|z_{dn})=p(\omega_{dn}|{\phi_z}_{dn})\)と表現することができます。以上をまとめると、トピックモデルの一つの単語に対する確率モデルは次のように表されます。\[p(\omega_{dn},z_{dn}|\theta_d,\phi)=p(\omega_{dn}|\phi,z_{dn})p(z_{dn}|\theta_d)=p(\omega_{dn}|\phi_{z_{dn}})p(z_{dn}|\theta_d)\]ここで\(\phi\)は\(\phi_k(k=1,\cdots,K)\)をまとめて表したものです。この式の右辺は、最初に文書\(d\)のトピック分布\(\theta_d\)に基づいて\(n\)番目の単語のトピック番号\(z_{dn}\)が決定し、全文書で共通のトピック番号\(z_{dn}\)の単語分布\(\phi_{z_{dn}}\)から\(n\)番目の単語が生成される、という過程を表現しています。トピック内単語分布\(\phi\)とトピック分布\(\theta_d\)を文書データ\(\{\omega_d\}_{d=1}^{文書数}\)から推定する事で文書の特徴を捉えることができます。この確率モデルを図示すると次のようになります。mappingの略であり、車やロボットのような移動体がセンサ信号に基づいて周囲の地図を作成しながら自己位置を推定する手法の総称です。SLAMのセンサ信号としてLIDARや2D/3Dカメラ画像などが用いられるのですが、ランドマークに基づく比較的単純なSLAMについて説明します。ここでは環境に複数(\(I\)個)のランドマークが配置され、それぞれについて移動体(ロボットとします)との相対距離を計測できるものとします。観測値にはノイズが含まれます。全てのランドマークの配置の事をここでは地図と呼びます。確率モデルを構成する変数は以下の通りです。目標は、観測した\(U\)と\(Z\)に基づいて潜在変数\(S\)と\(M\)を推定することです。時刻\(t-1\)におけるロボットの姿勢が(本当は未知なのですが)\(s_{t-1}\)であったと仮定し、その時に制御信号\(u_t\)(速度とステアリングの変位)を与えた時の次の時刻\(t\)での姿勢\(s_t\)を考えます。ロボットが速度とステアリングの変位に従って正確に動けるのであれば\(s_t\)は決定的に決まります。現実のロボットでは、計測誤差やタイヤの滑りなどの様々な要素のため、\(s_t\)は確率的に決まります。この条件付き確率分布を\(p(s_t|s_{t-1},u_t)\)と仮定します。これを遷移モデルと呼びます。\(t=0\)ではその前の情報はないので何らかの確率分布\(p(s_0)\)を仮定します。姿勢\(s_t\)と地図\(M\)が与えられた時のランドマークの相対位置の観測値の条件付き確率分布を\(p(z_t|s_t,M)\)と仮定します。これを観測モデルと呼びます。ランドマークに対する事前情報を表す確率分布を\(p(M)\)とします。まとめると、SLAMの確率モデルは次式で表現できます。\[p(S,M,Z|U)=p(M)p(s_0)\prod_{t=1}^Tp(z_t|s_t,M)p(s_t|s_{t-1},u_t)\]観測データ\(U\)と\(Z\)が与えられたとして、上記の確率モデルに対してベイズ推定を実行するとロボットの姿勢\(U\)と地図\(M\)の事後分布\(p(S,M|U,Z)\)が得られます。これまでと同様に、上記の確率モデルを図で表現すると次のようになります。上の二つのモデルと違い、潜在変数(姿勢)が時間方向の依存性を持つ点が特徴的です。遷移モデル\(p(s_t|s_{t-1},u_t)\)と観測モデル\(p(z_t|u_1,M)\)が\(s_t\)、\(s_{t-1}\)、\(u_t\)の線形変換とガウスノイズで記述できる場合、この確率モデルはカルマンフィルタと等価です(ただし遷移モデルと観測モデルは既知です)。SLAMでは両方とも非線形なモデルであり、拡張カルマンフィルタが必要です。拡張カルマンフィルタを自分で実装する場合、係数行列の微分の計算が必要なのですが、自動微分ライブラリの機能を用いる事で、確率モデルを記述するだけで推論を実行することができます。詳しい説明はこちらの資料をご参照ください。まとめ本稿では具体的な例を通して確率モデルがどのような問題に適用できるかを見てきました。一般的な機械学習では入力に対する出力の予測精度を向上する事が重要視されます。それに対して、今回紹介したような確率モデルでは、データの背後にある潜在要因間の構造を仮定した上で、その潜在要因を推定する事がその目的でした。扱おうとするデータに関する知識を活用して妥当な確率モデルを仮定する事で、データの真の姿を捉える事が期待できます。