그로킹 딥러닝

Original article can be found here (source): Deep Learning on Medium

서문을 읽으면서 좀 과장된 표현을 한다고 생각을 했다. 다른 딥 러닝 책들도 그렇지만 수학을 몰라도 혹은 기초 수준만 알아도 딥러닝을 이해할 수 있게 한다는 이야기는, 모든 프로그래밍 언어가 배우기 쉽다면서 hello world를 출력하는 데서 시작하는 경우와 마찬가지이다. 예제를 따라하면서 실행을 해볼 때 터미널이나 jupyter notebook에서 숫자가 출력되는 걸 보면 내가 정말로 뭔가를 하는 듯한 느낌을 가지기는 쉽지만, 실제 업무를 하려고 하면 하나부터 열까지 간단한 게 없다.

사실 업무는 둘째치고 책의 예제를 따라하는 거 조차 쉽지 않은 경우도 많다. 머신 러닝, 딥 러닝의 경우 프레임워크가 워낙 많이 발전하고 도커를 비롯한 컨테이너 기술의 발점에 힘입어 예전보다는 확실히 쉬워졌지만, 그래도 종종 커뮤니티에서 따라해보려고 이걸 했는데 오류가 나면서 설치가 안 된다고 문의하는 글을 종종 볼 수 있다.

그런 면에서 이 책은 일단 장점을 갖는다. python과 numpy만 설치하면 예제를 실행할 수 있기 때문에 복잡한 설치 과정으로 시작 전부터 진을 뺄 필요가 없다. 이미 anaconda같은 걸 설치했다면 그냥 시작해도 된다.

1, 2장은 일반적인 설명이고 3장부터 코드와 함께 시작한다. 3~7장까지는 비교적 쉽게 쫓아갈 수 있고 설명도 어느 정도 이해하기 쉽다. 초반부는 정말 지금까지 읽은 책들 중에서 가장 비유를 제대로 사용한 설명이라는 생각이 들었다. 다이얼을 돌리는 그림을 통해 가중치를 변경하는 이야기를 하는데, 간단한 그림을 추가했을 뿐이지만 개인적으로는 꽤 효과가 좋은 방법이었단 생각이 든다. 8장부터는 좀 난이도가 올라간다. 11장부터는 NLP를 통해 여러 가지를 이야기하는데(word embedding, bag of words, LSTM/RNN, …) 아마 저자가 NLP 연구자라서 이렇게 선택을 한 거 같은데 분량에 비해 주제가 커서 후반부는 나 같은 초보자는 사실 그냥 읽는 거도 쉽지 않았다. 15장은 featured learning 소개나 마찬가지이고, 16장은 이 책을 읽은 뒤 할 수 있는 여러가지 학습 방법/자료를 소개한다.

이 책의 장점은 명확하다. 정말로 초보자가 비교적 적은 기반 지식으로도 따라갈 수 있는 설명을 한다는 점이다. 후반부로 가면 어려워지는 건 모든 분야/서적을 막론하고 똑같은 부분이므로 개인적인 노력이 필요하기 때문에 어쩔 수 없다는 생각이다.

Etc.

1장을 보면 저자가 딥 러닝 공부와 함께 이 책을 쓰면서, 옥스퍼드 대학 박사에 진학을 했다고 썼다. 그냥 저자가 똑똑한 놈이라서 그렇다는 편견을 가지고 시작했는데(그런데 이건 편견이 아니라 사실이다. 프로그래밍을 조금 하던 수준에서 18개월 만에 헤지펀드 연구 보조금에 자신의 딥러닝 지식을 적용했다고 썼다) 읽으면서 왠지 저자의 이름이 익숙하단 생각이 들었다. imtrask.github.io와 11줄로 neural network 만들기를 썼던 앤드류 트라스크란 걸 알고 갑자기 믿음이 가고 좀 더 책에 흥미가 가서 더 관심을 갖고 읽었다.

또 하나, amazon.com을 보면 8장의 relu 함수를 잘못 쓰면서 8, 9장의 예제가 모두 문제가 있다는 서평이 있다(https://www.amazon.com/gp/customer-reviews/R16NVHI60Y2F7D/ref=cm_cr_arp_d_rvw_ttl?ie=UTF8&ASIN=1617293709). 8장의 relu나 relu2deriv 함수가 정말 간단하긴 한데, 각 함수의 정의에 비춰볼 때 뭐가 잘못된 건지는 잘 이해가 가지 않는다. tensorflow나 keras source를 봐도 alpha나 max value등의 부가 변수 설정에 관계된 코드를 제외하면 결국 원래 정의대로 따라가는 듯 싶은데, 잘못되었다고 주장하는 부분에 대한 설명이 부족해 어떤 문제가 있다는 건지는 잘 이해할 수 없었다. 하지만 이렇게 평을 하는 사람조차도 7장까지는 매우 좋았다고 쓴 걸 보면 확실히 초반부는 다른 책에 비해 강점이 있다는 생각이 든다.

Ref.

저자가 책이 예제를 jupyter notebook으로 github에 올려뒀다. repository를 clone하면 docker-composer.yml이 있기 때문에 이미 docker를 설치한 경우 다음과 같이 실행해서 jupyter notebook을 시작할 수 있다.

❯ docker-compose up
Creating network "grokking-deep-learning_default" with the default driver
Pulling jupyter (jupyter/tensorflow-notebook:)...
latest: Pulling from jupyter/tensorflow-notebook
423ae2b273f4: Pull complete
...
701d9053a78b: Pull complete
Digest: sha256:59ccc48a299ed7612f89a172268f6ce849d1d5848db7c48412272fc9e311f3d8
Status: Downloaded newer image for jupyter/tensorflow-notebook:latest
Creating jupyter ... done
Attaching to jupyter
jupyter | Executing the command: jupyter lab --NotebookApp.token=''
jupyter | [I 13:43:09.793 LabApp] Writing notebook server cookie secret to /home/jovyan/.local/share/jupyter/runtime/notebook_cookie_secret
jupyter | [W 13:43:10.186 LabApp] All authentication is disabled. Anyone who can connect to this server will be able to run code.
jupyter | [I 13:43:10.680 LabApp] JupyterLab extension loaded from /opt/conda/lib/python3.7/site-packages/jupyterlab
jupyter | [I 13:43:10.680 LabApp] JupyterLab application directory is /opt/conda/share/jupyter/lab
jupyter | [I 13:43:10.683 LabApp] Serving notebooks from local directory: /home/jovyan
jupyter | [I 13:43:10.683 LabApp] The Jupyter Notebook is running at:
jupyter | [I 13:43:10.683 LabApp] http://f7dd26013306:8888/
jupyter | [I 13:43:10.683 LabApp] Use Control-C to stop this server and shut down all kernels (twice to skip confirmation).

browser를 열고 localhost:8888에 접속하면 다음과 같이 예제를 실행할 수 있는 jupyter lab을 사용할 수 있다.

다만 예제에서 dataset을 위해 keras 설치가 필요한 경우가 있는데(예를 들어 8장) 어쩐 일인지 docker-compose.yml에서 keras가 설치되지 않은 image를 사용하고 있어서 keras dataset를 사용하는 예제(mnist)를 실행하기 위해서는 결국 keras가 필요하다.