이전에 다른 게시물의 번외편으로 붙어있던 부분을 레퍼런스 용이하도록 따로 떼어냄. 앞으로 채널 찾아와서 '스터디' 탭을 누르면 바로 이론 공부할 자료들이 나오도록 편집하려고 함.


딥러닝 논문 읽는 요령


논문을 자세히 읽어보는 것은 대다수 사람들에게 벅찬 일일 것이다. 나는 아예 논문을 읽을 수 없다라고 단정한다면, 나에게 있어서 논문의 가치는 0% 다. 하지만 약간의 요령과 끈기를 가지고 들여다본다면 논문이 갖고 있는 정보를 0% 가 아니라 50% 정도는 끌어낼 수 있다는 생각을 해보자. 


논문을 왜 굳이 읽어야 하냐고? 요즘에 인공지능판처럼 몇주만 지나도 세월이 바뀐것처럼 느껴지는 판을 본 적이 있는가? 새로운 기술은 결국 '논문' 이라는 형태로 소개되고, 그 논문의 의미를 일반 유저가 받아들일 수 있을 수준으로 누군가 해석해주기까지는 시간이 걸리게 된다. 결국 나 스스로의 힘으로 정보라는 밥을 찾아먹을 수 있느냐, 남이 주는 정보를 받아먹을 수 밖에 없느냐라는, 주도권의 문제이기도 하다.


빠르게 기술이 급전개하는 분야에서 어느정도 얼리아답타로서 활동하고 싶다면 1) 논문 읽기를 두려워하지 말아야 하고, 2) 깃헙에 공개된 코드를 내 컴퓨터나 코랩에 받아서 실행해보는 것을 두려워 하지 말아야 한다. 앞의 2가지를 할 수 있다면 당신의 몸값은 4배 이상 뛰어오를 수 있다. 


우리는 석사 박사 학위 따려고 논문 쓰고, 읽고 하는게 아니라 그냥 소식만 알면 되는 수준으로 논문을 읽는 것만 해도 된다.



1) 논문을 읽을 때는 abstract, conclusion, 그림과 표 부분부터 본다

 - 중간에 나오는 수식이나, 기존 사례 연구를 언급한 부분은 논문이 기본적으로 갖춰야 할 학문적 엄밀함과 진실성에 대한 부분이기 때문에 대부분의 경우 그 의미만 살펴보려는 우리같은 아마추어에게는 관련이 없다. 과감하게 패스하고 결론만 읽자

- 요약(abstract) 부분과 결론(conclusion) 부분을 읽었는데 조금 더 시간이 남는다면 각 단원의 제목을 읽어보자.


2) 몇가지 용어를 알아두면 좋다

 - 논문에서 novel 이라는 단어가 나오면 소설을 말하는게 아니라, '새로운 방식'을 의미한다. 남들이 시도 안한 방식을 우리가 최초로 시도해서 어떤 결과를 이끌어냈다면 novel 이라는 단어를 주장(claim) 할 수 있다.

 - stochastic. 어려워 보이는 단어지만 딥러닝에서는 흔히 쓰는 용어인데, 쉽게 얘기하자면 '랜덤' 을 의미한다. 딥러닝이나 다른 과학 분야에서 어떤 문제를 풀 때는 직접 계산을 해서 (주로 복잡한 적분) 푸는 게 사실상 불가능한 (intractable) 한 경우가 많은데 이럴 때는 우회책으로 비스무리한 근사값 (approximation) 을 구하는 쪽으로 선회한다. 관련 용어로는 monte-carlo 방식이 있는데 역시 랜덤하게 여러번 찍다보면 전체 모양에 가까워진다는 것을 활용한거다. 통계에서도 여론 조사할때 모든 사람을 대상으로 조사하는 대신 몇명만 찍어서 (sampling) 전체의 모양을 유추하는 것과 같은 원리. 참고로 몬테카를로는 도박으로 유명한 모나코의 지명. 그야말로 찍기다

 - markov, ancestral. 마르코프 체인은 다음의 확률적 결과가 이전의 확률과 연결되어 있는 모델을 표현한 말이다. 예를 들어 어떤 단어가 나온 다음 단어의 확률을 계산할 때에는 이전에 나왔던 단어들에 영향을 받게 된다 (이게 안되면 문법부터 틀려버릴 것이다). 이런식으로 이전의 확률을 보다보면 그 이전의 확률과 연결되어 있고.. 이런 식으로 체인 형태를 띄게 되는 확률 모델을 마르코프 체인이라고 한다. 자기 조상을 거슬러올라간다는 점에서 ancestral 이라는 용어와 밀접한 관련이 있다. 스테이블 디퓨전에서는 이미지에 노이즈를 가했다가 그 역방향 계산하는 것을 학습시켜서 점점 디노이징을 하는 과정을 마르코프 과정이라고 부른다

 - ablation study. ablation 은 뺀다는 의미인데, 한마디로 우리가 이 논문에서 새롭게 (novel) 적용한 부분이 정말 효과가 있는건지 증명하기 위해서 그 부분을 넣었을 때의 결과와 뺐을 때의 결과를 비교해보는 것을 의미한다. 다른말로 표현하자면 '해골물 테스트' 라고 읽어도 큰 무리는 아니라고 할 수 있겠다

 - SOTA (State of the art) = 예술의 경지... 가 아니라 지금까지 최고수준을 지칭하는 용어이다. 예를 들어 이미지 인식 모델에서 우리가 novel 하게 제안한 방법을 썼더니 기존의 SOTA 모델이 냈던 스코어를 돌파했다. 같은 식으로 활용한다

 - ground truth, gold label = 인공지능을 사용해서 어떤 실제의 사물을 흉내내는게 목적이라면, 목표물로 삼았던 실제의 사물 같은 것을 ground truth, 즉 '정답' 이라고 생각하면 된다

 - empirical = 경험적인. 즉, 어떤 공식이나 연역적 방법을 이용해서 증명한 것이 아닐때 주장을 설명하는 말이다. 많이 해보니까 대충 이런 경향이 있더라 (엄밀한 증명은 못하겠다) ... 라는 귀납적 추론을 의미한다.

 - intractable - 쉽게 유도해내는 것 (계산)이 불가능한 대상. tractor(트랙터) 는 끌어댕기는거, tractable = 끌어낼 수 있는, intractable 은 끌어낼 수 없는.. 을 의미함. 이런 대상이 나오면 어떻게 대응한다? 데이타 셋을 왕창 준비한 다음에 학습 돌려서 approximation (근사치) 를 구하는 쪽으로 우회하면 된다.


3) 논문을 직접 봐서 모르겠다면, 유투브의 힘을 빌자.

 - 가능하다면 인도인이 운영하는 채널을 찾아보자. 인도인들은 세상 모든 것에 대해 튜토리얼을 만드는, 튜토리얼에 진심인 민족이다. 

 - 나도 RNN 이나 트랜스포머, CrossEntropy 같은 개념들에 대해서 기존의 책이나 영상들을 아무리 봐도 이해를 못해서 헤메었었는데, 결국 나를 깨달음의 경지로 인도해준 사람들은 인도사람들이었다.


트랜스포머쪽으로 많은 설명 영상을 올려주는 인도인 채널 CodeEmporium


4) 용어에 대한 설명은 chat-gpt 를 이용하자

 - chatgpt 는 너무 복잡하게 얽혀있는 주제에 대해 물어보면 피상적인 답을 듣기 쉽다. 구체적으로 들어갈 수록 좋은데, 용어단위로 해설을 듣고 참고하기에는 괜찮은 것 같다. 위키피디아의 설명들은 그에 비해서는 최악에 가깝다


5) 어려운 주제를 파고들려면 여러가지 방향으로 다양하게 접근해보는 것이 한가지 방법이다

 - 대표적인 방법들로 책, 각종 유투브, 스택익스체인지의 관련 태그, 블로그(특히 허깅페이스), 레딧(스테이블 디퓨전과 로컬라마), 트위터 (얀르쿤, 엘비스 등등), 강의코스 (deeplearningai) 등이 있다. 

 - 한가지로 해서 모르겠다 싶으면 다른 버전의 설명을 찾아보고 이걸로도 모르겠다 싶으면 또 다른 버전의 설명을 찾아보고..
 - 이론만 봐서 모르겠다 싶으면 간단하게라도 직접 내 컴에서 깔아서 실행시키면서 따라가보고..

 - 파이썬은 수많은 나쁜점 더러운 점이 있지만, 그럼에도 불구하고 가장 좋은 점은 쉽게 자기 컴퓨터에 개발환경을 설치하고 디버거를 돌린 상태에서 해당 프로그램 (내 경우에는 automatic1111 webui 나 alpaca-lora) 을 메모리상의 변수를 뜯어보면서 파악할 수 있다는 점이다. 실습하다보면 이론이 갑자기 납득이 가기 시작하고, 이론이 이해가 가기 시작하면 코드가 이해되기 시작하고 하는 관계들이 있으니 끈기가 필요하다.