アプリ版:「スタンプのみでお礼する」機能のリリースについて

ニューラルネットワークについて
http://mars.elcom.nitech.ac.jp/java-cai/neuro/me …
を参考に勉強しています.

1.
ニューラルネットワークのあるノードの出力は,前層のノードの重み和で表され,
 out_i = Σ{W_ji*x_j}  from j=0~n
となる.
ここで,バイアス項として,W_0i,x_j0=1.0 というのがあるのですが,
このバイアス項はどういう役割をするためにあるのでしょうか?

2.
ノードx_iへの出力は,活性化関数g を用いて,
 x_i = g(out_i)
となる.
ここで,「活性化関数は非線形関数でなければならない」というふうに
言われているのですが,なぜ非線形でなければならないのでしょうか?


以上の1.2.について御教授お願いします.

A 回答 (2件)

 直感的理解の話だろうと思うんで、そのレベルで説明しますと、



2. gが線形(一次式)だと、ニューラルネット全体のやる計算は、出力ひとつあたり1個のノードで表せる。従って、階層化は不要。つまりパーセプトロンになってしまって、ニューラルネットを考えてる意味がないから。

1. Σx_i w_iがほとんど0で、ちょっとしか変動しないような場合を考えると分かり易いかな?g(offset+Σx_i w_i)のoffsetを変えると、y=g(x)のグラフ(非線形なんで、直線ではなく曲がっている)のうちの、どのぐらい曲がってる部分を使うかを調節することができるから。

という単純なこと。

この回答への補足

2.について
・パーセプトロンとニューラルネットは違うものなのですか?同じものと認識していたのですが・・・。

>>出力ひとつあたり1個のノードで表せる。従って、階層化は不要。
この箇所が理解できないのですが,自分では以下のように考えたのですが,どういう意味なのですか?

出力をyとしたとき,3層パーセプトロンでは,
y = h( Σ{w_ij * g(Σw_jk*x_k)} )
   g,h は,活性化関数
と表されて,例えば,g(x)=h(x)=x+1 のような線形のときは,出力yは線形に
なってしまい,g(x)=x+1,h(x)がexp関数やシグモイド関数なら出力yが非線形になる.


1.つまり,重み和が0に近いときには,あらかじめ決めたバイアスの
値によって,発火させる(fire)かが決められるということですか?

結構詳しく知りたいので,数式等を用いて頂くとありがたいです.
補足よろしくお願いします.

補足日時:2008/05/23 10:23
    • good
    • 0

ANo.1のコメントについて。



> ・パーセプトロンとニューラルネットは違うものなのですか?同じものと認識していたのですが・・・。

 ううむ。違うと言ってるのに、違うのかと尋ねられても…な。
 この手の研究は、脳の仕組みを真似しようという動機で始まった。でも、最初に考えられたパーセプトロンは、パターン認識能力がごく限られていることがすぐに分かった。で、ひとひねりしたのがartificial neural networkって訳だけれど、実際の神経細胞ネットワークとはだいぶ違うシステムです。Backpropagationという比較的効率の良い学習アルゴリズムがあることがポイント。詳しい事は自分で調べてね。

>>>出力ひとつあたり1個のノードで表せる。従って、階層化は不要。

> 出力をyとしたとき,3層パーセプトロンでは,
> y = h( Σ{w_ij * g(Σw_jk*x_k)} )

 この式のgが線形、つまり
  g(x)=Ax+B
と書けるとき、代入すると
  y = h( Σ{w_ij Σ(A(w_jk x_k)+B)} )
   = h( A Σ{w_ij Σw_jk x_k)} + BΣ{Σw_ij} )
   = h( A ΣΣ{w_ij Σw_jk x_k)} + BΣ{Σw_ij} )
ここで、
  V_ik = Aw_ijΣw_jk
V_i0 = BΣΣw_ij
  x_0 = 1
とおくと、
  y= h( Σ{V_ik x_k)} )
と表せる。gが要らなくなっただけじゃなくて、ほら、層になってたものが、出力yについて1個のノードにまとめられたでしょ? ここでhが閾値関数(階段関数)sgn(x)であれば、これはパーセプトロンに他なりません。
  sgn(x) = if x>0 then 1 else -1

> 例えば,g(x)=h(x)=x+1 のような線形のときは,出力yは線形に
> なってしまい,g(x)=x+1,h(x)がexp関数やシグモイド関数なら出力yが非線形になる.

 hはパーセプトロンでは閾値関数ですから、neural netのhとはちょっと違うように見える。ところが、アウトプットを最終的にYesかNoかに絞って使う応用であれば、neural netでもhとして閾値関数を使わざるを得ない。hは本質的ではないですね。

> 1.つまり,重み和が0に近いときには,あらかじめ決めたバイアスの
> 値によって,発火させる(fire)かが決められるということですか?

 いやいや、fireするかしないか(YesかNoか)というのはgが閾値を持つとき(例えばsgn(x)であるとき)の話でしょう。そうじゃなくて、ですね、グラフを描いて考えればお分かりになると思うんですが、

 g(x)が直線のグラフであるならば、xにバイアスを加えた g(x+bias) は g(x)+B (Bは定数)になるだけです。つまり、hに定数項を加えるのと同じ意味しかない。
 でもg(x)が曲線のグラフになってると、バイアスを加えたものg(x+bias)はグラフをx軸にそってずらしたことになる。gはxによって傾きが違うので、例えば「重み和が0に近いとき」に、入力の僅かな違いに対してノードの出力が敏感に変わる(傾きが急)か、あるいは鈍感(傾きが緩やか)なのかがbiasによって変化する。

 ついでに申し上げると、exp関数やシグモイド関数を使うのはなぜかというと、計算が楽な単調曲線、というだけのことであって、要するにテキトーに曲がってて単調であれば別に何でもいいんです。

> 結構詳しく知りたいので,数式等を用いて頂くとありがたいです.

 プログラムを書くのなら式が必要だけど、全体の働きを理解したり応用したりするには直感的理解が大事。式はむしろ邪魔かも知れませんよ?
    • good
    • 0
この回答へのお礼

詳細な回答でよく分かりました.
今後もまた質問することがあると思うので,そのときはまたよろしくお願いします.
ありがとうございました.

お礼日時:2008/05/26 11:38

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