Skip to content

ClasCat® AI Research

クラスキャット – 生成 AI, AI エージェント, MCP

Menu
  • ホーム
    • ClassCat® AI Research ホーム
    • クラスキャット・ホーム
  • OpenAI API
    • OpenAI Python ライブラリ 1.x : 概要
    • OpenAI ブログ
      • GPT の紹介
      • GPT ストアの紹介
      • ChatGPT Team の紹介
    • OpenAI platform 1.x
      • Get Started : イントロダクション
      • Get Started : クイックスタート (Python)
      • Get Started : クイックスタート (Node.js)
      • Get Started : モデル
      • 機能 : 埋め込み
      • 機能 : 埋め込み (ユースケース)
      • ChatGPT : アクション – イントロダクション
      • ChatGPT : アクション – Getting started
      • ChatGPT : アクション – アクション認証
    • OpenAI ヘルプ : ChatGPT
      • ChatGPTとは何ですか?
      • ChatGPT は真実を語っていますか?
      • GPT の作成
      • GPT FAQ
      • GPT vs アシスタント
      • GPT ビルダー
    • OpenAI ヘルプ : ChatGPT > メモリ
      • FAQ
    • OpenAI ヘルプ : GPT ストア
      • 貴方の GPT をフィーチャーする
    • OpenAI Python ライブラリ 0.27 : 概要
    • OpenAI platform
      • Get Started : イントロダクション
      • Get Started : クイックスタート
      • Get Started : モデル
      • ガイド : GPT モデル
      • ガイド : 画像生成 (DALL·E)
      • ガイド : GPT-3.5 Turbo 対応 微調整
      • ガイド : 微調整 1.イントロダクション
      • ガイド : 微調整 2. データセットの準備 / ケーススタディ
      • ガイド : 埋め込み
      • ガイド : 音声テキスト変換
      • ガイド : モデレーション
      • ChatGPT プラグイン : イントロダクション
    • OpenAI Cookbook
      • 概要
      • API 使用方法 : レート制限の操作
      • API 使用方法 : tiktoken でトークンを数える方法
      • GPT : ChatGPT モデルへの入力をフォーマットする方法
      • GPT : 補完をストリームする方法
      • GPT : 大規模言語モデルを扱う方法
      • 埋め込み : 埋め込みの取得
      • GPT-3 の微調整 : 分類サンプルの微調整
      • DALL-E : DALL·E で 画像を生成して編集する方法
      • DALL·E と Segment Anything で動的マスクを作成する方法
      • Whisper プロンプティング・ガイド
  • Gemini API
    • Tutorials : クイックスタート with Python (1) テキスト-to-テキスト生成
    • (2) マルチモーダル入力 / 日本語チャット
    • (3) 埋め込みの使用
    • (4) 高度なユースケース
    • クイックスタート with Node.js
    • クイックスタート with Dart or Flutter (1) 日本語動作確認
    • Gemma
      • 概要 (README)
      • Tutorials : サンプリング
      • Tutorials : KerasNLP による Getting Started
  • Keras 3
    • 新しいマルチバックエンド Keras
    • Keras 3 について
    • Getting Started : エンジニアのための Keras 入門
    • Google Colab 上のインストールと Stable Diffusion デモ
    • コンピュータビジョン – ゼロからの画像分類
    • コンピュータビジョン – 単純な MNIST convnet
    • コンピュータビジョン – EfficientNet を使用した微調整による画像分類
    • コンピュータビジョン – Vision Transformer による画像分類
    • コンピュータビジョン – 最新の MLPモデルによる画像分類
    • コンピュータビジョン – コンパクトな畳込み Transformer
    • Keras Core
      • Keras Core 0.1
        • 新しいマルチバックエンド Keras (README)
        • Keras for TensorFlow, JAX, & PyTorch
        • 開発者ガイド : Getting started with Keras Core
        • 開発者ガイド : 関数型 API
        • 開発者ガイド : シーケンシャル・モデル
        • 開発者ガイド : サブクラス化で新しい層とモデルを作成する
        • 開発者ガイド : 独自のコールバックを書く
      • Keras Core 0.1.1 & 0.1.2 : リリースノート
      • 開発者ガイド
      • Code examples
      • Keras Stable Diffusion
        • 概要
        • 基本的な使い方 (テキスト-to-画像 / 画像-to-画像変換)
        • 混合精度のパフォーマンス
        • インペインティングの簡易アプリケーション
        • (参考) KerasCV – Stable Diffusion を使用した高性能画像生成
  • TensorFlow
    • TF 2 : 初級チュートリアル
    • TF 2 : 上級チュートリアル
    • TF 2 : ガイド
    • TF 1 : チュートリアル
    • TF 1 : ガイド
  • その他
    • 🦜️🔗 LangChain ドキュメント / ユースケース
    • Stable Diffusion WebUI
      • Google Colab で Stable Diffusion WebUI 入門
      • HuggingFace モデル / VAE の導入
      • LoRA の利用
    • Diffusion Models / 拡散モデル
  • クラスキャット
    • 会社案内
    • お問合せ
    • Facebook
    • ClassCat® Blog
Menu

TensorFlow で制約ボルツマンマシン (RBM)

Posted on 09/28/2016 by Sales Information

TensorFlow で制約ボルツマンマシン (RBM : restricted Boltzmann machines)

制約ボルツマンマシン

ニューラルネットワークの層の教師なし学習・事前学習としては、AutoEncoder 以前に RBM – restricted Boltzmann machines, 制約(制限つき)ボルツマンマシン – があります。RBM は相互結合型で無向グラフィカルモデル(= 確率変数の関係を記述)として定義され確率分布が導入されます。Deep Belief Network のビルディングブロックであり深層学習の重要なパーツです。

RBM は EBM – Energy-based モデル(後述)から導出すべきですが、概要を簡単に説明しておきますと、まず BM – ボルツマンマシンは自己結合がない相互結合型ネットワークで、無向 (undirected) グラフ、つまりユニット間は双方向結合になります。ユニット間の重みは対照とします。各ユニットは二値ユニットですがその出力が確率的に決まる点が特徴です。(決定論的に決まる例はホップフィールド・ネットワーク, Hopfield network があります。)各ユニットは確率変数と見なされ、確率分布としてボルツマン分布が導入されます。
更に隠れユニット(or 非可視ユニット – 入力データを直接には処理しません)を持つモデルに拡張することも可能で、十分な数の隠れユニットがあれば複雑な分布を表現できることが知られています。

そして RBM は隠れユニットを持つ BM に visible-visible と hidden-hidden 結合がないように制限します。結果、RBM は可視層(or 入力層)と隠れ層の2層構造を取り、層内での情報伝達はありません。
(但し、複数の隠れ層を持つモデルも考えられます。)

参考: RBM 入門としては deeplearning4j のチュートリアルが分かりやすいです :
A Beginner’s Tutorial for Restricted Boltzmann Machines

Understanding RBMs

本家のペーパーは以下等 :
A Practical Guide to Training Restricted Boltzmann Machines Version 1
Geo rey Hinton, Department of Computer Science, University of Toronto

Energy-based モデルと RBM

少しだけモデル定義についてふれておくと、天下り的ですが、Energy-based モデルの確率分布は一般にエネルギー関数を使って次のように表されます :
\[p(x) = \frac {e^{-E(x)}} {Z}\]

ここで正規化因子(規格化定数、分配関数)は :

\[Z = \sum_x e^{-E(x)}\]

RBM のエネルギー関数は以下 :
\[E(v,h) = – b’v – c’h – h’Wv\]

端的に言えば、この条件下で観測(入力)データ \(x\)が与えられたとして、結合重み \(W\) とバイアス \(b\)、\(c\) を求めたいということです。対数尤度から微分して勾配を求めるわけですが、解析的に解くのは困難なため、実際には次項の Contrastive Divergence 法を用います。

参考: EBM – Energe-based モデルの数学的詳細は以下の 48 ページ “5. Energy-Based Models and Boltzmann Machines” が詳しいです :
Learning Deep Architectures for AI
By Yoshua Bengio

Contrastive Divergence 法

(解析的でない)近似解法として Gibbs sampling、Contrastive Divergence (CD) がありますが、CD 法の実装については以下が比較的親切です。改良版の Persistent CD が使用されています :
Restricted Boltzmann Machines (RBM)

取りあえず Theano の基本サンプルで動作確認してみました。以下は適当な epoch 数後のフィルタ画像、つまり重み行列を画像化したものです :

CD-1

0 epoch

5 epochs

rbm_filters_at_epoch_0-k1

rbm_filters_at_epoch_5-k1

10 epoch

14 epochs

rbm_filters_at_epoch_10-k1

rbm_filters_at_epoch_14-k1

CD-15

10 epoch

14 epochs

rbm_filters_at_epoch_10

rbm_filters_at_epoch_14

 
そして以下は訓練後に RBM から生成された画像です :

CD-1
rbm_samples2

CD-15
rbm_samples

TensorFlow で RBM

TensorFlow で CD 法を実装後、隠れユニット数による reconstruction(復元)の誤差の違いを比較検証してみました。128, 512, 1024 そして 2048 の隠れユニット数で比較してみましたが、明らかに多い方が良い結果を示します。題材は MNIST です :

ccrbm_hidden2

 
ついで、gibbs-sampling のステップ数を違えて比較してみました。1, 3, 5 の順で reconstruction の誤差は悪くなるのですが、これは比較方法が悪いかもしれません。ただ、ステップ数が少なくても、1 ステップでも良いという考え方は間違っていないようです :

ccrbm_gibbs2

 
以下は、連続値を許容する Gaussian-Bernoulli RBM 実装で Cifar-10 を題材に訓練したグラフです :

ccrbm_cifar10_gauss2

 

以上

クラスキャット

最近の投稿

  • LangGraph 0.5 on Colab : Get started : human-in-the-loop 制御の追加
  • LangGraph 0.5 on Colab : Get started : Tavily Web 検索ツールの追加
  • LangGraph 0.5 on Colab : Get started : カスタム・ワークフローの構築
  • LangGraph 0.5 on Colab : Get started : クイックスタート
  • LangGraph on Colab : SQL エージェントの構築

タグ

AutoGen (13) ClassCat Press Release (20) ClassCat TF/ONNX Hub (11) DGL 0.5 (14) Eager Execution (7) Edward (17) FLUX.1 (16) Gemini (20) HuggingFace Transformers 4.5 (10) HuggingFace Transformers 4.6 (7) HuggingFace Transformers 4.29 (9) Keras 2 Examples (98) Keras 2 Guide (16) Keras 3 (10) Keras Release Note (17) Kubeflow 1.0 (10) LangChain (45) LangGraph (24) MediaPipe 0.8 (11) Model Context Protocol (16) NNI 1.5 (16) OpenAI Agents SDK (8) OpenAI Cookbook (13) OpenAI platform (10) OpenAI platform 1.x (10) OpenAI ヘルプ (8) TensorFlow 2.0 Advanced Tutorials (33) TensorFlow 2.0 Advanced Tutorials (Alpha) (15) TensorFlow 2.0 Advanced Tutorials (Beta) (16) TensorFlow 2.0 Guide (10) TensorFlow 2.0 Guide (Alpha) (16) TensorFlow 2.0 Guide (Beta) (9) TensorFlow 2.0 Release Note (12) TensorFlow 2.0 Tutorials (20) TensorFlow 2.0 Tutorials (Alpha) (14) TensorFlow 2.0 Tutorials (Beta) (12) TensorFlow 2.4 Guide (24) TensorFlow Deploy (8) TensorFlow Get Started (7) TensorFlow Graphics (7) TensorFlow Probability (9) TensorFlow Programmer's Guide (22) TensorFlow Release Note (18) TensorFlow Tutorials (33) TF-Agents 0.4 (11)
2016年9月
月 火 水 木 金 土 日
 1234
567891011
12131415161718
19202122232425
2627282930  
« 8月   10月 »
© 2025 ClasCat® AI Research | Powered by Minimalist Blog WordPress Theme