메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

독자리뷰

방대한 딥러닝 세계 체험

mydrea***

|

2019-12-20

펭귄브로의 3분 딥러닝, 파이토치맛

이 책은 파이토치로 인공지능을 구현하는 방법을 알려줍니다. 인공지능 입문자를 위한 기초 지식과 최신 인공지능 구현 방법인 인공신경망 기술을 사례를 통해 알아봅니다. 지도학습 방식의 ANN, DNN, CNN, RNN을 비롯해, 비지도학습 방식의 AE와 GAN 그리고 강화학습 DQN을 직접 구현합니다. 딥러닝의 약점을 이용해서 해킹하는 방법을 배우는 등 각 장에서 소개한 신경망으로 재미있는 응용 예제를 다룹니다.

  • 저자 : 김건우 , 염상준
  • 출간 : 2019-11-01

일할때는 Tensorflow를 사용하는데 체감상 주변에서는 모두 PyTorch를 사용하는 것 같다. 또 Tensorflow를 사용하다가 PyTorch로 넘어간 사람들의 삶이 얼마나 행복해졌는지 간증을 듣고있노라면 대체 얼마나 더 좋은건지 궁금하기도 했다. 그래서 이 책을 골랐다.

나는 Tensorflow와 PyTorch의 차이점에 중점을 두고 읽어보긴 했지만, 사실 딥러닝에 대한 개괄적 소개를 그저 PyTorch를 이용해서 하는 책이다. 그러므로 이 책이 얼마나 훌륭하게 딥러닝을 초보자들에게 설명해주는지와 PyTorch와 Tensorflow가 어떤 차이점이 있는지 내가 느낀 점을 나눠서 소개하려고 한다.


책 소개

저자가 NYU 출신이라서 NYU의 세계적인 딥러닝 연구자인 조경현 교수님 수업에서 사용된 과제를 교수님 허락 하에 책에 실었다. 과제의 내용은 아래와 같다.

어떤 함수를 이용해 오염된 이미지를 복원하시오.

(https://github.com/nyu-dl/Intro_to_ML_Lecture_Note/blob/master/homeworks/hw2.ipynb)

딥러닝이 전통적 프로그래밍과 어떻게 다른지, 딥러닝 모델이 Universal Functino Approximator 로서 어떻게 기능하는지를 체험해 볼 수 있는 훌륭한 과제라고 생각한다. 과제는 공개되어있으니 궁금한 사람들은 직접 해결해보면 좋다.

딥러닝을 처음 소개하는 책에서 CNN, RNN을 언급하는 것까지는 상당히 일반적인데 이 책은 욕심을 더 내서 GAN, Autoencoder, Adversarial Attack, Reinforcement Learning까지 소개한다. 그리고 CNN과 RNN에서 대표 모델로 ResNet과 Seq2Seq도 소개한다. 책의 크기와 두께로 미루어 봤을때는 가볍게 읽는 튜토리얼정도 일 것 같았는데 이렇게 방대한 분량이 들어간게 신기하다. 물론 각 내용을 깊이있게 다루진 않지만 소개의 목적에서는 최근 중요하게 다뤄지는 것들을 최대한 많이 담아서 좋다고 생각한다. 개인적으로는 최근 이슈가 많이 되는 Adversarial Attack 내용을 이 기회에 접하게 되어 좋았다.

예제 코드는 부분별로 잘라서 설명하고 맨 마지막에 전체 코드를 담았는데 내가 선호하는 방식은 아니긴 하다. 물론 이는 취향차이라고 생각한다.

Tensorflow vs PyTorch

이 부분은 책 소개라기보단 개인적 소회이다. 물론 이 책은 간단한 딥러닝 소개서이므로 PyTorch의 구석구석을 잘 소개한 것은 아니기 때문에 엄밀한 비교가 될 수는 없고 그냥 내 감상이라고 보면 될 듯 하다.

(내가 현재 Tensorflow 2.0을 사용하므로 이를 기준으로 비교해보겠다.)

Tensorflow

우선 Tensorflow는 공식 문서의 구성부터 엉망진창이다. 크게 tutorial과 guide로 나뉘어져 있는데 굳이 왜 이렇게 구분했는지 의문이다. 잠시 눈을 감고 3분정도 생각해보면 tutorial은 정말 초심자를 위한 소개글이고 guide는 더 심화된 내용이지 않을까 싶은데 tutorial 내에서도 기본편과 심화편이 나뉘어있어서 혼란은 더욱 가중된다. 그리고 상당수 내용이 중복된다. Tensorflow는 일단 이 공식 문서부터 교통정리를 해야된다고 본다.

공식문서를 찬찬히 따라가면서 가장 황당했던건 곧 deprecated되는 API를 버젓이 소개하고 있다는 점이다. 처음에 코드를 따라치면서 실행해보면 이 API는 곧 deprecated 될 것이라고 나오는데 잘못 따라쳤나 싶어 문서를 확인해보면 거기서도 버젓이 같은 결과물이 실려있다. deprecated될 API 대신 뭘 사용해야 하는지도 잘 모르겠다. 내가 무지해서 그런 것일수도 있지만 이런 무지한 사람들도 잘 사용할 수 있게 찰떡같이 공식문서를 만들어놔야 사용자층이 더 넓어질 것 아닌가.

Tensorflow는 딥러닝 모델을 만드는 API의 큰 축이 크게 3~4가지이다. 크게 보면 Keras Sequential API, Functional API, Subclassing API가 있고 완전한 TF Custom API를 Keras API와 적절하게 섞는 방법이 있다. 입맛대로 골라 쓸 수 있는건 좋은데 초심자에겐 상당히 곤란한 지점이 아닐 수 없다.

욕뿐인 Tensorflow에서 가장 애증의 대상이 개인적으로는 Dataset API이다. 일단 이 Dataset API는 정말 훌륭하다. map & reduce로 변환이 가능하며 batching, padding, sampling, 무한반복을 간편하게 사용할 수 있고 무엇보다 성능 개선을 위한 API가 너무 잘되어 있어서 데이터셋 로딩 과정에서 병목을 간단하게 해결할 수 있다. 개인적으로 Tensorflow를 계속 쓰는 이유는 오로지 이 Dataset API 한가지뿐이다.

그런데 왜 애증의 API이냐면 배우기가 너무 어렵다. 공식문서에서 소개하는건 전체 데이터를 메모리에 다 올릴 수 있는 경우 그냥 numpy로 읽어서 Dataset으로 변환하면 되는 경우인데 실무에서 그런 경우가 얼마나 될까 싶다. 결국 대용량 파일들을 학습하면서 읽어와야하는데 그러려면 tfrecord를 사용해야한다. 근데 이 tfrecord가 상당히 직관적이지 않다. 내가 못해서 그런것일테니 다시 말하면 나같은 평범한 개발자가 단박에 이해하기는 어렵다고 보면 되겠다. 하지만 일단 한번 손에 익혀두면, 스파크에서 tfrecord로 데이터 추출하고 이를 분산 저장해서 학습 과정에 병목 없이 읽어들이는 일련의 과정이 상당히 편해지고 성능 튜닝까지 간단하다. 좀만 더 편하게 만들면 좋았을것을…

PyTorch

우선 공식 문서가 상당히 깔끔하다. 읽기 좋은 문서가 씹고 뜯기에도 좋은 법인데 그런 면에서 PyTorch의 문서들은 직관적이고 필요한 내용을 어디서 찾아야 하는지 쉽게 알 수 있다.

PyTorch는 딥러닝 모델을 만드는데 한가지 방법만을 소개하기 때문에 고민 없이 사용 가능하다. (심화과정에서 더 있는지는 모르겠으나 최소한 입문용 문서에는 한가지로 통일되어있다.) Tensorflow의 Keras Subclassing API와 유사한데 Tensorflow도 애초에 이거 하나만 제공했으면 어땠을까 싶다. 물론 아주 간단한 구조의 네트워크를 만들고 학습하는데는 Keras Sequential API가 훨씬 쉽다. 입문에는 이만한게 없지만 조금만 더 복잡한 일을 하려고 하면 결국 Functional API나 Subclassing API를 손대기 시작해야하는데, 서로간에 호환이 잘 안되는 부분이 꽤 있다는것이 문제다. 이걸 일일이 언급하다간 지면이 부족하므로 생략한다.

텐서 연산과 모델 학습을 위한 API들도 Tensorflow보다 더 직관적이라고 느껴진다. 직접 실험해본건 아니지만 성능에서도 PyTorch가 뒤지지 않거나 앞서는 경우가 많다고 하는데 Tensorflow도 PyTorch API에서 많이 벤치마킹해줬으면 한다.

Tensorflow의 Dataset API와 비슷한 역할이 PyTorch에서는 Dataloader & Dataset API로 보여지는데 공식문서의 간단한 내용만 살펴보면 Tensorflow의 손을 들어주고 싶다. 기본적인 변환 파이프라인, 병렬처리는 제공하지만 Tensorflow에서 HDFS를 네이티브로 지원하고 성능 튜닝도 손쉽다는 점이 내 현재 상황에서는 많이 매력적이다.


책 소개 글인데 오히려 PyTorch와 Tensorflow의 비교 내용이 더 커져버렸다. 개인적으로 결론을 내리자면 PyTorch가 약간 더 나아보이므로 이 책으로 딥러닝을 입문하는 것은 아주 좋은 선택이라고 볼 수 있겠다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실