Sunday, January 7, 2018

논문 요약: Gradients explode - deep networks are shallow - ResNet explained (1)

Gradients explode : 뉴럴넷은 그라디언트를 이용해 학습이 이루어지는데 deep 뉴럴넷은 계층(layer)이 많아서 그라디언트가 계속 곱해지는 (=backprop) 과정을 포함합니다. 이 곱셈 연산때문에 그라디언트가 발산하는 현상을 말합니다. 
ResNet : 2015년 이미지넷 챌린지에서 우승을 차지했고 이후 엄청난 주목을 받고있는 혁신적인 네트워크 구조입니다. skip connection이라는 독창적인 구조때문에 ResNet을 설명하는 논문만도 많이 나오고 있습니다. 기억에 남는 논문으로 arXiv:1702.08591이 있습니다.


일단 굉장한 연구라는 첫인상을 주는 논문입니다. 제목은 야심차고 분량은 무려 59페이지군요. 부록이 길고 본문은 19페이지밖에(!) 안됩니다.

읽어보니 아주 친절한 논문입니다. 독창적이고 복잡한 아이디어를 엄밀하게 설명하려다보니 친절하지 않으면 작성이 어려울것같네요. 

내용을 깊게 다루지는 못하고, 본문 위주로 아이디어를 잘 설명해보겠습니다.

초록 Abstract

그라디언트 폭발(exploding gradients)때문에 deep neural networks의 학습이 어렵다고들 한다. 그리고 이를 해결하기 위한 방법이 여럿 나왔지만 실제로 그렇게 해결이 선뜻 되는것은 아니다. 특히 collapsing domain problem이라는걸 설명하도록 하겠다.

잘 들여다보면 모든 뉴럴넷이 ResNet이 되는걸 설명하고 이를 일반화하는 residual trick을 소개한다. 보면 알겠지만 이 이유로 네트웍을 수학적으로 단순하게 설명할 수 있고 아마도 그래서 ResNet이 성능이 잘나오는 것 같다.

1 Introduction

최근 연구를 보면 뉴럴넷의 깊이(depth)가 좋은 성능의 핵심이다. 그런데 그라디언트 폭발때문에 깊은 뉴럴넷을 학습하는게 쉽지 않다. 그리고 그라디언트 폭발은 보통 직관적으로 단순하게 설명하곤 하는데 사실 정확하게 밝혀진 현상이 아니다.

일단 용어의 정의조차 불분명하다. 그라디언트 폭발은 그라디언트 벡터의 크기로 재나? 아니면 각 차원(성분)의 크기 하나하나? 아니면 각 레이어별로 Jacobian의 eigen value로? 이 관점에 따라 해결방법도 달라지게 마련이다. 

심지어 각 관점이 정말로 학습의 난이도와 연관이 있는지도 알려져있지 않다.

SGD를 가속하는 다양한 알고리즘 (RMSProp, Adam, vSGD)는 결국 그라디언트 벡터(의 일부)의 크기를 조절해서(rescale) 성능을 높인다. 그럼 그라디언트 폭발이 이 방법으로 해결이 되는 문제가 맞나? 아니면 더 본질적인 문제가 존재하나?

또 batch normalization (BN), layer normalization (LN)같은 방법 내지 계수 초기화(glorot 2015, he 2015) 같은걸 써서 그라디언트 폭발을 줄이고 깊은 네트웍을 학습한다. BN논문에 보면 이렇게 써있다.

learning rate이 너무 높이면 그라디언트가 폭발하거나 사라지거나 혹은 성능이 안좋은 로컬 미니마에 수렴한다. BN은 이를 방지한다.

ResNet논문엔 이렇게 써있다.

딥뉴럴넷은 학습이 잘 안된다. 그렇지만 초기값의 범위를 조절하고 각종 normalization 레이어를 사용해 이를 대체로 방지할 수 있다.

그렇지만 우리 연구에 의하면 요런 방법이 이렇게 써있는만큼 효과가 있지는 않다. normalization을 하면 도움이 되는 경우가 있긴 하지만 항상 그런것은 아니다. 얘네들은 forward pass를 잘 조절해주면 그라디언트 폭발을 막을수 있다는 접근방법인데, 우리 연구결과에 의하면 그렇지 않다.

skip connection을 넣으면 레이어를 엄청 많이 쌓아도 성능이 계속 올라가는건 맞다. 그렇지만 왜 그런지는 아무도 모른다.

우리 논문의 공헌은 다음과 같다.


  1. GSC(gradient scale coefficient)라는걸 정의한다. GSC는 그라디언트 폭발을 측정하는 새로운 방법이고(섹션 2) 네트워크의 스케일링(섹션 2)이나 레이어 너비를 조절하는(섹션 3) 등의 변화에 강건하다. 또 학습의 난이도를 직접 측정할 수 있다(섹션 4). 
  2. 그라디언트 폭발을 막는다고 주장하는 방법을 써도 그라디언트가 결국 폭발하고야 만다는것을 보여준다(섹션 3)
  3. 위에서 얘기한, SGD에서 그라디언트의 크기를 일부 조절하는 방법으로는 그라디언트 폭발을 막지 못한다. 이걸 GSC측정으로 보여준다. 그라디언트 폭발은 그런 간단한 문제가 아니라 최적화 문제를 푸는데 존재하는 본질적인 문제로 보인다. 이 문제때문에 깊은 구조로 네트웍을 만들어도 학습이 잘 안되서 결국 얕은 구조나 마찬가지가 된다 (섹션 4). 이 내용은 역대 처음으로 나오는 얘기다.
  4. forward activation에 문제가 없어도 그라디언트가 폭발한다. 이것도 우리가 처음으로 밝혔다. 이것도 역시 깊은 구조에서 학습이 어려운 이유다. (섹션 5)
  5. 아주 깊은 구조를 학습할대 생기는 collapsing domain problem이라는걸 정의한다. 이것도 우리가 처음으로 정의하는 문제다. 얘는 초기화를 잘 해도 여전히 존재한다. (섹션 6)
  6. skip connection은 그라디언트를 줄여주는 역할을 한다고 일반화할 수 있다. 이것도 우리가 처음이다(섹션 7).
  7. residual trick을 소개한다(섹션 4). 이에 의하면 ResNet은 skip connection이 없는 일반적인 네트워크의 단순화된 버전으로  그 덕분에 'orthogonal initial state'를 달성 가능하다. 그리고 이것때문에 ResNet의 성능이 좋은것이라고 주장한다(섹션 7). 
섹션 8에는 각종 실용적인 조언을 소개한다.

부록 B는 본문 내용을 더 자세히 소개한다. 

2 Exploding gradients defined - the gradient scale coefficient

2.1 표기법

보통 입력을 레이어 0, 출력을 레이어 N으로 보는데 우리는 그라디언트에 관심이 많으므로 출력 레이어를 $0$으로 놓는다. $f_l$은 $l$번째 레이어의 출력이다. 각 레이어의 파라미터를 $\theta_l$로 놓는다.

nominal depth는 전체 레이어 개수를 의미한다. 여기에는 pooling이나 activation 레이어도 포함된다. 
compositional depth는 일반적으로 우리가 말하는 깊이로, 파라미터가 존재하는 레이어만 얘기한다.

Quadratic expectation $\mathbb{Q}[x]=\mathbb{E}[X^2] ^ {1/2}$다. inverse quadratic expectation $\mathbb{Q}^{-1}$은 $\mathbb{E}[X^{-2}]^{-1/2}$다. 

2.2 그라디언트 폭발 표기법

(주: 여기에서는 두가지 개념이 나옵니다.)

$\mathcal{J}^l_k(\theta, x, y)$는 $f_k$에 대한 $f_l$의 자코비안이다.
$\mathcal{T}^l_k(\theta, x, y)$는 레이어 k의 파라미터 $\theta_k$에 대한 $f_l$의 자코비안이다. 이제 $||.||$가 뭔가 norm이라고 가정하자. (주: $||\mathcal{J}^l_k||$나 $||\mathcal{T}^l_k||$는 l에서 k로 backprop이 진행되는 동안 일어나는 '변화'의 크기와 관계가 있습니다. 따라서 두 레이어의 인덱스 차이인) $k-1$에 대해 $||\mathcal{J}^l_k||$나 $||\mathcal{T}^l_k||$이 지수적으로 증가한다면 그라디언트가 폭발하고 학습이 어려워진다는 생각을 해볼법 합니다.

그런데 이 관점은 멀쩡히 학습이 잘 되는 네트워크도 그라디언트 폭발이 일어나는 것으로 해석할 수가 있다. 예를 들면 학습 가능한 네트워크를 가지고와서 각 레이어의 출력값  $f_l$과 파라미터 $\theta_l$에 $R^{-l}$ ($R>1$)을 곱하면 (주: 즉 출력과 파라미터가 R이라는 상수에 대해 $l$이 증가할수록 (=입력에 가까워질수록) 지수적으로 감소하도록 만들면), 이 네트워크는 오히려 레이어마다 그라디언트에 $R^{-2l}$을 곱하면 학습이 잘된다. 즉, 그라디언트가 폭발해야 학습이 잘된다! (주: 직관적으로 생각하면 $R^{2l}$이어야 할 것 같은데말이죠... 이 부분 좀 헷갈리는데 일단 넘어갑니다.)

명제 1. 생략 (주: 위의 내용을 엄밀하게 정리한 명제입니다.)

따라서 자코비안이 지수적으로 증가한다고해서 그라디언트가 폭발하는것은 아니다. 

2.3 The gradient scale coefficient (GSC)

이제 그라디언트 폭발을 학습이 어려워지는 문제와 직접 관련지어서 정의해보자.

정의1. $m \times n $행렬 A의 qm norm (quadratic mean norm)을 정의한다. qm norm은 행렬 A의 singular value들의 제곱의 평균의 sqrt()다. 

$$ ||A||_{qm} = \sqrt{\frac{s_1^2 + s_2^2 + .. + s_{\min(m,n)}^2}{n}}$$


이를 좀 더 쉽게 정의해보자. $u$를 균등분포를 따르는 임의의 단위벡터라고 하면 $||A||_{qm} = \mathbb{Q}_{u}||Au||_2$ 가 된다. 즉, "행렬 A가 벡터의 길이에 미치는 영향의 기대값"이다. 

정의 2. 그라디언트 스케일 계수 GSC, gradient scale coefficient를 정의한다. $0\le l\le k\le L$ 일 때 GSC는 다음과 같다.

$$ GSC(k,l,f,\theta,x,y) = \frac{||\mathcal{J}^l_k||_{qm}^2||f_k||_2^2}{||f_l||_2^2} $$

(주: 즉, 레이어 $l$과 $k$의 L2-norm의 제곱의 비 $ \times $ 자코비안의 qm norm)

정의 3. $GSC(k,l,f,\theta,x,y) \ge cr^{k-l}$ 일 경우 이 네트워크 $f(\theta)$가 r의 속도/비율로 그라디언트 폭발이 일어난다고 한다.

이 정의를 따르면 $c, r$을 아주 작게 잡으면 모든 네트워크에 그라디언트 폭발이 존재한다고 할 수 있다. $c, r$을 객관적으로 정의할수는 없다. 이를 대강 설명하면 GSC가 지수함수로 잘 근사되면 그라디언트 폭발이 일어난다는 말이다.

정의2에 의하면 GSC는 자코비안의 qm norm과 레이어 출력 벡터의 길이의 비율의 곱이다. 즉, backward-pass에서 그라디언트의 흐름(자코비안)과 forward-pass의 activation의 흐름의 상대적인 비율이다. 다른 말로 $k$번째 레이어의 변화에 대한 $l$번째 레이어의 반응/감도에 해당한다.

(주: 분명 이 논문에서 backward-pass를 메인으로 본다고 했는데 왜 $l$번째 레이어의 변화에 대한 $k$번째 레이어의 감도로 정의하지 않는건지 잘 모르겠습니다. 아무튼 GSC는 단순히 backward pass만 측정하는게 아니라 이를 forward pass로 normalize해주는 셈입니다.)

명제 2. $GSC(k,l)$는 $f_k$의 변화에 대한 $f_l$의 변화의 제곱의 기대값이다. (증명은 E.2 참조)

파라미터의 변화에 대한 감도는 어떻게 되나? 바이어스가 없는 MLP(dense layer)를 가정하면 다음과 같다.

명제 3.  $GSC(k,l)\frac{||\theta_k||_2||f_{k+1}||_2}{||f_k||_2\sqrt{d_{k+1}}}$은 $\theta_k$의 작은 변화에 대한 $f_l$의 변화를 측정한다. (주: $d_k$는 $k$번째 레이어의 입력 차원)

섹션 2.2 뒷부분에서 같은 네트워크도 출력값에 스케일링을 하면 그라디언트를 폭발하게 만들 수 있었는데, $ GSC $는 이를 상쇄시켜준다. 

명제 4. $GSC(k, l)$은 네트워크의 출력값의 스케일링에 무관하다. 


3 Gradient explode - despite bounded activations

 GSC를 구해보면 각종 기법을 사용해도 그라디언트가 폭발하는걸 볼 수 있다.

명제 5. 자코비안을 근사적으로 분해(decompose)할 수 있다면 GSC도 마찬가지로 분해가 된다. 즉, $||\mathcal{J}^l_{l+1}\mathcal{J}^{l+1}_{l+2}..\mathcal{J}^{k-1}_{k}||_{qm} \approx ||\mathcal{J}^l_{l+1}||_{qm}||\mathcal{J}^{l+1}_{l+2}||_{qm}..||\mathcal{J}^{k-1}_{k}||_{qm}$ 라면 $GSC(k,l) \approx GSC(k,k-1)GSC(k-1,k-2)..GSC(l+1,l)$이다. (E.5에서 증명)


(주: GSC가 자코비안의 qm norm과 레이어의 출력값의 제곱의 비율이므로 그렇겠죠?)

따라서! 각 레이어의 $GSC$가 대략 $ r > 1 $ 이라면  $GSC(k,l)$ 이 $k-l$의 지수만큼 증가한다. 이제 실제 네트워크에서 어떤일이 일어나는지 보자. 그림 1의 좌측을 보면..




batch-ReLU, layer-tanh, batch-tanh, SeLU를 보면 그라디언트가 log축에서 선형으로 증가한다. 즉 그라디언트가 폭발했다. 이는 계수 초기화, 레이어 normalization, SeLU를 써도 그라디언트 폭발이 일어난다는 이야기다.

이는 명제 4를 생각하면 당연한 결과다. GSC는 네트워크 출력값의 스케일링 변화에 무관하기 때문이다.

반면 ReLU, layer-ReLU, tanh에서는 그라디언트 폭발이 일어나지 않았다. 그러나 얘네들은 다른 단점이 있다. (섹션 5에서 다룸)

마지막으로, GSC는 레이어의 깊이나 너비와 무관하다.


4 Exploding gradients limit depth - the residual trick

4.1 Background: Effective depth

Veit et al. (2016)에서 'effective depth'라는 개념을 제시했다. 일단 residual network는 레이어가 skip connection을 포함하므로 residual network의 학습을 다음의 최적화문제로 생각할수 있다.

$$ \arg \min_{\theta} E\text{, where } E = \frac{1}{|D|}\sum_{(x,y) \in D} f_0(y,(i_1 + r_1(\theta_1))\circ (i_2 + r_2(\theta_2)) \circ .. \circ (i_L + r_L(\theta_L)) \circ x) $$ (식 2)

레이어가 모두 같은 차원이면 residual network에서 skip connection은 identity matrix로 연결이 된다. (주: 즉, 레이어의 residual connection은 나머지 (residual)을 학습합니다. 이제 위의 식 우변을 chain rule을 이용해 미분하면 다음과 같습니다)

$$ \frac{df_0}{dx} = \frac{df_0}{df_1}(I + \frac{dr_1}{df_2})(I + \frac{dr_2}{df_3}) .. (I + \frac{dr_{L-1}}{df_L})(I + \frac{dr_L}{dx}) $$

이를 풀어쓰면 $2^L$개의 항이 나온다. (주: 이항분포 비슷한걸 생각해보세요.) 그 중 다수는 대략 L/2개의 identity matrix와 L/2개의 자코비안의 곱이다. 만일 자코비안의 operator norm(주: eigen value의 가장 큰 값정도로 이해합시다.)이 $p$보다 작고 $p<1$이면 각 항은 자코비안을 곱한 숫자만큼 지수적으로 감소한다. (정수) $\lambda$개 이상의 자코비안의 곱이 있는 성분을 '$\lambda$-residual'이라고 부르고 모든 $\lambda$-residual의 합을 $res^\lambda$라고 하자. 그러면 다음의 식이 성립한다.

$$ ||res^\lambda||_2 \le ||\frac{df_0}{df_1}||_2\sum_{l=\lambda}^L p^l \binom{L}{l} $$

만일 p<!이면 우항은 지수적으로 감소하며 특히 $\lambda$가 클수록 더욱 더 그렇게 된다. 이$res^\lambda$의 값이 너무 작아지지 않는 $\lambda$의 범위 내에서만 학습(주: 여러 레이어가 서로 유의미하게 학습이 되는것)이 이루어진다. Veit et al. (2016)은 그 경계가 되는, 즉 제대로 학습이 가능한 $\lambda$의 상한선을 effective depth라고 정의한다. 섹션 D를 보면 veit et al. (2016)보다 더 명확하게 effective depth를 정의했다. 

(주: 즉, 레이어가 아주 많을 때 이 중 일부는 제대로된 그라디언트를 받아서 학습이 되는게 아니라 skip connection에서 identity matrix를 통해 받아온 그라디언트로만 학습이 된다는 식입니다. 그러므로 레이어가 많이 있어봤자 실제로 깊은 네트워크를 형성하는게 아니라 얕은 네트워크 여러개의 앙상블처럼 볼 수 있습니다.)

4.2 The residual trick

(주: 명시적으로 skip connection이 존재하지 않더라도 일반적인 레이어 연결을 skip connection과 나머지로 해석하면 모든 네트웍을 residual network라고 볼 수 있다는 내용입니다. 즉 레이어 파라미터 초기화를 'identity matrix + 나머지'로 해석한다는 말입니다.)

용어: 여기서부터 ResNet은 He et al. (2016b)의 구조를 지칭하고 residual network는 (식 2)로 표현이 가능한 모든 네트워크를 의미합니다. 

---- 일단 여기에서 요약 1편을 마칩니다. ----


1 comment: