ニューラルネットの教師あり学習について質問です

このQ&Aのポイント
  • ニューラルネットの教師あり学習について質問です。フォントの違う数字画像の認識を3つの特徴量(a,b,c)、3層のニューラルネット、閾値関数にシグモイド関数、教師有り学習で作りたいのですが、詳しく教えてください。
  • 入力層は3つの特徴量(a,b,c)を持ち、中間層は任意の10つのニューロン、出力層は数字が0~9までの10つのニューロンで構成される3層のニューラルネットを作りたいです。
  • 教師ベクトルの与え方についても教えてください。シグモイド関数を用いた教師有り学習で、出力層の各数字に対応するニューロンが1でそれ以外が0になるように設定し、誤差逆伝搬を用いて重みの修正を行います。最終的には入力画像の特徴量から最小誤差を持つ教師ベクトルを選ぶことで識別を行います。
回答を見る
  • ベストアンサー

ニューラルネットの教師あり学習について質問です。

最近誤差逆伝搬法を用いたニューラルネットについて プログラムを組んで実装してみようと思ったのですが あまり理解できていない部分があるのでよろしくお願いします。 私が作りたいのはフォントの違う数字画像の認識を 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個つ用意する必要が ありますよね・・・? いま一つ理解できていないのでよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

>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個それぞれのネットワークを作ったとして、 実際に識別する際にどのネットワークを使うかがわかっている時点で、答えがわかっていませんか? >逆伝搬による重みの修正は教師の学習の時だけで >実際に識別する際には教師学習の時に見つかった理想の重みを >用いるので修正は行わないということでいいのでしょうか? そうです。識別時に学習は修正は行いません。っていうかむしろできないです。 これも同様に、実際に識別する際に、教師とする答えの値がわかっているなら識別する意味はないですよ。

yamada-ke
質問者

お礼

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

その他の回答 (1)

回答No.1

誤差逆伝播法の計算式を良く見てみてください。 一回の逆伝播では、ニューロンの出力値は完璧になりません。 複数回学習を繰り返すことで、各ニューロンの入力と出力のパターンが固定されていきます。 つまり何回も学習しなければ、入力値の特徴を出力に反映させるネットワークは構成されません。 できれば0~9をランダムな順番で何周も学習させるのが一番だと思います。 人間が何事も一回で覚えられないのと一緒です。 いろんなパターンから特徴を導き出せるようにしましょう。

yamada-ke
質問者

お礼

ご回答ありがとうございます。 ええと私が思っていたのは 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つのネットワークでいけそうですが・・・・) 質問を重ねてしまいますが 逆伝搬による重みの修正は教師の学習の時だけで 実際に識別する際には教師学習の時に見つかった理想の重みを 用いるので修正は行わないということでいいのでしょうか? 勉強不足で申し訳ありませんがよろしくお願いします。

関連するQ&A

  • ニューラルネットにおける学習について

    学習とは,サンプルから確率分布を推測することであるそうですが, (http://watanabe-www.pi.titech.ac.jp/~swatanab/kogi4-22.pptの3枚目) ニューラルネットワーク(NN)で学習して得られた関数は,確率分布なのですか? 確率分布なら[0,1]しか値をとらないですが,たとえば,多項式をNNで学習して得られた 関数は,1以上の値をとりますよね? そこで, 学習の定義が違うのか,それとも,NNが確率分布を扱わないものだからなのでしょうか? ニューラルネットは,2乗誤差E=1/2Σ(f(x;w) - Y)^2 を最小化する ように学習していることからニューラルネットは最尤法であると考えていいのでしょうか? また,最尤法でなく,例えばベイズ法を適用したものはあるのでしょうか? 長くなりましたが,回答よろしくお願いします.

  • バックプロパゲーション(誤差逆伝播法)について質問です

    ニューラルネットのバックプロパゲーション(BP)について勉強してますが、いまいち理解できないところがあります。どなたかご教示ください。 中間層のあるニューロンj の結合加重を更新するとき 一つ後の層のニューロンの誤差の総和を反映させると書いてあったのですが、 誤差 E は    E = 1/2Σ(t_k - out_k)^2       t_k=ニューロンkの教師信号、out_k=kの出力 で与えられますが、 例えば仮に10層くらいのネットワークがあって、第3層の あるニューロンj の結合加重を更新するときも、その一つ後ろの第4層のニューロンの誤差の総和を計算する必要があるんですか?。誤差って何と何の誤差なんでしょうか? またそのニューロンj は教師信号と関わってくるんでしょうか?、 説明が分かりにくかったらすいません…どなかご存知でしたら教え下さい。

  • 3層構造 階層型ニューラルネットワークについて

    入力層、中間層、出力層の3層構造からなる基本的な階層型ニューラルネットワークの結合荷重値はどのようにして与えられるのでしょうか? また、中間層のニューロンの数はどのようにして決められるのでしょうか?入力層のニューロンの数と相関があるのでしょうか?中間層が多層の場合、1層のニューロンの数はみな同じですか?

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

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

  • ニューラルネットワークの正規化されたデータを元に戻すには

    ニューラルネットワークで正規化し、パラメータを求めた後、パラメータの正規化をもとに戻したいのですが、方法が分かりません。 以下は、私がやっている途中を示します。 たとえば、データの入力が年齢と身長、出力が体重のデータがあるとします。 年齢x1  身長x2   体重y 21    160     55 24    172     63 私は、正規化するために  x1’=(x1-ave(x1))/std(x1)  x2’=(x2-ave(x2))/std(x2)  y’=(y-ave(y))/std(y) として正規化しました。aveは平均、stdは標準偏差 ニューラルネットとしては、次の式で表される三層パーセプトロンを利用しています。  f=W0+Σ{Wj*hj} Σはj=1からJまで  (中間層-出力層)  hj=sigmoid(Σ{Wjk*xk’}) Σはk=1,2  (入力層-中間層)  Error=(f-y’)*(f-y’) 入力層のバイアスはなしで、中間層のバイアスはありを考えています。 活性化関数は、中間層がシグモイド関数、出力層が線形関数です。 正規化したxとyに対して各wを求めるプログラムは作れたのですが、 ここからどうやってwの正規化を解除すればよいか分かりません。 正規化する方法は載っているサイトはいくつかあるのですが、解除する 方法が載っているのは見つかりませんでした。 回答よろしくお願いします。

  • プログラミングの問題

    1.皮膚感覚における情報処理機構及び機能に関する神経細胞の働きにはどういったことがありますか? 2.3層階層型ニューラルネットに誤差逆伝搬学習アルゴリズム適用して符号化問題の機能を実現するプログラムを自作し実行するやり方を教えて下さい。プログラムを自作したら、学習パターンと教師信号の組をランダムに入力して学習し、学習終了後の結合荷重を用いて学習入力、学習出力、教師信号を対比して示してほしいです。また、学習後の結合荷重としきい値は機能を実現するための内部表現になっているのでその特徴を教えてほしいです。 符号化問題 入力ユニット数:8、隠れユニット数:3、出力ユニット数:8として、入力信号と教師信号が同じになるように、それぞれ下記の8つの信号を学習させる情報圧縮ニューラルネット・学習終了後の入力パターンに対する出力ユニット及び隠れユニットの出力値の示して下さい。 入力信号(1,0,0,0,0,0,0,0),(0,1,0,0,0,0,0,0),・・・(0,0,0,0,0,0,0,1)         ↓          ↓             ↓ 教師信号(1,0,0,0,0,0,0,0),(0,1,0,0,0,0,0,0),・・・(0,0,0,0,0,0,0,1) どうかよろしくお願いします。

  • ニューラルネットワークについて

    最近ニューラルネットについて勉強しています。 特に準ニュートン法での学習について考えています。 ある日手に入れたデータで学習したところ、誤差があまり小さくならなかったので(何度も学習を試し、ノイズ混入も試したので、ローカルミニマムに引っかかっている感じではないと思います)、中間層のユニット数を莫大に大きくしました(最初試したときの100倍以上です)。 しかし誤差が全然変らない、という結果が出ました。 このように、自由度を上げても学習しきらないことってあるんでしょうか。もしあるのなら、その原因は何でしょうか。また、学習しない原因となっている邪魔なデータを探す方法ってあるのでしょうか(出来れば視覚的に見えると嬉しいです)。 宜しくお願い致します。

  • ニューラルネットワークでデータを正規化するには?

    こんにちは、今ニューラルネットワークをプログラミングしているのですが、データを正規化しようと思っています たとえば教師データの入力が年齢と身長、出力が体重のデータがあるとします 年齢  身長  目的変数:体重 24    150 |  65(kg) 24    172 |  73(kg) という年齢が同じデータがある場合 正規化するにはどうればいいでしょうか? 正規化は 正規化後の値 = (正規化前の値 - 最小値) / 最大値 - 最小値 で出すと書いてあったのですが、年齢は最小値と最大値が同じ 24 しかありませんよね、この場合はどうすればいいのでしょうか? またついでにこの様な最小値 = 最大値の正規化されたデータを元に戻すにはどうすればいいのでしょうか?(出力層のシグモイド関数の計算結果を元のデータの単位に戻したいんです) わかりにくかったらすいません、ご存じの方よろしくお願いします。

  • ニューラルネットに関する数学的な解説図書等

    ニューラルネットについて独学で勉強しているのですが、数学的な観点から理解を深めたいと考えています。 自分で図書を色々と探してみたんですが適当なものが見つかりませんでした。ご存知の方がいらっしゃいましたら教えて下さい。 また、株価の学習による近似もやられていると聞いてますが学習結果出力と学習後の各種パラメータ(θ、w)の関係が全然分らないというのを本で読んだことがあります。 ニューラルネットに限らず、非線形的な関数で記載される現象については、シミュレーション的なアプローチしか出来ないのでしょうか。

  • ニューラルネットワーク

    0~9までの7セグメントディスプレイで表す数字を識別するニューラルネットワークを作成したいのですがなかなかわからないので質問したい所存です。 7セグメントを1~7のノードに割り振り中間層に10個のノード8~17でつなぎ出力するノードを18~27として18から0~9まで出力するようにしたいのですが、やり方としてまず、 27個のノードの結合関係を隣接行列で表す。 つぎに内部状態と重みのとる値の範囲を示す。 そしてそのニューラルネットワークに入力を与え、出力を計算する手順を説明するとのことなのですが。 よろしければアドバイス等お願いいたします。