최근 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
반응형