• 締切済み

3層の階層型ニューラルネット(逆誤差伝播法)

入力層、中間層、出力層の計3層です。 中間層の出力関数にはシグモイド関数、出力層の出力関数には線形関数を用います。閾値はありません。 わからないのは逆方向処理のところです。慣性項を付加したプログラムを組もうと思っているのですが、結合荷重の修正量を求めるところがわかりません。 素人なのでわかりにくい書き方かもしれませんがよろしくお願いします。

みんなの回答

  • hotap
  • ベストアンサー率12% (11/90)
回答No.3

ぱっと見たんでアルゴニズムを忠実に再現できているかは確認していませんが d_wkj[k][j]= ETA*d_k[k]*y[j]; を d_wkj[k][j]= ETA*d_k[k]*y[j] + alpha*d_wkj[k][j]; alpha(0<=alpha<1) にすれば良いはずです。 各バイアスや中間層の結合加重にしても同じです。

goo_taro1982
質問者

お礼

どうもありがとうございます。 もう少し勉強してみます。

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.2

プログラム化する式と、分かっている分(「慣性項を付加」していないもの)をプログラムにしたもの、それとそのプログラム内の変数と元の式の要素との対応関係を補足説明していただくことはできますか。 もちろん、元の式やプログラムを全部提示するのは分量的に無理でしょう(し、そうされても読む人はあまりいないでしょう)から、要点部分のみのほうが望ましいです。 なお、要点を挙げるにあたっては 「真・技術系メーリングリスト FAQ」 http://www.geocities.co.jp/SiliconValley/5656/  第5章 質問はしてみたけれど・・・   Q:「ソースを見せてください」と言われました。 守秘義務があるので見せられないのですが、どうすれば良いでしょうか? が参考になるかと思います。(これ以外の項目も、メーリングリストに限らず、質問を行う場合に役に立つ情報なので必読です。)

goo_taro1982
質問者

補足

iMAX:入力層の数 x:入力層 jMAX:中間層の数 y:中間層 kMAX:出力層の数 z:出力層 wkj:結合荷重(出力層) d_j:中間層のユニットに対する誤差 d_k:出力層のユニットに対する誤差 ts:目標出力 Ep:入力信号と目標出力との相対誤差 ETA:学習率 for(k=0; k<kMAX; k++){ d_k[k]= ts[k]-z[k]; Ep[p]= fabs(ts[k]-z[k])/ts[k]; } for(k=0; k<kMAX; k++){ for(j=0; j<jMAX; j++){ d_wkj[k][j]= ETA*d_k[k]*y[j]; wkj[k][j]= wkj[k][j]+ d_wkj[k][j]; } } for(j=0; j<jMAX; j++){ sum[j]= 0.0; for(k=0; k<kMAX; k++){ sum[j]= sum[j]+ d_k[k]* wkj[k][j]; } d_j[j]= sum[j]*y[j]*(1.0-y[j]); } 慣性項を付加していない場合のプログラムです。中間層の結合荷重の修正部分は出力層のそれと変数が変わるだけで基本的に同じなので省略させていただきます。よろしくお願いします。

noname#29127
noname#29127
回答No.1

誤差逆伝播法に関して勉強してみてください。 下記で修正量計算のサンプルプログラムもあったと思います。 http://www.cmplx.cse.nagoya-u.ac.jp/~tokura/data/NNstudy/