忍者ブログ

Memeplexes

プログラミング、3DCGとその他いろいろについて

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。


かんたん!制限付きボルツマンマシン実装 実数(0から1)バージョン (C#) [Deep Learningシリーズ]

ニューロンの発火状態が実数

さて今回はあまり自信がありません。
もっとも私はいつも自信がないのですが、今回はいつもよりさらに自信がありません。
プログラムは上手く動くように見えるのですが、その理論的背景がよくわかりません!
間違いがあったら訂正していただけるとありがたいです。


[追記] どうもこちらのほうが正しいような気がしてきました。リンク先もご覧ください。どちらの性能が高いかというとこのページのやり方のほうがいい気がします。うーんどっちを使うべきなんでしょう?

[追記2] こちらもご覧ください。この記事のプログラムは、学習データに1が多いと上手く学習できないようです。それを修正しました。

今回のテーマは制限(制約)付きボルツマンマシンの実装、実数バージョンです。
この前の実装は、バイナリでした。
つまり、可視ニューロンには発火しているかどうかの2通りしかありませんでした。
発火状態は0か1かしか扱えなかったのです。
(その割には可視ニューロンの発火状態の型が(boolではなく)doubleだったりと妙なことになっていましたが)



バイナリなペンギン
2通りしか無いと画像はこうなります。)



拍手[1回]

PR

かんたん!制限付きボルツマンマシン コントラスティブ・ダイバージェンス(Contrastive Divergence)法[Deep Learningシリーズ]

コントラスティブ・ダイバージェンス法

制限付きボルツマンマシン(Restricted Boltzmann Machine : RBM)は覚えたパターンを後で思い出す能力を持ったニューラルネットワークです。
あるパターンを覚え、後でそれに似たパターンを入力してやると、最初に教えたパターンを思い出すことができます。
制限付きボルツマンマシンはDeep Learningするネットワークの一部に使われています。
ですからDeep Learningしようと思ったら、制限付きボルツマンマシンを学んで損はないでしょう。



制限付きボルツマンマシンの学習には、コントラスティブ・ダイバージェンス(Contrastive Divergence : CD)という方法が有名なようです。
ですので、今回はこのコントラスティブ・ダイバージェンス法について解説します。

拍手[15回]


かんたん!制限付きボルツマンマシン実装 (C#) バイナリ(0と1)バージョン [Deep Learningシリーズ]

Implementing Restricted Boltzmann Machine(RBM) in C#

YUSUKE SUGOMORIさんのjavaコードやその他のコードいろいろを参考にしてC#で制限付きボルツマンマシンを実装してみました。
私好みに書き換えていくとだいぶプログラムの行数が無駄に膨れ上がってしまいましたが、まあよしとしましょう。


拍手[3回]


[Deep Learningシリーズ] かんたんHopfieldネットワーク

Deep Learning

最近Deep Learningというものが話題になっています。
Deep Learningはコンピュータの学習手法の一つです。
一年ほど前(2012年)GoogleがコンピュータにたくさんのYoutube画像を見せネコの顔を自発的に学ばせたということで有名ですね。
人工知能学会誌には現在ディープラーニングの解説が連載中です。
Deep Learningはコンピュータ関係で現在最もホットな話題の一つといえるでしょう。

というわけでこのブログでもDeep Learningを取り上げてみたいと思います。
しかしいきなりDeep Learningの全容に迫るのは難しいのでまずは簡単な話から始めましょう。
今回はHopfield(ホップフィールド)ネットワークです。

拍手[10回]


植物 vs 動物 かんたんシミュレーション(ロトカ=ヴォルテラ方程式の解っぽい)

植物 vs 動物

植物と動物の簡単なシミュレーションを作ってみました。
緑が植物、赤が動物です。

シミュレーション画面をクリックすると一時停止、もう一度クリックすると再開します。


植物も動物も自分から動きまわることはせず、ぶつかり合うだけですが、それで十分です。
ぶつかったとき、捕食が起きます。
動物が植物からエネルギーを吸い取るのです。
動物と動物、植物と植物では何も起きません。
なお、エネルギーが空になった個体は消滅します。
ちなみに植物は何も起きなくともエネルギーを得ることができます。

さて、このシミュレーションを動かすと、動物と植物の数が増減を繰り返します。
これはロトカ=ヴォルテラの方程式の解にそっくりですね。
つまり、
植物が増えると、動物が増え、
動物が増えると、植物が減り、
植物が減ると動物が減り
動物が減ると植物が増える
をくりかえすのです。

パラメーターには次のようなものがあります:
  • Reproduction Cost : 繁殖すると失われるエネルギー(ただしそのあとさらにエネルギーの半分が子に奪われる)
  • Reproduction Threashold : 繁殖するのに必要なエネルギー。これだけエネルギーを持っていないと繁殖しない。別に繁殖するとこれが失われるわけではない。というのがReproduction Costとのちがい。
  • Plant Energy Supply : 植物に1フレーム間に与えられるエネルギー。
  • Animal Energy Consumption : 動物が1フレーム間に失うエネルギー。
  • Animal Energy Drain : 動物が植物と接触したときに吸い取るエネルギー。

おまけ
プロジェクトファイルです。

















拍手[0回]