世界を動かす技術を、日本語で。

小さなボルツマンマシン

概要

  • Boltzmann Machineの 学習アルゴリズム であるContrastive Divergence(CD)について解説
  • エネルギー関数 と確率分布の定式化を示し、勾配計算の流れを説明
  • 重み・バイアスの更新規則 を導出し、CDによる近似手法を紹介
  • Gibbsサンプリング を用いたモデル期待値の近似方法を解説
  • 学習手順の 正負フェーズ とパラメータ更新式をまとめて確認

Contrastive DivergenceによるBoltzmann Machineの学習

Boltzmann Machineの基本構造

  • 可視層(visible layer) v と隠れ層(hidden layer) h を持つことを前提とする
  • 重み行列 W で可視層と隠れ層を接続
  • バイアスベクトル b (可視層用)と c (隠れ層用)を用意
  • エネルギー関数(行列表現)を以下のように定義
    • $E(v, h) = -\sum_{i=1}^{m} \sum_{j=1}^{n} w_{ij} v_i h_j - \sum_{i=1}^{m} b_i v_i - \sum_{j=1}^{n} c_j h_j$
    • 定式化の確認

確率分布と目的関数

  • 同時分布 :$P(v, h) = \frac{1}{Z} e^{-E(v, h)}$
    • $Z$は分配関数(正規化定数)で全状態に対して和を取ることにより定義
  • 周辺尤度 :$P(v) = \sum_{h} P(v, h)$
  • 対数尤度 :$\log P(v) = \log \sum_{h} e^{-E(v,h)} - \log(Z)$
    • 学習データの尤度最大化を目的とすること

勾配とパラメータ更新則

  • 重み$w_{ij}$に関する 勾配
    • $\frac{\partial \log P(v)}{\partial w_{ij}} = \langle v_i h_j \rangle_{data} - \langle v_i h_j \rangle_{model}$
    • $\langle \cdot \rangle_{data}$:データ分布での期待値
    • $\langle \cdot \rangle_{model}$:モデル分布での期待値
  • バイアス$b_i$と$c_j$も同様の形で導出
  • パラメータ更新則 (学習率$\eta$を用いる)
    • $\Delta w_{ij} = \eta (\langle v_i h_j \rangle_{data} - \langle v_i h_j \rangle_{model})$
    • $\Delta b_i = \eta (\langle v_i \rangle_{data} - \langle v_i \rangle_{model})$
    • $\Delta c_j = \eta (\langle h_j \rangle_{data} - \langle h_j \rangle_{model})$
    • 更新則の確認

モデル期待値の近似とGibbsサンプリング

  • モデル期待値 の計算は厳密には困難
  • Gibbsサンプリング により近似することが一般的
    • 正フェーズ :$h^{(0)} \sim P(h | v^{(0)} = \text{data})$をサンプリング
    • 負フェーズ :$k$ステップGibbsサンプリング($v^{(t+1)} \sim P(v | h^{(t)})$と$h^{(t+1)} \sim P(h | v^{(t)})$を交互に繰り返す)
  • $k=1$のときが Contrastive Divergence-1(CD-1) と呼ばれる
    • 計算コストと近似精度のバランス

Contrastive Divergenceによる学習手順

  • 正フェーズ :データから隠れ層をサンプリングし期待値を計算
  • 負フェーズ :Gibbsサンプリングで生成データを得て期待値を計算
  • パラメータ更新
    • 上述の差分(データ期待値とモデル期待値)で重み・バイアスを更新すること
  • 反復処理 :全データで繰り返し学習を進めること

このように、Contrastive Divergenceは Boltzmann MachineRestricted Boltzmann Machine(RBM) の学習において、現実的な計算コストで近似的にパラメータを更新するための代表的な手法であることを理解することが重要です。

Hackerたちの意見

いい説明だね!ちょっとお知らせだけど、マウススクロールがなぜかすごく敏感なんだよね(モバイルではちゃんとスワイプできると思うけど、確認してない)。そのせいで、スクロールしようとすると最初から最後の「ページ」までジャンプしちゃう。幸い、キーボード入力はうまくいったから、全体を読むことができたよ。

懐かしいなぁ。1990年、C言語で「ニューロン」の配列からボルツマンマシンやパーセプトロンを作ってた頃を思い出す。あの頃、AIを何に使ってたっけ?MIDIメロディの次の音を予測したり、5x9のドットグリッド上でスコアの音符(ミニム、クロチェット、クエイバー)の形を認識したりしてた。85%の精度が「十分良い」って言われてたよ。

出力は音楽っぽかった?

5 x 9のドットグリッド上でスコアされた音符、ミニム、クロシェ、クエイバーの形を認識する 音楽を線のあるページから読むのは面白いプロジェクトになりそうだね、特に3Blue1BrownのNNの例みたいにゼロからやるのは。[1] チャック[2]みたいなものと組み合わせれば、今日の技術で完全にクライアントサイドのアプリケーションが作れるよ。[1] - https://www.3blue1brown.com/lessons/neural-networks [2] - https://chuck.stanford.edu/

あ、これは面白いデモだね。15年前に大学でGeoff Hintonのニューラルネットワークの講義を受けたんだけど、ボルツマンマシンについてもいくつかの講義で説明してた。> 制限付きボルツマンマシンは、可視ニューロンと隠れニューロンが互いに接続されていない特別なケースだよ。この表現は間違ってるね;可視ニューロンが隠れニューロンに接続されていないことを示唆してる。正しい表現はこうだ:可視ニューロン同士は接続されていなくて、隠れニューロン同士も接続されていない。あるいは:可視ニューロンと隠れニューロンはそれぞれのタイプ内で内部接続を持たない。

あるいは:可視ニューロンと隠れニューロンはそれぞれのタイプ内で内部接続を持たない。これがただのMLPじゃない理由がちょっとわからないな。ボルツマンマシンの何が違うの?編集:あ、気にしないで、イントロの概要に行くためにスクロールする必要があるって気づかなかった。0xTJの[フラグ付き][死んだ]コメントが、スクロールをハイジャックしたり再発明しようとするのは望ましくないって言ってるのはその通りだね。

デイビッド・アクリーについての面白い記事だよ https://news.unm.edu/news/24-nobel-prize-in-physics-cited-gr... 彼のT2タイルプロジェクトもチェックしてみてね。

重要なポイントは、これらのブレイクスルーを作るのにたくさんの人が関わっているってことだね。大学院生の価値はしばしば見落とされがちだけど、彼らはすごく貢献して、その後さらに研究を進めるんだ。アメリカが研究を無駄だと見なすのはどうしてなんだろう、これまでにすごく進んできたのに?

もし理解できていれば、今日のニューラルネットワークで使っている勾配ベースの前方と後方のパスの代わりに、重みの更新を計算するためにギブスサンプリングが必要なんだよね。これがどうしてそうなのか、誰か理解してる?

専門家ではないけど、ベイズ系のトレーニングを少し受けたことがあって、似たような問題を扱ってるんだ。通常、Gibbsサンプリングは、直接的な勾配がないとき(またはポイント推定ではなく分布そのものを再現したいとき)に使われるけど、サンプリングが簡単な周辺/条件付き尤度がある場合には使えるよ。各可視ノードは各隠れノードに依存していて、各隠れノードは全ての可視ノードに影響を与えるから、勾配がすごく複雑になっちゃうんだ。だから、周辺尤度に基づいて調整するためにGibbsサンプリングを使う方がずっと簡単なんだよね。

もしかしたら間違ってるかもしれないけど、これはRBMの無向構造が原因の一部だと思うから、フィードフォワードネットワークのように計算グラフを構築できないんだよね。

ここでもちょっと意見を言わせてもらうね。ギブスサンプリングはモデル分布の期待値を近似するために使われてると思う。この値は対数尤度の勾配を計算するのに必要だけど、分布を積分するのは難しいんだ。これは、VAEから代表的なサンプルを引くためにMCMCを使うのと似た方法で行われるよ。深層学習の神経ネットワークの定式化では、勾配は明示的にモデル化された確率分布ではなく、データセットのバッチに対して推定されるんだ。

いい説明だね!たくさんの思い出がよみがえる!宣伝しちゃうけど、数年前にRBMのトレーニングを視覚化した動画を作ったんだ: https://www.youtube.com/watch?v=lKAy_NONg3g

僕の理解では、ハーモニウム(スモレンスキー)が最初の制限ボルツマン機械だったけど、「エネルギーを最小化する」のではなく「ハーモニーを最大化する」ことに焦点を当ててたんだよね。スモレンスキー、ヒントン、ラムルハートがコラボしたときには、「フィットの良さ」と呼ばれてた。ハーモニウムの論文[1]はすごく読み応えがあるよ。ヒントンは明らかにスーパースターになったし、スモレンスキーは言語学について長い本を書いたんだ。誰かこの歴史についてもっと知ってる人いる?

タイトルを「小さなボルツマン脳」と勘違いしちゃった![0] 自分の自然な思考がすぐにその謎を解決したよ。これは、非常に小さなモデルにランダムに生成された重みを与えて、それが実際に何か有用なことをするかどうかをテストするケースだったんじゃないかな!結局、小さいモデルほど、単純なランダム生成で面白いものが生まれる可能性が高いからね。間違ってたけど、落ち込んでないよ!新しいモデルのクラス、「バイアスなしアーキテクチャインスタントボルツマンモデル」(UA-IBM)を提案するよ。いつか、量子コンピュータが十分大きくなって、全データセットをN個の直列化された値で定義されたモデルの古典的制約として設定できるようになるだろうね。その後、N個のキュービットを持つ量子システムが全ての古典的サンプルに対して一回の推論ステップを行い、全ての可能なパラメータとアーキテクチャを量子重ね合わせで処理して、結果を古典的な形で最良(またはほぼ最良)のモデルのパラメータとアーキテクチャに戻すんだ。誰か余ってるキュービットがあって、これを試してみたい人いる?(すべてが量子でありながら、実際に使えるものがほとんどないという皮肉。 (SFストーリーの前提:一度限りの量子センサーを進化させた異星人種がいて、それが全体の量子感覚システム、次に神経系、そして最終的に完全な量子知能に進化したとしたら、彼らはどんな社会や技術的軌道を持っているんだろう?彼らがブラックホールの近くにいることを願うよ、そうすれば彼らの爆発的な進歩が私たちを脅かすことはないから。そしていつか、彼らが重力井戸から脱出する日が来て…)[0] https://en.wikipedia.org/wiki/Boltzmann_brain

それは量子コンピュータの動作方式じゃないよ。

可哀想な量子存在たち。自分たちの思考の速度を超える計算モデルにアクセスできず、計算が終わるのをずっと待たされる運命なんだ。

ここで作者です!コメントありがとう、これがフロントページに載るとは思わなかったよ。今、誤字や余白、スクロールの問題を整理してるから、指摘してくれてありがとう。

誤字を直したから、今はモバイルでもずっと見やすくなってるはずだよ。