아롱이 탐험대

pytorch와 함께하는 딥러닝 공부 방법, 길라잡이 본문

dev_tools

pytorch와 함께하는 딥러닝 공부 방법, 길라잡이

ys_cs17 2020. 10. 8. 11:28
반응형

서론

저에 대한 소개를 하자면 2019년도 3학년 1학기부터 컴퓨터 비전 관련 학부 연구생에 들어가 약 6개월 동안 인턴 생활 후 현재 회사에서 딥러닝 개발자로 산업기능요원을 하고 있습니다.

 

학부 연구생을 시작하기 전 딥러닝에 관한 지식은 1도 없는 상태였고, python 또한 학교에서 배운 적이 없습니다.

연구실에서는 cuda와 tensorflow 설정, 우분투 익히기만 2주 동안하다가 지쳐서 pytorch로 딥러닝을 시작하였습니다.

 

솔직히 말해 딥러닝에 관한 아무런 지식 없이 딥러닝 공부 목적으로 학부 연구생에 들어가는 것은 비추합니다. 혼자서도 충분히 공부하면 배울 수 있고, 무엇보다 대부분의 석박사 연구원분들은 논문 작성과 프로젝트로 매우 바쁘셔서 여러분들을 봐줄 시간이 거의 없습니다.

 

제가 본격적으로 딥러닝 공부를 시작한 건 산업기능요원 근무부터입니다. 그나마 학부연구생, 대학교 활동 등의 스펙으로 입사를 하였지만 딥러닝에 관한 지식은 전무한 상태였습니다. 하지만 막상 입사 후 선임 개발자분이 퇴사하시고 딥러닝 개발자는 회사에 저뿐이었습니다. (지금도 마찬가지입니다.)

 

현재 글을 작성하는 시점 기준으로 약 7개월 동안 혼자 공부를 하였고 현재는 논문 구현 단계까지는 아니지만 pytorch를 능숙하게 다루고, 간단한 backbone network과 custom model 구현, kaggle 참가, 논문 분석, 프로젝트에 원하는 model을 활용할 수 있는 정도의 실력이 되었습니다.

자 그러면 이제부터 시작하겠습니다.

 

준비물

딥러닝 공부를 시작하기 전 반드시 필요한 준비물이 있습니다. 바로 코딩 능력, 수학 이해도, gpu입니다.

 

코딩 능력

우선 python만 공부하시면 됩니다. python은 다른 언어보다 이해하기 훨씬 쉽고, 환경 구축 또한 매우 쉽습니다. 그리고 대부분의 딥러닝과 데이터 사이언스는 python 언어로 진행합니다.

저는 python을 점프 투 파이썬 (https://wikidocs.net/book/1)으로 입문하였습니다. 기초적인 내용이 많고, 현재도 코딩할 때 헷갈리는 부분이 있으면 가끔씩 찾아서 봅니다. 점프 투 파이썬을 마스터하셨으면 기본적인 자료구조까지 이해하시는 게 추후 공부에 도움이 많이 됩니다.

파이썬에 대한 기초적인 이론도 중요하지만 가장 중요한 것은 본인이 생각한 것을 코드로 표현하는 능력 또한 매우 중요합니다. 따라서 시간이 있으시면 프로그래머스, 백준 사이트를 통해 알고리즘 문제를 푸시는 것도 추천합니다.

 

수학 이해도

우선 기본적으로 행렬 연산을 할 수 있어야 합니다. 그리고 시작 전에는 아니지만 나중에 논문을 읽으실 때 선형 대수의 중요성을 느끼실 것입니다. 기본적인 통계 공부도 좋습니다.

저는 선형 대수를 대학교 강의 + 서적으로 공부를 하였고, 통계학도 고급 통계까지 대학교에서 공부했습니다.

수학은 확실히 서적을 보면서 공부하시는 것을 추천드립니다. 기초적인 내용만 공부하셔도 됩니다. 아직까지는..?

 

GPU

딥러닝을 공부하는데 GPU가 없는 건 군인이 총이 없이 전쟁에 나가는 것과 같습니다.

데스크톱이 있으신 분들은 GPU를 최소 2070 SUPER로 맞추시는 것을 추천드립니다. 근데 이것도 나중에 큰 model을 학습시킬 때 메모리가 부족한 현상이 나타나긴 합니다.

돈이 있으신 분들은 aws, 돈이 더 많으신 분들은 gcp TPU를 추천드립니다.

근데 그냥 맘 편히 2070 SUPER를 사시는 게 좋은 것 같아요.

 

본론

기초 개념 공부

“저는 3가지 중 1가지도 충족하지 못합니다.”

우선 생활 코딩의 머신 러닝 시리즈 (https://opentutorials.org/course/4548)로 시작하시는 것을 추천드립니다. 이 강의는 수학은 물론 코딩 능력, GPU를 필요로 하지 않고, 중학생도 이해하실 수 있는 수준으로 너무 친절하고 쉽게 알려주는 강의입니다. 개요라고 생각하시면 편합니다. 어느 정도 하실 수 있는 분들은 스킵하셔도 좋습니다.

이 강의를 끝내시고 python을 공부하고 아래 내용으로 넘어가시면 됩니다.

 

“python만 다루어본 적이 있어요”

python을 해보신 분들께는 밑바닥부터 시작하는 딥러닝 1을 추천드립니다. 뿐만 아니라 3가지를 모두 충족하는데 딥러닝을 처음 접하시는 분들께도 무조건 강추합니다. 모든 딥러닝 서적 중 가장 유명하며, 가장 근본이 되는 서적입니다. 퀄리티 또한 매우 좋고, 딥러닝의 완전 기초부터 최근 (2017년 정도) 자료까지 살펴볼 수 있는 책이라 무조건 강추합니다. 딥러닝 개발자들 사이에서는 교과서라고 불리는 책입니다.

이 책에서도 gpu와 어려운 수학적 개념은 필요가 없습니다. 하지만 기초적인 수학 정도는 알아야 합니다. (고등학교 수준)

 

“위 서적을 읽었고, python도 할 줄 알고, 기초적인 수학도 알아요”

스탠퍼드 대학원 강의인 cs231n을 추천드립니다. 스탠포드 대학원 강의라고 해서 너무 어렵게 생각할 필요 없습니다. 물론 이 강의의 과제가 힘들긴 한데 과제는 스킵하시고 강의만 들으셔도 됩니다.

내용은 처음 들으면 “어? 이거 밑바닥 서적에서 배운 내용인데?”라고 생각이 들것입니다. 내용은 비슷하나 훨씬 깊게 가르쳐주십니다. 또한 단순한 딥러닝 기본이 아니라 딥러닝의 다양한 기법과 핵심적인 논문 리뷰도 해주시고, 수학적으로 깊게 접근도 합니다. 강의를 듣다 보면 내용도 많고 질리지만 이것만 마스터하셔도 딥러닝의 기초는 다 아시는 거라고 생각하시면 됩니다.

 

영어 버전: https://www.youtube.com/watch?v=vT1JzLTH4G4&list=PLC1qU-LWwrF64f4QKQT-Vg5Wr4qEE1Zxk

한글 버전: https://www.youtube.com/watch?v=3QjGtOlIiVI&list=PL1Kb3QTCLIVtyOuMgyVgT-OeW0PYXl3j5

 

본격적인 공부

“cs231n까지 공부했습니다.”

자 그러면 딥러닝 프레임워크에 대해 공부를 시작하셔도 좋습니다. 크게 tensor flow와 pytorch가 있는데 이 둘의 장단점을 잘 비교해보시고 선택하시는 것을 추천드립니다.

저는 pytorch로 시작하였고, tensor flow로 시작하시는 것도 나쁘지 않습니다. 우선은 pytorch 기준으로 설명드리겠습니다.

Pytorch는 공식 홈페이지에서 친절한 튜토리얼을 제공합니다. 현재 모든 자료가 한글이 아니지만 오픈 소스 기여자분들께서 열심히 번역을 해주시고 있습니다.

Pytorch tutorial: https://tutorials.pytorch.kr/

홈페이지 들어가셔서 왼쪽 카테고리의 파이 토치 배우기 전부를 공부하시면 됩니다. 물론 처음 하시면 진짜 어렵긴 합니다. 하지만 여러 번 반복하다 보면 암기가 되고, 특히 개인 프로젝트를 진행하시면 암기하시기 더 쉽습니다.

저도 가끔씩 메서드가 생각이 안 날 때 들어가곤 합니다.

Pytorch tutorial이 어려우신 분들께는 모두를 위한 딥러닝 시즌2 pytorch 버전 (https://www.youtube.com/watch?v=St7EhvnFi6c&list=PLQ28Nx3M4JrhkqBVIXg-i5_CVVoS1UzAv&index=2)을 추천드립니다. 이 강의도 매우 좋습니다.

 

“pytorch를 써본 적이 있지만 아직 익숙하지 않습니다.”

위에서 언급한 2가지를 모두 하셔도 막상 개인 프로젝트를 진행하려고 하면 힘드실 것입니다. 이럴 때는 kaggle (https://www.kaggle.com/)이라는 사이트를 추천드립니다. 사람들이 올린 해당 데이터에 대해 딥러닝 등으로 학습시켜 경진하는 대회 사이트입니다. 여기서 처음부터 대회에 참가하시지 말고 우선은 다른 사람이 어떻게 이 문제를 해결했는지를 보시고, 한번 똑같이 코드를 작성하며 이해하는 방법이 좋습니다.

예를 들어 개와 고양이를 분류하는 데이터가 있다고 하면 notebook이라고 쓰여있는 곳에 들어가서 다른 사람이 어떻게 코드를 구상했고, 정확도가 얼마나 나왔는지 확인할 수 있습니다. (https://www.kaggle.com/manzoormahmood/transfer-learning-using-resnet50-and-pytorch) 처음부터 어려운 네트워크로 구현하시지 마시고, 링크의 예시처럼 간단한 네트워크로 학습을 시작하시는 것을 추천드립니다.

또한 kaggle에는 다양한 데이터들이 존재함으로 본인이 원하는 데이터를 선택하여 먼저 네트워크를 구상해보고 다른 사람이 어떻게 구현했는지 비교하는 것도 매우 좋은 방법입니다.

 

“pytorch에 익숙합니다”

자 그럼 이제부터 논문에 대한 분석을 하셔도 됩니다. 다만 주의할 점은 논문을 읽지만 마시고 꼭 필기나 워드로 정리하시는 것을 추천드립니다. 딥러닝에 관한 논문들은 현재도 꾸준히 출시되고 있고, 네트워크의 종류, 기법 또한 매우 다양합니다.

논문은 영어로 되어있어 독해하시기 힘드신 분들은 다양한 논문 분석 블로그와 유튜브를 먼저 보시고 논문을 보시는 것을 추천드립니다.

논문을 분석하다 보면 모르는 수식과 개념들이 나올 텐데 이런 부분들은 서적을 통해 공부하시면 됩니다.

논문의 순서는 우선 resnet과 같이 유명한 논문들을 어느 정도 보시고 유튜브 ‘논문 읽기 모임’을 따라가시면 됩니다. 설명이 친절하고 이해하기도 훨씬 쉽습니다.

그리고 논문을 분석하였다고 해서 끝이 아닙니다. 꼭 해당 논문의 github을 들어가셔서 어떻게 구현하였는지 코드 분석까지 하시는 것을 강추해드립니다.

 

이 단계까지 오신 분들은 최신 논문 동향에 따라 쭉 공부하시면 됩니다. 그리고 kaggle이나 open dataset을 활용하여 본인만의 프로젝트를 진행하시고, 고급 수학에 대해 계속 공부하시면 됩니다.

저도 현재 이 단계에 있는 사람이라 확실한 방법은 아닐 수도 있습니다. 좋은 공부 되시길 바랍니다.

반응형

'dev_tools' 카테고리의 다른 글

Visual Studio 2019에서 LibTorch 사용하기  (6) 2021.01.07
표준 머신러닝 워크플로우  (3) 2020.08.19
Comments