電子書籍の厳選無料作品が豊富!

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

A 回答 (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)
にすれば良いはずです。
各バイアスや中間層の結合加重にしても同じです。
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/09/27 12:05

プログラム化する式と、分かっている分(「慣性項を付加」していないもの)をプログラムにしたもの、それとそのプログラム内の変数と元の式の要素との対応関係を補足説明していただくことはできますか。



もちろん、元の式やプログラムを全部提示するのは分量的に無理でしょう(し、そうされても読む人はあまりいないでしょう)から、要点部分のみのほうが望ましいです。

なお、要点を挙げるにあたっては

「真・技術系メーリングリスト FAQ」
http://www.geocities.co.jp/SiliconValley/5656/

 第5章 質問はしてみたけれど・・・
  Q:「ソースを見せてください」と言われました。 守秘義務があるので見せられないのですが、どうすれば良いでしょうか?

が参考になるかと思います。(これ以外の項目も、メーリングリストに限らず、質問を行う場合に役に立つ情報なので必読です。)

この回答への補足

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]);
}

慣性項を付加していない場合のプログラムです。中間層の結合荷重の修正部分は出力層のそれと変数が変わるだけで基本的に同じなので省略させていただきます。よろしくお願いします。

補足日時:2005/09/23 18:55
    • good
    • 0

誤差逆伝播法に関して勉強してみてください。


下記で修正量計算のサンプルプログラムもあったと思います。

http://www.cmplx.cse.nagoya-u.ac.jp/~tokura/data …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!