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

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

Last-modified: 2009-10-24 (土) 05:39:28
Top / MATLAB Note / Neural Network Toolbox / その他のネットワーク

エルマンネットワーク

  • エルマンネットワークは、時系列学習ができるリカレントネットワークの一種です。
  • 単語獲得、文法獲得のモデルとしても研究されています。
  • 【例1】 過去の時系列データの学習
    • 例えば、以下のような入力ベクトルに対して、
      INPUT =
          0     1     1     0     1     1     1     1     0
      以下のような応答を得たいとします。
      OUTPUT =
          0     0     1     0     0     1     1     1     0
      すなわち、「入力ベクトルで1が2回以上連続して与えられたときだけ、1を出力する」ルールを学習させます。
    • エルマンネットワークの訓練は、以下のようにします。
       %入力ベクトルを作成
       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」というルールを学習させます。
    • エルマンネットワークの訓練は、以下のようにします。
       %入力ベクトルを作成
       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