2015년 5월 22일 금요일

쉽게 풀어쓴 딥러닝(Deep Learning)의 거의 모든 것

요즘 딥 러닝(Deep Learning)이 핫합니다. 몇 년전부터 기계학습(Machine Learning)이 일반인들에게 알려지기 시작하더니, 지금은 기계학습의 한 종류인 딥 러닝이 아예 기계학습이란 단어를 대체할 듯한 기세인 듯 합니다. 특히 구글이 딥 러닝 전문가 기업인 딥 마인드(Deep Mind)를 인수하고, 페이스북이 딥 러닝 대가인 뉴욕대학의 얀 러쿤(Yann LeCun) 교수를 인공지능 센터장으로 모셔갔으며, 중국의 구글이라 불리는 바이두에서도 기계학습 분야의 스타 학자 스탠포드 대학의 앤드류 응(Andrew Ng) 교수를 모셔가는 등, 지금은 바야흐로 딥러닝 인재전쟁에 가까운 모습입니다.

페이스북 인공지능 연구소 수장, 얀 러쿤(Yann LeCun) 교수 (사진출처)

그렇다면 딥 러닝이란 과연 무엇일까요? 오늘은 딥 러닝의 전반적인 개념에 대해 거칠게 한번 훑어보도록 하겠습니다.

(업데이트) 최근 딥러닝의 기초부터 하나씩 이야기로 풀어가는 테리의 딥러닝토크를 연재하고 있습니다. 유투브로 딥러닝을 배워보시죠 ^^ 
(업데이트) 이 글의 후속편인 Convolutional Neural Network에 대한 이해가 업데이트 되었습니다. 이 글을 읽으신 후 꼭 한번 읽어보세요!

출처 : Terry's Facebook, https://goo.gl/Yo3Tvi

딥 러닝은 사실 새로운 개념이 아닙니다. 오래전부터 있어오던 인공신경망(Artificial Neural Network, ANN)과 크게 다를 바 없죠. '인공신경망'이라고 하면 단어에서 나오는 뽀대(?) 때문인지 막 복잡한 뇌 구조가 생각하면서 꿈 같은 이야기가 펼쳐질 것 같은 느낌 드는데요, 사실 인공신경망은 그렇게 판타스틱한 개념은 아닙니다.

그저 선형 맞춤 (linear fitting)과 비선형 변환 (nonlinear transformation or activation)을 반복해 쌓아올린 구조에 불과하죠. 다시 말해, 인공신경망은 데이터를 잘 구분할 수 있는 선들을 긋고 이 공간들을 잘 왜곡해 합하는 것을 반복하는 구조라고 할 수 있습니다. 선 긋고, 구기고, 합하고, 선 긋고, 구기고, 합하고, 선 긋고, 구기고, 합하고...(먹고 뜯고 맛보고 즐기고...-_-..)

파란선과 빨간선의 영역을 구분한다고 생각해보자. 그냥 구분 선을 긋는다면 아마 왼쪽처럼 불완전하게 그을 수 있을 것이다. 하지만 공간을 왜곡하면 오른쪽 같이 아름답게 구분선을 그릴 수 있다. 이처럼 인공신경망은 선 긋고, 구기고, 합하고를 반복하여 데이터를 처리한다. (사진출처: colah's blog)

예를 들어 컴퓨터가 사진 속에서 고양이를 검출해내야 한다고 생각해보죠. '고양이'라는 추상적 이미지는 아마 선, 면, 형상, 색깔, 크기 등 다양한 요소들이 조합된 결과물일 것입니다. 이것은 아마 '선 30cm 이상은 고양이, 이하는 고양이 아님', 또는 '갈색은 고양이, 빨간색은 고양이 아님' 처럼 간단한 선형 구분으로는 식별해 낼 수 없는 문제겠죠. 딥러닝은 이 과제를 선 긋고 왜곡하고 합하고를 반복하며 복잡한 공간 속에서의 최적의 구분선을 만들어 내는 목적을 가지고 있습니다.(1)

그럼 어떠한 규칙으로 선을 긋고 공간을 왜곡하냐고요? 바로 데이터에 근거하는 거죠. 일단 대충 선을 긋고 그것들을 살살살살 움직여가며 구분 결과가 더 좋게 나오도록 선을 움직이는 겁니다. 이러한 과정을 최적화(optimization)이라고 하는데요, 딥러닝은 아주 많은 데이터아주 오랜 시간의 최적화를 통해 데이터를 학습합니다. 양에는 장사 없다고나 할까요?

여러 개의 뉴런(선형 맞춤 + 비선형 변환)이 합쳐지면 복잡한 형상의 함수도 추정할 수 있다. (사진출처)

사실 인공신경망은 1940년대에 이미 개발된 방법이었고, 1980년대에 역전파(back propagation) 방법이라는 최적화 방법이 소개되며 인공신경망 연구가 절정기애 이른 바 있습니다. 이후 인공신경망은 영상처리, 인공지능, 제어 등 다양한 분야에 적용 되었는데요, 90년대에 이르러 그 연구가 포화 상태에 이르고, 이내 한계가 보이기 시작하더니 곧 암흑기를 만나게 됩니다. 심지어 2000년대 초반 논문 심사에서는 '인공신경망'이란 단어만 나오면 '뭐야, 이거 옛날거자나?'라며 리젝을 하기도 했었으니까요. 그렇게 인공신경망은 사라져 갔고, 2000년 대에는 비선형 함수를 이용한 다양한 커널 방법(e.g. Support Vector Machine, Gaussian Process)들이 기계학습의 대세를 이루게 됩니다.

딥 러닝의 일등 공신, 토론토 대학의 힌톤 교수 (사진출처: 토론토대학)

모두가 인공신경망을 외면하던 암흑기 시절, 그래도 꿋꿋하게 인공신경망 외길을 걸어오던 학자가 있었으니 바로 그가 딥러닝의 일등 공신, 토론토 대학의 제프리 힌톤(Geoffrey Hinton) 교수입니다. 인공신경망이 외면받는 여러 한계들 중 대표적인 문제는 바로 최적화가 쉽지 않다는 점이었습니다. 생각해보세요. 수 만개의 뉴론들이 수 백만개의 선들에 의해 연결되어 있고 여러분들은 이 선들에 적당한 값들을 할당해야 합니다. (일명 parameter training이죠.)

이걸 최적화 알고리즘을 통해 해줘야 하는데, 최적화 알고리즘이 만약 진짜 최적값이 아닌 잘못된 최적값에 도달하면 어쩌죠? 예를 들어 최고 높은 산봉오리에 올라가야 하는게 목적이라고 하면, 앞만 보고 막 달려서 산 봉우리에 올랐더니 '엥? 이 산이 아닌게벼...?'라고 하면 어쩌냔 말입니다. 인공신경망은 그 구조가 워낙 복잡했기에 이런 문제가 발생했을 때 그야 말로 속수무책이었죠. (그래서 제 예전 지도교수님은 인공신경망을 'black magic'이라고도 하셨으니까요ㅎㅎ)

하지만 힌톤 교수는 이러한 함정(local minima)들을 데이터의 전처리과정(pre-training)을 통해 크게 해결할 수 있음을 밝혔습니다. 이 연구가 바로 "A fast learning algorithm for deep belief nets"라는 2006년의 논문인데요, 힌톤 교수는 이 논문을 통해 인공신경망의 각 층들을 먼저 비지도학습 방법(unsupervised learning)을 통해 잘 손질해주고, 그렇게 전처리한 데이터를 여러 층 쌓아올려 인공신경망 최적화를 수행하면 '이 산이 아닌게벼?' 없이 훌륭한 결과를 만들어 낼 수 있다는 것을 보였습니다.

출처 : Terry's Facebook, https://goo.gl/Yo3Tvi

이 논문을 기점으로 인공신경망 연구는 새 전기가 열리게 됩니다. 특히 인공신경망은 빅데이터와 찰떡궁합이었죠. 2006년 이전의 많은 연구들이 데이터에 대한 구체적 형상 파악에 그 노력을 쏟았었다면, 이젠 그냥 어마어마한 구조의 인공신경망엄청난 데이터를 막 때려 넣는겁니다. 그리고선 2006년 이후 개발된 세련된 최적화 기법을 써서 몇날 며칠을 학습하면 '짜잔~'하고 최고의 결과를 내놓는다는 거죠. 딥러닝 기법은 이 후 각종 머신러닝 대회의 우승을 휩쓸며 (그것도 압도적인 성능으로...) 자신이 유아독존의 기법임을 과시했고, 현재는 다른 기계학습 방법을 통해 영상처리, 음성인식 등을 연구하셨던 분들 역시 딥러닝으로 대동단결하는 양상을 보이고 있습니다.

기계학습 관련 기업들. 이 중 Facebook, Google, Baidu 등은 모두 딥러닝에 사활을 걸고 있다. (사진출처)

그렇다면 그토록 오랜 암흑기였던 인공신경망을 성공적인 딥러닝으로 환골탈태하게 한 요인은 뭘까요? 그 요인에는 크게 다음과 같은 네 가지를 꼽을 수 있습니다.

1. Unsupervised Learning을 이용한 Pre-training

앞서 힌톤 교수가 2006년에 제안했던 것이 바로 이 방법입니다. Unsupervised learning이라고 하면 (대충 말해서) '이건 사과', '이건 고양이', '이건 사람' 이런 "가르침" 없이 그냥 사과, 고양이, 사람을 다 던져놓고 구분하라고 시키는 학습 방법인데요, 그렇게되면 아무래도 컴퓨터는 비슷한 것끼리 군집(cluster)을 찾게 되겠죠. 알고리즘은 군집화하는 과정 속에서 특이한 놈들은 과감하게 개무시(;;), 결과적으로 노이즈 감소의 효과를 얻게 됩니다. 이렇게 unsupervised learning 방법으로 데이터를 고르게 잘 손질할 수 있고, 이것을 깊은 인공신경망(=딥러닝망)에 넣으면 앞서 제기한 함정들에 훨씬 적게 빠진다는 것입니다. 이것이 바로 딥러닝의 최초 진일보였죠.

2. Convolutional Neural Network의 진화

기계학습은 data→knowledge 로 바로 학습을 진행할 수도 있지만 보통 중간 단계인 특징 추출(feature extraction)을 거쳐 data→feature→knowledge 의 단계로 학습하는 것이 보통입니다. 예를 들어 사진 속에서 사물을 인식하기 위해 픽셀 값에서 먼저 특징적인 선이나 특징적인 색 분포 등을 먼저 추출한 후 이를 기반으로 '이건 사과다' '이건 바나나다'라는 판단을 내리는 것이죠. 이러한 중간 표현단계를 특징 지도 (feature map)이라고 하는데요, 기계학습의 성능은 얼만큼 좋은 특징들을 뽑아내느냐에 따라 그 성능이 매우 크게 좌지우지 됩니다. (이는 이미지 처리 뿐만 아니라 음성 인식, 자연어 분석 등 대부분의 기계학습에 적용되는 이야기입니다.)

원본 이미지(우측)와 convolutional network에 의해 추출된 특징 지도(좌측) (출처: M. Zeiler)

딥러닝의 성공 요인 중 하나를 꼽자면, 예전엔 사람의 예측에 의해 뽑히던 이 특징들을 지금은 이 마저도 기계학습을 이용해 뽑는다는 것입니다. 다시 말해, 예전엔 '선들을 추출해서 학습시키면 사물인식이 잘 될거야'와 같이 사람이 먼저 이 선들을 추출하는 알고리즘을 만들어 주었는데, 이제는 특징 추출과 학습 모두가 딥러닝 알고리즘 안에 포함되었다는 것이죠. 다단계로 특징을 추출해 학습하는 Convolutional Neural Network은 현재 딥러닝의 대세로서 특히 이미지 인식에서 큰 발전을 이룩하고 있습니다.

3. 시계열 데이터를 위한 Recurrent Neural Network

딥러닝 알고리즘을 크게 세 분류로 나누자 대략적으로 다음과 같이 나눌 수 있습니다.
- Unsupervised Learning을 기반으로 한 방법
  (e.g., Deep Belief Network, Deep Auto-encoder)
- Convolutional Neural Network의 다양한 변형들
- 시계열 데이터를 위한 Recurrent Neural Network와 게이트 유닛들
  (e.g. Long-Short Term Memory (LSTM))
시계열 데이터(Time-series data)란 시간의 흐름에 따라 변하는 데이터를 말하는데요, 예를 들면 주가도 시간에 따라 변하고, 사람의 움직임도 시간에 따라 변하고, 비디오도 시간에 따라 변하고... 이러한 시계열 데이터에서 탁월한 성능을 보여주는 딥러닝 방법이 바로 Recurrent Neural Network (RNN) 입니다. RNN은 매 순간마다의 인공신경망 구조를 쌓아올렸다고 생각하시면 되는데요, 예를 들면 100초면 100개의 인공신경망을 쌓아올린거죠. (그래서 딥러닝 중에 가장 깊은 구조라고도 불립니다.)

예전의 RNN은 인공신경망이 너무 깊어서 오랜 시간 전의 데이터들을 까먹는 현상(vanishing gradient problem) 때문에 학습이 힘들었는데요, Jurgen Schmidhuber 교수의 Long-Short term Memory (LSTM) 이란 게이트 유닛을 각 노드마다 배치하여 이러한 문제를 극복, 현재는 Convolutional Network의 가장 강력한 경쟁 상대로 자리매김하고 있습니다.

매 순간의 인공신경망을 쌓아 올린 Recurrent Neural Network (사진출처)

4. GPU 병렬 컴퓨팅의 등장과 학습 방법의 진보

사실 예전엔 '많은 데이터로 가지고 이렇게 저렇게 하면 아마 잘 될거야...'라는 생각들은 가지고 있더라도 그것을 구현하는 것이 쉽지 않았습니다. 잘 될지 안될지도 모르는데 수십 대의 컴퓨터를 몇 달간 돌리고 있을 수는 없는 노릇이니까요. 하지만 GPGPU (General-Purpose computing on Graphics Processing Units)이란 개념이 개발되며 저렴한 가격으로 CPU와 병렬처리를 할 수 있는 GPU 제품들이 출시되었고, 이를 효율적으로 이용하는 언어구조(e.g. CuDA)들이 개발되며 딥러닝은 그 컴퓨팅 시간이 수십분의 일로 줄어 들었습니다.

연구에 사용할 수 있는 데이터 풀도 많아져 예전엔 기껏해야 몇 만개의 손 글씨 데이터(e.g. MNIST)가 전부이던 것이 지금은 천 만장의 고해상도의 사진들(e.g. ImageNet)은 물론, 필요하다면 구글이나 유튜브에서 자료를 끌어올 수도 있었으니 말이죠.

그리고 인공신경망 알고리즘적인 문제로는 비선형 변환에 쓰이는 Rectified Linear Unit (ReLU)의 개발과 거대 망을 선택적으로 학습하는 Drop-out의 발견이 딥러닝의 성능을 크게 향상 시켰답니다. 이러한 잔기술(?)에 대해서도 할 얘기가 많지만 깊은 얘기는 언젠가 또 해드리도록 하죠. ('언젠가 밥 한번 먹자'와 비슷 한 얘기입니다..;;)

구글은 2012년 1000대의 컴퓨터로 1000만 개의 유튜브 이미지를 딥러닝으로 분석해 사람과 고양이를 구분해 냈다. 내게도 컴퓨터 지원 좀 해달라... (출처 : Q. Le)

지금까지 딥러닝에 대해 알아봤습니다. 요약하자면 딥러닝은 사실 오래 전부터 있어오던 인공신경망과 크게 다를 바 없지만 알고리즘적인 발전과 하드웨어의 발전, 그리고 빅데이터의 힘에 의해 현재 최고 성능을 가진 기계학습 방법으로 평가받고 있으며, 미래 인공지능의 희망으로 떠오르고 있다는 이야기였습니다.

그렇다면 딥러닝 말고 다른 기계학습 방법들은 모두 사라져야 하는 걸까요? 물론 그것은 아닙니다. 일단 딥러닝은 많은 양의 데이터많은 컴퓨팅 자원을 필요로 합니다. (저도 이번에 80만원짜리 GPU를 구매...ㅠ) 따라서 핸드폰이나 웨어러블과 같은 포터블 기기는 이러한 컴퓨팅이 불가능할테니 딥러닝을 적용하기 쉽지 않겠죠. 또한 로봇과 같이 실시간성(real-time)이 보장되어야 하는 분야 역시 다른 기계학습 방법을 취하는게 좋을 수도 있을 것입니다. (이건 마치 컴퓨터엔 윈도우, 핸드폰엔 안드로이드와 같은 맥락이라 할 수 있죠.)

하지만 그렇다고 딥러닝이 이들 분야와 무관하냐하면 꼭 그렇지만은 않습니다. 여러분이 컴퓨터가 좋아서 구글 검색 결과가 좋나요? 다 구글 서버에서 알아서 처리해주니 그런거지요. 딥러닝도 마찬가지로 만약 디바이스가 사물인터넷을 이용해 머리 좋은 서버와 잘 교신한다면 포터블 디바이스 역시 딥러닝의 은총을 받을 수 있을 것이라 생각합니다. 특히 구글이 로봇의 미래라 생각하는 클라우드 로보틱스를 구현한다면 여러 로봇이 집단 지성을 발휘하며 문제를 해결해 나가는 것을 미래에 볼 수도 있겠지요. (참고: "구글의 새 로봇 수장, 제임스 커프너는 누구인가")

딥러닝, 인공지능의 가장 희망적인 미래임은 분명합니다. 이 분야와 관계 없으시더라도 여러분도 아마 공부 좀 하셔야 할걸요? ^^ 앞서 말씀드렸듯 이 글의 후속편인 Convolutional Neural Network에 대한 이해도 꼭 한번 읽어보세요!

(1) 쉽게 말씀드리려고 제가 딥러닝과 classification 문제를 섞어서 말씀드린 건데요, 사실 딥러닝은 real-value를 다루는 regression문제에도 적용될 수 있습니다. 

* T-Robotics의 글은 facebook과 rss reader로도 받아보실 수 있습니다.