[리뷰] 밑바닥부터 시작하는 딥러닝 3
in Review on Review, Book, 밑바닥, 딥러닝, 프레임워크, Define-by-run, 자동미분, 2차미분, Dezero, 체이너, 파이토치, 설계, Pythonic, 역전파의역전파, 계산그래프, 추상화
한빛미디어
출판사의"밑바닥부터 시작하는 딥러닝 3(사이토 고키 저/개앞맵시 역)"
를 읽고 작성한 리뷰입니다.
어느덧 “밑바닥부터 시작하는 딥러닝 시리즈”의 세번째 책이 발간되었다. 밑바닥 시리즈는 딥러닝을 연구, 학습하는 이들이 이구동성으로 극찬하는 딥러닝 입문서이다.
개인적으로 알파고 등장 이후 2017년 처음으로 구매한 딥러닝 서적이 “밑바닥부터 시작하는 딥러닝” 인데, 이 책 덕분에 역전파의 늪에서 벗어날 수 있었기에 지금도 깊은 애정을 갖고 있는 책이다. 그때는 시리즈로 계속 나올줄 몰랐는데 결국 3권까지 나왔다.
이번 도서 3권은 어떤 밑바닥을 구현하게 될까? 그것은 바로
DeZero
라는 이름을 가진 딥러닝 프레임워크 이다.
텐서플로우나 파이토치 같은 훌륭한 딥러닝 프레임워크가 이미 존재하는데 굳이 프레임워크를 만들 필요가 있을까라는 의문이 생길 수도 있다. 그럼에도 이 책을 반드시 읽어야 할 이유는 무엇일까? 대표적으로 다음 2가지 이유를 들고 싶다.
SOTA 연구 및 개발 협업
연구 리터러시
능력
최신 AI 기술을 활용하여 서비스를 개발하는 회사일수록SOTA급 논문을 빠르게 이해하고 코드로 구현하는 능력
이 매우 중요하다. 연구 결과를 구현체로 만드는 대표적인 사이트로 paperswithcode를 예로 들 수 있는데 최전선에 위치한 기술인 만큼 타인의 연구 결과를 빠르게 해석하여 구현하고자하는 서비스에 빠르게 녹일 수 있는 커뮤니케이션 능력 혹은 리터러시는 매우 중요한 능력이다.또한 스스로의 연구를 코드로 구현하고 검증하는 과정은
연구의 이해 수준
자체를 높일 수 있음과 동시에다른이와의 의사소통을 향상
시킬 수 있고객관화
할 수 있다.연구 리터러시외에도 실제 서비스를 구현할 때의 커뮤니케이션도 중요한 부분이다. 뛰어난 아이디어가 있음에도 팀 내 수준 높은 코드를 이해하지 못해
민폐 코드
를 작성한다거나,미래에 예기치 못한 오류를 양산할 수 있는 가능성을 가진 코드
를 주입한다면 향후 서비스 품질과 일정에 막대한 지장을 초래할 수 있다.본 도서를 통해 딥러닝 프레임워크 내부 구현 매커니즘을 확실히 이해한다면 실 서비스 개발에 있어 수준높은 협업을 통한 서비스 구현은 물론 다른 연구 결과를 빠르고 쉽게 분석하여 좋은 인사이트를 녹일 수 있다는 장점이 있다.
프로젝트
설계-구현 능력
향상
딥러닝 분야 외에도 이 책에는 파이썬을 활용한 대규모 프로젝트 설계 기법을 다루고 있다. 변수와 함수를 굳이 Variable, Function이라는 클래스로 추상화하여 출발하는데서객체지향
에 숨은 철학을 이해할 수 있다.Define-by-Run(동적 계산 그래프), 고차미분, Computational Graphs를 직접 구현하며 왜 개발자들이 텐서플로우 1.x 버전보다 파이토치에 열광했는지, 텐서플로우 2.x의 출현이 필연적이었는지 깨닫는 것은 신호탄에 불과하다.
텐서플로는 버전 1.x에서 채택한 독자적인 프로그래밍 언어 Domain Specific Language (DSL)을 사용한 정적 계산 그래프 기능을 보며 잘못된 설계가 가져오는 여파를 대규모의 프로젝트에 참여하지 않아도 간접적으로나마 직접 눈으로 확인하고 실감할 수 있게 된다.
이를 통해 동적
Define-by-Run
방식(텐서플로우의 경우 Eager Execution이라 지칭) 매커니즘과 자동 미분의 매커니즘 그리고 이를 지원하기 위한 설계 기법을 배울 수 있는데 이는 다른 서비스를 구현할 때도 활용할 수 있는 메타 설계기법으로 활용할 수 있을 것이다.자동 미분, 계층 컬렉션, 데이터셋, 옵티마이저 각각의 Layer와 클래스를 분리하는 관점이나 파이썬을 Pythonic하게 활용하는 방법부터 GPU 활용 및 속도, 메모리 성능 개선 측면에서도 배울 것이 많기에 굳이 딥러닝이 아니더라도 어떤 서비스를 설계 및 구현하는데 필요한 프로젝트 능력을 크게 향상 시킬 수 있다.
본 도서를 읽으며 느꼈던 위 2가지 장점 외에도 단 한 권의 책으로 딥러닝 프레임워크를 만들 수 있다는 사실
에 적잖이 놀랐다.
단 2개의 클래스 Variable, Function의 추상화에서 출발하여 역전파, Define-by-Run(동적 계산 그래프), 고차미분, Computational Graphs, Layer 및 Optimizer 등의 확장성을 부여하며 60단계 과정을 따라 하다 보면 어느덧 CNN, RNN, LSTM 모델을 지원하는 딥러닝 프레임워크 DeZero를 만들 수 있게된다.
특히 어떤 식도 미분 가능하게 모듈화한 설계
가 인상적이었으며, 5개고지 60단계별로 구현한 결과를 시점별로 실행하며 눈으로 확인할 수 있어 보다 쉬운 이해가 가능했다.
스스로 역전파를 완전히 이해하고 있다고 생각했었는데 3고지에서 역전파의 역전파를 구현하면서 구석에 남아있는 무지의 영역을 확실히 깨칠 수 있는 계기
를 얻을 수 있어 만족스러웠다.
책의 구성과 전달력 또한 일품이다. 독자 의식의 흐름을 꿰뚫기라도 한 듯 궁금한 질문이 생길때마다 저자의 답변이 등장한다. 독자의 마음을 어떻게 이렇게 잘 들여다 볼 수 있을까? 저자의 뛰어난 예측 공감각력(?)에 감탄하는 일련의 과정이었다. 고수들의 내공을 이보다 쉽고 편하게 배우긴 어려울 것 같다. 전편 명성 그대로 독자 의식을 꿰뚫 듯 궁금증이 생길 때마다 친절한 설명이 등장한다.
설계에 녹아있는 철학은 기술을 넘어 예술의 영역에 가깝다. Layer, Optimizer, DataLoader 등 앞서 설명한 설계 철학 외에도 구체적으로 계산 그래프의 위상이 어떤 형태일지라도 역전파가 가능하도록 설계
한 부분은 감탄을 금할 수 없었다.
개인적으로는 DeZero를 만든 후 paperswithcode 사이트를 비롯 연구 결과의 코드 구현체가 전보다 쉽게 읽혀 매우 신기했다. 연구의 철학이나 아이디어를 생생히 느낄 수 있는 또 다른 시야를 얻은 것 같아 특히 만족스러웠다.
Eager Execution, Computational Graphs를 직접 구현하며 TensorFlow2.0 등장 등의 트렌드를 알 수 있었고, 자주 사용하지 않던 프레임워크에 대한 자신감 또한 큰 수확이었다.
텐서플로우 1.x에서 누구나 느꼈던 불편함과 어색함이었던 PlaceHolder, Session분기, Define-and-Run 방식에서 비롯된 계산 그래프 수행의 비효율성 등이 왜 발생했는지 그래서 올바른 설계가 왜 중요한지 나아가 파격적인 문법 변화에 따른 리스크를 감수하면서까지 텐서플로우 2.x이 등장할 수 밖에 없었던 필연을 구체적으로 실감할 수 있었다.
그 외 파이썬을 파이썬답게 활용하는 방법부터 GPU 활용 및 속도, 메모리 성능 개선 측면에서도 배울 것이 많았다.
읽는 내내 머리속에 계속 느낌표가 떠오르는 명작 중의 명작이었다. ML/DL 엔지니어분들은 물론 IT 서비스를 설계, 구현하는 분들께도 강력하게 추천하고 싶은 책이다.