EMアルゴリズムをもとに潜在変数モデル群の違いを整理する（1/4回目）


4回分の記事を通して、筆者が親しみのある潜在変数モデル群を題材に、EMアルゴリズムと呼ばれる共通の計算手法を用いて各モデルを比較し、性質の違いをまとめます。それにより、モデル間の性質の違いを理解する助けとなることを目指します。

# はじめに
### 執筆の動機
ある課題に対して機械学習モデルを調べてみると、さまざまな手法が存在し、どのモデルを選べばよいか迷った経験はないでしょうか？

たとえば、クラスタリングや次元削減といった教師なし学習のタスクに対しても、複数のモデルが提案されています。同じデータに対して、どのモデルが最適かを判断するのは時間がかかる作業だと思います。

モデル選択では、そのモデルがどのような数理的背景に基づいているかを理解することが重要です。しかし、各モデルは異なる数式を用いており、性質を横断的に比較するのは難しいと感じることもあるでしょう。

そのようなとき、「そのモデルがどのような最適化問題を解いているのか」という観点で整理することが、モデルの性質を理解し比較するうえで1つの有効な手段になります。

本記事では、この観点を軸にして、潜在変数をもつ代表的なモデル群を取り上げ、それぞれがどのような最適化問題を解いているのかを比較・整理していきます。これらは、クラスタリングやモデリングといった教師なし学習の文脈でよく登場するモデル群です。

### 本シリーズの流れ
これから4回に渡り以下の図の流れで解説します。
![IMG_2259.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3451727/ed04999e-dcca-4aa1-9122-96ce175bdce2.jpeg)


第1回目は確率推論の枠組みとして最尤推定から始まり、最適化問題の対象となるQ関数,負担率の導入までを確認します。
第2回目は、クラスタリングの課題に対するモデルに着目し、そのQ関数,負担率を比較します。
第3回目は、次元削減（その中でも、低次元空間によりデータ分布のモデル化するモデリング）の課題に対するモデルに着目し、そのQ関数,負担率を比較します。
第4回目は、総まとめとして、モデル群の性質をQ関数,負担率をもとに比較します。

本シリーズでは、全4回の記事を通して、この表の意味や各モデルの違い・共通点について解説することを目指します。専門用語も多く登場しますが、説明の中で回収できるようにしたいと思います！

### 本シリーズで登場する潜在変数モデル群

本記事では、代表的な潜在変数モデルのいくつかを取り上げ、それらの特徴を比較していきます。以下に、登場するモデル群とその性質をまとめた表を示します。詳細は記事中で解説していきます。

| モデル名称 | 潜在変数の値 | 学習タスク |モデルの特徴|
|:-----------|------------:|:------------:|:------------:|
|K-means | 離散 |クラスタリング|分散推定なし|
|GMM     | 離散 |クラスタリング|分散推定あり|
|PPCA     | 連続 |モデリング|線形写像で表現|
|GTM      | 連続 |モデリング|非線形写像で表現|



### 本シリーズで使用する知識
以下の知識をもとに話を展開していきます。

確率論・統計学
・最尤推定、尤度関数
・ベイズの定理

機械学習モデル
・クラスタリングやモデリング
・離散値の潜在変数モデル
・連続値の潜在変数モデル
・EMアルゴリズム

# 記事の内容
本記事は第1回目にあたります。ここでは、最尤推定と潜在変数の導入、潜在変数導入の動機、最尤推定の近似とEMアルゴリズムの概要を説明した後、「はじめに」で示した潜在変数モデル群の表についてより詳しく説明します。

# 最尤推定と潜在変数の導入
一般的に、機械学習では、データが従うモデル（関数）を自作した後、データと最も合うようにするため、モデルのパラメータ調整が必要です。最尤推定では、データの分布を再現する確率が最も高くなるようにモデルのパラメータ調整を考えます。

具体的な課題は、尤度関数や対数尤度関数を最大化するパラメータ値を見つけることです。
今回は対数尤度関数で考えます。以下のように定義されます。
```math
L(\theta)=\sum_n^N\log p(x_n|\theta) 
```
ここで$N$個のデータがあるとして、$n$番目のデータ点を$x_n$としました。またパラメータを$\theta$としました。

さて、今データ点$x_n$がある変数$z_n$によって、生成されたと考えてみます。つまり、関数$F_{\theta}$によって$x_n=F_{\theta}(z_n)$のような関係が成り立つとします。このような関係を確率モデルの枠組みの中で導入したい場合、どうするべきでしょうか？

その一つの回答が、$z_n$を$x_n$の同時確率変数とみなし、確率の周辺化の性質を使い導入する方法です。

具体的には、以下のように形で導入できます。

```math
\log p(x_n|\theta) =\log \int p(x_n,z_n|\theta) dz_n
```

ここで、同時分布$p(x_n,z_n|\theta)$は、確率の積の公式によりさらに分解できます。

```math
p(x_n,z_n|\theta)=p(z_n)p(x_n|z_n,\theta)
```
この式は、潜在変数$p(z_n)$の分布と潜在変数$z_n$と$\theta$が与えられた時の観測データ$x_n$の分布$p(x_n|z_n,\theta)$の積を取ることで、同時分布が得られることを意味しています。そして、$p(x_n|z_n,\theta)$に埋め込めば、$F_{\theta}$を確率モデルの中に導入できます。

さて、この分解により、$p(z_n)$の計算では$z_n$は未知ですが、$p(x_n|z_n,\theta)$の計算では$z_n$が既知になっており$\theta$のみが未知になっています。後ほど説明しますが、この未知変数を分解できる性質に着目すると、対数尤度関数を近似する計算を作ることができます。

## 潜在変数導入の動機
さきほどは仮の設定でいきなり潜在変数を導入しましたが、そもそもなぜ導入する必要があるでしょうか？
ここでは、少なくとも２つの動機を説明します。

1.$p(x|\theta)$の計算が難しいので回避したい

データ点$x$の要素間に相互作用がような難しいケースの場合、潜在変数を導入して、$p(x|\theta)$よりも計算が簡単な確率モデル$p(x,z|\theta)$に置き換えます。一見すると、積分計算があるため複雑に見えるものの、データ点$x$の要素間の相互作用を$z$に持たせつつ、潜在変数に対する条件付き独立の性質が使えるため、相互作用を直接モデルに組み込むよりも計算が単純になります。

例えば、ボルツマンマシンは、データ間の相互作用をパラメータとして組み込んだモデルですが、直接扱うとパラメータの最適化が難しいです。そこで、隠れ変数を導入して間接的に相互作用を組み込みます。この隠れ変数により条件付き独立性が利用できるようになり、データ間の相互作用を直接扱わないより単純なモデルで同じ表現ができるようになります。制限付きボルツマンマシンとして知られています。

2.$x$が高次元でデータ分布を把握することが難しいので、代わりに$x$と対応する低次元の変数$z$でデータ分布を把握したいケース

高次元データのクラスターの把握や視覚化をしたいケースの場合、データ点を再現する分布でありつつもデータ点と対応する潜在変数がどんな分布かを知ることが重要になります。確率モデルとして考えると$p(z|x,\theta)$の分布を得ることが目的となります。

例えば、潜在変数を２次元の連続変数とすると、高次元上で連続的に分布している観測データ$x$の分布の様子を$z$により視覚化的に知ることができます。


# 最尤推定の近似とEMアルゴリズム
さて、先ほど登場した対数尤度関数ですが、$\log\int$の形があります。ですので、そのままでは$z$,$\theta$の計算を同時にしないといけません。二つの未知変数を同時に調整するのですから大変そうですね。

ではもし、$\int\log$の形に変更できるとするとどうでしょうか？対数の性質から、$\log  p(z_n)p(x_n|\theta,z_n)$を$\log p(z_n)+\log p(x_n|\theta,z_n)$の形にできるので$z$と$\theta$を交互に更新する形でより容易に計算できそうです。

実際、このような$z$と$\theta$の交互計算により対数尤度を最大化する近似計算方法があります。EMアルゴリズムや変分ベイズ法として知られています。

EMアルゴリズムと変分ベイズ法は計算する対象が異なります。その違いを表に示します。
| 計算手法 | $z$ の推定| $\theta$ の推定|
|:-----------|------------:|:------------:|
| EMアルゴリズム | 分布推定 |点推定|
| 変分ベイズ法   | 分布推定 |分布推定|

これらの近似計算方法は、対数尤度の形から導出されるため、特定の潜在変数モデルの形に依存しません。したがって、導出後に、設計したモデルを当てはめることができます。計算方法が共通のため、各潜在変数モデルの特性や違いを比較できそうですね！

今回はより推定する情報が少ないという点で、より計算の課題が単純なEMアルゴリズムに着目して取り組みます。
## EMアルゴリズムの計算
EMアルゴリズムでは、Q関数と呼ばれる関数を基に逐次計算を行い、対数尤度を最大化する解に徐々に近づけていきます。本記事では、理論の詳細は割愛し、記事に必要な範囲に絞って説明します。（理論の詳細を知りたい方は、例えば[こちらのサイト](https://academ-aid.com/ml/em)などを参考して、逐次最適化のイメージから、掴むことをお勧めします。)

まず、Q関数を以下に示します：
```math
Q(\theta, \theta^{(t)}) = \sum_{n=1}^{N} \int p(z_n \mid x_n, \theta^{(t)}) \log p(x_n, z_n \mid \theta) \, dz_n 
```
ここで、$p(z_n \mid x_n, \theta^{(t)})$ は、$t$回目の計算のパラメータに基づく観測データ$x_n$に対する潜在変数の事後分布です。
また$p(x_n, z_n \mid \theta)$は観測データと潜在変数の同時確率分布です。

重要なポイントは、計算を分割して進められる点です。具体的には、$p(z_n \mid x_n, \theta^{(t)})$を計算する段階（Eステップ）では、$\theta^{(t)}$が既知のため$z$に関する計算のみで済みます。一方、Q関数を最大化する段階（Mステップ）では、潜在変数$z$の分布が既知であるため、パラメータ$\theta$の計算に集中できます。この分離により、$z$と$\theta$を同時に計算する必要がなくなります。


このQ関数に注目すると、EMアルゴリズムという共通の計算手法が適用されているため、異なる潜在変数モデル間の違いを比較する手がかりが得られます。

次回以降の記事では、Q関数をもとに、各モデルの性質の違いを比較していきます。

# 学習課題と潜在変数モデル群

本シリーズではクラスタリングとモデリングの2種類の学習課題を確認します。以下の図は各課題において潜在変数を導入したときの観測データの生成過程を表しています。

クラスタリングとモデリングの違い
![IMG_1782.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3451727/ee870122-edbd-4478-a245-ac65b7fea272.jpeg)

どちらのタスクも、確率的に抽出された潜在変数が、写像により観測空間に移り、さらにノイズが印加されて観測データが得られる、という共通の過程に従っています。
一方、潜在変数の値の定義域（離散値または連続値）は異なります。そのため潜在変数の値は、離散値の場合は集合の要素、連続値の場合は潜在空間上の点に対応します。

次に本シリーズで扱うモデル群を表に示します。

注意：各モデルの変数の定義域や導入背景には異なるため、潜在変数モデル群としてまとめることは必ずしも一般的でないかもしれません。本記事では独自の視点でこれらを1つのグループとして扱っている点にご留意ください。

| モデル名称 | 潜在変数の値 | 学習タスク |モデルの特徴|
|:-----------|------------:|:------------:|:------------:|
|K-means | 離散 |クラスタリング|分散推定なし|
|GMM     | 離散 |クラスタリング|分散推定あり|
|PPCA     | 連続 |モデリング|線形写像で表現|
|GTM      | 連続 |モデリング|非線形写像で表現|

まず、同じクラスタリングであってもK-meansとGMMは各クラスタの分散を推定するか否かで区別することができます。一般には、分散を推定する方がよりデータを表現するモデルが得られそうです。この点でGMMはK-meansよりも一般的なモデルと考えられます。実際に、GMMのある種の極限としてk-meansが得られます。その点は、次回以降の記事で説明していきます。

また、同じモデリングであっても、PPCAとGTMでは写像の表現によって区別することができます。一般には、非線形写像の方がよりデータを表現するモデルが得られそうです。この点でGTMはPPCAよりも一般的なモデルと考えられます。しかし、詳細は割愛しますが、PPCAは凸な最尤推定問題に帰着することに対して、GTMは非凸な最尤推定問題に帰着するため、最尤推定解が常に見つかるとは限らない、という理論上の課題が生じます。その点も、次回以降の記事で説明していければと考えてます。

# おわりに
最後まで読んでいただきありがとうございました。

本記事を執筆する動機は、Q関数をもとに色んなモデルの違いが見えると面白くない？という些細なものです。ただ、いざ記事にするとQ関数の導入するための知識が必要なことに気づき、結果、本記事のような構成になりました。図などを導入し、もう少し視覚的に読みやすくする工夫は今後の課題とします。

知識至らずで曖昧な点があると思います。ご指摘やご質問などがございましたら、編集や回答いたします。コメントお待ちしております。