2 ポイント 投稿者 GN⁺ 2025-05-17 | 1件のコメント | WhatsAppで共有
  • Boltzmannマシンの構造と目的についての簡単な紹介
  • エネルギー関数と確率分布を数式で定義
  • 重みとバイアスの更新則を微分によって導出
  • 正相・負相Gibbsサンプリングによるモデル期待値の近似方法を説明
  • 最後に**対比発散(Contrastive Divergence)**アルゴリズムを全体的に整理

BoltzmannマシンとContrastive Divergenceの概念

  • Boltzmannマシンでは、入力層(visible layer)と隠れ層(hidden layer)、そしてそれらをつなぐ重み行列と各層それぞれのバイアスベクトルを持つ

エネルギー関数と確率分布

  • エネルギー関数は行列形式で次のように定義される

    E(v, h) = -ΣiΣj wij vi hj - Σi bi vi - Σj cj hj
    • v: 可視層ベクトル、h: 隠れ層ベクトル、w: 重み、b/c: 各層のバイアス
  • Boltzmannマシンの結合分布

    P(v, h) = (1/Z) * exp(-E(v, h))
    • Z(分配関数)は確率分布を正規化する役割を持つ

対数尤度(log-likelihood)と微分

  • 訓練データの尤度を最大化することで学習を進める

    log(P(v)) = log(Σh exp(-E(v, h))) - log(Z)
  • 重み wij に対する対数尤度の偏微分は

    ∂(log P(v))/∂wij = <vi hj>データ - <vi hj>モデル
    • < · >データ: 実際のデータに対する期待値
    • < · >モデル: モデルが生成したデータに対する期待値

重みとバイアスの学習則

  • 重みとバイアスは次のように更新する
    • Δwij = η(<vi hj>データ - <vi hj>モデル)
    • Δbi = η(<vi>データ - <vi>モデル)
    • Δcj = η(<hj>データ - <hj>モデル)
    • η は学習率

Contrastive Divergenceアルゴリズム

  • モデル期待値 < · >モデル は直接計算が難しいため、Gibbsサンプリングを用いる
  • Contrastive Divergence は次の手順で近似する
    1. 正相: 隠れ層 h(0) を P(h | v(0)=データ) からサンプリングする
    2. 負相: k回の Gibbsサンプリングを反復する
    • 交互に v(t+1) ~ P(v | h(t)), h(t+1) ~ P(h | v(t)) としてサンプリングする
  • 更新時点では、データ期待値とモデル期待値の差を用いる
    • Δwij = η(<vi hj>データ - <vi hj>モデル)
    • Δbi = η(<vi>データ - <vi>モデル)
    • Δcj = η(<hj>データ - <hj>モデル)

要約

  • Boltzmannマシンの学習の本質は、エネルギーベースモデルとして実データとモデルが生成した分布の間にある期待値の差を減らすことにある
  • Contrastive Divergenceは、この差の近似を高速かつ効率的に可能にする中核的な訓練手法
  • Gibbsサンプリングを通じてモデル分布と実データを結び付ける役割を果たし、この過程を反復することで、Boltzmannマシンがデータをうまく表現できるよう重みとバイアスを更新する

1件のコメント

 
GN⁺ 2025-05-17
Hacker News のコメント
  • 1990年に純粋な C で void ポインタの配列を使って「ニューロン」を作り、ボルツマンマシンやパーセプトロンを作っていた頃を思い出した
    当時「AI」でやっていたことといえば、MIDI メロディの次の音を当てたり、5×9 のドット格子から全音符・二分音符・四分音符・八分音符の形を認識したりする程度で、85% の精度なら「十分良い」と見なしていた

    • 五線譜から音符を読み取るのは面白いプロジェクトに聞こえる。特に 3Blue1Brown の数字ニューラルネットワークの例[1]のように、最初から自作するならなおさらそう思える
      Chuck[2] のようなものと組み合わせれば、今の技術で完全にクライアント側だけで動くアプリケーションも作れる

      [1] - https://www.3blue1brown.com/lessons/neural-networks

      [2] - https://chuck.stanford.edu/

    • 出力が音楽らしく聞こえたのか気になる

  • 理解している限りでは、Harmonium(Smolensky)が最初の制限付きボルツマンマシンだったが、「エネルギー」を最小化する代わりに「ハーモニー」を最大化していた
    Smolensky、Hinton、Rummelhart が共同研究していた頃は、これを「適合度」と呼んでいたようだ。Harmonium の論文[1]は本当に読みやすく、Hinton は当然ながらスーパースターになり、Smolensky は言語学に関する長大な本を書いた。この歴史についてもっと詳しい人がいるのか気になる

    [1] https://stanford.edu/~jlmcc/papers/PDP/Volume%201/Chap6_PDP8...

  • David Ackley についての面白い記事: https://news.unm.edu/news/24-nobel-prize-in-physics-cited-gr...
    T2 Tile Projectもぜひ見る価値がある

    • こうしたブレークスルーを生み出すには、多くの人々が関わっているというのが重要な点だ
      大学院生の価値はしばしば過小評価されるが、実際には非常に大きく貢献し、その後に研究をさらに発展させる。研究がこれほど多くのものを前に押し進めてきたのに、なぜ米国が研究を無駄のように見るのか分からない
  • タイトルを「A Tiny Boltzmann Brain」と読み間違えた[0]
    自分の自然な頭はすぐに謎を解いた。とても小さなモデルにランダム生成した重みを入れ、実際に役に立つことをするかをテストしたものだと思ったのだ。結局、モデルが小さいほど、単純なランダム生成がサイズの割に興味深いものを生み出す可能性は高くなる
    訂正は受け入れるが、落胆はしていない。「Unbiased-Architecture Instant Boltzmann Model」(UA-IBM)という新しいモデルの分類を提案する。いつか十分に大きな量子コンピュータができれば、データセット全体を、すべてのパラメータと構造設定を表す N 個のシリアライズされた値で定義されるモデルの古典的制約として設定できるはずだ。そして N 個の量子ビットを持つ量子系に、可能なすべてのパラメータと構造を量子重ね合わせ状態に置かせ、古典サンプル全体に対して推論を 1 ステップ実行させたうえで、結果を収縮させ、最良またはほぼ最良のモデルのパラメータと構造を古典的な形で受け取る、という具合だ
    これを試せるだけの量子ビットが余っている人がいるのか気になる。すべてが量子であるにもかかわらず、あまりにも扱いづらくてまだほとんど活用できていないという皮肉がある
    SF の設定としては、ある異星種が使い捨ての量子センサーを進化させ、それが量子的な感覚系と神経系全体につながり、最初から完全な量子知能へと発展したケースを想像できる。そういう社会と技術の軌跡はどのような姿になるのだろう。爆発的な進歩がまだ我々を脅かさないよう、彼らがブラックホールの近くを周回していることを願う。そしてある日、重力井戸を脱出して……

    [0] https://en.wikipedia.org/wiki/Boltzmann_brain

    • 量子コンピュータはそのようには動作しない
    • 哀れな量子的存在たちだ。自分の思考より速い計算モデルにアクセスできず、計算が終わるのを永遠のように長く待つ運命にある
  • 説明が良い。ちなみに、どういうわけかマウススクロールが敏感すぎる
    モバイルではスワイプが問題ないのだろうと推測するが、確認はしていない。スクロールしようとするたびに最初の「ページ」から最後の「ページ」へ、そしてまた逆方向へ飛んでしまった。幸いキーボード入力は機能したので、記事全体を読むことはできた

  • 正しく理解しているなら、最近なじみのあるニューラルネットワークのように勾配ベースの順伝播・逆伝播を使う代わりに、重み更新の計算に Gibbs サンプリングが必要らしい
    なぜそうなのか理解している人がいるのか気になる

    • Gibbs サンプリングは、モデル分布に対する期待値を近似する方法として使われているようだ
      この値は対数尤度の勾配を計算するのに必要だが、分布を積分するのは扱いにくいからだ。VAE で代表サンプルを得るために MCMC を使うやり方に似ている。ディープラーニング式のニューラルネットワークでは、明示的にモデル化された確率分布ではなく、データセットのバッチに対して勾配を推定する
    • 専門家ではないが、似た問題を扱うベイズ方面の正式な教育を少し受けたことがある
      通常、Gibbs は直接的な勾配が単純でない場合や、点推定ではなく分布そのものを再現したい場合に使われる。その代わり、サンプリングしやすい周辺尤度・条件付き尤度があるときに有用だ。各可視ノードが各隠れノードに依存し、各隠れノードがすべての可視ノードに影響するため、勾配は非常に込み入ったものになり、したがって周辺尤度に基づいて調整するGibbs サンプリングの方がずっと単純になる
    • 間違っているかもしれないが、これは部分的にはRBM の無向構造のためだと思う
      そのため、順伝播ニューラルネットワークのように同じ方法で計算グラフを作ることができない
  • すっきりしていて良い説明だ。昔の記憶がたくさんよみがえった
    恥ずかしながら宣伝すると、数年前にRBM 学習の可視化を作ったことがある: https://www.youtube.com/watch?v=lKAy_NONg3g

  • デモがすばらしい。15年前に大学で Geoff Hinton のニューラルネットワーク講義を受けたが、彼は数回の講義にわたってボルツマンマシンを説明していた
    「制限付きボルツマンマシンは、可視ニューロンと隠れニューロンが互いに接続されていない特殊な場合」という文は誤りだ。この表現だと、可視ニューロンが隠れニューロンと接続されていないという意味に聞こえる
    正しい表現は「可視ニューロン同士は互いに接続されておらず、隠れニューロン同士も互いに接続されていない」だ。あるいは「可視ニューロンと隠れニューロンは、それぞれ自分の種類の内部には接続を持たない」と言える

    • そう考えると、単なる多層パーセプトロンと何が違うのかよく分からない。ボルツマンマシンは何が違うのか?
      追記: 分かった。入門的な概要を見るには上にスクロールしなければならないことに気づいていなかった
      0xTJ の [flagged][dead] コメントのように、スクロールを乗っ取ったり再発明したりしようとする試みは望ましくない、という指摘は正しい