プロが教える店舗&オフィスのセキュリティ対策術

最近誤差逆伝搬法を用いたニューラルネットについて
プログラムを組んで実装してみようと思ったのですが
あまり理解できていない部分があるのでよろしくお願いします。

私が作りたいのはフォントの違う数字画像の認識を
3つの特徴量(a,b,c)、3層のニューラルネット、
閾値関数にシグモイド関数、教師有り学習で作りたいのですが、
私の理解があっているかわからないのでご指摘をお願いします。

・入力層は特徴量が3つなのでニューロンは3つ(a,b,cを入力)。
・中間層は任意でいいということなので10つ。
・出力層は数字が0~9までなので10つ。

教師ベクトルの与え方なのですが
出力層(0~9番とします)において各数字に対応する番号のニューロンは1、それ以外は0、
つまり
出力層の0番の教師ベクトルは{1,0,0,0,0,0,0,0,0,0}
1番目の教師ベクトルは{0,1,0,0,0,0,0,0,0,0}
9番目の教師ベクトルは{0,0,0,0,0,0,0,0,0,1}
(シグモイド関数のため正確には0、1にはなりませんが・・)
とあらかじめ決めておき、
教師ベクトルの学習の際は
0の画像ならば出力層は{1,0,0,0,0,0,0,0,0,0}^T
となるように誤差逆伝搬を用いて中間層・出力層の重みの修正を行い、
同様に1~9の教師画像も対応する出力の番号以外0となるように
学習を行い、

識別を行いたい画像の特徴量を入力した際は
重みの修正は行わず
10この出力の誤差が最小となる教師ベクトルが第一候補、
誤差が最大となる教師ベクトルが第10候補
ということでよろしいのでしょうか?

でもそうすると重みの値が一番最後に学習した教師ベクトルに
対応する重みになっているから
ニューラルネット自体を10個つ用意する必要が
ありますよね・・・?

いま一つ理解できていないのでよろしくお願いします。

A 回答 (2件)

誤差逆伝播法の計算式を良く見てみてください。


一回の逆伝播では、ニューロンの出力値は完璧になりません。
複数回学習を繰り返すことで、各ニューロンの入力と出力のパターンが固定されていきます。
つまり何回も学習しなければ、入力値の特徴を出力に反映させるネットワークは構成されません。

できれば0~9をランダムな順番で何周も学習させるのが一番だと思います。

人間が何事も一回で覚えられないのと一緒です。
いろんなパターンから特徴を導き出せるようにしましょう。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

ええと私が思っていたのは
0の教師画像の特徴3つを入力層に与えた場合
都合よく出力が{1.0.0.0.0.0.0.0.0.0}となるように
重みを出力層→中間層で修正し、その重みを使ってもう一度
出力を計算し、出力が{1.0.0.0.0.0.0.0.0.0}にならなければ
また出力層→中間層と重み修正をし・・・・
と繰り返すと思っていたのですが
ひとつの教師入力に対して理想の出力が得られる重みを考えるのではなく、
0~9のどの教師画像の特徴を与えても
0なら{1.0.0.0.0.0.0.0.0.0}
1なら{0.1.0.0.0.0.0.0.0.0}
2なら{0.0.1.0.0.0.0.0.0.0}
3・・・・
となるような重みを見つけるということでしょうか?
(それだと1つのネットワークでいけそうですが・・・・)

質問を重ねてしまいますが
逆伝搬による重みの修正は教師の学習の時だけで
実際に識別する際には教師学習の時に見つかった理想の重みを
用いるので修正は行わないということでいいのでしょうか?
勉強不足で申し訳ありませんがよろしくお願いします。

お礼日時:2008/07/22 22:38

>0~9のどの教師画像の特徴を与えても


>0なら{1.0.0.0.0.0.0.0.0.0}
>1なら{0.1.0.0.0.0.0.0.0.0}
>2なら{0.0.1.0.0.0.0.0.0.0}
>3・・・・
>となるような重みを見つけるということでしょうか?
>(それだと1つのネットワークでいけそうですが・・・・)
その通りです。
すべてのパターンを識別できる重みで構成されるネットワークを作成することがニューラルネットワークの目標です。
むしろ、仮に10個それぞれのネットワークを作ったとして、
実際に識別する際にどのネットワークを使うかがわかっている時点で、答えがわかっていませんか?

>逆伝搬による重みの修正は教師の学習の時だけで
>実際に識別する際には教師学習の時に見つかった理想の重みを
>用いるので修正は行わないということでいいのでしょうか?
そうです。識別時に学習は修正は行いません。っていうかむしろできないです。
これも同様に、実際に識別する際に、教師とする答えの値がわかっているなら識別する意味はないですよ。
    • good
    • 0
この回答へのお礼

度々ご回答ありがとうございます。

おかげでスッキリしましたので
プログラミングしてみます。ありがとうございました。

お礼日時:2008/07/24 00:43

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