Javaアプレットによる機械学習デモ
https://gyazo.com/9427b49f41e5055c7812457d57cec528 https://gyazo.com/5040759adf1db8d8b8b4fa5ffbc8fd4d
(クリックすると大きくなります)
その昔、近藤がJavaアプレットで作成した機械学習のデモ用プログラムです 2007年くらいに作成したとても古いもの
上のGIF画像のような感じ(左:RBFネットワーク、右:3層パーセプトロン)
以前はJavaアプレットをWebサイトに容易に埋め込めたが、今は難しい
しかも最新のJava開発環境ではJavaアプレットはサポート外らしい。。。
ので、プログラムそのものを公開してみます
他に移植したりする余裕も気力もないので。。。
以下のように、少し前のJava開発環境(コンパイラやデバッガなどの開発環境一式、JDKとよばれるもの)をインストールすれば(おそらく)なんとか起動できます
もし興味と根気があればインストールしていじってみてください
かなりざっくり書いているので、JDKのインストール方法や環境変数の設定のしかた(やその意味)などの詳細が知りたい場合は調べてみてください
うまく動かない場合は問い合わせていただいてもいいですが、対応できないかもしれないのでご了承ください
ソースコードは(とくに役に立つとも思えませんが)自由に使っていただいてOKです
(1)JDK(Javaの開発環境)のインストール
使用するPC環境(OS等)に応じて適当なものをダウンロード
https://gyazo.com/2bd9428bd4b5212c9525fdc561091a9d
ダウンロードしたJDKをインストール
インストールしたら、環境変数を設定
環境変数の設定画面はたとえば以下のように起動
https://gyazo.com/2818426e3377008b0e23be122540685d
システム環境変数のPathに、インストールしたJDKの実行ファイル(とくにappletviewer.exe)が入っているフォルダへのパス(「C:\Program Files\Java\jdk1.8.0_192\bin」みたいなやつ)を追加
https://gyazo.com/95cb526bf28799b5131792204c831c7f
(2)Javaアプレットの関連ファイルをダウンロードして適当なフォルダに配置
2種類のJavaアプレットを用意しています
以下から関連ファイルをダウンロード
RBFネットワークのデモJavaアプレットの関連ファイル
3層パーセプトロンのデモJavaアプレットの関連ファイル
ダウンロードしたファイルをそのままのフォルダ構成で適当な場所に置く
たとえば「C:\source\mldemo」といったフォルダを作り、その下に、RBFネットワークの関連ファイルは「RBFNExp」、3層パーセプトロンの関連ファイルは「NNExp」というフォルダ名で置くなど(あくまで一例。場所やフォルダ名は任意です)
https://gyazo.com/cd6294aefdb2358c49ef33ec58182366
https://gyazo.com/3cc8dad31a838fcb3dc5ac6bfcbd629c
https://gyazo.com/9f42f880b8261709e9c77baf45b490de
(3)Javaアプレットを起動
コマンドプロンプトを起動
上の(2)で関連ファイルを置いた場所へ移動
以下のようにコマンドを打ってアプレットを起動
RBFネットワークのアプレットはappletviewer RBFNetworkExp.javaで起動
3層パーセプトロンのアプレットはappletviewer NNExp.javaで起動
https://gyazo.com/6a38a528b4a70dafd64faa82bdcd940b
(4)Javaアプレットを操作
プログラムを作成したとき(2007年)に比べて現在(2019年)はかなりPCのスペックが変わっているので、挙動がたまにおかしいことがあります。とくに、テキストボックスの位置が変なところに出ることがあるので、その場合は一旦アプレットを閉じて再度起動してください(直さなくてすみません)
RBFネットワークのアプレットについて
https://gyazo.com/9427b49f41e5055c7812457d57cec528
パラメータの設定
ユニット(RBF)数、RBFの幅、(最小二乗法の)正則化パラメータを設定可能
ユニット数は最大30まで
ユニットはx軸の表示範囲に均等に配置
データ数、観測雑音の標準偏差を設定可能
x, y軸の範囲を設定可能
下部の「プロット」でデータをサンプリングしてプロット
真の関数としてsine wave(サイン波), linear(直線), binary(2値関数)を設定可能
「重み推定」のボタンで正則化最小二乗法で結合重みを推定
「MSE」は平均二乗誤差
黄色とオレンジのボタンはそれぞれユニットに一つずつ対応しており、黄色を押すと対応するユニットのON/OFF、上下のオレンジを押すと対応するユニットの結合重みを少しずつ増加/減少させる
3層パーセプトロンのJavaアプレットについて
https://gyazo.com/5040759adf1db8d8b8b4fa5ffbc8fd4d
パラメータの設定
ユニット数、学習率(学習係数)、sigmoid gainのパラメータを設定可能
ユニット数は最大30まで
データ数、観測雑音の標準偏差を設定可能
x, y軸の範囲を設定可能
下部の「プロット」でデータをサンプリングしてプロット
真の関数としてsine wave(サイン波), linear(直線), binary(2値関数)を設定可能
「BP*」のボタンでバックプロパゲーション
「BP1」はバックプロパゲーションの繰返し1回分、「BP1」は繰返し100回分を進める
「BP∞」は繰返しをし続ける
「BP∞」を押した状態で「プロット」を押すと、その時点での近似関数の状態から、新しくプロットされたデータに対して学習が始まる
「epoch」は繰り返しの数
「MSE」は平均二乗誤差
パラメータを入力し直して何かボタンを押すと、そのパラメータに変更される
「重み初期化」ですべての結合重みが初期化され、学習を最初からやり直す