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のコメント
  • 私の理解では、Harmonium(Smolensky)が最初の restricted Boltzmann machine で、「energy」を最小化する代わりに「harmony」を最大化するという概念だった。Smolensky、Hinton、Rummelhart が共同研究していたときは、これを「goodness of fit」と呼んでいた。Harmonium の論文は本当に印象的な読み物だ。Hinton は AI 分野のスーパースターになり、Smolensky は言語学関連の長い本を執筆した。この歴史についてもっと知っている人がいるのか気になる

  • David Ackley に関する興味深い記事の紹介。T2 Tile Project も見てみる価値がある

    • こうした重要な発展には本当に多くの人が関わっている、というのが重要な点だ。大学院生たちが本当に多くの貢献をしていて、彼らの研究が後になってさらに発展する。研究があらゆるものを大きく前進させてきたのに、なぜアメリカでは研究を無駄だと考えるのか分からない
  • 筆者です。たくさんのコメントに感謝します。こんなに人気が出るとは思っていませんでした。誤字、余白、スクロールの問題などを修正中です。報告してくれてありがとう

    • 誤字の修正完了。これでモバイルでもずっと見やすくなった
  • タイトルを "A Tiny Boltzmann Brain" と読み間違えた。私の自然な脳は即座にこの混乱を解決した。ごく小さなモデルにランダムに重みを与えて、何か意味のあることができるか試す実験なのだろうと推測した。モデルが小さいほど、ランダム生成から面白いものが出てくる確率は相対的に高いのではないかと思った。私の推測は外れたが、それでもまだめげてはいない。"Unbiased-Architecture Instant Boltzmann Model"(UA-IBM)という新しいモデル系列を提案する。いつか十分に大きな量子コンピュータができれば、データセット全体をモデルの全パラメータとアーキテクチャの量子状態に重ね合わせて、一度に推論できるだろうという想像だ。こういう実験を試せる余っている qubit を持っている人はいないだろうか?(ちなみに、あらゆるものが量子的でありながら、現時点ではそれを実用的にうまく活用するのが難しいという現実は皮肉だ。そして、異星文明が単一の量子センサーから発展して、量子的な神経系全体を持つ存在になるとしたら、どんな社会や技術的経路をたどるのか想像してしまう)

    • かわいそうな量子生命体たち。自分の思考速度より速い計算モデルにアクセスできず、いつも長時間の計算待ちを強いられる運命なのだろう
    • 量子コンピュータはそういうふうには動かない、と指摘しておく
  • 説明がとても良い。参考までに言うと、マウススクロールが敏感すぎる(たぶんモバイルでは問題ないと思う)。スクロールするたびに最初のページと最後のページへ飛んでしまって不便だった。幸い、キーボード入力では正常に最後まで読めた

  • 私の理解が正しければ、今日使われているニューラルネットワークとは違って、weight update のために gradient ベースの forward/backward pass ではなく gibbs sampling が必要になる。なぜそうなるのか知っている人がいれば気になる

    • 私の理解でも、gibbs sampling はモデル分布に対する期待値を近似するために使う。log likelihood の gradient を計算するには分布の積分が必要だが、直接計算するのは不可能だ。VAE で MCMC によって代表サンプルを引くのと似ている。ディープラーニングではデータセットのバッチを通して gradient を推定するが、RBM では明示的にモデル化された確率分布の期待値が必要になる
    • 専門家ではないが、Bayesian 分野の正式な教育を少し受けたことがある。gibbs は gradient が明確でない、あるいは分布そのものを復元したいときによく使われる。各 visible ノードは hidden ノードに依存し、hidden ノードも visible ノードに影響するので、gradient が非常に複雑になる。だから marginal likelihood に基づく gibbs sampling を使うほうがずっと単純だ
    • 間違っているかもしれないが、RBM の undirected な構造のためだと思う。feed-forward network と違って computational graph を作れない
  • この記事を見て昔を思い出した。1990年に void pointer でニューラルネットワークのノードを配列として作り、C で Boltzmann machine と perceptron を実装した。当時の「AI」の用途は、MIDI メロディから次の音を予測したり、5x9 のドット領域で minim、crotchet、quaver のような音符の形を認識したりすることだった。85% の認識率なら十分「良い」と見なされていた

    • 5x9 のドット領域で音符の形を認識するというのが面白い。3Blue1Brown のニューラルネットワークの例のように、完全にゼロから自分で実装する感じだ。Chuck のようなものを組み合わせれば、今ならブラウザ上でクライアントサイドのこうしたプログラムも作れそうだ
    • その結果の音が音楽的に聞こえたのかも気になる
  • 文章が易しくて明快だった。いろいろ懐かしい気持ちになった。恥ずかしながら宣伝すると、RBM の学習過程を可視化した動画を昔作ったことがある

  • 本当にすっきりしたデモだ。昔 Geoff Hinton のニューラルネットワーク講義で Boltzmann machine について何度も講義を聞いたのを思い出した。ひとつ指摘すると、「restricted Boltzmann machine では visible と hidden のニューロンが互いに接続されていない」というような説明は誤解を招く表現だ。visible ノードと hidden ノードが互いに接続されていないように見えてしまうからだ。正確には、同じタイプの中で、つまり visible 同士あるいは hidden 同士にだけ接続がないということだ。あるいは、visible ノードと hidden ノードには、それぞれ同種内の内部接続がないと説明できる

    • 「visible/hidden ニューロン同士には内部接続がない」と聞いて、じゃあ単なる MLP と何が違うのか混乱した。でも、序論部分へ上にスクロールする必要があることに後から気づいた。そして、スクロールの実装を新しく作ったり直したりするのは、あまり望ましくないという点にはまったく同意する