아니 14만 회 인용된 논문은 난생 처음 본다. 아마 CNN을 처음으로 제안했던 논문은 이보다 더하겠지?
CVPR이라는 Computer Vision 관련 학회에 2016년 publish된 논문으로, Kaiming He 등 microsoft 출신 연구진 4명이 작성했다. 이름만 들었을 때는 "어디 오스트리아쪽 사람인가?" 했더니 중국인이었다. 4명 모두 중국계다.
아래 그래프를 통해 보여지듯, ResNet의 장점은 두 가지라고 한다. 1) 성능 향상: 기존에 layer를 쌓아갈 때 발생하던 성능 저하 문제를 "잔여학습 (Residual Network)"를 통해 해결했음 2) 쉬운 알고리즘: 이해하기 쉬운 간단한 방법. 다만, 아래 그래프에는 첫 번째 장점 (성능 향상)만 확인할 수 있다. 초반 intro만 읽어봤을 때는 도무지 쉬운 알고리즘이라는 생각조차 들지 않을 정도로 이해가 안 간다.
그렇다면, 이 논문의 출발점인, "layer를 쌓아갈 때 발생하는 성능 저하 문제"의 원인은 무엇일까? 왜 저자들은 해당 문제를 해결하기 위해 ResNet을 제안하게 되었을까?
원인
기존 딥러닝 아키텍처에서는 (layer가 쌓인 구조를 아키텍처라고 한다...아마도) input X 가 각종 layer들 (CNN의 경우 convolution filter를 적용하는 과정이 될테다) 을 거치면서 H(x)로 나타나는 parameter를 학습하게끔 이뤄져있다. H(x)의 역할은 최종적으로 input X가 새인지, 비행기인지 판단해주는 거라고 보면 된다...아마도. 아무튼 기존 학습 방식에서 layer들은 서로 독립적이므로, layer가 쌓일수록 H(x)를 최적화하는 것에 더 많은 시간이 소요된다.
접근
저자들은 아무래도 성능을 높이기 위해 더 많은 layer는 쓰고 싶고, 더 많은 layer로 인한 성능 저하는 피하고 싶었던 것 같다. 그래서 생각해낸 방법이, 똑같은 layer을 여러 개 사용해서 더 많은 layer를 쌓은 것이다. 어찌 됐건, 같은 layer는 동일하게 최적화가 될 테니, 최적화에 더 오랜 시간이 걸리지 않을 것이라는 기대를 했던 것 같다. 이렇게 되면 본 목적인 "성능 향상"은 뒷전이고 일단 더 많은 layer를 쓰는 것에 집중한 것인데, 남이 보면 본말전도라며 혀를 찼을 것이다. 하지만 거기서 멈추지 않고, "layer가 어차피 같으면, 학습도 다시 해줄 필요가 없는 거 아냐?" 라는 데에서 Residual Network를 고안한다.
방법
ResNet은 기존 독립적으로 운영되던 layer들을 순차적으로 해결함으로써 H(x) 최적화에 소요되는 시간을 줄일 수 있었다. 여러 개 쌓인 layer에서 하나의 layer을 추가한다고 했을 때, 그로 인한 변화를 모든 layer에서 감당하며 다시 한 번 최적화를 시행하는 대신, 이전까지 최적화 과정을 그대로 (x identity) 사용하며 그 이후에 발생한 변화만 (F(x)) 최적화해주는 것이다. 그렇다면 이전까지 최적화 과정이 "최적" 이라는 전제가 필요한데, 이건 참인 전제일까?
저자들 역시 이에 대한 명확한 응답을 하지 못한다. 그냥 해봤더니 잘 되던데~ 하는 식으로 설명을 서둘러 마무리 한다는 느낌이 없지 않다. 잘 된다면야 다행이지만... 이런 식으로 연구를 하는 것도 가능한 건가 하고 머리를 긁적이게 된다. 다만, 어렴풋한 감동을 느낄 수 있는 것은, "일단 지나간 것을 뒤로 하고, 주어진 상황에 최선을 다해라" 라는 제언에 대한 실증을 제공해준다는 것이다. '현재가 이렇게 시궁창인데, 지금 최선을 다해서 뭐해!' 라고 반항하는 사람에게 말해주자. "ResNet을 봐... 이렇게 해냈잖아..." (울컥)
결론
딥러닝 논문의 결론은 아직 재미가 없다. "이거 이만큼 잘된다~" 하는 식의 문장들이 지나치게 길게 나열된다고 생각한다. ResNet은 6년이 지난 현재까지도 회자되는 방법이니만큼 성능에 대한 논의는 하지 않아도 될 것 같다.
'트렌드 한눈에 보기 > 학계 트렌드' 카테고리의 다른 글
[딥러닝 공부] 2일차: Transformer를 공부하기 전에 훑어보는 LSTM (준비편) (0) | 2023.01.01 |
---|---|
[딥러닝 공부] 1일차: ResNet (2016)을 공부하는 2022년의 나 (실습편) (0) | 2022.12.25 |
[딥러닝 공부] 0일차: pytorch 튜토리얼 진행 (1) | 2022.12.17 |
CS183B - How to Start a Startup, 8강 요약 (0) | 2022.03.06 |
STM 보드 고군분투기 - 2. STM Cube IDE 가 복잡한 이유 (0) | 2022.03.01 |