생각보다 사람들이 계속 읽는 것 같아서 업데이트 하고 있음.


v1.2 참고 자료 추가 + QnA 항목 추가. 서적 표지 스크린 샷 등 이미지 추가

v1.1 참고 자료 추가

v1.0 초안 작성


Q: 속성으로 배울 방법이 있을까?

A: 속성은 없을거 같음. 왜냐하면 이 분야의 특성상 서로 맞물려있는 지식들이 많음. 그래서 대부분의 자료를 보다보면 다른 분야의 지식에 대해 어느정도 알고 있다고 가정하고 넘어감. 그러니 내용 자체가 그렇게 어렵지 않은 경우에도 어렵게 느껴지는 것임.
맞물려 있는 지식들을 파다보면 하나를 배우려고 하니 모르는거 3개가 추가되는 현상이 발생함. 

   - 예를 들어 학습을 배우려고 보면 전파, 역전파, 비용함수라는 주제가 나오고, 비용함수라는 주제를 배우려고 보면, 평균제곱값 오차, 교차 엔트로피가 나오고, 교차 엔트로피는 뭐야? 라고 보면 클로드 셰넌의 정보 이론이 나오고, 쿨벡-라이블러 발산값같은 개념이 나오고.. 하는 식임
   - 대부분의 사람들은 이 단계에서 '아 이건 내가 파고들 분야가 아니구나' 하고 좌절을 함. 알아보려고 할 수록 모르는게 많아지는데 기겁할 수 밖에 없음.

   - 근데 사실 서로 얽힌게 많아서 그렇지 개념 하나 하나는 수학 기호의 벽을 넘고 나면 그렇게까지 어려운 것은 아니고, 상식선에서 이해할 수 있는 것들이 많음. 그리고 저렇게 총 배워야 하는 개념의 수가 다른 학문에 비해 압도적으로 많은가? 하면 그렇지도 않음. 이 부분을 극복하냐 못 극복하냐가 자신감의 차이로 이어짐.


Q: 저정도까지 공부해야 할 필요가 있나?

A: 인공지능은 빠르게 최신기술이 나오고 있는 분야임. 한번 신기술이 나오고 나면 기존 기술은 거의 쓸모없어지거나 그냥 알아두기만 하면 되는 정도로 사장되는 경우도 많음. 그리고 최신 기술을 알기 위해서라면 결국 논문을 봐야 함. 논문을 읽을 수 있는 사람 vs 없는 사람, 깃헙에 올라온 자료를 받아서 자기 컴퓨터 혹은 임대한 인스턴스에서 돌려볼 수 있는 사람 vs 없는 사람으로 정보습득력 수준(literacy)의 격차가 생김. 


Q: 그럼 어떻게 공부해야 함?

A: 차례대로 공부할 수 있는 어느정도의 로드맵을 따라가는 것을 권함



 - 1. 파이썬은 무조건 알아야 함. 다른 언어는 쓸 일이 그다지 없음. 대신 웹 개발류는 알아두면 응용할 때 좋음. 

 - 추천강의 : w3schools.com 의 파이썬 튜토리얼 https://www.w3schools.com/python/default.asp

    - 이 사이트는 파이썬 말고도 웹 개발 배울때도 도움 많이 받았던 곳임. 공짜로 보기 미안할정도로 정보의 품질이 좋으니 꼭 보자.
    - 튜토리얼 목록 보면 AI, Numpy, Pandas 등의 다른 주요 패키지들에 대한 튜토리얼도 있으니 놓치지 말자


영문으로 된 자료가 부담스럽다면 한국어로 되어 있는 양질의 자료도 많으니 참고할 수 있다. 가장 추천할만한 것중 하나로는 생활코딩 시리즈가 있다

생활코딩은 https://www.opentutorials.org/course/3083 에 등록된 텍스트 기반의 강의와 유투브 기반의 영상강의가 함께 제공된다. 저자는 특히 설명을 체계적으로 하는 능력이 뛰어난데, 아래와 같이 전체적인 '지식의 지도' 를 보여주면서 뭘 먼저 알아야 다음 것을 알기 수월한지 힌트를 준다. 먼저 마스터리를 찍어야 언락되는 다른 테크트리 같은 개념으로 만들어놓아서 보기가 좋다. 다만 AI 쪽에 대한 부분은 별로 없고 웹 개발에 주로 치우쳐져 있어서 딥러닝 공부에는 직접 도움은 덜 되지만 파이썬 강의까지는 챙겨보자. 그리고 웹개발도 배우면 결국 도움이 된다. 왜냐? 딥러닝으로 뭔가 신박한 것을 만들었다면 그걸 남에게 보여줄 방법은 결국 웹이 가장 유력하기 때문이다.



 - 2. 리눅스를 쓰건 파워쉘을 쓰건 시스템 관리에 대해 어느정도 알아야 한다. pip 나 venv, conda 같은 패키지 매니저들이 돌아가는 원리, 왜 필요한지 등에 대해 알아야 나중에 하다가 문제에 부딛혀도 해결책을 스스로 알아낼 수 있음. 많은 경우 문제들이 너무 기본적인거라서 사람들이 굳이 알려주지 않는 경우들이 많음. 학습을 빡세게 돌리려면 결국 외부 서버를 임대해서 사용하거나, 내 컴퓨터 여러대를 한꺼번에 돌리거나 해야 하는데 그렇게 돌리려면 비싼 윈도우 정품 라이센스에 돈 쓰기보다는 리눅스를 깔아서 돌리는 쪽으로 가기 마련이다. 나도 리눅스 안 쓰다가 머신들 돌려야 해서 오랫만에 리눅스를 공부하려니 어질어질 했는데 아래 책이 꽤 정리가 잘 되어있고 필요한 내용은 거의 다 들어있었다.

 - 추천서적 : 리눅스 입문자를 위한 명령어 사전 http://www.yes24.com/Product/Goods/102467714

 - 3. numpy, pytorch 에 대해 어느정도 알아야 함

   직접 학습을 돌리려면 당연히 알아야 하고, 그렇지 않고 그냥 사용을 하는 경우에도, 남들이 만든 모델이 어떤 구조로 되어 있는지 뜯어볼 수 있어야 깊이 알 수 있음. 파이토치 초보자 입문 같은 책이나 강의 보고, 간단하게 자기 손으로 모델 학습 한번 돌려보는게 1단계 목표임.

   프로그래밍을 배울 때 제일 처음 기본적으로 하는 것이 Hello World! 출력하는 프로그램을 짜는 것이라면, 파이토치를 배웠다면 제일 먼저 돌려보는 것이 숫자 손글씨 인식하는 모델 만드는 것임. 파이썬 소스로 20줄 이내고, MNIST 라는 숫자 이미지 데이타셋 다운로드 받는 것부터 자기 컴퓨터에 돌리는 것까지 거의 다 떠먹여주다시피 수준으로 예제코드가 잘 된 것들이 많음.

  - 예전에는 딥러닝을 배우려면 텐서플로우? 파이토치? 케라스? 같은 복잡한 선택지에서 헤멜 수 밖에 없었는데, 요즘은 새로 나오는 프로젝트들은 거의 pytorch 로 대동단결했음. 그런데 문제는 교과서라고 할만한 좋은 책들 (예: 오렐리앙 제롱의 핸즈온 머신러닝 2판) 이 예전에 작성되서 텐서플로우로 되어 있다는 점이 문제임. 

  - 추천서적: 차근차근 실습하며 배우는 파이토치 딥러닝 프로그래밍:파이썬부터 머신러닝 기초 이미지 인식 파인 튜닝까지 http://www.yes24.com/Product/Goods/111704966



 - 4. 기계학습과 딥러닝에 대한 개론적인 이해가 필요함

   - 기계학습은 AI 의 한 부분이고, 딥러닝은 기계학습의 한 부분이다라는 말을 듣고 무슨 말인지 안 와닿는다면 관련 개론 강의이나 책 찾아볼 것을 권함

   - 딥러닝에 관련된 개념들에 대한 이해가 필요함

      - 학습은 뭐고, 추론은 뭐고, 웨이트는 뭐고 바이어스는 뭐고, 활성치는 뭐고, ReLU 는 왜 필요한거고, 소프트맥스가 뭐고, 크로스 엔트로피가 뭐고 등등의 개념들. 역시 책이나 강의 찾아볼 것

   - 딥러닝의 모델이 무슨 역할을 하고, 학습을 할 때 뭐가 어떤 영향을 주고 같은 부분에 대해 어느정도 감이 필요함. 과적합, 과소적합 같은 문제가 뭐고, 왜 일어나고, 사람들이 어떻게 극복했는지 등에 대해 알아야 함. 그 외 차원의 저주 문제, 그래디언트 소멸과 폭발 문제 등등도 알아야 함.

 - 추천서적 : 밑바닥부터 시작하는 딥러닝 https://www.hanbit.co.kr/store/books/look.php?p_code=B8475831198

   - 요 책은 특이하게 파이토치나 텐서플로우 같은 프레임워크를 쓰지 않고 그야말로 밑바닥부터 만드는 과정을 보여줌. 

   - 추천 이유는 일본 저자가 썼기 때문에 영어책 번역한 것보다 한국어 독자가 읽기 편하고, 정말 밑바닥부터 만드는 것이기 때문에 사전지식을 요하는 부분이 적다는 것. 3권의 시리즈로 구성되어 있고 마지막 3권에서는 자기가 파이토치와 유사한 구조의 딥러닝 프레임워크를 만드는 것까지 따라하게 해줌.

  - 추천서적: http://www.yes24.com/Product/Goods/117173369

 

  아래 추천 유튜브 채널란에도 나오는 스탯퀘스트의 영상강의를 책으로 만들어 놓은 것임. 머신러닝 공부하면서 도움을 많이 받아서 이미 알고 있는 내용들이지만 팬심으로 구매한 책인데, 초보자에게 권할만 함. 딥러닝 이전의 머신러닝에 관련된 확률과 통계의 개념부터 머신러닝 기법까지를 주로 다루는데, 다른 딥러닝 관련 책을 보다가 확률 통계의 너무 기본적인 부분에서 막힌다 싶으면 이거만큼 친절하게 알려주는 참고서가 없을 것임.


 - 5. 수학에 관련된 부분 이해가 필요함

   - 벡터와 행렬등을 다루는 선형대수학, 미적분, 확률과 통계가 주로 관련되어 있음. 복잡한 내용까지는 안 가더라도 각종 기호들이 뭘 말하는건지 풀어서 볼 수 있는 정도가 되면 좋음

   - 수학이 필요한 이유는 논문 내용을 이해하기 위해서임. 논문을 자기 능력으로 해독할 수 있는 사람과 아닌 사람은 정보 습득 능력에서 차이가 날 수 밖에 없음

   - 수학의 분야는 매우 넓지만 딥 러닝 관련 논문들 이해하는데에는 위에 말한 3 가지 (미적분, 선형대수학, 확률통계) 정도면 됨. 

   - 수학 공부한다고 해서 연습 문제풀고 그런거 할 필요는 없고, 제일 중요한 것은 각종 기호 읽는 방법임. 시그마같은 기호는 몇개만 나열되도 무슨 대학원 공학처럼 보이지만, 사실 파이썬 코드로 치면 for loop 문 돌려서 변수를 쭉 더하는 것에 불과함. 이 울렁증을 극복하느냐 못하느냐가 관건임. 편미분 기호나 적분 기호 같은 경우도 사실 파이썬 코드로 보면 별거 아님.

   - 수학 공식으로 써놓으면 뭐가 어려워 보이는 이유중 하나가 단어 2-3 개정도는 써야 나타나는 개념을 그냥 영문자 한개로 써버려서 그런 것임. 근데 이런 것들은 이쪽 분야 연구하던 사람들은 동시에 쓰는 개념이 열가지가 넘지 않으니 그냥 간단한 문자로 써버리는 것임. 역시 용어와 익숙해짐의 문제이고, 본질적인 난이도는 아님. 아카라이브나 인터넷 커뮤니티에 대해 문외한이던 사람이 이런 곳에와서 '주딱' '핑프' '돚거' 같은 단어를 보고 기겁할 필요가 없는 것과 유사함

  - 머신 러닝 관련 수학책들 추천받음. 나는 수학은 어느정도 기초가 되어 있어서 크게 신경 안쓰고 바로 넘어갔는데 다른 사람은 안 그럴테니 괜찮은 서적 있으면 댓글로 달아주면 여기 적어놓겠음


- 6. 깃헙 다루는 법을 어느정도 알아야 함

  - 이쪽 바닥이 재밌는 이유가, 논문으로 복잡하게 되어있는 내용도 결국 내 컴퓨터로 다운받아서 실제로 돌려보고 뜯어보고 하면서 결국 이해를 할 수 있다는 것임. 그러려면 기본적으로 남의 저장소 끌어오는 방법, 버전이 뭔가 꼬였다 하면 그 전 시점으로 돌리는 방법, 뭔가 실험을 해보고 싶으면 브랜치를 따서 다른 브랜치로 옮겨서 하다가 필요 없으면 날려버리고 하는 방법 등등에 대해 익숙해야 함.

 - 이건 책보다는 직접 실습을 많이 해봐야 하는 쪽이라..

https://backlog.com/git-tutorial/kr/


- 7. 응용 ai 에 대한 개론적인 이해가 필요함

  - ai 의 응용 분야는 크게 이미지쪽 자연어 쪽으로 나뉜다고 할 수 있는데, 이미지쪽으로 가게 되면 합성곱 신경망 (CNN)을 기본으로 해서 그 이후의 응용 분야들이 펼쳐짐. 거기에 강화학습 같은 요소들이 부가적으로 존재함.

  - CNN 은 2차원 이미지를 인식하는 데에 효과가 뛰어나다는 것이 증명되고 2012 년 AlexNet 이 뛰어난 성적을 보이며 사람들의 관심이 모이기 시작함.

  - 처음에는 이미지를 인식 (classification) 하는 것이 목표였는데, 그 성능을 높이기 위해서 inception, residual network 같은 개념들이 등장하고 그 개념들은 나중에도 계속 활용되게 됨. 그림 한장에 대한 인식 능력이 사람 수준에 도달하게 된 이후에는 연구자들은 이미지를 부분별로 나누는 작업(segmentation)에 관심을 갖게 되고, 그 결과로 u-net 같은 구조들이 등장함. 이건 나중에 스테이블 디퓨전에서 요긴하게 쓰이게 되기도 함. 한편, 이미지를 인식하는 모델을 돌리는 과정에서 latent space 라는 공간의 유용성을 발견하게 되고, 이걸 역으로 돌려서 이미지를 인식하는 것 말고 만들어내는 것에 쓸 수 없을까 연구하게 됨. 그 최초의 결과물이 auto-encoder 라는 것인데 이걸 이용해서 기본적인 이미지를 만들어낼 수 있음. 그런데 해상도가 너무 낮게 되어 있어서 해상도를 높일 방법을 찾으면서 GAN (Generative Adversarial Network) 같은 개념을 도입하고, 결국 디퓨전 개념으로 발전하게 됨. 이 과정에서 VAE, CLIP 같은 다른 모델과 혼합 응용하여 요즘의 스테이블 디퓨전 같은 것이 나옴. 이 분야의 책들 찾아볼 것

 - 한편 자연어 분야에서는 RNN 이라는 방식으로 길이가 긴 문장을 다루는 방법을 다루다가 RNN 의 한계를 극복하기 위해 LSTM 같은 방식으로 발전하게 되고 결국 어텐션이라는 메커니즘을 탑재한 트랜스포머 구조로 귀결됨. 트랜스포머는 자연어뿐만 아니라 다른 분야에까지 범용적으로 쓰일 수 있는 구조이기 때문에, 자연어 분야를 공부하지 않더라도 AI 를 공부하게 되면 피해나갈 수가 없는 존재임. 

 - 추천 서적 : 비전 시스템을 위한 딥러닝 https://product.kyobobook.co.kr/detail/S000001810455

이미지 관련 모델에 대해서 이것저것 기본부터 응용까지 잘 다뤄주고 있다. 스테이블 디퓨전 같은 최신 모델은 다루지 않는 점이 아쉽지만 현 시점에서 디퓨전 관련은 대중들이 볼만한 수준으로 책으로 써서 나온게 한권도 없다. 대신 아래와 같은 책이 5월중에 출시될 예정이라고 하니 참고

https://www.oreilly.com/library/view/generative-deep-learning/9781098134174/


 - 추천 서적 : 트랜스포머를 활용한 자연어처리 http://www.yes24.com/Product/Goods/115633781
    -> 영어 책을 번역한거라서 번역어체의 껄끄러움의 문제는 있지만, 허깅페이스와 트랜스포머 관련되서 가장 정보량이 많음. 영문판을 읽을 수 있다면 영문판을 권함.


- 8. 마지막으로 영어를 잘 해야 함. 

추천 서적들을 소개해주고 싶은데, 일단 기본적으로 꿀팁 하나를 주자면, 공학 기술서적은 미국 유럽 저자들이 쓴 책이면 차라리 원문을 읽는게 낫고, 한글로 된 글을 보고 싶으면 일본 저자가 쓴 베스트 셀러 책을 번역한 쪽이 추천할만함.

 - 영어로 된 책을 번역한 책을 보면 대부분 번역가들이 해당 분야의 내용은 잘 알지만, 읽기 쉬운 한국어를 쓰는 능력이 부족함. 별거 아닌 영어 단어도 이게 전문용어인지 그냥 용어인지 구분을 안하고 전문용어처럼 번역을 하기 때문에 읽는 입장에서는 혼동이될 수 밖에 없음. 

 - 그에 비해 일본어 저자가 쓴 책을 한글로 번역한 경우에는 많은 경우 훨씬 한국사람이 소화하기 쉬운 언어로 써져있기 때문에 이해에 부담이 없음.

- 결국 영어를 못 하면 얻을 수 있는 정보가 크게 제한됨. 그나마 요즘엔 번역기들의 성능이 좋아지긴 했는데, 그래도 전문용어와 일상용어의 구분이라는 벽을 완벽히 넘진 못함

 - 영어를 잘 하면 레딧이나 트위터, 영문 유투브의 관련 정보들을 바로 접할 수 있음



Q: 딥러닝을 배우기 전에 머신러닝을 꼭 먼저 배워야 함?

A: 알면 좋지만 필수는 아니다. 생각보다 겹치는 부분이 아주 많지는 않다. 머신 러닝에서 소개되는 각종 기법들은 나중에 필요한 시점에만 찾아 봐도 된다.


[추가] 유용하다고 생각하는 유투브 시리즈 등을 정리해봤다

StatQuest 의 딥러닝 시리즈

https://www.youtube.com/playlist?list=PLblh5JKOoLUIxGDQs4LFFD--41Vzf-ME1

원래 통계, 머신러닝 쪽의 주제에 대해 쉽게 설명하는 것으로 유명한 사람인데, 최근 딥러닝 시리즈도 상당히 좋았다. 최대한 쉽게 설명하는 것을 추구하기 때문에 일부러 몇가지는 빼놓고 지나가기도 하지만 초보자에겐 좋다. 딥러닝 말고 머신러닝이나 통계 개념에 대해서도 볼게 많다


3blue1brown 의 딥러닝 시리즈

https://www.youtube.com/playlist?list=PLZHQObOWTQDNU6R1_67000Dx_ZCJB-3pi

고등수학을 소재로 유투브 5백만 구독자를 넘긴 채널. 딥러닝에 대해서도 4개짜리 시리즈영상이 있다. 워낙 애니메이션을 잘 써서 설명을 하기 때문에 보기가 좋다. 영상이 4편밖에 없는게 너무 아쉽다. 위 4개의 영상은 이해가 될 때까지 10번 이상 정독해서 봐라.


deeplearning.ai 의 코스

인공지능 교육의 선구자인 앤드류 응 교수가 개설해놓은 강의 시리즈. 딥러닝을 다루기는 하는데, 딥러닝 이전에 필요한 기계학습의 기본 개념부터 차근차근 설명해줌.

https://www.deeplearning.ai/courses/

공식 홈페이지를 가보면 유료 강의 코스로 구성되어있긴 한데, 강의록 슬라이드나 영상들도 공개를 해 놓음. 조곤조곤 설명 잘해주니까 능력되는 대로 찬찬히 보면 됨.

https://www.youtube.com/watch?v=CS4cs9xVecg&list=PLkDaE6sCZn6Ec-XTbcX1uRg2_u4xOEky0