• 締切済み

ボルツマンマシンについて

今巡回セールスマン問題をボルツマンマシンを用いて解こうとしています。ホップフィールドモデルにパラメータである温度(T)を加えるみたいなんですが、理論が全く分かりません。まずボルツマンマシン自体が理解できていませン。いろいろwebはみたんですが、巡回セールスマン問題を解くプログラムが分かる方がいらっしゃったらお願いします。 http://mars.elcom.nitech.ac.jp/java-cai/neuro/menu.html http://www.twcu.ac.jp/~asakawa/chiba/handout4/mutual.html

noname#3047
noname#3047

みんなの回答

  • k-841
  • ベストアンサー率27% (129/465)
回答No.1

理論ではなくてイメージをアドバイスします。 ニューラルネットワークを勉強されているようなので、 エネルギー曲面という概念は理解されていると思います。 解が収束するということの意味は、 出発点にボールを置いて、そのボールが谷底まで転がっていった状態です。 しかしこのままではそのボールは近くの谷底に転がるだけで、 必ずしもそこが世界で一番深い谷とは限らないのです。 この、近場の谷にはまってしまった状態を、 局所解(ローカルミニマム)に落ちたと言います。 ここで、ボールが谷底から近くの山を乗り越える力があれば、 世界で一番深い谷へ到達できる可能性があるのです。 この、近くの山を乗り越える力の大きさを、 温度Tというパラメータで調整するのです。 巡回セールスマン問題で、近場の谷にはまってしまった状態とは、 ちょっとやそっと経路をかえたぐらいでは今よりもいい解にならない、 という局所解に落ちた状態のことをいいます。 これを、もうちょっと劇的に変更させる力を与えてくれるのが温度Tなのです。 TSPを解くとのことですので、学校の課題でしょうか。 ここではおそらくプログラムそのものを示してはもらえないでしょう。 ここで貰えるいろいろなヒントをもとに、自分で考えて下さい。

関連するQ&A

  • ニューラルネットワークの重みは負の値をとってもいい?

    ニューラルネットワークの重みは,結合の強さを表していると理解してます。 以下のURLの例のように重みが負の値をとる場合がありますが,重みの意味を考えると,  結合の強さを強くしたいなら,重みは,1より大きい値  結合の強さを弱くしたいなら,重みは,(0,1)の値  重みが負なら? ということを疑問に感じたのですが,重みが負はどういうことを表しているんでしょうか? 例)重みが負 http://mars.elcom.nitech.ac.jp/java-cai/neuro/psimmain.html

  • BP学習に使う学習データについて

    ここ http://mars.elcom.nitech.ac.jp/java-cai/neuro/menu.html を参考にニューラルネットワークのBP学習のプログラムを作成しているのですが、 学習データについて疑問があります。 学習に使用する学習データをプログラムでは乱数を生成して作っている のですが、学習データの生成に際して、データの分散や平均の大きさを 考えるべきなのでしょうか? また考えるべきだとしたら、どのように評価したらよいのでしょうか?

  • ニューラルネットワークでのバイアス項と活性化関数について

    ニューラルネットワークについて http://mars.elcom.nitech.ac.jp/java-cai/neuro/menu.html を参考に勉強しています. 1. ニューラルネットワークのあるノードの出力は,前層のノードの重み和で表され,  out_i = Σ{W_ji*x_j}  from j=0~n となる. ここで,バイアス項として,W_0i,x_j0=1.0 というのがあるのですが, このバイアス項はどういう役割をするためにあるのでしょうか? 2. ノードx_iへの出力は,活性化関数g を用いて,  x_i = g(out_i) となる. ここで,「活性化関数は非線形関数でなければならない」というふうに 言われているのですが,なぜ非線形でなければならないのでしょうか? 以上の1.2.について御教授お願いします.

  • ソースコードのmain()がないんです

    「セールスマン巡回問題」のソースコードをhttp://www.infonet.co.jp/ueyama/ip/java_source.html で見つけました。それは良かったのですが、肝心のmain()が見つかりません。 よって実行ができません。どのようにmain()を書けばよいのでしょうか? 適当に↓のようにやってみましたが動きません。Appletを動かさないといけないようですがどうやれば…。 public static void main(String[] args) { salesman salesman = new salesman(); // (new salesman()).init(); (new salesman()).calc_len(); } ちなみにここのhtmlではソースコードは途中で途切れていますが 下のURLでダウンロードソフトを使って落とせば完全なのが得られるはずです。(って激しく面倒ですね…_| ̄|○) http://www.infonet.co.jp/ueyama/ip/java/salesman.java よろしくお願いします。m(__)m

    • ベストアンサー
    • Java
  • 言語別(C/C++,Java等)の計算速度の違いが知りたいです。

    言語別(C/C++,Java等)の計算速度の違いが知りたいです。 巡回セールスマン問題を解く(よさそうな解を見つける)プログラムを書くことになったのですが、言語が自由です。 オブジェクト指向言語で組もうと思っているんですが、C++、C#、Javaなどの言語のうち、計算速度が早いのはどれでしょうか? 順番も分かれば、教えてほしいです。 また、もしC言語で組めれば、やっぱりオブジェクト指向言語よりも早いのでしょうか? 大体でもよいので、分かる方いたら教えてください。 よろしくお願いします。