†ニューラルネットワークの構造と学習ルールを決定するための全てのパラメータは、構造体(データ集合配列)「net」に格納されます。ネットワークのカスタマイズ具体的なパラメータの一覧は、以下の通りです。参照のみ※引数を指定するプロパティは、引数なしでまとめて呼び出すこともできます(リンク先参照)。詳しい解説は、ここにあります。以下のような2カテゴリの入力値(入力ベクトル)のカテゴリ境界を求めたいとします。上図の入力値は以下のようにして作成しました。%以下のように表記してもいいです。使えば、自動的にターゲット別の入力ベクトルをプロットしてくれます。plotpv(p,t);パーセプトロンの訓練は、以下のようにします(上のコードに続けて実行します)。off結果は以下のようになります。ターゲット(カテゴリ)0の入力値(2,-1)が、ターゲット1に分類されてしまいました。」と出力されている(入力ベクトルの1列目が分類失敗)ことからも分かります。(入力ベクトルを1回ずつ与えただけでは)学習は完了しないことが分かります。したがって、続けて学習を行います(上のコードに続けて実行します)。off結果は以下のようになります。完全に識別できていることが分かります。訓練の経過メッセージとして、以下が出力されたはずです。met.これはepochsを10に指定したけれど、4epochsで収束したため、自動的に訓練が終了したことを示しています。epochsは大きい値を指定しておけば、(入力ベクトルが線形分離可能であれば)最適なタイミングで訓練を終了してくれます。訓練を終えたネットワークに対して新規のベクトルを提示して、そのベクトルのカテゴリを判別するには以下のようにします(上のコードに続けて実行します)。%新規の入力ベクトル(-2,-2)(1,2)を提示して出力を調べる結果は以下のようになります。ベクトル(-2,-2)がカテゴリ0(○)、ベクトル(1,2)がカテゴリ1(+)に、正しく分類されています。複数ニューロンのパーセプトロン2つ以上のニューロンを持つパーセプトロンに、異なるターゲットベクトルで訓練させることもできます。以下のコードを実行してください(新規に実行します)。off結果は以下のようになります。入力層ノード2個、出力層ノード1個の単層パーセプトロンに、AND構造を学習させたいとします。入力値とターゲット(期待する出力、教師情報)を定義します。plotpv(p,t);まずは、新規にネットワークオブジェクトを宣言します。network(1,1,[1],[1],[0],[1],[1]);新規ネットワークは、関数NETWORKで定義されます(構造体netはnetworkを呼び出さないと定義できない?)。引数の詳細は、以下の通りです。パーセプトロンのデフォルト設定にしています。ネットワークは出力層からのターゲットをもつこれ以外のパラメータには値が代入されません。そのため、以下でネットワークの特性を設定する必要があります。続いて、パーセプトロン固有のプロパティを設定します。init(net);「伝達関数(transferFcn)」とは、ネットワークの各ノード(ニューロン)が、入力された値に対してどのような値を出力するかを決定する関数です。(伝達関数の一覧)「学習関数(leranFcn)」とは、ネットワークの各ノードの出力をもとに、各ノードの重み値(シナプス結合値)を更新する関数です。(学習関数の一覧)「適応関数(adaptFcn)」とは、逐次型学習を行なう関数です(詳細は後述)。「訓練関数(trainFcn)」とは、バッチ型学習を行なう関数です(詳細は後述)。これでネットワークの初期設定が終わりました。netとすることで確認できます。ノード数)とすることでも実現できます。)が不明の場合、以下のようにします。1);続いて、学習(重みとバイアスの更新)を行います。逐次型の適応学習(ADAPT)か、バッチ型の訓練学習(TRAIN)か、どちらかを選択して実行します。パーセプトロンにおける逐次型とバッチ型の学習に関しては、こことここで述べられています。関数ADAPTは、逐次型学習(入力ベクトルの各行(ステップ)に対して、毎回重みを更新)を行います。「連続列全体を通るパス」とは、入力ベクトルセット全てを1回とした適応回数です。各ステップの処理のところでプロット命令を追記すると、リアルタイムに適応学習の経過を観察できます。trains_passsteps.m(限定公開)。%(入力ベクトルに対して重みとバイアスを調整)関数TRAINは、バッチ型学習(入力ベクトル全体に対して、最後にまとめて重みを更新)を行います。指定します(他のパラメータはデフォルトのまま)。エポックとは、入力ベクトルセット全てを1回とした訓練回数です。パフォーマンスの評価と学習の収束について最後に、学習済みネットワークに入力ベクトルを与え、出力結果をシミュレートします。ターゲットベクトルに対するエラー率を求め、識別境界をプロットします。いくと過学習のようです。しておかないと、他のデータに適応できません。最適な値は学習回数(エポック数)、入力ベクトルの数、中間層ノードの数などを調整するしかありません。多層ネットワークは、線形分離可能な問題しか解けない単層パーセプトロンの欠点を解決するために考案されました。単層パーセプトロンでは、XOR構造を学習させることはできませんでした(線形分離不可能)。そのため、以下のような入力層ノード2個、中間層ノード2個、出力層ノード1個の多層パーセプトロンを作成し、バックプロパゲーションによってネットワークの訓練を行うことを考えます。入力値とターゲット(期待する出力、教師情報)を定義します。]新規にネットワークオブジェクトを宣言して、パーセプトロン固有のプロパティを設定します。(net.adaptFcn)は指定していないため、バッチ型学習のみ対応しています。訓練関数として、TRAINLMを指定しています(詳細)。他にもいろいろなバックプロパゲーション関数があります。バックプロパゲーションの伝達関数は、非線形微分可能な出力を出すものである必要があります(参考)。かの離散値を出力するため)なので、バックプロパゲーションで使用することはできません。ここでは、中間層に正接シグモイド伝達関数、出力層に線形伝達関数を使用しています(参考)。続いて、学習(重みとバイアスの更新)を行います。%学習開始(入力ベクトルに対して重みとバイアスを調整)最後に、学習済みネットワークに入力ベクトルを与え、出力結果をシミュレートします。%ネットワークの出力XOR構造を学習できていることが分かります。学習を終えたネットワークの各ノードの重みは、以下のようになっています。