'뉴럴네트워크'에 해당되는 글 1건

  1. 2014.12.19 초보자가 딥러닝 접근하기
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


댓글을 달아 주세요