Tuesday, January 16, 2018

논문 요약 - Spectral normalization for generative adversarial networks




ICLR 2018 제출 논문입니다 (링크). 최초로 단일 네트워크로 이미지넷 1000개 범주의 이미지를 생성한 방법입니다. Chainer 프레임워크를 사용했고 아마 일본에서 나온것으로 보입니다.아이디어도 실험도 좋고, 글쓰기도 모두 훌륭합니다. icrl리뷰에서는 7점과 8점을 하나씩 받았는데 저는 좀 박한 점수라는 생각이 드네요.

1 Introduction

이 논문은 Spectral normalization이라는 GAN 학습 방법을 소개합니다. 다른 방법 대비 두가지 장점이 있습니다. 
  • Lipschitz 상수만 튜닝하면 되고 이마저도 그렇게 열심히 튜닝 안해도 됨.
  • 구현이 간단하고 연산량이 낮음.

2 Method

식(1), (2): 일반적인 GAN 식입니다.

"The machine learning community has been point out.."
WGAN등 최근 GAN 학습 관련 연구를 보면 적절한 discriminator제안한 논문이 많습니다. 이를 자세히 보면 hyperparameter space에서 loss function의 gradient surface를 '부드럽게' 만들어주는 방향입니다. WGAN 논문에 나온 그림을 보면 쉽게 이해할 수 있습니다. 


좌측이 WGAN에서 제안한 방법입니다. $\theta$가 정답에서 멀어지면 그에 비례하는 loss를 갖습니다. 반면 우측은 그렇지 않죠. 이렇게 해야 최적 hyperparameter가 아닌곳에 있을 때 최적값으로 수렴하겠죠. 이를 수학적으로 표현한것이 Lipschitz continuity입니다. 쉽게 이야기하면 함수가 미분이 가능하고 미분값(의 절대값)의 범위가 어느정도 이하로 제한된다는 의미입니다(제가 딱 거기까지 알고있음). (Yehara 2016, Qi 2017, Gulrajani 2017) 등이 모두 여기에 주목한 논문입니다. 

"While input based regularization allow for relatively ..."
기존 연구는 학습 데이터의 내분점에서는 작동하지만 그 밖의 지점에서는 작동하지 않는다고 합니다. (왜일까요?) 하지만 spectral normalization은 그렇지 않음! 


2.0 잠깐 개념 정리!

(물론 논문엔 이런 섹션 없습니다.)

  • 행렬 ${A}$의 spectral norm: 행렬 ${A}$의 가장 큰 singular value, $\max_i(\lambda_i)$ 입니다. 즉 ${A}$를 SVD했을때 나오는 값 중 가장 큰 값이죠. 
  • 행렬의 singular value $\lambda_i$는 단위벡터 $u$를 행렬에 곱했을 때 이 단위벡터가 이런저런 방향으로 늘어나는데, 이 늘어나는 정도를 나타내는 값입니다. 위키피디아에 gif로 잘 나와있습니다.
    • Deep learning book 챕터 6.5를 보면 행렬의 singular value와 loss function의 Jacobian에 대해 자세히 나옵니다.
  • Supremum: 어떤 집합의 least upper bound입니다. 대애애애애애충 상한선으로 생각합시다. $\sup A$ 로 표기합니다.

2.1 Spectral normalization

제안하는 방법은 말그대로 discriminator $f$의 레이어 $g$의 spectral norm을 조절합니다. 우선 위에서 Lipschitz에 대해 간단히 설명했는데, Lipschitz norm $||g||_{Lip}$은 $g$의 그라디언트의 spectral norm입니다. 즉 hyperparameter space에서 그라디언트의 방향 (즉, 어떤 점 $\theta'$에서 gradient descent를 수행하면 일어나는 변화 중 가장 변화가 큰 방향)입니다. 이걸 수식으로 쓰면 식 (6)입니다.  각 레이어에서는 행렬곱과 activation이 일어나죠? 여기에서 행렬곱만 보면 ($g(\mathbf{h})=W\mathbf{h}$) Lipschitz의 정의와 식(6)에 의해 $|| g ||_{Lip} = ... \sigma{W} $가 성립합니다. 다시 말해 각 레이어에서 행렬곱부분의 Lipschitz norm은 각 레이어의 행렬 $W$의 spectral norm (=제일 큰 singular value)입니다.

그리고 (각주 1 참고) ReLU, LReLU등 activation 함수의 Lipschitz norm은 1이구요.

그리고 합성함수의 Lipschitz norm은 각 함수의 Liptschitz norm의 곱보다 작다는 부등식이 성립한다고 합니다. Lipschitzs norm을 '기울기의 최대값'으로 생각하시면 직관적으로 이해가 가능합니다. (..아마도요.)

따라서 식 (7)이 성립합니다. 식 7은 뉴럴넷 $f$의 전체 Lipschitz norm이 각 레이어의 행렬 $W^l$의 spectral norm의 곱보다 작다는 (upper bounded by) 의미입니다.


제안하는 방법은 각 행렬 $W$를 $\sigma{W}$ (spectral norm)으로 나누자는 말이구요 (식 8). 이렇게 하면 전체 뉴럴넷의 Liptschitz norm이 1보다 작아지겠죠?

마지막 문단에서는 Yoshida & Miyato (2017)의 방법보다 이 방법이 좋은 점을 설명하고 있습니다. (제가 비교 논문을 정확히 알지 못해 생략합니다. 대략 제안하는 방법이 더 직접적으로/명시적으로 spectral norm을 조절해준다는 내용입니다.)

2.2 Fast approximation of the spectral norm

각 행렬을 SVD를 돌리는건 너무 느리구요, 그래서 'power iteration method'라는걸 써서 구합니다. 부록 A와 알고리즘 1에 정리되어있습니다. (세부내용 생략)

식 (9, 10)을 거쳐 (11, 12)로 넘어옵니다. 자세히는 안봤..아니 못봤..습니다. 식 (12)가 결론인데, 여기에서 두번째 항 $-\lambda \mathbf{u}_1 \mathbf{v}_1^T$가 조절 전 행렬 W의 singular value를 $\lambda$만큼 빼는 연산입니다. $ \mathbf{u}_1 \mathbf{v}_1^T$은 원래 행렬에서 첫번째 singular vector(즉, 가장 scaling이 크게 일어나는 방향)를 나타내는 행렬이 되는데 이걸 보정해주는거죠. 따라서 레이어에서 일어나는 연산이 너무 한가지 방향으로만 급격하게 변하는것을 막아줍니다.

3 Spectral normalization vs Other regularization techniques

일단, 여기에서 주로 비교하는 기존 알고리즘을 제가 잘 몰라서 본문의 텍스트에 의존해 다소 피상적으로 설명하겠습니다.


  • vs Weight Normalization (WN), Salimans & Kingma (2016): $W$의 각 행을 $l_2$-normalization한다. (라고 써있는데 식을 보면 각 행의 제곱의 합을 normalize하는거에 더 가까운것 같기도?)  
    • ==> singular value $\lambda_i$의 제곱이 행의 개수와 같아지게 하는 효과
      ==> 전체 행렬의 Frobenius norm을 1로 만드는거랑 같다 (1이 아니라 다른 상수일 뿐)
      ==> 의도한것 이상의 부작용이 존재한다
      ==> (제가 정확히 파악못한 모종의 효과에 의해) 첫번째 singular value 벡터빼고 나머지의 크기가 0에 가깝게 수렴하게 된다
      ==> (각 레이어의) 입력 중 1개만 이용한다 ($W$의 rank가 1이 됨)
    • 위의 문제는 WGAN에서 weight clipping에서도 존재함.
    • Spectral normalization엔 그런 문제 없음 (데헷)
  • vs Orthonormalization regularization, Brock 2016
    • 식 (14)를 최소화하도록 함
      ==> $W^T$와 $W^{-1}$이 비슷해지도록
      <==> $W$가 orthonormal해지도록 (위키 참고)
    • 이렇게하면 모든 singular value가 0이 됨
      ==> 즉, $W$가 아예 다른 행렬이 되어버림.
  • vs Gradient Penalty, GP (Gulrajani 2017)
    • 일단 제일 괜찮은 방법임!
    • 가장 직접적으로 Lipschitz constant를 조절함
    • 단점: 연산량이 많음, ? (+"an obvious weakness of being.." --> 이해 못함)

4 Experiment

일단, 이 뒤로는 설명 생략합니다. 

Inception score로 평가했습니다. pre-trained classification model에 GAN이 만든 이미지를 입력해서 나온 결과(10개 혹은 1000개 클래스의 확률분포)와 (라벨링이 된) 원래 이미지를 넣었을때 나온 결과(=역시 확률분포)의 유사도를 KLD로 측정하는 방법입니다.

위에서 말한대로 특정 클래스에 치우치는 문제가 덜 발생했고, 그 결과 이미지넷 1000개 클래스에 전부 유의미한 이미지를 만들어냈습니다. 

- 끝 -




논문 요약 - Measuring the tendency of CNNs to learn surface statistical regularities



이번 논문은 벤지오 그룹에서 나온 논문입니다. 저자는 Jason Jo and Yoshua Bengio. 벤지오 그룹에서 나온 논문중에 저자가 2명밖에 안되는 논문은 오랜만이군요. 비전쪽 학회에 제출한 논문같은데 제가 그 동네를 잘 몰라서 어디인지 잘 모르겠습니다. 아마 ICCV나 CVPR이겠죠? 


조경현 교수님이 트윗하신걸 계기로 읽었습니다. 이렇게 요약하셨죵.

my reading is that low-level features, on top of which higher-level concepts are built, are very specific to and specialized for a narrow set of textures.

요약

이 논문은 이렇게 요약할수 있습니다.

컨브넷이 우리 바람처럼 고수준의 정보를 파악하는것은 아니다. Adversarial example에 취약한걸 봐라! 컨브넷은 객체의 전체 모양 등을 파악한다기 보다는 개별적인 저수준 특징값(~=텍스쳐)를 파악하고 이를 조합한다. 
그러면 최신 컨브넷은 어떻게 그렇게 unseen data (=test set)에 잘 작동하는거냐? 왜냐면 실제 데이터는 고수준, 추상적 정보와 저수준 특징값의 상관관계가 높기 때문이다.

배경 소개


이를 실험적으로 보여주려면 어떻게 해야할까요? 몇몇 기존 연구([7], [4])에 의하면 저수준 특징값은 이미지의 2차원 푸리에 분석, 특히 (상대적으로) 저주파 성분으로 표현이 가능합니다.

그리고 원본 이미지의 푸리에 성분(Fourier statistics)을 왜곡한 데이터를 이용해 다양한 실험을 수행합니다. 이 왜곡을 식(1)로 표현하죠.

$ F: X \rightarrow X' $

이 왜곡은 다음 조건을 만족해야합니다.

1) 사람 눈으로 봤을 때 여전히 같은 객체로 인식이 가능해야합니다. 즉, 사람은 못속이지만 컨브넷은 속이는 왜곡이죠.
2) 왜곡 전후의 Surface regularities (=질감, 텍스쳐)는 달라야합니다.
3) 이 왜곡으로 인해 컨브넷의 테스트셋 인식률이 확연히 낮아져야합니다.


이와 관련해 몇 가지 기존 연구를 소개합니다.

[43] 이미지의 단순한 특징값(image statistics)와 분류작업결과(visual understanding)에 상관관계(a strong statistical relationship)이 존재한다.
[31] 실제로 일어날 수는 없지만 보기엔 자연스러운 배경 (예를 들어 구름과 잔디가 같이 존재하는 배경에 떠있는 자동차)를 합성해보니까 컨브넷이 이 배경에 크게 영향을 받았다.


실험


실험에서 사용한 왜곡 방법은 간단합니다. 식 (3)-(6)을 참고하세요.

원본으로 학습한 컨브넷에, 푸리에 성분을 왜곡한(즉 사람 눈으로 보기엔 여전히 별 차이가 없는) 이미지를 넣었더니! --> 아주 성능이 좋은 (에러율 1-2%) ResNet에서 에러율이 실험에따라 5%, 8%, 10% 등 크게 증가했습니다. 그리고 대조군으로 쓴 랜덤 왜곡에서는 이렇게 심각하게 성능이 떨어지지 않았구요. (그림 3, 4, 6, 7 참조) (표를 전부 그림이라고 표시했군요. 나중에 그림 번호는 바뀔수도 있습니다.)

결론

결론은 간단합니다.

  • 예상대로 푸리에 왜곡이 컨브넷을 발랐다.
  • 푸리에 왜곡을 데이터 augmentation에 포함해서 학습을 수행하면 많이 개선이 된다. (하지만 이게 완벽한 해결책이라는건 아님!)

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편을 마칩니다. ----