回答編集履歴
5
修正
answer
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
**【DNNの勾配(∝誤差)問題をはっきりにします】** 間違ったところをご指摘下さい。
|
2
2
|
|
3
|
-
DNNのl層目においてcost Cがweightに関
|
3
|
+
DNNのl層目において**cost C**がl層目の**weight**に関する勾配:
|
4
|
-
∂C/∂w[l,
|
4
|
+
##∂C/∂w[l,j,k] = a[l-1,k]*δ[l,j]
|
5
|
-
a[l-1,k] : 前層(l-1)のunit kからの出力;
|
5
|
+
a[l-1,k] : 前層(l-1)のunit kからの**出力**;
|
6
|
-
δ[l,j] : 本層(l)のunit jの誤差。
|
6
|
+
δ[l,j] : 本層(l)のunit jの**誤差**。
|
7
|
-
∴ 勾配∝誤差
|
8
7
|
|
8
|
+
**∴ 勾配∝誤差**
|
9
|
+
|
9
10
|
勾配(∝誤差)の**不安定性**についてactivation関数の**導関数**によく注目されていますが、実は
|
10
11
|
DNNのweightにも同様に関係します。
|
11
12
|
例えば、i-層に対応するコスト関数の勾配(∝誤差)は以下のよう成分が含まれています。
|
4
訂正と追加
answer
CHANGED
@@ -1,30 +1,35 @@
|
|
1
|
-
**【DNNの
|
1
|
+
**【DNNの勾配(∝誤差)問題をはっきりにします】** 間違ったところをご指摘下さい。
|
2
2
|
|
3
|
+
DNNのl層目においてcost Cがweightに関数勾配:
|
4
|
+
∂C/∂w[l,jk] = a[l-1,k]*δ[l,j]
|
5
|
+
a[l-1,k] : 前層(l-1)のunit kからの出力;
|
6
|
+
δ[l,j] : 本層(l)のunit jの誤差。
|
7
|
+
∴ 勾配∝誤差
|
3
8
|
|
4
|
-
|
9
|
+
勾配(∝誤差)の**不安定性**についてactivation関数の**導関数**によく注目されていますが、実は
|
5
10
|
DNNのweightにも同様に関係します。
|
6
|
-
例えば、i-層に対応するコスト関数の
|
11
|
+
例えば、i-層に対応するコスト関数の勾配(∝誤差)は以下のよう成分が含まれています。
|
7
12
|
---------scalar版(各層に一つunitしかない場合):
|
8
|
-
##w[i]*w[i+1]*...*w[N]*σ(z[i])*σ(z[i+1])*...*σ(z[
|
13
|
+
##w[i]*w[i+1]*...*w[N]*σ(z[i])*σ(z[i+1])*...*σ(z[L])
|
9
|
-
|
14
|
+
w: DNNのweight, scalar; σ: activation関数の**導関数**, scalar; L:総層数
|
10
15
|
なので
|
11
|
-
**case 1:** 各σ<1であれば、それらをたくさん掛け算すれば0に近くなるので、各
|
16
|
+
**case 1:** 各σ<1であれば、それらをたくさん掛け算すれば0に近くなるので、各wの値がよっぽど大きくなければ、式全体の値が0に近くなります ⇒ 『勾配(∝誤差)消失』問題発生。
|
12
17
|
|
13
18
|
ところが、
|
14
19
|
**case 2:** σ>=1 の場合も、w同士がほとんど1以下の場合、
|
15
|
-
その積が**もっと**1より小さいので、 ⇒ 『
|
20
|
+
その積が**もっと**1より小さいので、 ⇒ 『勾配(∝誤差)消失』問題発生。
|
16
21
|
|
17
22
|
**case 3:** σ>=1の場合、 w同士がほとんど1以上の場合(例えば w=10)、
|
18
|
-
すると、10層があれば W[1]*w[2]*...*w[10] = 10*10*10.... = 10^10 order ⇒『
|
23
|
+
すると、10層があれば W[1]*w[2]*...*w[10] = 10*10*10.... = 10^10 order ⇒『勾配(∝誤差)爆発』問題発生。
|
19
24
|
|
20
25
|
ましてや100層であれば、前端の勾配値が10^100 order になり、天文数値ですよね ⇒『宇宙爆発』
|
21
26
|
|
22
27
|
ReLUの導関数値は1であっても、そしてNNのweightに正則化をかけても、weightの値は皆1以下でなければ、
|
23
28
|
沢山の積算によって莫大な数値になるのは『必然的な』出来事で、ReLUとはそれほど関係ありません。
|
24
29
|
|
25
|
-
なので、NNの層数が多いほどfeedbackしてきた前端への
|
30
|
+
なので、NNの層数が多いほどfeedbackしてきた前端への勾配(∝誤差)値は0か天文数値かのような極端な値になりがちです。
|
26
31
|
これは掛け算の性質によります。
|
27
|
-
つまり、**ReLU**にしても, **sigmoid**にしても、NNの層数が多くなると、前端へfeedbackされてきた
|
32
|
+
つまり、**ReLU**にしても, **sigmoid**にしても、NNの層数が多くなると、前端へfeedbackされてきた勾配(∝誤差)値0と天文数値の間で大きく振れることは
|
28
33
|
オリジナルタイプのDNNに限り、原理的に避けられません。
|
29
34
|
**ReLU**でなくて、**ResNet** 等は "本当のソリューション"かもしれません。
|
30
35
|
|
3
式訂正
answer
CHANGED
@@ -1,34 +1,31 @@
|
|
1
|
-
**【DNNの勾配問題をはっきりにします】** 間違ったところをご指摘下さい。
|
1
|
+
**【DNNの~~勾配~~☞誤差問題をはっきりにします】** 間違ったところをご指摘下さい。
|
2
2
|
|
3
3
|
|
4
|
-
DNNのfeedback勾配の不安定性についてactivation関数の導関数によく注目されていますが、実は
|
4
|
+
DNNのfeedback~~勾配~~☞誤差の不安定性についてactivation関数の導関数によく注目されていますが、実は
|
5
5
|
DNNのweightにも同様に関係します。
|
6
|
-
例えば、i-層に対応するコスト関数の勾配は以下のよう成分が含まれます。
|
6
|
+
例えば、i-層に対応するコスト関数の~~勾配~~☞誤差は以下のよう成分が含まれています。
|
7
|
+
---------scalar版(各層に一つunitしかない場合):
|
7
|
-
##
|
8
|
+
##w[i]*w[i+1]*...*w[N]*σ(z[i])*σ(z[i+1])*...*σ(z[N])
|
9
|
+
ここのw,σは全部scalarです。N:総層数
|
10
|
+
なので
|
8
|
-
|
11
|
+
**case 1:** 各σ<1であれば、それらをたくさん掛け算すれば0に近くなるので、各Wの値がよっぽど大きくなければ、式全体の値が0に近くなります ⇒ 『~~勾配~~☞誤差消失』問題発生。
|
9
12
|
|
10
|
-
上記式は理解しにくいので、scalar版(各層に一つunitしかない場合)を以下のようになります:
|
11
|
-
##w[i]*w[i+1]*...*W[N]*σ(z[i])*σ(z[i+1])*...*σ(z[N])
|
12
|
-
ここのw,σは全部scalarです。
|
13
|
-
なので、
|
14
|
-
**case 1:** 各σ<1であれば、それらをたくさん掛け算すれば0に近くなるので、各Wの値がよっぽど大きくなければ、式全体の値が0に近くなります ⇒ 『勾配消失』問題発生。
|
15
|
-
|
16
13
|
ところが、
|
17
14
|
**case 2:** σ>=1 の場合も、w同士がほとんど1以下の場合、
|
18
|
-
その積が**もっと**1より小さいので、 ⇒ 『勾配消失』問題発生。
|
15
|
+
その積が**もっと**1より小さいので、 ⇒ 『~~勾配~~☞誤差消失』問題発生。
|
19
16
|
|
20
17
|
**case 3:** σ>=1の場合、 w同士がほとんど1以上の場合(例えば w=10)、
|
21
|
-
すると、10層があれば W[1]*w[2]*...*w[10] = 10*10*10.... = 10^10 order ⇒『勾配爆発』問題発生。
|
18
|
+
すると、10層があれば W[1]*w[2]*...*w[10] = 10*10*10.... = 10^10 order ⇒『~~勾配~~☞誤差爆発』問題発生。
|
22
19
|
|
23
20
|
ましてや100層であれば、前端の勾配値が10^100 order になり、天文数値ですよね ⇒『宇宙爆発』
|
24
21
|
|
25
22
|
ReLUの導関数値は1であっても、そしてNNのweightに正則化をかけても、weightの値は皆1以下でなければ、
|
26
23
|
沢山の積算によって莫大な数値になるのは『必然的な』出来事で、ReLUとはそれほど関係ありません。
|
27
24
|
|
28
|
-
なので、NNの層数が多いほど前端の勾配値は0か天文数値かのような極端な値になりがちです。
|
25
|
+
なので、NNの層数が多いほどfeedbackしてきた前端への~~勾配~~☞誤差値は0か天文数値かのような極端な値になりがちです。
|
29
26
|
これは掛け算の性質によります。
|
30
|
-
つまり、**ReLU**にしても, **sigmoid**にしても、NNの層数が多くなると、前端
|
27
|
+
つまり、**ReLU**にしても, **sigmoid**にしても、NNの層数が多くなると、前端へfeedbackされてきた~~勾配~~☞誤差値0と天文数値の間で大きく振れることは
|
31
28
|
オリジナルタイプのDNNに限り、原理的に避けられません。
|
32
|
-
**ReLU**でなくて、**
|
29
|
+
**ReLU**でなくて、**ResNet** 等は "本当のソリューション"かもしれません。
|
33
30
|
|
34
|
-
【ただ、偶然にも、沢山のWの値と沢山の
|
31
|
+
【ただ、偶然にも、沢山のWの値と沢山のσの値うまく組み合わせ、その積は極端的な値にならなかった場合もありましょう。】
|
2
修正
answer
CHANGED
@@ -27,9 +27,8 @@
|
|
27
27
|
|
28
28
|
なので、NNの層数が多いほど前端の勾配値は0か天文数値かのような極端な値になりがちです。
|
29
29
|
これは掛け算の性質によります。
|
30
|
-
|
31
|
-
当然沢山のWと沢山のΣの積は偶然的にも極端的な値にならなかった場合もあります。
|
32
|
-
**ReLU**にしても, **sigmoid**にしても、NNの層数が多くなると、前端の勾配値0と天文数値の間で大きく振れることは
|
30
|
+
つまり、**ReLU**にしても, **sigmoid**にしても、NNの層数が多くなると、前端の勾配値0と天文数値の間で大きく振れることは
|
33
31
|
オリジナルタイプのDNNに限り、原理的に避けられません。
|
32
|
+
**ReLU**でなくて、**ReNET** 等は "本当のソリューション"かもしれません。
|
34
33
|
|
35
|
-
|
34
|
+
【ただ、偶然にも、沢山のWの値と沢山のΣの値うまく組み合わせ、その積は極端的な値にならなかった場合もありましょう。】
|
1
追加
answer
CHANGED
@@ -20,4 +20,16 @@
|
|
20
20
|
**case 3:** σ>=1の場合、 w同士がほとんど1以上の場合(例えば w=10)、
|
21
21
|
すると、10層があれば W[1]*w[2]*...*w[10] = 10*10*10.... = 10^10 order ⇒『勾配爆発』問題発生。
|
22
22
|
|
23
|
-
ましてや100層であれば、前端の勾配値が10^100 order になり、天文数値ですよね ⇒『宇宙爆発』
|
23
|
+
ましてや100層であれば、前端の勾配値が10^100 order になり、天文数値ですよね ⇒『宇宙爆発』
|
24
|
+
|
25
|
+
ReLUの導関数値は1であっても、そしてNNのweightに正則化をかけても、weightの値は皆1以下でなければ、
|
26
|
+
沢山の積算によって莫大な数値になるのは『必然的な』出来事で、ReLUとはそれほど関係ありません。
|
27
|
+
|
28
|
+
なので、NNの層数が多いほど前端の勾配値は0か天文数値かのような極端な値になりがちです。
|
29
|
+
これは掛け算の性質によります。
|
30
|
+
|
31
|
+
当然沢山のWと沢山のΣの積は偶然的にも極端的な値にならなかった場合もあります。
|
32
|
+
**ReLU**にしても, **sigmoid**にしても、NNの層数が多くなると、前端の勾配値0と天文数値の間で大きく振れることは
|
33
|
+
オリジナルタイプのDNNに限り、原理的に避けられません。
|
34
|
+
|
35
|
+
ReULでなくて、ReNET 等は本当のソリューションかもしれません。
|