정보광장

보기

제 목 [Vol.6 No.2] 딥러닝에 대한 Q&A
작성자 관리자 이메일 information@kics.or.kr
작성일 2016-06-14 (2016-06-14 수정) 조 회 920
내 용
무제 문서

딥러닝에 대한 Q&A




안녕하세요. 저는 한양대학교의 전기생체공학부 조교수 최준원입니다. 저는 현재 신호처리 및 머신러닝 분야에 연구를 하고 있으며 최근 딥러닝 기술에 대한 많은 관심을 갖게 되었습니다. 요즘 많은 연구자 분들이 다양한 분야에서 딥러닝의 적용을 고려하시는 것 같습니다. 따라서 딥러닝이나 기계학습을 처음 접하시는 분들에게 조금이나마 도움이 될 까 싶어서 딥러닝에 대한 Q&A를 준비하였습니다. 많은 도움이 되기 바랍니다

Q: 딥러닝의 개념은 무엇인가요?

A: 딥러닝은 인간의 뇌의 뉴런을 모방하는 뉴럴네트워크 중 하나의 구조를 의미합니다. 뉴럴 네트워크는 센서신호나 데이터를 입력받는 입력계층 (input layer)과 최종적인 인지나 결정을 수행하기 위한 출력 계층 (output layer) 그리고 입력과 출력계층 사이를 연결하는 숨겨진 계층 (hidden layer)로 구성되어 있습니다. 인간의 뇌는 다수의 숨겨진 계층을 갖고 있으며 이를 모방하여 하나 이상의 숨겨진 계층을 갖는 뉴럴네트워크 구조를 딥뉴럴네트워크라고 합니다. 이러한 딥뉴럴네트워크를 이용하여 방대한 데이터로부터 그 연결 정보들을 학습하고 이를 이용해 카테고리를 분류하거나 데이터의 회귀분석 등을 수행하는 머신러닝의 한 방법을 딥러닝이라고 말합니다. 딥러닝의 개념적인 소개는 딥러닝의 르네상스를 주도하고 있는 뉴욕대학의 Yann LeCun, 모트리올 대학의 Yoshua Bengio 그리고 토론토 대학의 Geoffrey Hinton교수가 쓴 Nature 논문에 잘 설명되어 있습니다.

   Y. LeCun, Y. Bengio, and G. Hinton. “Deep learning.” Nature 521, no. 7553 (2015): 436-444.

참고로 이 분들은 뉴럴네트워크가 많은 연구자의 관심을 받지 못한 시기에서도 이에 대한 연구를 꾸준히 20년이상 해 오신 분들로 현재 딥러닝 연구를 리드하면서 구글, 페이스북, 마이크로소프트와 같은 회사들과 활발한 산학협력을 수행하고 있습니다.

Q: 딥러닝을 공부하기 위해서는 어떤 배경 지식이 필요한가요?

A: 딥러닝에 대해 알기 위해서는 먼저 뉴럴네트워크의 구조와 학습 알고리즘에 대한 이해가 필요합니다. Multi-layer perceptron, Back propagation algorithm, Batch vs online learning, Cross-validation 등의 기본적인 기계학습에 대한 개념을 알아야 합니다. 이러한 개념들은 다음과 같은 Simon Haykin의 책 (1장~ 4장)에 구체적으로 잘 설명되어 있습니다.

   S. Haykin, Neural networks and learning machines, Third Edition, Pearson.

뉴럴네트워크 이외에 기계학습에 대한 전반적인 지식이 필요하다면 다음과 같은 교재를 추천합니다.

 R. O. Duda, P. E. Hart, and D. G. Stork, Pattern classification, 2nd edition, Wiley 
 C. M. Bishop, Pattern recognition and machine learning, Springer. 


Q: 딥러닝을 진지하게 공부하기 위해서는 어떤 논문이나 교재를 읽어야 하나요?

딥뉴럴네트워크가 실재로 많은 관심을 받게 된 시점은 2006년으로 거슬로 올라갑니다. 토론토 대학의 Geoffrey Hinton은 그 전에 난제였던 딥뉴럴네트워크의 국지 최소값 (local minima)문제를 해결할 수 있는 방법에 대한 논문을 발표하게 됩니다. 

 G. E. Hinton, S. Osindero, and Y. Teh, "A fast learning algorithm for deep belief nets.", Neural computation, vol. 18, no.7, pp. 1527-1554, July. 2006. 


이 논문에서는 Restricted Bolzman machine에서의 학습방법을 딥뉴럴네트워크 구조에 적용하고 데이터에 대한 레이블없이 pre-training을 하고 이후에 label을 이용한 fine-tuning을 하는 학습알고리즘을 제안하였습니다. 물론 최근의 딥러닝 기술은 이보다 훨씬 많은 수의 데이터를 이용하기 때문에 이러한 기법이 적용하지는 않는 것 같습니다. 요즘 많이 사용되는 딥뉴럴네트워크의 구조는 크게 두가지 종류로 나뉘게 됩니다. 그 중 하나는 영상 인식, 분석에 많이 사용되는 Convolutional neural network (CNN) 이고 다른 하나는 음성인식, 자연어처리, 시간급수분석에 유용한 Recurrent neural network (RNN)입니다. CNN방법에서는 영상을 커널이라고 불리는 조그만 윈도우로 필터링하여 영상으로부터 국지적인 특징들을 잡아내는 방법입니다. 학습을 수행한 결과 입력계층에서 출력계층으로 갈수록 보다 추상적인 특징들을 잡아내는 것을 알 수 있습니다. CNN에 대해 입문하기 위해서는 2012년 이미지넷 챌린지 대회에서 우승했던 Alexnet에 대한 논문을 추천합니다. 

 A. Krizhevsky, I. Sutskever, and G. E. Hinton, "ImageNet Classification with Deep Convolutional Neural Networks.", Advances in neural information processing systems, pp. 1097-1105, 2012. 


이와 함께 큰 이미지에서 특정 카테고리의 사물을 찾아내는 검출기법에 사용되는 Region CNN (RCNN)논문도 많이 인용되고 있습니다.

R. Girshick, J. Donahue, T. Darrell, and J. Malik, “Rich feature hierarchies for accurate object detection and semantic segmentation.”, Proc. CVPR, 2014, p580-587

최근에는 CNN은 그 구조가 더 깊어지고 계산 능력이 향상되어 그 성능이 더욱 개선되고 있습니다.

한편 음성이나 자연어와 같은 시간에 따라 순차적으로 들어오는 데이터의 경우에는 RNN의 한 방법인 Long short term memory (LSTM)이라는 구조가 많이 사용됩니다. LSTM은 시간에 따라 갱신이 되는 상태변수, 과거의 특정 정보를 기억할 수 있는 메모리 구조와, 어떤 입력과 출력 계층을 이용 또는 차단할 것인가의 여부를 조정할 수 있는 구조를 가지고 있고 이러한 정보들을 뉴럴네트워크를 통해서 조정을 하게 됩니다. 사실 대부분의 딥러닝 기술이 그렇듯이 LSTM도 매우 오래 전에 이미 발명되었습니다. 

 S. Hochreiter and J. Schmidhuber, “Long short-term memory,” Neural computation 9(8), 1735-1780. 


이러한 LSTM은 현재 음성인식이나 언어모델링에 사용되고 있습니다. 대표적인 논문을 소개합니다.

 Hannun, C. Case, J. Casper, B. Catanzaro, G. Diamos, E. Elsen, R. Prenger, S. Satheesh, S. Sengupta, A. Coates, A. Y. Ng, “Deep speech: scaling up end-to-end speech recognition” in preprint 

 R. Collobert and J. Weston, “A unified architecture for natural language processing: deep neural networks with multitask learning” ICML 08, pp. 160-167. 


마지막으로 딥러닝을 처음 시작하는 연구자들에게 유용한 몇가지 딥러닝 관련 튜토리얼 및 survey 논문을 소개합니다. 

 Y. Bengio, “Learning deep architectures for AI,” Foundations and trends in Machine Learning 2 (1), 1-127. 

 L. Deng and D. Yu, “Deep learning methods and applications,” NOW publication 


Q: 딥러닝을 실제로 돌리기 위해서 어떤 것을 배워야 하나요?

A: 딥러닝을 컴퓨터로 돌려보기 위해서는 GPU를 사용해야 합니다. 실제로 딥러닝 기술은 몇십만개의 계수를 동시에 학습시켜야 하기 때문에 주어진 시간내에 이를 처리하기 위해서는 병렬처리에 최적화된 GPU를 사용합니다. 저희는 현재 NVIDIA의 Titan X를 사용하고 있는데 이는 3072개의 GPU 코어와 12기가의 GPU메모리를 이용하여 Single precision으로 7 테라FLOPS의 연산을 수행할 수 있습니다. GPU를 이용하려면 병렬프로그래밍 기법을 할 줄 알아야 합니다. 보통 NVIDIA의 GPU를 사용하게 되면 NIVIDA 병렬프로그래밍 라이브러리인 CUDA를 사용합니다.

CUDA 프로그래밍을 이용하여 딥러닝을 개발하면 시간과 노력이 많이 들기 때문에 다양한 연구소 및 회사에서 딥러닝 개발용 오픈 소스 라이브러리를 제공하고 있습니다. 그 중에서 유명한 툴이 버클리에서 개발한 C 기반의 Caffe, 몬트리올 대학에서 개발한 파이썬 기반의 Theano, 구글에서 공개한 Tensorflow, LUA 기반의 TORCH 등이 있습니다. 저희 연구실에서는 주로 Theano와 Caffe를 사용하고 있습니다. 이러한 툴의 사용방법과 예제는 웹에 많이 나와 있습니다. GPU 사용과 함께 딥러닝을 수행하는 데 중요한 요소가 다양하고 풍부한 학습데이터를 얻는 것입니다.

하지만 이러한 빅데이터를 얻기 위해서는 많은 시간가 노력이 들기 때문에 많은 연구자들이 연구수행에 도움을 주기 위해 데이터베이스를 제공하고 있습니다. 예를 들면 매년 영상인식 분야의 콘테스트를 하는 이미지넷에는 100만장의 영상 파일들을 다운로드받을 수 있습니다. 딥러닝을 돌려보기 위해서는 파이썬과 같은 스크립트를 이용하여 이러한 빅데이터를 서버에서 손쉽게 다룰 수 있는 기술이 필요합니다.

 

첨부파일