딥러닝 논문을 읽다 보면 느끼는 게, 너무 How에 초점을 두고 있다. 그 유명한 DCGAN에서도 Architecture를 이렇게 쌓고~ Batch Normalization을 쓰면 더 잘되고~ LReLU를 섞어서 하는 게 좋더라~ 이런 이야기를 하고 있다. 물론 불안정한 GAN을 안정적으로 만들었다는 점에서 의의가 있고 또 Engineering이 그런 것이겠지만, 나름대로 왜 이것이 타당한지를 명쾌하게 설명하는 논리가 있는 논문은 정말 드물다. 내가 이런 것에 진짜 회의감을 느낀 게 YOLO였다. 이전 글에서도 잠깐 다루었지만, 원 논문에서는 그냥 grid로 나눠서 한다라는 How의 측면에서 이야기를 많이 하는데, 이게 왜 되는지에 대해서는 제대로 설명하지 않는다. 난 오히려 이분의 블로그에서 YOLO가 작동하는 이유를 Why의 측면에서 비로소 제대로 이해할 수 있었다. 사실 본질적으로 딥러닝이라는 분야 자체의 특성일지도 모른다. 왜 잘 되는지라는 게 설명하기 정말 힘든 것이다. 그저 엔지니어링이기 때문에 어떻게 하면 되는지를 열심히 익히면 되는 것이다.
그럼에도 이 바닥에서도 Why를 명쾌하게 설명하는 논문들도 간혹 있다. 이런 논문들은 읽다 보면 유레카 같은 깨달음을 얻게 된다. 나름대로 나에게 인사이트를 주기도 해서 오늘을 이것들을 소개해볼까 한다.
그 유명한 ResNet 논문이다. How에 초점을 둔다면, skip connection을 하면 학습이 잘된다, 조금 더 좋은 설명은, 그게 gradient가 1이라서 vanishing 안 한다, 이런 이야기가 많다. 내가 정말 큰 인사이트를 얻은 것은 오히려 Introduction 부분인데, 여기서는 Identity를 더해주게 된 이유를 설명하고 있다. 학습해보니 20 layer보다 56 layer가 더 성능이 안 좋은 현상이 있었는데 이것이 이상하다고 설명한다. 사실 더 깊은 모델은 나머지 36 layer를 identity로 만들면 20 layer와 같은 성능이 나올 수 있잖아. 즉 56 layer는 적어도 20 layer만큼의 성능은 나올 수 있는 것인데, 나오지 못한 것이다. 그래서 아예 그냥 identity를 더해주는 방식으로 모델을 구성해보고자 해서 skip connection이 등장하게 되었고, 그게 정말 잘된다는 이야기이다.
이건 내 해석인데, 사실 생각해보면 random으로 initialization되었다면 convolution을 한 결과가 zero-centered일 것이다. 이걸 identity로 만드는 것보다 zero가 되도록 학습하는 것이 더 쉽기 때문이 아닐까 싶다.
이것도 Kaiming He의 논문인데, 어쩌면 Kaiming He가 설명을 정말 잘하는 사람일지도 모르겠다. 이 논문에서는 PReLU와 He initialization을 소개하는데, 내가 감명 있게 본 건 He initialization이다. 사실 initialization도 sigmoid는 Xavier, ReLU는 He를 쓴다고 달달 외우면 되겠지만, 왜 그 둘 사이에 미묘한 1/2 차이가 나는지 나도 잘 모르고 있었다. 이 논문에는 그것이 명쾌하게 수식으로 설명되어 있다. 기존의 수식 전개를 따라가면 sigmoid과 같은 activation function을 가정하는 단계가 있는데, 현대의 딥러닝이 ReLU를 많이 쓰므로 이 부분에서 ReLU를 고려하면 결과가 달라진다고 한다. 그리고 ReLU는 음수 축은 0이고, 양수 축은 x이기 때문에, 전체적으로 결국 1/2이 된다.
이 논문을 읽기 전에는 Dropout이라는 게 그냥 일부 뉴런을 off해서 학습하면 regularization 효과가 있어 overfitting을 막을 수 있다 이런 정도로 알고 있었다. 원 논문에서는 흥미롭게도 Neural Network를 Ensemble하고자 하는 차원에 motivation이 있었다고 이야기를 한다. 다양한 connection을 갖는 NN을 모두 모델링해서 Ensemble한다면 사실 굉장히 무거울 것이다. 그 대신에 probabilistic하게 뉴런을 off하면 다양한 경우의 수가 모두 반영된 효과를 얻을 수 있어, 결국 network 1개로 ensemble 효과를 얻을 수 있다고 한다. 그게 Dropout이었다. Hinton이 대가라는 것을 알 것 같은 논문.
Class Activation Map이라고 불리는 CAM을 소개한 논문이다. CNN Visualization할 때 쓰는 방법인데, GAP를 달아서 weight를 조사해서 역으로 계산하면 CNN이 어떤 부분을 보고 분류했는지를 알 수 있다고 한다.
이 수식을 열심히 보면 이게 왜 그렇게 되는지를 이해할 수 있었다. 그냥 평범한 교환 법칙이지만 이게 의미하는 것은 x, y에 대한 summation이 뒤에 있다가 앞에 나오게 된다는 것이다. 다시 말해, score 값을 각각의 x, y 좌표에 해당되는 pixel에 대해 얻을 수 있다는 것이다.
별로 중요한 논문은 아니지만, 이 논문은 하고자 하는 바를 명확하게 정의하여 그것을 수학적으로 표현하고 수행한 것이 마음에 들었다. Auto-encoder란 결국 latent variable로 압축하고 다시 재현하는 것인데, 이렇게 나타나는 latent variable이 데이터의 작은 변화에 대해 민감하게 반응해서는 안된다. 즉 데이터에 추가적인 노이즈가 주어지더라도 latent variable의 변화량이 작아야 한다. 이를 미분 관계로 나타낼 수 있고, 수학적으로는 Frobenius norm of the Jacobian of the non-linear mapping term을 추가할 수 있다고 한다.