딥러닝 입문부터 심화까지 강의,책,공부소스 추천(개정판)

딥러닝 입문부터 심화까지 강의,책,공부소스 추천(개정판)
Photo by Scott Graham / Unsplash

과거 글의 개정본입니다.

딥러닝이 뭔가?

개쩌는 비선형함수입니다.

농담이고, 간단히 설명하자면 인간의 뉴런을 모방해 신경망을 깊게 쌓아올려 어떠한 입력에 대해 어떠한 출력을 내는 구조를 Deep Neural Network, DNN이라 부릅니다. 주어진 입력에 대해 원하는 출력이 나오도록 DNN을 잘 조정하는 것을 딥러닝이라 부릅니다.

이렇게 말해봐야 별로 와닿지 않을 수 있을텐데 쉽게 말하면 요새 인공지능 기술은 다 딥러닝에서 나옵니다.

Pasted image 20221117215521.png
위 그림을 한번 봅시다. 아름답죠? AI가 그린 겁니다. 이런 거 만드는 인공지능 만드는 게, 딥러닝 공부하면 할 수 있는겁니다.

참고로 위 그림은 미술 대회 나가서 상 탔습니다. AI가 그린 그림이 미술대회에서 우승했다. 이 그림은 표절일까?을 참고해 보세요.

요새 Stable Diffusion 이후로 생성모델이 인기인데, 아무튼 비전 계열 생성모델을 예로 들면 텍스트가 주어졌을 때 그림을 출력으로 뱉는 것, 스케치를 줬을 때 완성된 그림을 뱉는 것, 그림의 일부를 가리고 줬을 때 알아서 비워진 부분을 채워서 주는 것(impainting) 등등을 할 수 있습니다. 최근 Novel AI라고 일러스트 그려주는 AI도 화제였는데 궁금하신 분은 찾아보세요. 여담이지만 엄한 용도로 쓰는 경우도 있다고 들었습니다. 아무튼 이런 것만 할 수 있는 게 아니고 그냥 이 글에서 설명하기 힘들 정도로 딥러닝으로 할 수 있는 게 많습니다. 음악 듣고 피아노 채보 따주는 AI도 있고.

Pasted image 20221118002144.png
생성모델쪽 예시를 하나만 더 들자면, 위는 DreamArtist인데 입력 이미지에 따라 입력한 이미지가 섞여들어간 이미지를 만들 수 있습니다. 개인화된 생성모델이라 할 수 있는데, 여기서 더 자세한 내용과 다른 예시를 확인할 수 있습니다. 씹덕 일러 왜 이렇게 많아..?

연구 쪽으로 신기한 걸 소개하자면 제가 이 글을 쓰기 방금 전에 봤던 이런 것도 있습니다. 자세히 읽어보진 않았는데 인공신경망의 각 층 값을 인간 뇌와 대응시킨 연구로 보이네요. 그냥 영상 정도만 한번 봐보세요.

나는 아무것도 아는 게 없는데 딥러닝을 공부할 수 있는가?

고등학교 수학을 알고 있다면 누구나 배울 수 있습니다. 기초적인 프로그래밍(주로 파이썬)을 할 수 있는 편이 좋으니 파이썬도 잘 모른다면 파이썬 강의를 먼저 듣고 그 다음 듣기를 권합니다. 참고로 파이썬은 진짜 하나도 어렵지 않고 누구나 배울 수 있으니 부담을 가질 필요가 전혀 없습니다. 딥러닝 역시도 일단 저는 수학이나 물리 등에 비해 매우 쉽다고 생각하고 있는데, 이건 주관적인 거니 사람마다 다를 수 있습니다.

파이썬 강좌는 그냥 유튜브 찾아보면 수도 없이 나올텐데 거기 중에 조회수 많거나 좀 스펙 보니 뭔가 있어 보이는 사람 꺼 들으면 됩니다.

고등학교 수학과 기초 프로그래밍 말고 그나마 중요한 건 선형대수인데, 선형대수를 모른다고 하더라도 입문 강의를 듣는다면 필요한 만큼은 소개해주므로 크게 어렵다고 느끼진 않을 것 같습니다. 물론 그래도 잘 모르겠다, 또는 선형대수를 기초부터 들어보고 싶다면 관련 강의를 먼저 봐야 합니다. 그리고 당연히 ML을 깊게 파려면 수학 지식이 많이 필요합니다. 하지만 입문자용 강의 듣고 대충 딥러닝을 필요한 데에 써먹는 데에는 딱히 수학 지식이 필요하지 않은 경우가 많습니다. 그냥 코드 몇 줄 복사하면 원하는 게 돌아가는데 뭐..

그래서 어떻게 딥러닝을 공부하는가?

  1. ML/DL 기초 강의를 듣는다.
  2. ML/DL 강의를 듣다가 기초 프로그래밍/기초 수학(주로 선형대수)가 부족하다고 느끼고 지금 듣는 강의로 해결이 안된다 싶으면 따로 강의를 듣든 책을 찾아보든 해야 한다.
  3. 아무튼 어떻게든 기초 강의를 다 듣는다.
  4. 이제 최신 연구 내용은 강의에서 알려주지 않는다. 따라서 직접 논문을 찾아 읽는다. (여기부터는 딥러닝을 찍먹해볼 사람에게는 필요하지 않습니다.)
  5. 하지만 논문을 찾아 읽기란 쉽지 않은 일임에 분명하다.
  6. 그래서 논문을 찾을 때는 여러 최신 연구 동향을 소개해주는 유튜브, 트위터 등을 참고하고, Paperswithcode도 참고한다. Paperswithcode가 뭔지는 아래에서 소개해줍니다.
  7. 찾은 논문을 읽을 때는 무작정 읽기보다는 혹시 리뷰한 영상이나 블로그 글이 있는지 찾아본다. 있다면 참고하는 것이 좋다.

저는 cs231n 듣고 바로 논문리딩했었습니다. 개인적으로는, 먼저 혼자 논문을 전부 읽어보며 내용을 정리한 후에 리뷰 영상을 통해 내가 이해한 바가 맞는지, 리뷰해주는 사람의 인사이트를 더 얻어갈 수 있는지 봅니다. 또는 처음 혼자 읽어보기 좀 버거운 논문의 경우 리뷰 영상을 먼저 보고 논문을 읽기도 합니다. 물론 초록/아키텍처/결과 정도만 간단히 읽고 넘어가는 경우도 많고요.

Beginners

  • 입문자용 딥러닝 & 수학 강의 총정리본 by 국문과 공대생: 책과 강의를 많이 모아뒀으니 참고하기 좋습니다.
  • Deep Learning for Computer Vision: 일단은 기초부터 소개하기에 입문자도 들을 수는 있는 강의인데 난이도가 좀 있을겁니다. Transformers, 3D Vision(Oct-Tree, Mesh R-CNN), RL 기초 등도 모두 소개하기에 내용은 굉장히 충만합니다.
  • RL 초심자를 위한 강의: Deepmind x UCL 2021년 강의 이름 높은 Deepmind의 강의이고, 역시 깔끔합니다. 저는 멍청하게도 2021년 버전을 찾지 못해 2015년 강의를 들었었습니다. 주의: RL 초심자용 강의이자 딥러닝에 대한 기반지식이 전혀 없어도 들을 수 있기에 초보자용 강의에 넣어두었습니다만, RL을 배우는 강의이지 딥러닝을 중심으로 배우는 강의가 아닙니다! RL이 뭔지 모르고 요새 나오는 그림 그리는 AI처럼 멋진 딥러닝 기술에 관심이 있으면 이거 말고 다른 거 들으셔야 합니다.

cs231n은 자주들 입문할 때 보는 강의입니다만.. 개인적으로는 Transformers 빠진 게 너무 크지 않나 싶습니다. 그런데 어차피 입문 강의에서 Transformer 소개하는 게 많이 보이지 않는 것 같기도 해서 뭐 상관 없나 싶기도 하고..

소스 정리(입문 강의를 듣고 난 이후)

직접 확인 O

  • https://huggingface.co/blog 에서 다양한 튜토리얼을 huggingface 예제와 함께 확인할 수 있습니다.
  • Pennylane: Quantum ML 관련해서, 거의 유일하게 쓸만하다고 볼 수 있는 라이브러리입니다. 홈페이지에서 각종 튜토리얼도 제공합니다.
  • Stanford CS224W: Machine Learning with Graphs: 보기 드문 GNN 입문격의 강의입니다. 고전 그래프 이론도 소개해주니(Katz index 등) 참고하기 좋습니다. 근데 교수님은 왜 224W를 two twenty-four double-u라고 읽는걸까요?

직접 확인 X

여기 수록하는 강의나 자료는 거의 제가 목차 정도만 훑어보고 안의 내용은 제대로 보지 않은 것입니다. 알아서 걸러서 필요한 것만 보셔야 됩니다. 앞으로 계속 업데이트될 예정입니다.

논문 리뷰

유튜브 채널

  • Yannic Kilcher: 논문 리뷰, 최신 연구동향, 최신 이슈, 도움되는 라이브러리 등 도움되는 것을을 많이 소개해줍니다. 강력 추천함.
  • PR-12: 여담인데 지인 중 PR-12 영상을 싹 다 다운로드해다가 점심시간마다 하나씩 봤다는 사람이 있습니다.
  • 고려대 산업경영공학부 DSBA
  • 하정우 소장님 Weekly Arxiv Casual Talk: 일단은 영상물이니 '유튜브 채널'에 넣어두긴 했지만 유튜브 영상이 올라오진 않습니다.

블로그

  • hoya012님 블로그: 논문 리뷰한 여럿 글이 있는데, 특히 비전 관련 주요 모델 전부를 시간대에 따라 싹 다 요약한 시리즈물(링크는 시리즈 첫번째 글)이 있습니다. 비전이 관심 분야가 아니어도 읽어보기를 강력 추천합니다.

트위터

  • AI Pub: Stable Diffusion 설명해준 글로 처음 접했는데 아주 이해하기 쉽게 설명을 잘 해줍니다.
  • 기타 더 궁금하면 제 트위터를 참고하시는 것도..?

뉴스레터(이메일 구독)

하나의 논문을 찝어서 리뷰해준다기보다는 좀 넓게 최신 이슈, 최신 연구 동향을 주로 알려준다.

  • 위클리 NLP
  • Smilegate.AI
  • AI타임스

기타 유용한 사이트

  • Paperswithcode: 알 사람은 다 알텐데, 각종 논문 metric과 implementation 쉽게 바로바로 확인할 수 있습니다. 데이터셋별 SOTA도 바로 확인할 수 있습니다. 정말로 유용한 사이트입니다.

유용한 Repository

  • wandb: 로깅에 매우 유용함. Hyperparameter tuning에도 활용 가능함(wandb sweep)
  • timm: 비전 계열 모델 쉽게 불러와서 사용하기에 매우 유용합니다.
  • open-mmlab 라이브러리: open-mmlab에서 나온 라이브러리가 굉장히 많은데, 개인적으로 그 중 mmdet(2d object detection), mmdet3d(3d object detection)을 유용히 쓴 경험이 있습니다. mmcls(2d image classification)도 매우 유용한데, timm 모델과 연동 기능도 있을 정도입니다. (근데 써본 경험으로 좀 화나는게 timm 연동 기능이 있긴 한데 documentation을 제대로 안해놔서 직접 소스코드 뜯어서 돌아가게 했었음)
  • huggingface 라이브러리: 위에 소개한 huggingface blog글을 참고하면 더 좋습니다. 라이브러리도 한두개 속한 게 아니고 웹 서비스도 특색있어 뭔지 한마디로 소개하기는 뭐한데.. 그냥 매우 매우 매우 매우 좋은 겁니다. 다양한 논문 구현본 원클릭으로 웹에서 재현해볼 수 있고(gradio) 바로바로 가져다 쓸 수 있습니다. (transformers 라이브러리 등)
  • stable-diffusion-webui: 요새 SD가 핫하고, 그리고 보기 드문 대형 라이브러리가 있어서 공유합니다. SD 관련 툴박스 같은 느낌으로 엄청나게 많은 기능이 있습니다.
  • jax, pytorch lightning, DeepSpeed 등등... 라이브러리는 세상에 넘쳐날 만큼 많고 쓸모있는 것도 많으니(물론 자신의 목적에 따라 쓸모없는 것도 굉장히 많겠죠?) 알아서 잘 찾아서 알아서 잘 사용해야 합니다. 저도 그때그때 찾아 쓰는 라이브러리가 너무 많아서 일일이 다 기억하지 못합니다. 혹시 제가 관심 있어하는 라이브러리가 궁금하면 제 star 내역을 참고해보세요.

우스갯소리(?)