質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

0回答

2502閲覧

ボルツマンマシンがうまく行かない

twinbird

総合スコア12

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

1グッド

0クリップ

投稿2016/05/06 06:58

ボルツマンマシンを教科書を読みながら実装しています。
最終的にボルツマンマシンを使い2値分類をしました。
SVM(libsvm)では、80〜90%の確率で正しく識別できる簡単なサンプルデータを用いたところ、
自前のボルツマンマシンでは、50%台と結果がとても悪いです。
SVMと比較してこんなに成績が悪いはずがないと考えており、
教科書どおりに実装しているつもりですが、自前の実装のどこかに誤りがあると思っています。
お聞きしたいことは、どこに間違いがあるのかということです。

  • 使用したサンプルデータ

サンプルデータは自分で生成しました。
平面上の半径2の円の内側にランダムに点を生成させ、中心からの距離が1より大きいものは「0」、そうでないものは「1」とラベルをつけて2種類のデータを作りました。
各データは、x, y座標を保持しています。
今回使用するボルツマンマシンはベルヌーイRBMなので、各ユニットが2値しか表現できないので、
数値を32ビットでで表現することにしました。各データにはx, y座標2つの数値があるので、合計で64ビットで表現できます。なのでRBMの可視ユニット数を64個にしました。実際には入力データは、0もしくは1が64個ならんだもので表現しています。同じデータをSVMとRBMに使用しました。

  • RBMの条件

可視ユニット数: 64
隠れユニット数: 10
ギブスサンプリングで勾配を計算
コンストラクティブ・ダイバージェンスの回数: 1
学習係数: 0.1
学習用サンプル数: ラベル「0」、「1」ともに1000個づつ
1つのサンプル毎に重みを更新

  • 予測方法

学習に使用したのとは、別のデータを使用する。
ラベル「0」と「1」のデータをそれぞれ別に学習させて、それぞれの重みを算出する。
未知(ラベル不明)の入力データに対して、ラベル「0」の重みを使って、ボルツマン分布のエネルギーを計算する。
同じデータに対して、ラベル「1」の重みを使って、同様にエネルギーを計算する。
エネルギーが大きい方のラベルを予測結果とし、実際のラベルと比較し答え合わせをする。
この正解率が50%台でした。
ただ、私は予測する際、ボルツマン分布から確率を計算していません。理由は、
分配関数の計算方法が総当り的に求めなくてはならないので計算が大変(簡単な方法があるのでしょうか?)。
指数関数は単調増加なので、確率の大小を比較するだけなら、エネルギーの比較でよいのではないか。
という理由からです。
エネルギーの計算に使用した可視変数のみの周辺分布は、

sum_{i}b_{i}v_{i} + sum_{j}ln(1 + exp(\lambda_{j})) \lambda_{j} = c_{j} + sum_{i}w_{ij}v_{i}

です。

  • 参考書

講談社 機械学習プロフェッショナルシリーズ 深層学習 岡田に貴之
近代科学社 深層学習 人工知能学会監修

以下に、Haskellで実装したコードを記載します。
他人のコードを読むのは大変だと思いますが、奇特な方のご指摘お待ちしています。

ソース

sho_cs👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問