トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索   ヘルプ   最終更新のRSS

MATLAB Note/Neural Network Toolbox/その他のネットワーク の変更点

Top / MATLAB Note / Neural Network Toolbox / その他のネットワーク

#freeze
#contents

**エルマンネットワーク [#i8b17418]
-[[リファレンス:http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/nnet/?/matlab/support/manual/r13/toolbox/nnet/recur93.shtml#136]] - [[関数newelmのドキュメント:http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/nnet/?/matlab/support/manual/r13/toolbox/nnet/newelm.shtml]]、[[応用例 波動の振幅の検出:http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/nnet/?/matlab/support/manual/r13/toolbox/nnet/appl1110.shtml]]も参照してください。~

-エルマンネットワークは、時系列学習ができるリカレントネットワークの一種です。~
-単語獲得、文法獲得のモデルとしても研究されています。
--[[エルマンネットの学習事例:http://www.twcu.ac.jp/~asakawa/chiba2002/lect4-SRN/recurrent-net.pdf]](東京女子大 浅川先生)
--[[子供の語彙獲得戦略のモデル化に関する研究:http://kussharo.complex.eng.hokudai.ac.jp/~taka/papers/ShimotomaiThesis2003finald.pdf]](北海道大 下斗米先生)
-【例1】 過去の時系列データの学習
--例えば、以下のような入力ベクトルに対して、~
 INPUT =
     0     1     1     0     1     1     1     1     0
以下のような応答を得たいとします。~
 OUTPUT =
     0     0     1     0     0     1     1     1     0
すなわち、「入力ベクトルで1が2回以上連続して与えられたときだけ、1を出力する」ルールを学習させます。
--エルマンネットワークの訓練は、以下のようにします。~
#geshi(matlab){{
 %入力ベクトルを作成
 P = [0 1 1 0 1 1 1 1 0] 
 Pseq = con2seq(P)                   %Pをエルマンネットワークで使用可能なセル配列形式に変換
 %ターゲットベクトル(教師データ、望ましい応答のベクトル)を作成 
 T = [0 (P(1:end-1)+P(2:end) == 2)]  %P内で2回続けて1があるときには1、それ以外では0と定義 
 Tseq = con2seq(T)                   %Tをエルマンネットワークで使用可能なセル配列形式に変換
 %ネットワークを生成
 %入力ベクトルは0から1の範囲内、5個の中間層tansigニューロンと1個のlogsig出力層をもつ
 net = newelm([0 1],[5 1],{'tansig','logsig'});
 %訓練
 net.trainParam.epochs = 100;        %訓練回数100エポック(全ての入力ベクトルを100回繰り返し入力)
 net = train(net,Pseq,Tseq); 
 %結果を確認
 P = [0 1 1 0 1 0 1 1 0 1 1 0]
 Pseq = con2seq(P);
 Yseq = sim(net,Pseq);
 Y = seq2con(Yseq);                  %セル配列形式を同時形式に変換
 Y = Y{1,1}                          %結果を出力
}}

--学習結果は以下のようになります。(入力ベクトル=P、ネットワークの出力例=Y)
 P =
     0       1       1       0       1       0       1       1       0       1       1       0
 Y = 
     0.1431  0.1036  0.6315  0.2082  0.5628  0.1791  0.3931  0.7862  0.2651  0.4113  0.7701  0.2473
--1が2回以上連続して与えられたとき、Yの応答値が大きくなっていることが分かります。
--同じ入力ベクトル「1」に対する応答でも、毎回値が異なっていることが分かります。これは、エルマンネットワークの中間層が、前回の入力ベクトルに対する応答状態を保持しているためです。
-【例2】 将来の入力データの予測
--例えば、以下のような入力ベクトルに対して、以下のような応答を得たいとします。~
 INPUT =
     0     1     1     0     1     1     1     1     0
 OUTPUT =
     1     1     0     1     1     1     1     0     0
OUTPUTは次回のINPUTの値です。すなわち、「1が与えられたときは、高い確率で次の入力も1」というルールを学習させます。
--エルマンネットワークの訓練は、以下のようにします。~
#geshi(matlab){{
 %入力ベクトルを作成
 P = [0 1 1 0 1 1 1 1 0] 
 Pseq = con2seq(P)
 %ターゲットベクトル(教師データ、望ましい応答のベクトル)を作成 
 T = [1 1 0 1 1 1 1 0 0] 
 Tseq = con2seq(T)
 %ネットワークを生成
 net = newelm([0 1],[5 1],{'tansig','logsig'});
 %訓練
 net.trainParam.epochs = 100;
 net = train(net,Pseq,Tseq); 
 %結果を確認
 P = [0 1 1 0 1 0 1 1 0 1 1 0]
 Pseq = con2seq(P);
 Yseq = sim(net,Pseq);
 Y = seq2con(Yseq);
 Y = Y{1,1}                          %結果を出力
}}

--学習結果は以下のようになります。(入力ベクトル=P、ネットワークの出力例=Y)
 P =
     0       1       1       0       1       0       1       1       0       1       1       0
 Y =
     0.7188  0.9724  0.3087  0.9880  0.9699  0.9570  0.9935  0.3696  0.9934  0.9791  0.8621  0.9093
--次回に1が与えられるとき、Yの応答値が大きくなっていることが分かります。
-【例3】 単語境界の獲得シミュレーション


**LVQ [#j564318b]
-[[リファレンス:http://dl.cybernet.co.jp/matlab/support/manual/r13/toolbox/nnet/?/matlab/support/manual/r13/toolbox/nnet/selfor16.shtml#8056]]