https://qiita.com/Ugo-Nama/items/04814a13c9ea84978a4c#多層パーセプトロン
の記事を読みながらディープラーニングについて勉強しています。
勾配消失とRectifier Linear Unit のところで、
ReLUを使ったBackpropで特徴的なのは,各層に発火している細胞がある限り,逆伝播において消失が起きないという点です.これは直感的には,各層が十分に広いネットワークにすれば毎回各層でどれかの細胞が発火してくれそうなもんで,そのような構造をもったネットワークは毎回入力層まで勾配消失が起こらない多層パーセプトロンになっていると考えられます.
という文章があります。この、細胞の発火とは細胞で何が起きていることなのでしょうか?教えて下さい、よろしくお願いいたします!
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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総合スコア30933
0
細胞の発火とは細胞で何が起きていることなのでしょうか?
参考にされている記事でいうと、『細胞の中身と順伝播則』にヒントがあります。
各細胞は、前の細胞から受け取った信号に重みを乗じて総合計を計算する処理(図のΣのこと)とその総合計の値から次の細胞に伝達する信号の強さを計算する処理(活性化関数といい、図のφのこと)に分かれると説明されています。上記の細胞の発火とは、次の細胞に信号を伝達する処理部分のことを言っていると理解していいと思います。
『細胞の発火』というのは、脳細胞が刺激に対して反応する様子の比喩的表現で、実際は活性化関数の出力結果そのもののこと指し示しています。この活性化関数の出力結果は、関数に何を使うのかで異なります。(このことは、参照記事の『活性化関数あれこれ』にあります)グラフの形状があったほうが、イメージしやすいようであれば、下記の記事を参考にしてはいかがでしょう。
https://qiita.com/namitop/items/d3d5091c7d0ab669195f
ReLu関数は、その形状からわかる通り、入力値>0のとき、入力値がそのまま出力値になります。(先の細胞の構造でいうと、Σ>0のときΣがそのまま出力される)この性質は、誤差逆伝播を使って勾配を計算するときにとても便利で、入力値>0ならば勾配=1となります。これは勾配消失を心配する必要がないことを意味しています。
ReLUを使ったBackpropで特徴的なのは,各層に発火している細胞がある限り,逆伝播において消失が起きないという点です.
以上より、この表記は『各層のφの結果がゼロより大きいである限り、逆伝播において勾配=1なので消失が起きない』と理解でいいかと思います。
投稿2018/09/16 21:27
総合スコア3376
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/16 13:41
2018/09/16 13:54 編集
2018/09/16 14:00 編集
2018/09/16 14:02
2018/09/16 14:09
2018/09/16 14:22
2018/09/16 14:36 編集
2018/09/16 14:43
2018/09/16 23:11