質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Q&A

解決済

2回答

4479閲覧

勾配消失における細胞の発火とは何なのか

taiyo2017

総合スコア170

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

0グッド

0クリップ

投稿2018/09/16 12:31

https://qiita.com/Ugo-Nama/items/04814a13c9ea84978a4c#多層パーセプトロン
の記事を読みながらディープラーニングについて勉強しています。
勾配消失とRectifier Linear Unit のところで、

ReLUを使ったBackpropで特徴的なのは,各層に発火している細胞がある限り,逆伝播において消失が起きないという点です.これは直感的には,各層が十分に広いネットワークにすれば毎回各層でどれかの細胞が発火してくれそうなもんで,そのような構造をもったネットワークは毎回入力層まで勾配消失が起こらない多層パーセプトロンになっていると考えられます.

という文章があります。この、細胞の発火とは細胞で何が起きていることなのでしょうか?教えて下さい、よろしくお願いいたします!

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

ざっくり言えば、出力が出てくることです。

  • 発火しない=出力が出ない=0が出てくる
  • 発火する=出力が出る=0よりも大きい値が出てくる

だと思ってください。

ただしこれは少しアバウトな説明で、厳密に考えればsigmoidなんかはマイナス無限大でやっと0になるので「何らかの出力は常に出ている。すごく小さいかもしれないけど」と捉えるべきかもしれません。出力がないときが0でない活性化関数、出力の値がマイナスになる活性化関数なども考えられますが、とりあえず無視しています。

ということでアバウトに捉えれば、何かしらの出力が出てきて次の層(ないしネットワークの出力)に情報を伝えることが発火です。

コメント欄でのやり取りを受けて

もう少し説明が必要かな、と思ったのでまとめておきます。

大昔(ごく初期)のニューラルネットワークで用いられた形式ニューロンは、出力が0と1だけでした。

詳細はwikipedia(形式ニューロン - Wikipedia)とかを見てください。

これは発火が1、非発火が0に対応するという、わかりやすいモデルです。活性化関数には階段関数というものを使っていました。

それから色々あって、活性化関数にシグモイド関数(とか、その変種のロジスティック関数やtanhだったり、他の何かだったり、とにかく色々なもの)などというものを使うようになりました。

この辺のことは質問文に貼ってある記事でも触れられていますが、誤差逆伝播法で微分を計算するためには階段関数のような非連続関数では都合が悪かったということが大きな理由です。

このおかげでニューラルネットワークが色々なタスクに使えるようになってよかったね、ということなのですが、ニューロンの出力を単純に発火、非発火に対応させることはできなくなりました。

それでも、これらの活性化関数は、入力をマイナス無限大から無限大として、出力はロジスティック関数なら0~1、tanhは-1~1に収まりますから、そのどちら側に近いかで発火していない、しているとみなすことはできました。ちょうど真ん中(ロジスティック関数は0.5、tanhは0)ということは滅多にはないので、まあそういう表現をしても良いかな、といったところです。

近年登場したReLUだとまた事情が異なり、0から無限大まで出力が変化します。到底「どれくらいなら発火しているか」なんて言えないのですが、関数としてはx=0で非連続なので(それでも微分値を0か1のどちらかに決め込んで微分を計算してしまいます。劣微分といいます)、ここを境に非発火と発火をわけるという考え方をすることは可能です。

それでえっと、勾配消失の問題でしたっけ。

先に順伝播について考えます。直感的には、「入力に近い層のパラメータが出力にたいして影響しなくなる」という現象と捉えることができます。一応影響はするんだけど、出力層のパラメータの1/100とかもっと小さいスケールになっちゃう、みたいな。

参考:
Deep Learning覚え書き(Gradient vanishing問題) - 八谷大岳の覚え書きブログ

逆伝播では勾配(=誤差関数に対する重みの微分係数)を計算する訳ですが、上のことから考えると、直感的に「凄く小さい勾配になっちゃうんだろうな」ということがわかります。

勾配に基づいて重みの更新量を決める訳ですから、入力層に近い層はぜんぜん学習しないという現象が起こります。これが勾配消失です。

で、

ReLUを使ったBackpropで特徴的なのは,各層に発火している細胞がある限り,逆伝播において消失が起きないという点です.これは直感的には,各層が十分に広いネットワークにすれば毎回各層でどれかの細胞が発火してくれそうなもんで,そのような構造をもったネットワークは毎回入力層まで勾配消失が起こらない多層パーセプトロンになっていると考えられます.

という文章ですが、上に書いたとおりReLUは出力が0より大きい、つまりReLUの微分係数が1になる領域であれば「発火している」と捉えることができます。微分係数1って要はy=xですから、上に書いたような勾配消失の問題は原理的に起こらないことが直感的にもわかります。これが各層に発火している細胞がある限り,逆伝播において消失が起きないの意味です。

投稿2018/09/16 13:01

編集2018/09/16 15:55
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mkgrei

2018/09/16 13:41

発火するかどうかと、値の大きさは別問題では? (勾配も。) http://nok-lab-life.hatenablog.com/entry/2017/12/01/175422 もとより、1か0の出力を出そうとして、計算機で扱いたいとか、誤差伝搬で微分が取りたい、と考えたときにsigmoidが出てきています。 ということから考えると、sigmoidの0.5をすぎればやはり発火しているとみなすのが原理的ではないでしょうか。 reluは0でない値になるときに発火しているはずです。
hayataka2049

2018/09/16 13:54 編集

>sigmoidの0.5をすぎればやはり発火している 0.49だと「ほとんど発火している」みたいな表現になるでしょうか。あるいは「発火していない」と言い張るか。どちらにせよ私は嫌です。 階段関数を使うニューロンまでさかのぼって考えるべき問題と考えます。1と0しか出力しないなら、「発火」「非発火」に直接対応させられます。
mkgrei

2018/09/16 14:00 編集

おっしゃる通り、階段関数で考えたときに、sigmoidは0.5を超えたときに発火しています。 0.49は発火していません。 sigmoidは発火関数に解析性を与えるための近似でしかありません。 2次微分まで考えると定性的にも異なりますし。
mkgrei

2018/09/16 14:02

まあ、唯一の考え方しかないわけではないということで。 というと、コメントではなく回答にすべきだったか… 失礼。
hayataka2049

2018/09/16 14:09

階段関数で考えたときに、ということであれば、個人的にはやはり「活性化関数がsigmoidなら、発火/非発火で捉えるのは本来適当ではないが、だいたい出力が1/0に落ち着いているなら実用的にはそう見ても構わないだろう」程度の立場を取りたいです。0.5とか0.49は「困った、適当な呼び方がないんだけど、まあいいか」ということで。 reluに至っては、どう表現すれば良いのかよくわかりませんが・・・。
mkgrei

2018/09/16 14:22

確かにそうかも知れません。 Fermi関数を使えば、解析性を保ちつつ限りなく過渡値域を減らすこともできます。 ただ、深層学習の発火関数を考えた際には誤差伝搬で限りなく不利になることが予想されます。 もともとの質問が①ReLUについて発火であること、②更に勾配についての言及があることを考えると、0/1だった活性化関数の概念を拡張して、①今後(x:0->inf)勾配が大きくなる予定があれば、発火前、②今後勾配が小さくなっていくのであれば、発火後として拡張するほうがスッキリまとめるられるような気がしました。 ただ、上記については、最初に0/1の活性化関数というものがあって、そこでニューロンとのアナロジーで発火を考えていたという経緯を踏まえる必要性があって、その後歴史的経緯の経て今の多様な活性化関数が考えられているということを抑えておくべきという気持ちです。
mkgrei

2018/09/16 14:36 編集

というところで、質問文の最後の質問が、 「細胞の発火とは細胞で何が起きていることなのでしょうか」 ということに気づきました… 勾配消失(逆伝搬)を考えた際には、ReLUの細胞の発火していると、勾配の値がゼロにもならず減衰もせずに出てきます。 細胞の発火というのは本来、順伝搬で細胞(の活性化関数)に入力した値がそのまま出てくることを発火しているといいます。 (本来の細胞の発火では勾配は計算できないので、勾配消失については考えません。)
hayataka2049

2018/09/16 14:43

その辺りを明示的にかかなかったので、今思えば歯切れの悪い回答になったかな、と反省しております。 修正しておきます・・・
taiyo2017

2018/09/16 23:11

みなさま、ありがとうございます!とても分かりやすく理解できました!!
guest

0

細胞の発火とは細胞で何が起きていることなのでしょうか?

参考にされている記事でいうと、『細胞の中身と順伝播則』にヒントがあります。

各細胞は、前の細胞から受け取った信号に重みを乗じて総合計を計算する処理(図のΣのこと)とその総合計の値から次の細胞に伝達する信号の強さを計算する処理(活性化関数といい、図のφのこと)に分かれると説明されています。上記の細胞の発火とは、次の細胞に信号を伝達する処理部分のことを言っていると理解していいと思います。
『細胞の発火』というのは、脳細胞が刺激に対して反応する様子の比喩的表現で、実際は活性化関数の出力結果そのもののこと指し示しています。この活性化関数の出力結果は、関数に何を使うのかで異なります。(このことは、参照記事の『活性化関数あれこれ』にあります)グラフの形状があったほうが、イメージしやすいようであれば、下記の記事を参考にしてはいかがでしょう。

https://qiita.com/namitop/items/d3d5091c7d0ab669195f

ReLu関数は、その形状からわかる通り、入力値>0のとき、入力値がそのまま出力値になります。(先の細胞の構造でいうと、Σ>0のときΣがそのまま出力される)この性質は、誤差逆伝播を使って勾配を計算するときにとても便利で、入力値>0ならば勾配=1となります。これは勾配消失を心配する必要がないことを意味しています。

ReLUを使ったBackpropで特徴的なのは,各層に発火している細胞がある限り,逆伝播において消失が起きないという点です.

以上より、この表記は『各層のφの結果がゼロより大きいである限り、逆伝播において勾配=1なので消失が起きない』と理解でいいかと思います。

投稿2018/09/16 21:27

R.Shigemori

総合スコア3376

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

taiyo2017

2018/09/16 23:16

なるほど、分かりました。ありがとうございます!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問