階層型神経回路網の基本プログラム

学習方法プログラムソースプリントアウト用(行数付き)
逐次修正法ex_bp_o.cex_bp_o.c.txt
逐次修正法+慣性項ex_bp_mo.cex_bp_mo.c.txt
一括修正法ex_bp_l.cex_bp_l.c.txt

逐次修正法とは

  1. 入力パターンを提示し,それに対する出力結果を求める.
  2. 出力結果と教師信号との誤差を逆伝播しながら,各層の各ユニットにおける誤差を求める.
  3. その誤差をもとに結合果汁の修正量を計算し,結合荷重の修正を行う.
以上の処理を全入力パターンに対して行い,さらに,何度も同じ事を繰り返す.

一括修正法とは

逐次修正法が一入力パターン毎に結合加重の修正を行うのに対し, 一括修正法とは全入力パターンの結合荷重修正量を蓄積して,一度に修正を行う.
  1. 入力パターンを提示し,それに対する出力結果を求める.
  2. 出力結果と教師信号との誤差を逆伝播し,荷重結合の修正量を求め,蓄積する.
以上のことを,全入力パターンに対して行い,全入力パターンを提示した後に,
  1. それまでに蓄積された結合荷重の修正量をもとに,結合荷重の修正を行う.
これらの処理を誤差が小さくなるまで繰り返し行う.

なぜ慣性項が必要か?

上記の逐次修正法・一括修正法では,「二乗誤差Eの微分値」に比例した値だけによって結合荷重の修正量が決定される. 一般に,このような勾配降下法では,修正量は微小な方が良いとされている. しかしながら,修正量を小さくすると,学習速度は遅くなってしまう. そこで,探索点の動きが振動しない程度に学習速度を上げる一つの方法として,慣性項を導入して結合荷重の修正を行う.

コンパイル方法

prompt> gcc ex_bp_o.c -lm
math.h を読み込んでいますので、「-lm」指定を忘れずに。

當間愛晃(tnal@eva.ie.u-ryukyu.ac.jp