[리뷰] 파이썬 날코딩으로 알고짜는 딥러닝



개요

본 리뷰는 한빛미디어 출판사 "파이썬 날코딩으로 알고짜는 딥러닝(윤덕호 저)"를 읽고 얻은 지식을 정리한 글입니다.

논문을 구현하는 방법


데이터 사이언티스트는 비록 하나의 단어이지만 업무 특성에 따라 필요한 핵심 역량이 매우 다양하다. 통계, Quantitive, 금융분석 등의 분야에서는 주로 Tabular 형태의 데이터를 바탕으로 수리통계학 기반의 모델링 설계가 핵심 역량이다. 반면, 딥러닝의 경우 주로 영상, 음성, 텍스트 위주의 데이터를 다루며 예측, 설명에 있어 가급적 사람이 개입하지 않고 머신에게 맡긴다. 그러다보니 수리통계학도 중요하지만 엔지니어로서의 역량 즉, 플랫폼 설계, 최적화, 프로그래밍 스킬 또한 중요시된다.

최근 스프트웨어 2.0과 같은 트렌드가 이슈가 되고 있는 것은 그만큼 딥러닝 기술을 다룰 줄 아는 프로그래머에 대한 수요가 증가하고 있음을 반증하는 예이다. 덕분에 TensorFlow, Keras와 같은 플랫폼이 생겨나고, 범용 프로그래밍 언어인 Python의 점유율이 증가하고 있으며, 직관적인 통계 해석에 강점을 둔 R 진영에서 조차 Tidyverse가 등장하게 된다. 이것도 부족한것인지 보다 속도를 높이고자 Julia가 조명받고 있고, 나아가 구글에서는 Swift와 같은 데이터 사이언스에 최적화 된 언어를 개발하고 있다. 심지어 여전히 C언어로 딥러닝 개발을 고수하는 업체도 많다.

타 산업 및 학문 분야는 논문을 기본으로 한 연구분야와 개발분야가 전통적으로 명확한 경계선을 갖는 편이었으나, 데이터 사이언스 분야의 경우 그 경계가 굉장히 옅어졌다고 생각한다. 워낙 신생 학문이기에 논문 등 연구업적의 축적은 부족한데 반해 산업분야엔 엄청나게 핫한 인기를 끌고 있어 논문에 등장하는 아이디어가 빠른 속도로 구현되고 있다. 이런 연구업적의 소모는 타 분야에 비해 분명 기현상이다.

데이터 사이언티스트의 정의에서 보둣이 이들은 초특급 인재들이다. 수리통계학을 필두로 한 학문의 깊이가 남다르고, 전문가 수준의 프로그래밍 스킬도 보유하고 있으며, 데이터 분석능력 및 비지니스 감각도 탁월하다. 이런 천재들이 연구결과의 소비 속도를 더욱 가속시키고 있다. 그리고 이 현상의 중심에 논문의 아이디어를 구현할 수 있는 능력이 있다.

한때 나프다(나는 프로그래머다)라는 프로그래머들에게 굉장히 인기가 많았던 팟캐스트가 있었다. 애청자로써 나프다가 종료될 때 그렇게 슬플 수 없었는데 다행히도 당시 데이터 사이언스 중심의 싸이채널을 담당하신 김진영 님께서 데이터 지능 팟캐스트를 운영하시면서 당시 필자에게 나프다의 대체제로 큰 위안이 되었다.

데이터 지능 팟캐스트 중 Naver Clova 개발자분들이 등장하신 회차가 있는데 김진영 사회자님이 독자들을 위해 “데이터 사이언스 채용에 합격하기 위해 알아두어야 할 기출문제”를 공개해달라고 위트있는 요청을 하셨던 기억이 난다. 클로바분들의 대답은 간단했지만 꽤 인상적이었다.

"최신 논문이 등장한 일자 - 해당 논문의 구현체가 Github에 올라온 일자 = 0에 수렴" 

위 공식을 보유한 능력자라면 채용하겠다는 힌트를 주셨는데 현업에 종사하는 분들의 조언만 들어도 논문을 이해하고 구현하는 능력이 얼마나 중요한 지 알 수 있는 대목이다.

텐서플로우와 케라스를 자유자재로 다루는 능력은 분명 중요하다. 특히 초보자라면 이해하지 못하는 수식에 사로잡혀 세월을 낭비하고 있기 보다는 해당 라이브러리로 시각적 결과를 확인하며 딥러닝이라는 숲을 이해하고 Top-Down 방식으로 논문과 수식에 접근하는 것도 분명 효과적인 학습법일 것이라 생각한다.

하지만 앞서 언급했듯이 데이터 사이언스 분야에서 언제 어떤 언어 또는 라이브러리가 Python이나 케라스를 왕좌에서 밀어낼지 모르는 급변하는 개발 환경속에 특정 언어 및 라이브러리에만 의존하는 것은, 빠르게 배우고 적용할 수 있는 인재를 원하는 이 분야에서 원하는 생존력을 갖췄다고 보기엔 다소 소극적이지 않을까?

비단 딥러닝의 분야만이 아니다. 모델링 분야도 수식을 이해하는 것이 어렵기는 마찬가지이다. 책 읽기나 강연을 통해 습득했던 방식과는 또 다른 시각인 코딩 구현 과정의 사고 속에서 수식이 더욱 잘 이해되고 오래 기억에 남지 않을까? 어떻게 Keras, Tensorflow 없이 밑바닥부터 날코딩으로 구현하냐며 도망만칠 것이 아니라, 진정한 고수라면 내가 모르는 블랙박스를 최대한 없애기 위한 과정이자 수단으로 날코딩을 즐기지 않을까 생각한다.

상기의 목적을 달성하기 위해 국내에서 집필된 단 한권의 책을 추천하라면 주저없이 본 책을 고르겠다. 아래 그림과 같이 순전파와 역전파를 구현한 후, 관련 수식을 깔끔하게 직관적으로 기술한다. 즉, 수식을 코딩으로 구현하는 방법을 배울 수 있고 논문에서 이해한 수식을 코딩으로 구현하는 능력이 배양된다. 이런 방식의 구현과 설명으로 최신기술인 GAN까지 설명이 이어진다. 순전파역전파 수식설명

국내 딥러닝 서적 중 한 획을 그을만한 책


본 서적에는 논문의 아이디어와 수식을 이해하여 코딩으로 구현할 수 있는 능력을 키울 수 있다는 점 외에도 몇가지 탁월한 장점이 더 있다.

  • 딥러닝을 위한 객체지향 기법을 동시에 배운다.
    JAVA등의 언어로 객체지향을 객체지향답게 다룰 줄 아는 고수는 많다. 하지만 딥러닝을 객체지향으로 개발하는데 능숙한 고수는 흔치는 않을 것이다. 딥러닝이 각광받기 시작한 역사가 워낙 짧은 편이라 딥러닝 학습 자체에 집중하기도 급급한데, 객체지향 패턴을 입혀 솔루션 출시에 집중하는 것은 아무래도 시간 상 우선순위가 밀리기 마련이다. 이 책을 학습하다보면 별도 시간을 들이지 않아도 자연스레 객체지향으로 구현하는 방법을 익힐 수 있다. 더불어 아래 그림과 같이 상속 재활용 관계도를 제시하여 큰 숲을 보여주므로 현재 읽고있는 위치가 어디인지 명확히 인지할 수 있는 장점이 있다. 객체지향

    객체지향 구현을 통한 구성덕에 얻을 수 있는 또 하나의 장점이 있다. 코드를 상속, 재사용 함으로써 기존 코드를 반복하여 설명하지 않게되고, 지면의 양도 상당히 줄어들어 책의 가격에 부담을 주지 않는다. 즉, 학습이 입체적으로 이루어지고 반복적으로 복습하게 되며 단원별 핵심 내용에 집중할 수 있다는 장점이 있다. 예를들면, GAN을 배우는데 이전에 배웠던 단층 퍼셉트론에서 배웠던 역전파, 경사하강법의 설명이나 코드가 반복적으로 등장하게 되다면 핵심 논점이 흐려져 집중력이 떨어질 수 밖에 없게된다. 디테일한 구성까지 저자와 편집자의 배려가 정말 돋보이는 책이다.

  • Python 다운 Python 기법을 배운다.
    Google Colab 환경설정 및 사용법 포스팅에서 언급한 바와 같이 딥러닝은 가뜩이나 귀족학문이라 돈도 없어 힘든데, 심지어는 바둑과 같이 신선놀음이기까지 하다. 배우고 또 배우고 날밤을 새며 배워도 시간이 늘 부족하다. 그래서 자연스레 객체지향 기법이나 Python과 같은 엔지니어 스킬 측면의 내공을 뒷전으로 미루게 되기 마련이다.

    이 책에서는 그런 부수적인 지식에 대한 부족함으로 드는 불안감을 안정감있게 채워준다. 예제를 실습하다보면 객체지향은 물론이고, 전문가를 위한 파이썬, 파이썬 코딩의 기술등 양서에 나오는 Python을 Python답게 쓸 수 있는 스킬도 자연스럽게 늘어난다. 직접 책을 따라 코딩하다보면 파이썬에선 Global 변수를 함수 내에서 이런 방식으로 전달하는구나, 함수의 리턴값 중 필요없는 값은 _키워드로 불필요 인자를 지정할 수 있구나, 행렬 + 벡터합은 자동으로 반복 연산이 지원되는 구나… 등의 지식을 딥러닝을 공부하며 자연스럽게 익히게 된다. 만약 본인이 비 프로그래머 연구자 출신이라면 이런 장점이 더욱 도움이 될지도 모르겠다. 논문지식을 통해 객체지향과 엔지니어링을 역으로 배우는 신기한 경험을 하게 될 것이다.

  • 이미지 및 삽화가 매우 설명력이 좋다.
    설명력이 좋다고 표현한 것은 통계, 머신러닝의 용어를 빌렸다. 이미지 하나만 깊이있게 들여다봐도 해당 챕터의 큰 그림이 그려지기 때문이다. 아래 그림들을 보면 무슨의미인지 직관적으로 와 닿으실 것이다. 이미지1 이미지2 이미지3

참고로 저자가 구현한 소스코드를 확인하고 싶다면 저자의 GitHub에 접속하시기 바란다.

날코딩이라는데 어느 정도까지 밑바닥인가?


밑바닥의 수준을 파악하는 방법은 쉽다. import 모듈 외에는 모두 직접 개발한다고 간주하면 된다. 책의 222p에는 mlputil.ipynb라는 파일이 등장하는데 재사용을 극대화하기 위해 Python에서 필요한 라이브러리들을 공통으로 Import하는 파일이다. 이 파일 외 더 이상의 import문은 등장하지 않는다.

그렇다면 import하는 라이브러리는 무엇일까? 파일 입출력, time, numpy 정도다. Pytorch, Scikit-learn, Pandas는 물론 심지어 Scipy도 안쓴다. 이 말인 즉슨 순전파, 역전파는 물론 sigmoid, softmax 같이 단순한 것들도 모두 구현해야 한다는 의미다.

범위가 딱 적정하다는 생각이 들었다. 파일 입출력을 구현하는 것은 딥러닝과는 무관한 영역이고, numpy 내부를 구현하는 것 또한 딥러닝의 범위라고 하기엔 너무 디테일하다. 예를들어 exp와 같은 기초 수식까지 구현하는 것은 시간낭비가 심하고 내용이 너저분해질 수 있다. 적당한 선에서 끊어 투입 시간대비 능률적인 성과를 올릴 수 있도록 안배한 저자의 능력이 돋보인다.

누가 읽어야 하는가?


  • sw 2.0 프로그래머 : 케라스, 텐서플로우 등 프레임워크 개발, 사내 자체 딥러닝 솔루션 개발, 성능 이슈로 C, Swift 등 속도 빠른 타 언어 구현, 논문 구현시 큰 도움이 될 것이다.

  • 애널리스트 : 부족한 프로그래밍 스킬을 채우고 모델링 이해에 도움이 되는 수식, 논문 아이디어에 대한 습득 속도가 향상될 것이다.

  • 데이터 엔지니어 : 코드에 따른 최적화된 자원 활용에 도움이 될 것이다.

  • 사이언티스트 : 모델링 지식을 복습하고 성능을 보장하는 설계에 도움이 될 것이다.

  • 기타 딥러닝, Python, 논문, 객체지향, 프로그래밍 스킬 등을 배우고 싶은 학생, 실무자, 경영자 등 모든 분들께 강추한다.

책의 구성 및 요약


이 책은 크게 다섯 부분으로 구성되며, 각 파트에서 다루는 내용을 요약해 보았다.

  • 1. 단층 퍼셉트론(0 ~ 3장)
    • 딥러닝의 발전과정 및 딥러닝 수학 등 개요
    • 딥러닝의 핵심 기초개념(경사하강법, 역전파, 편미분, 손실함수, 원-핫벡터 등)
    • 회귀분석, 이진판단, 선택분류 구현 실습
  • 2. 다층 퍼셉트론(4 ~ 6장)
    • 입력층, 은닉층, 출력층 구현
    • 가변적 은닉 계층 구성을 위한 파라미터 생성함수, 순전파, 역전파 심화
    • 미니배치, 평가, 시각화, 정확도 계산, 각종 수학연산 함수 정의 등
    • 아담모델, 오피스31 다차원 분류 기법 등
  • 3. 합성곱신경망(7장 ~ 9장)
    • 합성곱 계층, 풀링 계층의 역전파처리
    • 과적합, L1/L2손실, 드랍아웃, 정규화 등
    • 인셉션, 레스넷 모델 심화 구현
  • 4. 순환신경망(10장 ~ 12장)
    • 기본 셀 순환 신경망, LSTM 구현
    • CNN과 RNN의 결합, 시계열 포장 등
  • 5. 고급 응용 신경망 구조들(13장 ~ 15장)
    • 오토인코더, 시맨틱 해싱, 인코더-디코더 모델
    • 생성적 적대 신경망(GAN) 등

요약하며…


이미 언급한 바와 같이 딥러닝 분야에 있어 우리 나라에 한 획을 그을만한 멋진 책이라 생각한다. 논문에 등장하는 수식과 아이디어를 정말 제대로 이해할 수 있게 끔 Python 코딩을 통해 구현하는 능력을 키워준다. 딥러닝 논문을 읽고 구현할 수 있다는 자신감이 생긴다. 객체지향 기법으로 딥러닝 솔루션을 구축하는 방법, 그로인한 챕터별 핵심에 집중할 수 있는 입체적인 설명, Python답게 Python을 다루는 방법, 핵심만을 다룬 깔끔한 수식설명과 설명력 있는 삽화까지 지금까지 나온 국내 딥러닝 서적중 최고의 점수를 주고 싶다.

책을 읽으면 아쉬운 점을 보통 한두개 정도는 찾게되기 마련인데, 이 책은 도통 찾기가 어렵다. 수준이 제법 높아 입문자 분들께 벅찰 수 있겠다는 정도(?)이다. 컬러판으로 소스코드에 Syntax Hilight가 입혀져 있었다면 바랄 나위 없었겠지만 그러면 또 정가가 오르지 않겠는가? 이미지는 워낙 설명력이 좋아 컬러일 필요도 못느꼈다. 실습환경을 구축하기 어려울지 모르겠는데 그런 분들은 필자가 정리한 Google Colab 환경설정 및 사용법 포스팅을 참고하시기 바란다. 결론은 10점 만점에 10점이다. 좋은 책을 세상에 선보여 주신 저자, 편집자, 출판사께 감사드린다.

<한빛미디어 출판사>

믿고보는 “한빛미디어 출판사”. IT분야에서 독보적인 양질의 도서를 출판하는 회사입니다. “나는 프로그래머다” 팟캐스트 후원, DevGround2019 행사, 리뷰어 모집, 다양한 학습 지원 등 다양한 분야에서 사회에 공헌하는 개발자와 공생하는 업체입니다. IT분야에 관심 있으시다면 한빛미디어의 책으로 후회없는 출발을 하실 수 있습니다.

한빛미디어 바로가기




© 2019.04. by theorydb

Powered by theorydb