딥러닝이란 단어는 이제 일반인에게도 많이 알려져 있습니다. 그리고 대부분 ‘딥러닝 = 텐서플로우’이란 공식으로 기억을 하시기 계시구요. 저 또한 텐서플로우로 시작했었습니다. 그러다 케라스라는 것을 소개 받았을 때 ‘케라스? 듣지도 보지도 못했는데? 딥러닝은 당연 텐서플로우이지’라고 생각했던 제가 그 후 케라스에 빠졌고, 1년반 후 아래 책을 냈습니다. 그 여정에 대해서 이야기를 해볼까 합니다.

  • 나의 딥러닝 스승은 페북 커뮤너티
  • 한 장의 그림을 보고 회사 전체 프레임워크를 바꾸다
  • 케라스에 점점 매료되다
  • 실제로 레고를 쌓아보다
  • 공포의 나비야
  • 세미나
  • 자, 다음은

제 책의 표지와 내용 일부입니다. 일단 풀~칼라입니다. 설명 속에 빨간색, 녹색 등이 있어서 출판사에서 단가를 포기하고 풀칼라고 가기로 결정했습니다!

img


나의 딥러닝 멘토는 페북 커뮤너티

사실 지방에 있는 저로썬 서울에서의 오프라인 모임은 그림의 떡이었습니다. 하지만 페북 커뮤너티가 있었기에 내가 무엇을 모르고 아는 지 진단하면서 차근차근 단계를 밟아갈 수 있었습니다. 누군가 딥러닝을 공부한다고 하면, 바로 얘기합니다. ‘페북부터 시작하라고,’ 황당한 소리 같지만 Tensorflow KR과 AI Korea 그룹에 계신분들은 아실겁니다. 저도 이 두 그룹을 통해서 많이 배웠습니다. 여러 멘토님들께서 올려주신 댓글 하나 하나가 사이다 같았고 하루에도 수십 건씩 쏟아지는 새로운 뉴스, 논문 등을 선별해서 알려주셨습니다.

그러다 정부지원 사업으로 중소기업에서 전문가를 초빙할 수 있는 프로그램이 있어 몇몇 분들을 초빙하게 되었습니다. 얘기한 적도 없는 분들한테 말을 건네기가 쉽지는 않았지만 어려운 상황에서도 승낙해주셨고, 훌륭한 강의를 해주셨습니다.

img

초빙한 후 안 사실이지만 이활석님과 김진중님은 저희회사 강의 바로 다음 주에 구글I/O 행사의 연사로 발표를 하셨더라구요. 이렇게 유명인인줄 미리 알았더라면 아마 말 걸 용기도 안 냈을 겁니다. (무식한 놈이 용감하다고…) 무한열정을 보여주시는 김홍배박사님, 해외에서 원격 세미나를 해주셨던 주덕진님, ?님 몰래 정말 바쁜 시간을 빼서 세미나해주신 유재준님 너무 큰 도움이 되었습니다. 내공 가늠이 되지 않는 전태균님은 대전 AI 포럼에서, 엄청난 에너지로 활동하고 계신 이태영님은 출판사를 통해서 알게 되었습니다. 하용호님의 멋진 발표자료에 감동하여 콜라브레이션을 제안드렸고, 흔쾌히 허락해주셔서 ‘네 뇌의 딥러닝 인스톨 + 딥브릭’이 탄생되었습니다. 마지막으로 데이터에 대해서 진지하게 바라볼 자세를 알려주신 이부일 강사님께 감사드립니다. 추천사를 부탁드렸었는데, 받은 느낌은 ‘꿈보다 해몽이 좋다’이네요. 어쩜 이렇게 글들을 잘 쓰시는 지… (대부분 인문계열이 아닐텐데 말이죠)

프사 추천사
img 하용호님, 카카오 데이터사이언티스트

딥러닝을 공부하려면 두 가지 어려운 점에 부딪히게 된다. 어려운 전문 지식과 실제 구현의 어려움이다. 이 책은 그 두 가지를 멋진 조합으로 풀고 있다. 뜬구름같은 이론은 브릭이라는 손에 잡히는 실체로 만져가며 알 수 있게 하고, 구현의 어려움은 keras라는 시를 읽듯이 읽어내려 갈 수 있는 라이브러리로 풀어준다. 백문이 불여일견이라 했다. 딥러닝을 처음으로 듣는게 아니라 볼 수 있게 만들어주는 책이다.
img 이부일님, (주)인사아트마이닝 대표

KAIST에서 진행한 R 강의. 그곳에서 강사와 수강생으로 첫 만남을 가졌다. 여느 수강생과 다르게 학구적으로 질문하는 모습이 인상적이었다. 시간이 어느 덧 흘렀고, KISTI에서 근무하는 후배가 앞으로 딥러닝을 단절함이 없이 배우며 특히, Keras를 꼭 배우라고 했다. 그것이 계기가 되어 Keras를 검색하다가 본 책의 저자인 김태영 이사님을 다시 만나게 되었다. 이번에는 내가 수강생으로, 김태영 이사님은 강사로 역할이 바뀌어 있었다. 레고를 이용하여 어려운 알고리즘을 쉽게 이해할 수 있도록 표현되는 전달력, 그리고 근접할 수 없는 내공을 겸비함이 내용에 잘 드러나고 있다. Keras를 이용하여 딥러닝에 입문하려는 사람들은 반드시 이 책을 읽기를 추천한다. 여행에서도 좋은 가이드가 있으면 여행지에 대한 깊은 이해로 여행이 풍성해지듯이 김태영 이사님이 쓰신 이 책은 Keras를 이용한 딥러닝이라는 분야를 여행할 사람들에 가장 훌륭한 가이드가 되리라고 자부할 수 있다. 이 책을 통하여 딥러닝에 대해 보지 못했던 것들이 보이고, 듣지 못했던 것들이 들리고, 말하지 못했던 것들이 말해지는 경험을 하게 될 것이다. 멋진 책을 출간하신 김태영 이사님께 오히려 감사를 드린다.
img 이활석님, 네이버 클로바팀

케라스는 컴퓨터 프로그래밍의 경험이 있는 사람이든 없든 사람이든 쉽게 사용 가능한 딥러닝 개발 도구입니다. 케라스에서 잘 정의된 여러 명령어들의 조합으로 기초적인 딥러닝 기술부터 최신의 딥러닝 기술까지 구현이 가능합니다. 이를 레고 블럭에 비유하여 누구나 이해할 수 있게 쉽게 설명해 놓은 이 책은 딥러닝의 입문 도서로서 제 역할을 다 하리라 믿습니다.
img 김진중님, 야놀자 Head of STL

딥러닝은 신경망 모델링이 성능을 좌우하는 가장 중요한 요소 중 하나이며, 따라서 모델의 이해가 딥러닝의 이해에 가장 중요하다고 볼 수 있습니다. 이를 위해 저자는 딥러닝 모델을 레고처럼 구성하는 딥브릭이라는 독특한 발상으로 다양한 딥러닝 모델을 직관적으로 이해하게 해 줍니다. 딥러닝을 처음 공부하시는 분은 물론, 이미 익숙하신 분들께도 이 책을 적극 추천합니다. 복잡했던 머릿속이 맑고 깨끗해지는 효과가 있습니다.
img 이태영님, 신한은행 디지털 전략부 AI LAB

다양한 딥러닝 알고리즘들을 케라스로 간결하게 풀어낼 수 있는 방법들을 제공하는 입문서로 기존의 텐서플로우를 활용했던 분들에게 바라볼 수 있는 관점의 전환점을 줄 수 있는 Mild Stone과 같은 책이다.
img 전태균님, 쎄트렉아이

많은 딥러닝 프레임워크 중 가장 쉽게 접근할 수 있는건 단연 keras라고 생각합니다. keras의 특징인 단순함, 확장성, 재사용성을 눈으로 쉽게 보여주기 위해 친절하게 정리된 내용이라 생각합니다. 현업에서 새롭게 적용하셔야 되는 분들에게 적합한 책입니다.
img 유재준님, 카이스트

케라스를 처음 시작할 때 가장 많은 도움을 받았던 책입니다. 바로 적용해보고 싶지만 어디부터 시작할지 모를 때 최선의 선택입니다.

한 장의 그림을 보고 회사 전체 프레임워크를 바꾸다

저희회사에 딥러닝 분야에서 인턴으로 있었던 학생분이 자신의 깃헙링크를 보내줍니다. 그리고 그 깃헙의 아래 왼쪽에 있는 블록 다이어그램을 보게 되었습니다.

img

나: “이 그림의 정체가 뭐야?”

학생분: “케라스에서 그려주는 그림이예요.”

저는 소스코드가 복잡해서 그걸 보기 쉽게 보여주는 기능이라고 생각했습니다.

나: “음… 그럼 소스코드도 보여줄래?”

그 학생분은 위 그림의 오른쪽 코드를 보여줍니다. 그 코드는 블록 다이어그램을 표시된 것보다 더 간결했습니다! 심지어 말로 설명하는 것보다 더 짧았구요. 너무나 직관적이었고 군더더기가 하나 없는 코드였죠. 그리고 그 학생분이 말합니다.

학생분: “이게 손글씨를 99% 이상 정확도로 분류하는 코드이예요. 라이브러리가 직관적인 것 같아 케라스를 좀 더 공부해보려고 합니다.”

저희 회사는 다양한 분야의 사업을 하고 있었고, 각 분야에서 딥러닝 적용 가능성 검토를 하는 시점이었기에 빠른 프로토타이핑이 필요했었습니다. 다행이 케라스는 그런 용도로 만들어진 라이브러리이었고 각 사업을 담당하던 엔진니어는 이 케라스로 가능성을 보여줄만한 결과를 냈고 고객을 설득하게 됩니다. 덕분에 현재 저희회사에서는 딥러닝 기반의 다양한 프로젝트를 수행하게 되었고 1회 대전 AI 포럼에서 ‘태양에서 세포까지’라는 주제로 발표하게 되었습니다.

나중에 느끼게 되었지만 그 블록 다이어그램은 코드를 간결하게 표시하고자 하는 용도라기 보다 케라스에서는 은닉층에 따로 입력 형태를 지정하지 않아도 되기 때문에 코드에서는 볼 수 없는 입출력의 뉴런 수, 형태 등을 보기 위함이었습니다.


케라스에 점점 매료되다

국내에서는 생소한 라이브러리였지만 해외에서는 이미 많이 쓰고 있었습니다. 깃헙, 논문, 캐글 등에 보면 케라스로 되어 있는 것을 심심치 않게 보실 수 있습니다. 하지만 제가 케라스에 빠지게 된 이유는 따로 있습니다.

첫째, 케라스의 의미

케라스는 뿔이란 의미로 그리스 신화에서 나옵니다. 저는 그리스 신화를 잘 모르기 때문에 네이버지식인 그리스 신화 부분 1위이신 분에게 직접 물어보면서 그 의미를 파악하게 되었습니다. 요약하자면 사람이 잘 때 신이 꿈을 보내는 데, 진실꿈은 케라스(뿔)로 된 문을 통해 보내고, 거짓꿈은 상아로 된 문을 통해서 보낸다고 합니다. 우리가 딥러닝 모델을 개발할 때는 검증셋이나 시험셋이 있어 평가를 하지만 실제로 사용할 때는 그 모델의 결과가 진실일지 거짓일지는 아무도 모릅니다. 다만 진실을 얘기해주길 바랄 뿐이죠. 그 바램을 담아 라이브러리 이름을 케라스로 지었지 않았나 합니다. 자세한 내용은 케라스 이야기를 참고하세요.

img

둘째, 프랑소와 쏠레의 케라스 비전

TensorFlow Dev Summit 2017 행사에서 프랑소와 쏠레가 케라스와 텐서플로우와의 통합이란 주제로 발표를 했습니다. 이 때 또 한번 감탄하게 되었죠.

video

서론에 아래와 같이 말합니다.

딥러닝을 사용하기 쉽게 만들면 더 많은 분들이 딥러닝에 접근할 수 있습니다. 따라서 케라스의 핵심은 딥러닝을 모두의 손에 주어지게 만드는 것입니다. 근 미래는 딥러닝이 전문가와 인공지는 연구자만의 것이 아닐 겁니다. 모든 사람의 손에 있을 겁니다.

홍익인간의 이념까지 느껴지는 군요. 그리고 백엔드로 텐서플로우, 티아노, CNTK 등 여러가지를 사용할 수 있음을 얘기하면서

케라스는 라이브러리나 코드베이스가 아닌 API 스펙이 가깝습니다.

라고 말합니다. 즉 케라스만 알면 복잡한 백엔드를 알지 못하더라도 딥러닝을 사용할 수 있게 되는 것입니다. 자세한 내용은 케라스와 텐서플로우와의 통합을 참고하세요.

이번 CVPR 2017 학회에서 가장 큰 기쁨이었다면, 바로 프랑소와 쏠레와의 만남이었습니다. 케라스를 사용하고 있다는 말한마디에 많이 반겨주셨습니다.

img


실제로 레고를 쌓아보다

딥러닝 모델을 개발하신 분이라면 레이어(층)을 쌓은 것은 마치 레고 블록을 쌓는 것과 비슷하다고 많이 느끼실 겁니다. 그래서 저는 실제로 쌓아봤습니다. Dense, Flatten, Conv, Dropout를 레고 블록으로 조합한 뒤 CNN를 만들어봤죠.

img

레이어(층)의 개념을 설명하기에는 좋은 시도였지만, 다양한 모델을 설명하기에는 턱없이 부족하다는 것을 깨닫는 데 그리 오래걸리지 않았습니다. (뭐가? 돈이… 레고 브릭을 별도로도 판매를 합니다만 제가 원하는 브릭을 다 장바구니에 담고나니 신용카드 결재한도를 넘어갈 것 같더군요.) 더 중요한 것은 예쁘지가 않았습니다. 그래서 컴퓨터로 그리는 방안에 대해서 고민하다 구글 드라이브의 프리젠테이션을 이용하게 되었습니다.

img

어느정도 예쁘게 나왔죠? 이렇게 만들기도 쉽지는 않았습니다. 레고 블록 툴이 아닌 PPT 같은 툴에서 그리기 때문에 일일이 그렸습니다. 그냥 막 그리게 되면 블록끼리 이가 맞지 않을 것 같아 레고 스펙을 구해서 스펙에 맞게 유닛을 제작하게 되었습니다. 덕분에 책 집필할 때 레고 블록 그림은 모두 자체 제작한 것이라 이미지 라이센스에 대한 고민을 하지 않았죠.

img

순환신경망까지는 어떻게든 레고 블록을 그려서 표현을 해봤지만, 그 이상은 무리였습니다. 그러다 하와이 레고 매장에서 Lego Architure Studio을 보게 됩니다.

img

이 것을 보고 딥브릭 스튜디오 아이디어가 떠올랐습니다. 그리고 이를 위해서는 좀 더 다양한 블록과 쉽게 그릴 수 있는 툴이 필요했죠. 그래서 찾은 것이 웹상에서 레고 브릭을 쉽게 그릴 수 있는 툴인 MecaBricks이었습니다.

img

모델링한 것을 랜더링을 통해서 예쁘게 만들 수 있다는 것을 알게 되었고, Blender이란 툴로 렌더링을 하게 되었습니다. 문제는 한 이미지 랜더링하는 데 짧게는 10분 길게는 1시간씩 걸리더라구요. 원래 6월말에 출간하기로 했었는데, 출간 시기가 늦춰진 주요 원인이 되었죠.

img

급기야 고무재질의 호스 등도 표현하게 되었습니다. 만들고 보니 조금 무섭더라구요. 매트릭스의 센티넬이 연상되죠?

img

케라스의 주요 레이어와 MecaBricks에서 제공되는 블록을 매칭한 테이블을 하나 만들었습니다. 계속해서 추가할 예정입니다.

img

어린이용 딥브릭도 있습니다.

img

제 블로그나 강의로 세뇌당하신 분은 듀플로라는 것을 인지하기 전에 아래 내용들이 먼저 떠오를 겁니다.

  • 바나나, 사과, 오렌지 3개 클래스를 분류하는 다중클래스분류 모델이군
  • 출력층의 활성화 함수로 소프트맥스(softmax)로 사용하였군.
  • 중간의 회색 블록은 렐루(relu)이군. 은닉층은 두 개이고, 8개과 10개의 출력 뉴런을 가지고 있군.

공포의 나비야

순환신경망 예제로 무엇을 할까 고민하다가 여러가지 이유로 ‘나비야’ 동요를 선택하게 되었습니다. 쉬운 동요라고 하더라도 딥러닝 모델에 학습하기 위해서는 일단 악보보는 법부터 공부를 했어야 했습니다.

img

‘이 툴을 이용해서 나비야 악보를 그리는 데 성공했고, 순환신경망 모델에 학습시키는 데도 성공했습니다. 또한 모델 결과를 mp3로 생성까지 하였죠. 부푼 기대를 품고 mp3를 틀어봤습니다. 그 때가 새벽 3시였습니다.

클릭해서 들어보시죠

순간 공포에 휩싸였습니다. 좌절도 했었구요. 우여곡절 끝에 결국 성공은 했었지만요. 이야기가 궁금하다면 순환 신경망 모델 만들어보기을 보세요.

자신감을 얻어 이번에는 화음을 자동으로 예측해주는 모델을 만들기로 했습니다. 한 마디를 입력해서 어떤 화음인 지 알려주는 것이지요. 그러다 아래 악보를 보고야 말았죠. 한 마디에 여러 화음이 있다는 사실을 알게되어 일단 보류하기로 했습니다. 9월 안으론 결과를 얻을 수 없을 것 같았거든요.

img


세미나

케라스와 딥브릭을 주제로 세미나를 몇 번 했었습니다. 저와 같이 딥러닝을 처음 시작하신 분들이 많이 계셨고, 처음 접할 때 어떤 부분이 어려운 지 헷갈리는 지 토론을 해보게 되었습니다. 몇차례 세미나를 통해 조금 더 쉽게, 조금 더 직관적인 설명으로 다듬어 갔습니다.

2017년 9월 20일 (주)인스페이스 대전창조경제혁신센터, “블록과 함께하는 딥러닝 실습, 케라스(Keras) 이야기” img

2017년 8월 24일 개방형컴퓨터통신연구회 건국대학교, “Keras를 활용한 빠른 Deep Learning 응용 개발 워크샵” img

그리고 강의 후기들로 조금 더 용기를 얻었구요.

  • 레고 그림을 통해 딥러닝의 구조를 이해할 수 있었던 점
  • 실습 위주 세미나, 블록을 이용한 딥러닝 알고리즘 정리, 사전 keras 설치 준비 안내 등
  • 블록으로 쉽게 설명이 되어서 이해하기 쉬웠다
  • 적절한 비유, 실생활 응용
  • 케라스에 대한 현장감 넘치고 귀뚫어 주는 강연
  • 예시가 짧음에도 불구하고 아주 적절했고, 덕분에 공부가 잘 되었습니다.
  • 딥러닝 입문자였는데, 실습 전 딥러닝 기초, 케라스 기초 등 기초부터 설명해주어서 실습도 좋았지만 딥러닝에 관한 기초를 쌓을 수 있어서 좋았습니다. 또, 이론으로만 접했던 것들을 바로 실습에 적용하여 결과를 볼 수 있어서 특히나 더 와닿았던 것 같습니다!
  • 딥러닝에 대해서 모르는 사람도 쉽게 이해할 수 있도록 개론을 설명해주시고, 필요한 부분은 암기할 될 수 있도록 반복학습하는 수업이 진행되었던 점이 좋았습니다.
  • 어렵게만 느껴졌던 딥러닝이 좀 더 쉽게 느껴져 좋았습니다.
  • 딥러닝을 처음 시작하는 사람에게 쉽게 이해할수 있도록 강의해주는 것이 좋았습니다.
  • 처음 딥러닝을 접하는 입문자도 이해하기 쉬운 접근성

자, 다음은

여러가지 사정으로 거실에 있는 식탁이 유일하게 글을 쓸수 있는 자리였습니다. 글은 엉덩이로 쓴다고 했던가요? 원고가 다 만들어질때 쯤에는 거실 바닥이 움푹 들었갔습니다.

img

여러가지 이유가 있는데요,

  • 코드를 작성한 후 제대로 동작되는 지 보려면, 딥러닝 학습 단계 때문에 짧게는 5분 길게는 3일이 걸렸습니다.
  • 딥러닝 학습을 위한 데이터셋을 만드는 데도 엄청난 시간이 걸렸겠죠?
  • 실컷 구상한 모델의 결과가 좋지 않은 경우가 허다합니다. 안 좋은 결과로 강좌를 할 수는 없잖아요. 하이퍼 파라미터를 찾으려면 이 또한 하세월입니다.
  • 딥브릭으로 그린 뒤 렌더링 하는 데도 몇 시간씩 걸렸습니다. 새로운 레이어에 적당한 블록이 없어서 기존 레이어의 블록을 바꾸기라도 한다면 다 다시 렌더링…
  • 말씀은 안 들었지만, 순환신경망에서 제가 ‘나비야’만 테스트 한 줄 아셨겠죠?

애초 처음에 대비 다섯배의 시간이 걸렸었습니다. 조금 요령은 생겼지만 집에 GPU 클러스터와 전문 렌더링 워크스테이션을 구입하지 않는 한 크게 향상되지는 않을 것 같네요. 다음 목표는 거실 바닥을 뚫어버리는 것입니다. 농담이구요, 사실 거실에 쿠션을 깔아서 10분만 앉아도 이렇게 됩니다.

다음 계획으론 딥브릭으로 ResNet을 한 번 쌓아볼 예정입니다. 상당히 높게 나올 것 같군요. 제가 영상처리 베이스다 보니 객체 검출, 영상 분할 등 영상처리 쪽으로 정리를 해볼 예정이고 이제는 잘 알려진 VAE, GAN, RN 등도 딥브릭으로 쉽게 풀어볼 예정입니다. 스팸처럼 페북 그룹에 올리던 기본적인 레시피도 계속 만들예정입니다.

그리고 실제 레고 브릭을 만들어볼 예정입니다. 3D 프린터를 이용하던 레고사와 컨택을 해보든 말이죠. 종종 ‘이 브릭 판매도 하시나요?’라는 질문을 받았습니다. 처음에는 그냥 넘어갔었는데, 이를 교육적으로 쓰고싶다는 분 얘길 듣고는 실제로 딥러닝 모델을 만들 수 있는 브릭 세트 정도는 있으면 좋겠다는 생각이 들더군요. 3D 프린터는 잘 몰라서 생각만 하고 있습니다. 혹시 도움을 주신 분이 계시면 코멘트 부탁드리겠습니다!

img


마무리하며

제 책에는 수식하나 없이 거의 블록, 악보, 소스코드만으로 이루어져 있습니다. 이 책 하나로 딥러닝 기본을 모두 이해할 수 없습니다. 사실 딥러닝을 시작해보시면 알겠지만, 많은 고민과 많은 수식과 많은 논문과 많은 시행착오가 필요합니다. 저는 단지 막 시작하시는 분들에게 눈에 보이지 않는 레이어 개념을 레고 브릭으로 형상화 시키는 것만 도움을 줄 수 있을 뿐입니다. 시작을 할 수 있게 용기를 주는 책? 그런 책으로 사랑해주시면 감사하겠습니다. 사실 시작만 어떻게 하시게 되면 ‘내가 딥러닝을 학습시키는 건지, 딥러닝이 날 학습하게 만드는 건지’도 모른 체 매료될테니깐요.

마지막으로 어린 자녀를 둔 엄마 아빠에게 작은 도움이 되지 않을까 합니다. 저 또한 바쁜 일상 속에 집에서 자녀와 놀아줄 시간도 없는데, 따로 공부를 한다는 것은 큰 사치였습니다. 제가 할 수 있는 건 설거지하면서 ‘논문읽기모임 PR12’ 동영상 보는 정도가 유일하게 할 수 있는 공부였죠. 이 책과 함께라면 레고 블록을 보면서 엄마 아빠는 코딩하고, 자녀는 레고 블록을 따라서 쌓아보고, 악보를 보면서 엄마 아빠는 순환신경망을 이해하고, 자녀는 노래를 따라부르고… 제 희망사항입니다.


같이 보기