• ベストアンサー

ニューラルネットワークのシグモイド関数について

ニューラルネットワークにでてくるシグモイド関数 についてお聞きしたいのですが、文献によってこの シグモイド関数の式が、tanがあったり、expが使わ れていたりと、微妙に違っていていったいどの式が 正しいのかよくわかりません。 このシグモイド関数には決まった形とかは無いの でしょうか? 分かる方いたら教えてください。よろしくお願いします。

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

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

tanではなくてtanh(ハイパーボリックタンジェント)だと思います。シグモイド関数の一つの定義は  f(x)=1/(1+exp(-ax)) です。一方、tanhは、  tanh(x) = (exp(x)-exp(-x))/(exp(x)+exp(-x)) で定義されています。したがって  1+tanh(ax/2) =1+(exp(ax/2)-exp(-ax/2))/(exp(ax/2)+exp(-ax/2)) = 2exp(ax/2)/(exp(ax/2)+exp(-ax/2)) = 2/(1+exp(-ax)) なのでf(x)は  f(x)=(1/2)(1+tanh(ax/2)) と表わすこともできます。なお、  tanh(ix)= i tan(x) となります。

chanple
質問者

お礼

詳細な回答ありがとうございます。 expを使ったものもtanhで表されたものも 表し方がちがうだけで同じものだったんですね。 大変よくわかりました。ありがとうございました。

その他の回答 (1)

noname#108554
noname#108554
回答No.1

私は参考URLに出てくるようなものしか知りませんが。 具体的にどんな形があるんですか?

参考URL:
http://www.mathworks.com/access/helpdesk/jhelp/toolbox/fuzzy/sigmf.html
chanple
質問者

補足

具体的には、参考URLにあったものと次の、 (1/2)(1+tanh(ax/2)) という形のものがあったので、どちらが正しいもの なのかわからず質問しました。

関連するQ&A

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

    ほとんどの文献でシグモイド関数を用いたニューラルネットワークに閾値が含まれています。 しかし、あまりその理由について触れられていません。(あまりと言うか、見つけられなかったわけで・・・ 閾値の必要性について知りたいです。 誰か教えてください( ̄人 ̄)頼んます強い人

  • ニューラルネットワークの重みの行列について

    ニューラルネットワーク(誤差逆伝播)では、重みを行列で表現して、行列計算を何回となくやっていくという風なプログラムになっていくと思います。”重み”というとどうしても重み付き平均が連想され、足して1になるようにする、というイメージにとらわれてしまうのですが、そのような制約はないということでもいいのでしょうか。足して1にならないということは増幅とか減衰が生じることを許容するということになりますが。 もし、それでOKならば、多くのテキストにみられる”重み”という言葉で説明しない方がいいのではないかと思いますが。そのあと、シグモイド関数で変換されたりするので、和の値が一定などの制約は必要なしなのだろうと思いますが。また、その”重み”の値も変化していくのでそうなのかなと思いますが。ニューラルネットワークはある意味、システムのルールさえ守っていれば融通無碍という風にも見えます。 また、ニューラルネットワークでは行きついた先が最適解である保証は取れるということになるでしょうか。行き当たりばったりを何回も繰り返すという印象をもってしまいます。あるいは別のタイプになりますが、乱数による総当たり戦の最終勝者を探すというような感じあります。そうすると乱数の発生の仕方に依存したりするように思えてきます。

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

    ニューラルネットワークというものがあることを知り、簡単な例)AND・XOR問題や数字認識 等でニューラルネットワークを試してみたいと考えたのですが、私はプログラミング経験がほとんどなく、WEBでニューラルネットワークについて書かれたページなどを見ても、自分でプログラムを作成することができません。 そこで、ソースコードがついていて実装方法についても詳しく書かれた本やWEBサイトを探しています。ちなみに言語はC/C++が良いです。 どなたか知っている方がおられましたら、教えてください。

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

    ニューラルネットワークで正規化し、パラメータを求めた後、パラメータの正規化をもとに戻したいのですが、方法が分かりません。 以下は、私がやっている途中を示します。 たとえば、データの入力が年齢と身長、出力が体重のデータがあるとします。 年齢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の正規化を解除すればよいか分かりません。 正規化する方法は載っているサイトはいくつかあるのですが、解除する 方法が載っているのは見つかりませんでした。 回答よろしくお願いします。

  • ニューラルネットワークの評価

    詳しいことは言えないのですが(すみません)、私は市販のニューラルネットワークソフトウェアを用いて予測を行う研究を行っています。 ネットワーク荷重などの設定をソフトウェアに任せて数百~数千のネットワークを構築した場合、その中で一番結果のよかったネットワークのみを論文等で、ニューラルネットワークの予測精度はこのくらいみたいな言い方をしてもよいのでしょうか? それとも、予測精度の平均値等で評価しなければいけないのでしょうか? ご存知の方がおられましたら教えてください。

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

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

  • ニューラルネットワークに関する本

    今回、ITと生物学との関連についての授業で、課題として、ニューラルネットワークについてのレポートを書くことになりました。そこで、参考文献を探していたのですが、プログラムに重点を置く本が多くみつかりました。 ですが、僕自身は理工系の学部ではないため理解しづらく、レポートもプログラムよりも応用面に重点を置きたいのですが、そのようなレポートを書く上で、参考となる本を教えて頂けませんでしょうか?お願いします。

  • ニューラルネットワークでのバイアス項と活性化関数について

    ニューラルネットワークについて http://mars.elcom.nitech.ac.jp/java-cai/neuro/menu.html を参考に勉強しています. 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.について御教授お願いします.

  • ロジスティックとニューラルネットワークの違い

    ロジスティック回帰分析とニューラルネットワークの明確な違いを説明できる方がおられましたら、教えていただけないでしょうか。 ニューラルネットワーク(多層構造&バックプロパゲーション)も中間層での計算は、ロジスティックなので、考え方によっては2重、3重のロジスティックと考えられないこともないと思うのですが・・・(慣性項は含まれていますが)。

  • シグモイド関数について

    シグモイド関数はy軸が0~1の範囲になっています。 この範囲をー1~1とか0~2とかに変えることって可能なんですか? シグモイド関数の式を見てもこの範囲を変更することができませんでした…(思いつかなかったです) ロジスティックでもいいのでどなたかわかる方いましたらよろしくお願いします。