기획자 본인만큼 잡다한 블로그

greentec.egloos.com

포토로그


통계 위젯 (블랙)

010
65
90515

flag counter

Flag Counter


<케라스 창시자에게 배우는 딥러닝> - 프랑소와 숄레 지음, 박해선 옮김 독서





현재 세계에서 가장 많이 쓰이는 딥러닝 프레임워크는 무엇일까? Jeff Hale 이라는 사람이 구글 검색 통계, 아마존 출간 부수, 논문, github repository 수 등 다양한 팩터를 종합해서 정리한 <Deep Learning Framework Power Scores 2018>에 따르면 1위는 텐서플로우, 2위는 케라스이다. 그런데 1위인 텐서플로우는 구글이라는 거대한 기업에서 만들었지만 2위인 케라스를 처음에 시작한 사람은 단 한 명, 프랑소와 숄레라는 사람이었다. 프랑소와 숄레는 케라스를 만든 뒤에 구글 브레인에 들어갔지만 케라스는 그와 상관없이 텐서플로우 팀에서 먼저 텐서플로우 1.x 버전의 차세대 상위 API로 사용하기로 결정되었고, 텐서플로우 2.0이 된 지금은 케라스의 문법을 텐서플로우 안에서 사용하는 tf.keras가 상위 API를 호출하는 표준으로 정리되었다. 사실상 1위와 2위는 하나로, 딥러닝 프레임워크는 어느 정도 통일이 된 셈이고 그 중심에는 케라스의 창시자인 프랑소와 숄레가 있는 것이다.

이 책은 그런 프랑소와 숄레가 쓴 책, <Deep Learning with Python>의 한글 번역본이다. 번역본 제목도 눈길을 끄는데 케라스는 텐서플로우만큼이나 유명하기 때문에 이 라이브러리의 창시자가 쓴 책이라고 하면 관심이 갈 수 밖에 없을 것이다. 나도 이 책을 봐야겠다고 생각만 하던 중에 길벗출판사의 독자 이벤트에 당첨이 되어서 책을 받아볼 수가 있었다. 476페이지의 두꺼운 책이었지만 받자마자 5일 만에 독파할만큼 집중해서 읽었다.

초기의 딥러닝 라이브러리들 - theano, Tensorflow 등은 일반 연구자가 접근하기 어려운 점들이 있었다. theano와 Tensorflow는 둘 다 그래프 구조를 사용했다. 그래프 구조가 문제가 되는 것은 선(先) 정의 후(後) 평가 구조이기 때문이다. 처음에 딥러닝 연산을 수행하는 기본 단위인 텐서가 어떻게 계산되는지에 대한 그래프 구조를 정의하고, 나중에 계산할 때 한번에 각 그래프의 노드에 있는 값들을 확인할 수 있는 구조이다. 즉 정의만 했을 때는 텐서에 어떤 값이 들어갈지 알 수가 없는 구조이다. 이 밖에도 라이브러리가 일반 연구자들이 보기에는 불편한 점이 많았고, 그래서 theano에는 lasagne, Tensorflow에도 여러 개의 추상화 라이브러리가 생겨서 사용자가 좀 더 쉽게 접근할 수 있도록 하는 시도들이 있었다. 그 중에서도 케라스가 독특했던 점은 theano의 추상화 라이브러리에서 멈추지 않고 tensorflow, CNTK 등 여러 개의 딥러닝 라이브러리에서 하나의 코드로 같은 동작을 하도록 하는 범용 추상화 라이브러리를 만들려고 했다는 점이었다.

이 대담한 도전은 멋지게 성공했다. theano는 개발이 중단되었지만 Tensorflow는 세계에서 가장 널리 쓰이는 딥러닝 라이브러리가 되었고 케라스는 Tensorflow의 추상화 표준이 되었다. Microsoft의 CNTK도 2.0에서 케라스를 지원하는 기능을 추가했다.

케라스의 장점은 짧고 간결하면서 이해하기 쉬운 코드이다. 이에 대해서는 내가 예전에 발표했던 <텐서플로우 첫걸음>의 6페이지를 보면 코드 길이의 차이를 직관적으로 확인할 수 있다.


왼쪽과 오른쪽은 같은 일을 하는 코드이다. Tensorflow 1.x 기준



저자인 프랑소와 숄레는 책에서 코드를 중심으로 설명하려고 노력했고, 필요한 경우가 아니면 수학을 쓰지 않으려 했다고 말한다. 프로그래머에게는 몇 줄의 코드가 복잡한 수식보다 이해하기 쉽기 때문이라고 그 이유를 설명하는데, 공감이 가는 말이었다. 프레임워크를 만들어본 사람답게 다양한 데이터와 논문, 연구자들과의 교류 내용을 곁들이지만, 방대한 내용에 대해서 깔끔하고 분명하게 설명하려고 노력한다. 마치 저자가 만든 케라스처럼 말이다.

이 책에서 또 한가지 주목할 점은 페이지의 하단을 빼곡하게 채우고 있는 역자의 역주이다. 역주에는 독자들이 생소하게 느낄 수 있고 저자는 그냥 지나친 코드에 대한 설명부터, 저자가 언급한 내용에 대한 실제 논문, 독자가 알아둬야 할 사항들 등이 꼼꼼하게 적혀 있다. 역주를 읽는 것만으로도 내용 이해가 훨씬 잘 되는 것을 느꼈고 반대로 역주가 없었다면 내용 이해가 쉽지 않았을 것 같다는 생각이 들었다. 또 번역도 억지로 한글 표기를 고집하지 않고 영어를 써야 할 곳에는 영어를 적절하게 사용하고 뜻이 중복될 수 있는 단어에 대해서도 분명하게 설명하고 넘어가는 등 최근 본 번역서 중 제일 좋은 책이었다. 역자는 개인 블로그를 운영하면서 오탈자와 코드도 계속 업데이트하기 때문에 책을 읽은 사람은 방문해보면 좋을 것 같다.

여러 가지로 최근 읽은 딥러닝 책 중 가장 만족도가 높은 책이었다. 3, 4년 전과는 다르게 딥러닝 책이 시장에 정말 많이 나오고 있는데, 이 분야를 처음 공부하는 사람이라면 기초적인 내용을 공부한 다음에는 이 책으로 중급 정도의 실력을 쌓아보는 것이 좋을 것 같다.


핑백

덧글

댓글 입력 영역

애드센스