Share           Pin It
요즘 IT 쪽에서 가장 뜨거운 이슈 중에 하나는 분명 딥러닝 Deep Learning 일 듯하다. 마치 몇 년 전에 빅데이터 Big Data 기술들이 처음 소개되고 성공 스토리들이 언론에 회자되던 때를 회상하게 만든다. 그러나 일반인들에게 딥러닝이 빅데이터만큼 쉽게 받아들려지고 확대될 수는 없을 것같다. 그 이유는 분명하다. 어렵기 때문이다. 물론 다양한 오픈소스가 만들어지고 최적화된 방법론이 소개되겠지만, 그걸로는 충분치가 않다. 소수의 선택된 자들 외에는 딥러닝은 그저 그림의 떡이다. 어렵기 때문이다. 빅데이터는 단편적인 기본 지식만 있어도 (실제 적용까지는 힘들더라도) 현상을 이해하기에 충분하지만, 딥러닝은 언론이나 컨퍼런스에 소개되는 내용만으로 이해하기란 거의 불가능하다.

최근에 몇 편의 논문이나 동영상 강의 자료를 탐독하면서 딥러닝이 어렵다는 것을 재확인했고, 그 어려움의 실체에 대해서 감을 조금 잡았다. 그래서 이 글을 적는다. 제목에 초보자라고 적었지만, 생판 초보자를 의미하지는 않는다. 아래에 제시된 분야 중에서 일부 분야에 조금 익숙한 또는 일부 분야에 덜 익숙한 사람을 초보자라고 부르겠다. 그렇지 않은 사람들은 이 글을 스킵할 것을 조언한다.

만약 딥러닝을 공부하고 개발하고 실무에 적용해야 하는 상황에 닥쳤다면 가장 현실적인 조언은 "피할 수 있으면 피하라. 만약 피할 수 없으면 포기하라"다. 때로는 딥러닝이 기존의 여러 AI 알고리즘보다 더 나은 성능을 보여주기도 하고 또는 사람들의 labor-intensive한 노력없이 괜찮을 성능을 보여주기 때문에 지금 딥러닝에 열광하는 것이다. 혹시 다른 대안 (딥러닝보다는 성능이 조금 떨어지거나 충분한 인력이 투입되어 노하우가 녹아있는 알고리즘이나 시스템)이 존재한다면, 굳이 딥러닝을 시도할 필요가 없다. 물론 더 큰 조직이나 더 똑똑한 무리들이 딥러닝으로 치고 나가면 미래에 격차가 더 벌어질 가능성도 충분하지만, 지금 조직에서 단지 몇 명이 딥러닝을 공부해서 적용한다고 해서 그들을 따라잡을 가능성은 크지가 않다. 너무 절망적인가? 그렇다면 나의 의도가 충분히 충족됐다고 본다.

언론에서 얘기하는 것 때문에 딥러닝에 관심을 가져서 구글로 Deep learning으로 검색해서 임의로 논문 한편을 골라서 읽어본다면 분명 처음에는 쉽게 이해하기 어려울 것이다. 초보자를 위해서 처음부터 끝까지 쉽고 상세하게 적은 그런 리뷰 논문이 아니라, 최근 어떤 분야에서 딥러닝으로 괄목할만한 성과를 이뤄냈다는 식의 10장 짜리 논문을 한 번에 이해하는 사람은 거의 없을 것같다. 최근 몇 편의 논문을 읽으면서 생각하기로 크게 두가지 이유 때문인 것같다. 첫번째는 뉴럴 네트워크 (보통 Neural Network, 즉 NN으로 표기하지만, 정식 명칭은 인공신경망 즉 Aritificial NN (ANN)이다)에 대한 이해가 부족하기 때문이고, 두번째는 딥러닝이 적용된 애플리케이션 분야에 대한 지식 부족 때문이다. 굳이 하나 더 추가하자면 대부분의 논문이나 강의가 영어로 돼있다는 점도 크게 작용한다.

일반인들이 ANN에 대한 기초 지식없이 단순히 딥러닝이 ANN을 확장했다고만 언급하고 그것을 모델링하고 최적화하기 위해서 사용된 방법을 간략히 소개만 하고 넘어가면 당연히 그 논문을 제대로 이해할 길이 없다. 그런데 ANN을 제대로 이해하기 위해서는 인체 내에서 벌어지는 뇌의 활동을 먼저 이해해야 하고, 그걸 실행가능한 형태의 (그래피컬) 모델을 그려낼 수 있어야 하고, 정보 전달 메커니즘인 로지스틱 회귀분석 (선형 회귀분석과 액티베이션)에 대한 이해가 필요하고, 가장 중요하게도 각종 파라메터를 최적화하는 방식을 이해해야지 딥러닝의 가장 기초인 MLP (Multi-Layer Perceptron)을 겨우 이해할 수 있다.

뇌과학자가 아닌 이상 뇌에서 의사결정을 위해서 뉴런들이 시그널을 전파하고 합쳐지고 리즈닝하는 것을 정확히 이해할 수 없다. 더욱이 뇌에 대해서 밝혀진 것은 여전히 극소수에 불과하다. 그런 후에 뉴런들 간의 인터렉션을 MLP든 아니면 다른 형태의 Network로 적절히 모델링해야 한다. 머신 러닝에서 가장 간단한 알고리즘이지만 선형회귀나 로직스틱회귀도 전공자가 아니면 외계어다. 본인도 최근에서야 ANN에서 사용되는 W 행열과 B(bias) 벡터, 그리고 sigmoid 액티베이션 함수가 선형회귀/로지스틱회귀 모델임을 자각했다. 그런데 ANN은 많은 수의 회귀모델의 앙상블 Ensemble이고, 딥러닝은 그런 ANN 및 다른 네트워크 아키텍쳐의 앙상블이다. 여기까지는 그래도 조금의 뇌지식이나 확률 지식만 가져도 개념적으로 쉽게 이해가 된다. 그러나 마지막으로 W와 B 등의 파라메터를 최적화하는 Back-propagation을 이해하려면 미적분에서부터 시작해서 네트워크 토폴로지에 따른 다양한 object 및 loss function을 정의하고,그에 따른 Gradient 기반의 최적화 방법을 이해해야 한다. 개념적으로는 쉽지만 수식이 좀 복잡해져서 포기하게될 가능성이 높다. 이정도의 최소한의 지식이 있으면 이제 가장 간단한 형태의 MLP ANN을 이해했다고 볼 수 있다. (구현 이슈도 있지만)

그리고 다른 글에서도 적었지만 딥러닝이 단순히 MLP에서 히든 레이어의 개수를 늘리거나 히든 노드의 개수를 늘리는 것이 아니다. 개념적으로는 그렇지만 더 다양한 형태의 아키텍쳐와 모델들이 합쳐져야 제대로된 딥러닝이 만들어진다. 예를들어, 주어진 데이터나 문제에 따라서 RBM이나 Belief network에 대한 이해가 필요하고, auto-encoder나 sparse coding 등도 이해할 필요가 있고, CNN (Convolution)이나 RNN (Recursive), Multi-moidal/tasking 등의 다양한 형태의 네트워크나 조합에 대한 이해가 필요하다.

ANN에 대해서 충분한 지식이 있는 이들도 딥러닝을 쉽게 이해하기 어려운 다른 이유는 딥러닝이 적용된 분야의 특수성 때문으로 생각한다. 현재까지 딥러닝이 가장 효과를 보여주는 분야는 일반적으로 AI에서 패턴인식 Pattern Recognition으로 알져진 분야다. 패턴인식은 단순히 매트릭스 형태의 수치데이터를 가공하는 데이터마이닝과는 차원이 다르다. 딥러닝의 초기에는 음성인식에서 두각을 나타냈고, 그 후에 자연어처리 NLP, 그리고 이미지처리 등에서 효과를 보여주고 있다. 그런데 이런 음성, NLP, 그리고 이미지/동영상 분야는 나름의 도메인 지식이 필요하고, 딥러닝 이전부터 활발히 연구됐던 다양한 알고리즘들이 존재한다. 그런데 딥러닝을 다룬 한편의 논문에서는 이런 응용분야의 백그라운드 지식에 대한 장황한 설명없이 단지 어떤 문제(예를들어, POS 태깅)에 딥러닝을 적용해서 기존에 가장 우수한 성능을 보여줬던 어떤 알고리즘보다 더 나은 성능을 보여줬다라고 결론을 내린다. 도메인 지식이 없는 사람에게 딥러닝 논문은 참 난관이다.

이런 저런 모든 배경 지식을 습득했다고 하더라도 문제는 이걸 구현하는 것도 이슈다. 물론 요즘은 다양한 오픈소스가 존재하기 때문에 그걸 이용할 수도 있다. 그러나 자신의 문제에 맞게 그런 오픈소스를 최적화하는 방법도 만만치가 않다. 많은 배경지식에 더해서 각 분야에 대한 많은 경험과 노가다가 있어야지 딥러닝을 제대로 활용할 수가 있다. 노가다에 대한 충분한 준비가 된 자라면 딥러닝에 도전하기 바란다.

길게 엄살을 적어놨지만, 앞으로 딥러닝에 더 관심을 가지고 다양한 분야에서 좋은 성과를 내기 위해서 딥러닝에 대한 더 깊은 이해가 필요하고, 그리기 위해서 필요한 기초 지식 트리를 설명하기 위해서 글을 적는다. 계속 공부하고 테스트해보면서 더 깊은 내용은 다음 기회에...

이전 글에서도 짧게 적었지만, 아무리 딥러닝이 어렵더라도 마치 많은 양의 데이터로 기계를 학습시키듯이 다양한 딥러닝 관련 글과 논문을 꾸준히 읽고 고민하다 보면 마치 ANN의 노드들 사이에 연결이 생기고 파라메터가 최적화되듯이 딥러닝에 대한 이해도 조금씩 누적되어 마스터하는 날이 올 수도 있다. 당장 어렵더라도 포기하지 말고 꾸준히 스스로를 학습시키기 바란다.

여담으로 딥러닝에 GPU가 좋은 컴퓨터가 필요하다고 하는데, 이는 네트워크의 파라메터를 최적화하기 위해서 크고 많은 수의 매트릭스/벡터 연산이 필요하기 때문이다. 즉, 이미지 시각화를 위해서 매트릭스 연산에 최적화된 GPU가 CPU보다는 딥러닝의 연산에 더 적합하다는 얘기다. 최근 비트코인을 채굴하기 위해서도 GPU가 많이 필요하다는 얘기를 들었는데, 비트코인 채굴을 위한 계산도 많은 수의 매트릭스 연산 때문인 듯하다.
 
P.S., NIPS 2014에 다녀온 후배의 후기를 봐도 현재 딥러닝이 얼마나 핫한 이슈인지를 알 수가 있습니다. (링크. 2014 NIPS 후기)

==
페이스북 페이지: https://www.facebook.com/unexperienced


댓글을 달아 주세요

Share           Pin It
최근 Deep Learning에 대한 관심이 뜨겁습니다. 딥러닝에 대한 얘기를 처음 들은 것은 작년 이맘 때였던 것같은데, 몇몇 기사들만 읽어볼 뿐 애써 외면했습니다. 처음에 딥러닝을 소개하는 두꺼운 논문을 한편 프린트해서 조금 읽어본 후에, 내가 관여해야할 것이 아니다라는 감을 잡고 깊이 파고 들지 않았습니다. 주변에서 공부를 시작하거나 실제 문제에 적용한 케이스도 봤지만 굳이 관여는 피했습니다. 그런데 차츰 내가 직면한 문제의 나름 해결책이 딥러닝이 아닐까?라는 생각을 하게 되면서 다시 관련된 논문을 찾아서 읽거나 온라인 강좌 비디오를 보기 시작했습니다. 이제 시작 단계지만 딥러닝에 대한 첫인상을 적어볼까 합니다.

처음 딥러닝을 알게된 시점에는 단순히 기존의 뉴럴네트워크의 단순 확장판, 즉 히든 레이어나 노드의 수를 적절히 늘려서 예측력을 높이는 정도 또는 패턴을 여러 단계로 나눠서 인식하는 정도로 이해했습니다. 한참 학교에 있던 2000년대 초반에도 뉴럴 네트워크(ANN, Artificial Neural Network)에 대한 관심은 높았지만, 특정 문제에서는 잘 적용되지만 모든 문제에서 가장 적합한 해결책이 아닌 경우가 많았습니다. 특히 히든 레이어나 노드 수가 증가하면 모델을 학습시키는데 시간도 오래 걸리고 또 학습된 모델의 정확도도 낮았던 걸로 기억합니다. (그래서 ANN이 더 발전하지 않겠구나라고 생각하고 더 깊이 공부하지 않았습니다. 물론 ANN을 제대로 이해하기 위해서 필요했던 기초 지식이 부족해서 한계에 부딪혔던 점도 있습니다. 그런데 약 10년의 시간이 흘러서 다시 ANN이 딥러닝이라는 이름으로 화려하게 부활했습니다.) 당시 컴퓨팅 파워로는 레이어나 노드를 무한정 늘릴 수가 없었습니다. 그런데 지금은 컴퓨팅 파워와 대용량의 학습 데이터 때문에 더 큰 네트워크를 학습시킬 수 있게 되서, ANN이 다시 각광받는구나 정도로 이해했습니다. 그런데 딥러닝은 단순한 ANN의 확장은 아닌 것같습니다. 

실제 ANN에서 히든 레이어나 노드의 수를 증가시키면 정확도가 올라가는 것은 맞습니다. 그러나 그 정확도는 트레이닝 오류를 낮추는 것이지, 테스트 에러 즉 비학습 데이터에 대한 정확도를 높이는 것이 아닙니다. 즉 레이어와 노드 수의 증가는 ANN의 오버피팅 문제만 일으킵니다. 그렇기 때문에 ANN을 단순히 확장한다고 해서 딥러닝이 될 수가 없습니다.

아직은 많은 사례를 보지 못했지만, 딥러닝의 네트워크와 ANN이 닮은 점은 인풋 레이어, 히든 레이어, 아웃풋 레이어로 구성된다 정도만 닮았습니다. 그리고 비선형성을 위해서 sigmodal이나 tanh 함수를 사용한다정도만 닮았습니다. 그래서 딥러닝을 ANN의 차기 버전이라고 말하는 것도 조금 아닌 것같고, 일반적인 모든 방법을 단순히 딥러닝이라고 부르는 것도 이치에 맞지 않은 것같습니다. 현재까지 나온 모든 딥러닝 방법론을 딥 아키텍쳐 또는 딥 네트워크 아키텍쳐라고 부르는 것이 더 맞을 듯합니다. 편하게 딥러닝이라고 부르지만, 네트워크가 예전보다 복잡해졌다는 공통점 외에 여러 방법론들의 결과물/네트워크의 형태상으로 공통점을 찾아보기가 힘듭니다. 그래서 그런 복잡한 모든 네트워크를 딥러닝이라고 퉁쳐서 부르면 개별 네트워크의 특징을 제대로 파악하는데 어려움이 따를 듯합니다. 그래서 딥 아키텍쳐라는 우산 아래 다양한 네트워크 패밀리들이 존재한다라고 이해하는 것이 좋을 듯합니다. (더 자세한 설명은 제 능력밖이고… 아직 제대로 정립하지 못했습니다. 모양도 제각각이고…)

그리고 현재 나온 딥러닝에 관한 논문이나 글들을 이해하기는 너무 어렵습니다. 첫째는 기본적인 ANN에 내포된 여러 방법론들에 대한 설명이 없거나 너무 빈약하게 설명하고 딥러닝의 구성에 대한 설명으로 바로 넘어가 버립니다. 더욱이 ANN을 이해하기 위해서 선행해서 알아야 하는 확률 모델이나 (로지스틱) 회귀모델 등에 대한 설명도 부실합니다. 기초적인 확률통계 및 머신러닝에 대한 지식이 없이 ANN을 이해하는 것도 무리가 있는데, ANN에 대한 설명도 부실한 상태로 딥러닝을 설명하는 경우가 많습니다. 그러니 처음 논문을 접하는 분들은 바로 포기해버리고 맙니다.

두번째는 현재까지 딥러닝이 성공한 애플리케이션은 음성인식이나 이미지 판독 등입니다. 현재 인터넷으로 검색되는 많은 논문이나 강좌는 음성인식에 초점을 맞춰서 설명하는 경우가 많습니다. 즉 음성인식이나 NLP 등에 대한 경험이 없는 사람들에게 딥러닝이 멀게만 느껴집니다. 딥러닝 논문 한편을 이해하기 위해서 일반적인 음성인식 문제에 대한 배경지식도 공부해야 하고 또 전통적인 음성인식 방법론 (HMM과 같은)을 다시 들쳐봐야 합니다. 그동안 인간들이 축적한 지식의 양과 종류가 너무 방대해서 이제 초보자들이 하나의 개념을 받아들이는데 장애물이 너무 많아진 것같습니다.

혹시 딥러닝을 공부해보겠다고 마음을 먹은 사람이라면 앞서 말했듯인 ANN에 대한 공부부터 시작하시고, 음성인식이나 이미지 프로세싱 등의 애플리케이션에 대한 배경지식을 습득할 것을 권합니다. 대학원을 다니면서 (음성인식 등의 애플리케이션은 그렇다치더라도) NN에 대한 공부를 등한시했던 것이 참 후회됩니다.

딥러닝 과련 논문을 읽으면서 ‘내가 지금 딥러닝 방식으로 딥러닝을 공부하고 있구나’라는 생각을 했습니다. 앞서 말했듯이 이론적인 배경도 빈약하고 응용 분야에 대한 지식도 부족하니 논문을 읽어도 제대로 이해하지도 못합니다. 그렇다고 해서 모르는 부분을 만날 때마다 참고 자료를 모두 찾아볼 수도 없는 노릇입니다. 그래서 일단은 많은 자료를 그냥 막 읽어보자라는 결심을 했습니다. 그렇게 많은 것들을 읽다보면 머신이 학습되듯이 제 뇌도 새로운 지식을 차츰 받아들이고 학습하고 재구성할 수 있으리라는 기대를 해봅니다. 딥러닝이 그렇듯이 unsupervised로 학습한다는 것은 참 어렵습니다. 머신러닝과 관련된 문제를 만날 때마다 조언을 구하던 그 친구의 부재가 더 크게 느껴집니다.

==
페이스북 페이지: https://www.facebook.com/unexperienced

댓글을 달아 주세요

  1. Favicon of http://jitwo.tistory.com BlogIcon jitwo 2015.11.23 18:00 신고 Address Modify/Delete Reply

    글을 참 잘 쓰시는 것 같습니다. 좋은 글 잘 읽고 갑니다.

Share           Pin It
3.5 / 5 데이터마이닝/데이터분석및적용의 인트로덕션으로는 좋으나 내 기대는 완전히 충족시키지 못했다.

슈퍼크런처
카테고리 경제/경영
지은이 이언 에어즈 (북하우스, 2009년)
상세보기

   책에 대해서...  
 
 한마디로 표현해서 무조건 전문가의 (오류를 내포한) 직관에만 의존하지 말고, 데이터에서 밝혀진 검증된 결과도 함께 활용하라 정도로 요약할 수 있을 듯하다. 수학이나 데이터 분석에 별관심이 없었거나 비전공자라면 이런 방법이 있구나라고 생각할 수 있겠지만, 사실 책에서 말하는 것은 회귀분석, DOE (Design of Experiments 또는 Experimental Design) 중에서 Random Sample, 좀더 나아가서 신경망 Neural Network, 평균과 표준편차, 그리고 베이지언 확률 정도의 내용만을 다루는 아주 심플하고 간단한 책이다. 나름 데이터마이닝을 담당하고 있는 입장에서 소개된 기법들이 너무 기본적인 것들이라 시시한 면도 있지만, 저자의 분야에서 적용하는 다양한 사례들을 읽으면서 다른 가능성을 발견할 수가 있었다. 법학대학원의 교수로써 저자가 가지는 데이터마이닝의 한계는 충분히 이해가 가능하고, 실제 산업현장에서 회귀분석 및 실험계획 이상의 복잡한 것들은 사용되지 않는다는 측면에서 저자의 한계보다는 현실을 반영한 결과로 볼 수도 있다. 저자의 주요 주장은 전문가의 조건/직감을 무시하라는 것은 절대 아니다. 그것보다는 더 나은 판단을 내기리 위해서 데이터에 반영되어 있는 숨은 그리고 객관적인 규칙을 최종 판단에 포함시켜야 한다는 것이다. 실제 책에서는 데이터 분석이 전문가들의 직관을 이긴 사례들을 들고 있지만, 그 반대의 경우도 많이 있다는 측면에서 전문가의 직관과 데이터 분석결과는 상보적인 관계에 있다. ... 책에 그래프는 몇 개가 나오지만 수식 등은 등장하지 않기 때문에 수학 비전공자/흥미가 없는 이들도 쉽게 읽을 수 있다. 그리고 이런 개론 서적을 통해서 수학에 흥미를 가지는 것도 의미가 있다. 여담이지만, 유명한 과학자의 말인데, 세상에는 세가지 거짓말, 즉 거짓말, 새빨간 거짓말, 그리고 통계가 있다라고 말했다고 한다. 현재의 데이터 분석/슈퍼크런칭은 기본적으로 확률과 통계를 기본으로 하기 때문에 데이터 분석 결과가 모든 것을 말해주지는 않는다. 즉, 거짓 판단을 내리게 만들 수도 있기 때문에 분석된 결과를 실무에 적용하기 전에 까다로운 검증 작업을 거쳐야 한다.

 함께 읽을 책들은... 수학, 확률 및 통계, 그리고 다양한 데이터마이닝 서적들을 읽으면 좋겠지만 전공학생들이 아닌 이상에야 쉽게 다가가기는 힘들 것같다. 

댓글을 달아 주세요

  1. Favicon of http://nandaro.tistory.com BlogIcon nandaro 2009.07.21 00:05 신고 Address Modify/Delete Reply

    "전문가의 직관과 데이터 분석결과는 상보적인 관계에 있다." 공감되는 말이에요~
    머신 러닝에서도 데이터는 항상 부족할 수 밖에 없고, 이를 보완하는 것은
    일종의 휴리스틱(?) 즉, 경험에 의존한 직관이라 할 수 있으니...
    어떤 선택을 할 때, 인간은 항상 과거로부터의 데이터(역사)와
    현재의 판단(혹은 직관)에 의존하는 것도 유사하고 말이죠~ ^^