책소개

아마존과 넥플릭스(netflix)로 인해 유명세를 탄  기존의 추천 시스템은 사용 이력을 분석하는 CF(collaborative filtering) 알고리즘을 기반으로 한다. 이런 추천 시스템은 구현이 간단하며 괜찮은 성능을 보장하지만, 사용 이력이 없는 최근에 출시된 상품들은 추천 대상에서 배제될 수 밖에 없는 cold-start 문제가 있다.


최근 추천 시스템은 CB(contents based) 알고리즘을 통해 CF가 가진 cold-start 문제를 보완하고 있다. CB 추천이란 사용 이력이 아닌 컨텐츠가 가진 자체의 특성을 분석하여 컨텐츠 사이의 유사도를 측정하는 방법이다. 그리고 CB 추천의 핵심에 딥러닝(deep learning)이 있다.


작년쯤 스포티파이(Spotyfy) 블로그에서 Recommending music on Spotify with deep learning(http://benanne.github.io/2014/08/05/spotify-cnns.html)라는 글을 읽게 되었다. 딥러닝 알고리즘 중 하나인 CNN(Convolution Neural Network)를 사용하여 음악의 유사도를 예측하여, CF 추천 시스템을 보완한다는 내용이었다.


그래서 딥러닝 관련 논문, 자료, 도구들을 찾아서 배우기 시작했다.  제프리 힌튼(Geoffrey Hinton), 요슈아 벤지오(Yoshua Bengio)와 같은 딥러닝 구루들의 이름도 듣게 되었고, 테아노(Theano), 카페(Caffe), Deeplearning4J와 같은 딥러닝 프레임워크도 알게 되었다. 하지만 수학으로 가득찬 논문과 자료들은 이해하기 어려웠고, 프레임워크의 예제를 실행하는 것조차 쉬운 일이 아니었다. 


하지만 시간이 지나면서 참고할 수 있는 딥러닝 학습 예제와 자료들이 풍부해졌고, 개인적으로는 바탕이 되는 수학 지식을 익히면서 딥러닝에 대해 조금이나마 이해를 할 수 있게 되었다. 무엇보다 딥러닝 프레임워크 중 하나인 Torch를 만난게 큰 행운이었다. 문법이 직관적이며 단순했으며, 관련 예제와 초심자를 위한 가이드를 풍부하게 제공한다.


기존의 수식으로 가득찬 딥러닝 자료와 책들은 오래두고 봤을 때는 큰 도움이 되었지만, 이제 막 딥러닝을 시작하려는 나와 같은 현장의 엔지니어에게는 큰 장벽이었다. 대신 동작하는 프로그램 코드를 보여주고 원리를 설명하는 정반대의 흐름으로 글을 쓴다면, 나와 같은 처지의 개발자들에게 더 도움이 되리라는 생각이 들었다. 이 책은 이러한 딥러닝을 공부하면서 얻었던 개인적인 경험과 정보를 공유하기 위한 글이다.


이 책은 총 4장으로 구성되어 있다.

"1장. 도입 예제"에서는 분류(classification) 예제 중 가장 유명한 IRIS 꽃 분류 문제와 MNIST 필기체 분류 문제를 다룬다. 또한 Torch로 작성한 실제로 동작하는 딥러닝 코드 예제를 설명한다. 이 장은 해결하려는 문제와 관련 데이터셋에 대해 소개하고, Torch의 딥러닝 패키지를 사용하여 해결하는 방법을 설명한다.


"2장. Torch 기본"에서는 Torch의 기반 언어인 루아(Lua)와 Torch의 기본 문법에 대해 설명한다. 그리고 데이터셋을 담는 데이터 타입인 텐서(Tensor)를 생성하고 변환하는 방법을 소개하고, 이미지 분류를 위한 'image' 패키지를 사용하는 방법을 다룬다. 이를 통해 학습에 필요한 데이터셋을 Torch에서 학습에 사용할 수 있는 형태로 변환하는 방법을 익힐수 있다.


"3장. 딥 뉴럴 네트워크(DNN)"에서는 1장의 도입 예제에서 언급한 인공 신경망(Neural Network)의 이론에 대해 소개한다. 최초의 인공 신경망인 퍼셉트론(perceptron)이 다층으로 연결된  피드 포워드(Feed Forward)를 설명한다. 그리고 손실 함수에 대한 경사 감소법(Gradient Descent)을 이용하여 모델의 파라미터를 업데이트 하는 방법을 다룬다. 그리고 경사 감소법을 효율적으로 계산하기 위한 역 전파(Back Propagation)와, ReLU와 드롭아웃(dropout)과 같이 과적합(overfitting)을 완화하기 위한 방법을 설명한다.


"4장. 컨볼루션 뉴럴 네트워크(CNN)"에서는 이미지 분류에 특화된 CNN에 대해 설명한다. 이를 위해 컨볼루션(convolution)과 커널 필터(kernel filter)를 통한 특성 지도(feature map) 추출 과정을 소개한다. 이 장에서는 유명한 이미지 분류 예제인 CIFAR-10 이미지 데이터셋을 사용하여, CNN 기반으로 이미지를 분류하는 또 다른 예제를 다룬다.



이제 시작한 초심자로서 딥러닝에 대해 깊이 있게 설명하지도 못하고, 그럴 능력도 없다. 무엇보다도 짧게 이해한 지식으로 잘못된 정보를 전달하지는 않을지 내심 두렵기도 하다. 그러나 동작하는 프로그램 코드가 익숙한 개발자들에게 일단 시작해 볼 수 있도록 하는데 작은 도움이 되기를 바란다.


고객 리뷰