딥러닝 갤러리에 올라오는 글의 대다수를 차지하는 "어느정도 공부를 해야하는지, 어떤 순서로 공부해야하는지" 질문들에 대해 내 생각을 남겨봄.


사실 모델을 학습해보고, 결과를 출력하는 것은 아주 쉬움.

딥러닝 환경을 구축하고, 데이터셋을 구축하고, 모델을 학습시키는건 사실 기초적인 프로그래밍 언어 지식만 갖추면 누구나 할 수 있다고 생각함.

에러가 생기면, 에러 문구를 구글에 집어넣고, 존재하는 솔루션들을 순서대로 적용해보며 조금씩 나아가는 과정은 귀찮지만 재능이나 선행지식을 요구하는 영역이 아님.


그럼 이제 남들이 만들어놓은 모델을, 자신의 데이터셋 (또는 데이콘이나 케글에서 제공하는 public dataset)으로 학습을 돌려보고 난 뒤는 어떨까?


1) 성능이 잘 나올때

왜 잘나왔을까? 에 대한 합리적인 이유를 찾는건 매우 어려움. 단순히 운좋게 스윗스팟의 하이퍼파라미터(learning rate, batch size 등)을 찾았을 수도있고, 해당 태스크가 그냥 쉬워서일 수도있고, 엄청나게 다양한 이유가 복합적으로 물려있기에 모든 변수에 대해 ablation test를 진행해보고 해답을 내놓는건 탑티어 논문의 수준이라고 생각함. (대표적인 예시로 batch size와 learning rate의 상관관계에 대해 분석한 구글의 유명논문이 있음)


2)성능이 잘 안나올때

데이터셋과 레이블이 제대로 구성되었는지를 확인해봐야할 것이고 (기본적인 언어를 다루는 능력),

목적함수가 주도하는 학습의 방향이 어느곳을 가리키고 있는지 확인해야할것임. (선형대수)

누군가는 하이퍼 파라미터가 최적이 아닌것을 의심해볼것이고 (계산지능, 최적화)

자신이 참고로 삼은 모델을 의심해볼것이고 (각종 딥러닝 컨벤션에 대한 지식들... rnn, cnn, gnn, supervised/unsupervised/self-supervised, 등등)

많은 가설을 세우고 매번 실패를 겪다보면 태스크의 불가능성을 의심해볼거임(모델의 커패시티, 시공간복잡도)


하고싶은 말이 뭐냐면 결국 정말 다양한 지식이 필요하다는 거임.

하나하나의 분야들이 결코 녹록치 않고 배우는데 시간이 많이 소요됨.

많은 입문자들이 잘하고 싶은 욕심에, 필요한 선행지식을 체크하고, 정답을 알고싶어함.

그리고 그건 엄청난 욕심이자 자만이고, 대부분의 입문자들은 누군가가 댓글로 달아준 항목들을 하나도 제대로 공부하지 못한채 방황할거라 감히 추측함.

설령 전부다 섭렵한다해도, 입으로 떠드는건 거의 박사고 상상의 나래를 막 펼쳐서 이런문제는 이렇게 해결할 수 있다 떠들지만, 결국 누구나 처음은 개/고양이 분류, mnist 분류부터 시작해야 함.


지식은 결코 이론만으로 존재할 수 없고, 본인의 손으로 직접 재현했을때 비로소 의미가 있다고 생각함.

간단한 튜토리얼을 그냥 자기손으로 해보고, 그다음엔 내 데이터셋을 추가해보고, 이런 레이어를 추가해보고, 옵티마이저와 스케듈러를 변경해보고 하는등 자신의 지식의 범주를 확장시키는게 바람직하다고 생각함.


딥러닝 갤러리에선 그렇게 하나하나 시도하는 과정에서 맞닥뜨린 문제점들을 공유하고 이미 그 과정을 거쳤던 사람들과 의미있는 의사소통이 이루어졌으면 하는 바람으로 뻘글을 남겨봄.


요약:

우선 대가리박고 해결하고 싶은 문제를 만나자

해당 문제를 해결하기 위해 필요한 지식을 하나 둘 씩 습득하자