4차 산업혁명 - 기술트렌드 딥러닝 이해하기②

딥러닝 프레임워크

지난 시간에는 딥러닝, 인공지능 등을 탑뷰 관점에서 바라보고, 관련 기술에 대해 간단히 소개했습니다. 이번 연재에서는 개발자에게 가장 중요한 딥러닝 프레임워크에 대해 알아보겠습니다.

딥러닝 이미지

프레임워크

딥러닝 프레임워크는 최근 들어 많이 등장하고 있습니다. 그중 가장 유명한구글의 텐서 플로는 범용 딥러닝 프레임워크를 표방하고 있습니다. OpenNMT 같은 오픈소스는 번역에 특화되어 있는 데 비해 텐서 플로는 RNN, CNN 등의 알고리즘을 포함한 라이브러리와 플러그인 구조를 갖고 NLU를 비롯한 오브젝트 디텍션까지 모든 분야를 다룹니다. 하지만 아직까지는Rasa 같은 Conversational 프레임워크와, 오브젝트 디텍션 프레임워크인 YOLO Darknet처럼 한 분야에 특화된 프로그램들이 더 좋은 성능을 내고 있습니다.

1. 프레임워크 혹은 알고리즘 프레임워크

TensorFlow
TensorFlow An open-source software library for Machine Intelligence tensorflow.org

Google Tensorflow (https://tensorflow.org/ )구글에서 오픈소스로 공개한 딥러닝 라이브러리는 일반인들도 딥러닝과 기계학습을 쉽게 사용할 수 있도록 다양한 기능을 제공합니다. Python을 활용하여 연산처리를 작성하게 되어 있기에 Python 관련 Best Practices들이 가장 많습니다.
CPU 버전은 거의 학생들의 교육용으로 사용되며, 고속 연산의 GPU 버전은 NVIDIA의 CUDA를 사용하기 때문에 NVIDIA 계열의 그래픽카드가 장착되어 있어야 합니다.
개발부터 프로덕션 레벨까지 사용이 가능한 덕에 전 세계의 AI 관련 업계 종사자나 공부를 하려는 사람 거의 모두가 Tensorflow를 배우고 있습니다. 때문에 Github 내 AI 관련 프로젝트 중 가장 많은 Star를 획득(69000) 하고 있죠.

Microsoft CNTK(Computational Network Toolkit)
- https://www.microsoft.com/en-us/cognitive-toolkit/

마이크로소프트는 Google의 Tensorflow에 대항하여 자사 서비스인 코타나(Cortana, 인공지능 개인비서)와 스카이프 번역 등에서 사용하는 딥러닝 프레임워크를 오픈소스로 공개했습니다. 이들은 C++, C#/.NET/ Python, Java를 지원하고, Tensorflow보다 편집 및 사용 권한에 있어 훨씬 자유로운 라이선스 정책(Microsoft Open Source Code of Conduct)으로 운용되며, 심지어 Tensorflow보다 5~10배 정도 빠르다고 마이크로소프트는 주장하고 있습니다.
참조: http://www.bloter.net/wp-content/uploads/2016/01/MS_CNTK_03_Architecture.jpg

Facebook Torch
- http://torch.ch/

Facebook Torch의 원래 이름은 Torch 7으로, BSD 라이선스를 가지고 있으며 합성곱 신경망 부분에서 강력한 퍼포먼스를 보입니다. Lua라는 언어를 사용하여 만들어졌고, C를 지원하죠. Python 인터페이스가 없어서 많은 개발자들이 애로사항을 겪었으나 이를 위해 PyTorch와 같은 별도의 파이선 프로젝트가 생성되었습니다. 또, OpenNMT 같은 프로젝트는 torch 기반으로 작성되었습니다.
참조: http://www.onlinesocialmedia.net/wp-content/uploads/Facebook-open-source-library-modules-for-deep-learning.jpg

NVIDIA CUDA & cuDNN
- https://developer.NVIDIA.com/cuda-zone

CUDA(Computed Unified Device Architecture): NVIDIA가 만든 병렬 컴퓨팅 플랫폼 및 API로, 2006년 발표 당시에는 C/C++만을 지원했지만 현재는 자바/C#, 심지어 포트란 등의 다양한 언어를 지원합니다. 단, 당연한 이야기지만 NVIDIA 그래픽카드만을 지원합니다. 때문에 GPU연산에서 CUDA Support가 굉장히 중요한 포인트가 됩니다.
cuDNN(CUDA Deep Neural Network): Deep Neural Network 애플리케이션에서 자주 사용하는 루틴을 라이브러리화하여, GPU에 명령을 수행할 수 있도록 하는 라이브러리입니다. 현재 잘 나가는 딥러닝 프레임워크들(Tensorflow, Caffe, Theano, Torch 등)을 모두 지원합니다.
참조: http://images.anandtech.com/doci/9422/NVML_Car_678x452.jpg

Caffe
- http://caffe.berkeleyvision.org/

Caffe(http://www.whydsp.org/319)는 머신 비전 라이브러리로, Matlab이 C 및 C++에 고속 CNN을 구현한 것으로써 널리 사용되고 있습니다. 이미지 분석에 특화되어 있으며, 이미지 이외의 텍스트나 사운드 등의 데이터 처리에는 적합하지 않습니다. 간단한 모델의 경우 코딩 없이 사용할 수 있으며, CUDA 모델 적용이 가능합니다.

Theano
- http://www.deeplearning.net/software/theano/

Theano는 다차원 배열을 다루는 Python 기반의 딥러닝 라이브러리로, 크로스 플랫폼을 지원합니다. 다차원 배열을 사용한 수학식을 정의, 최적화 및 풀이하는 데 사용되며, 데이터 탐색에 적합합니다. CPU와 GPU에 대해 동일한 Python 코드를 작성할 수 있고, 다양한 Python 패키지와 연동이 용이하다는 장점이 있습니다. 또, CNN 알고리즘에 적합하지만, RNN도 훌륭한 편으로 알려져 있습니다.
참조1: https://www.reddit.com/r/MachineLearning/comments/2c9x0s/best_framework_for_deep_neural_nets/
참조2: http://tmmse.xyz/2016/02/25/choosing-deep-learning-libraries/

Chainer
- https://chainer.org/

Chainer는 Python API를 제공하는 오픈소스 신경망 프레임워크입니다. 다이내믹 컴퓨테이션 그래프나 가변 길이의 입력을 지원하는 신경망으로 NLP 작업에 많이 사용됩니다. Define-by-Run 아키텍처로 실행 시점에 네트워크 그래프가 정의되어 유연하게 사용할 수 있습니다.
이미지넷 분류 학습 시 다른 Python 기반의 프레임워크보다 빠르다는 결과가 있고, (https://chainer.org/general/2017/02/08/Performance-of-Distributed-Deep-Learning-Using-ChainerMN.html) Chainer를 사용하여 CNN(https://www.oreilly.com/learning/complex-neural-networks-made-easy-by-chainer)을 좀 더 쉽게 사용할 수 있습니다.

Mxnet
- https://mxnet.incubator.apache.org/

Mxnet은 C++을 기반으로 만들어진 딥러닝 프레임워크로, C++, Python, Julia, Matlab, R, Java Script 등 다양한 프로그래밍 인터페이스를 제공합니다. 컴퓨터 비전, 음성, 언어 처리 및 이해, RNN, CNN과 LSTM에서 좋은 성능을 내도록 설계됐습니다. 여러 GPU와 시스템에 걸쳐 확장할 수 있기 때문에 대규모 데이터 셋을 사용하여 훈련할 때 효과적이며, 아마존 웹 서비스에서 딥러닝 프레임워크를 지원합니다.
(http://www.allthingsdistributed.com/2016/11/mxnet-default-framework-deep-learning-aws.html)

2.Text 기반 프레임워크

Rasa NLU(Natural Language Understanding)
- https://rasa.ai/

Rasa NLU는 텍스트의 의미를 이해하기 위한 오픈소스 소프트웨어로, 짧은 자연어 메시지를 넣으면 intent와 entities의 형태로 구조화된 데이터를 보여줍니다. 이 데이터는 미리 intent와 entities의 형태로 라벨링 되어 학습되며, Rasa NLU는 이 데이터를 기반으로 Machine learning을 이용하여 패턴을 알아내고 눈에 보이지 않는 문장까지 파악합니다.

Word2vec

Word2Vec는 단어를 계산에 적용할 수 있도록 수치화하여 다음 단어를 예측하는 모델로, 구글의 Tomas Mikolov가 이끄는 팀에 의해 개발되었습니다. 다음 단어를 예측하기 위해서는 Word Embedding(문자를 숫자로 변환하는 것)이 구현되어야 하는데, 이때 CBOW 또는 Skip-Gram 알고리즘이 사용됩니다. 이는 기존의 알고리즘 대비 자연어 처리 능력에 엄청난 향상을 가져왔으며, 변환된 벡터를 통해 추론까지도 가능하다는 점에서 큰 의미를 갖습니다. CBOW 모델은 찾고자 하는 목표 단어를 예측하는 모델이고, Skip-Gram 모델은 처리하고자 하는 단어를 사용해 주변 단어들을 예측하는 모델입니다.

3. Image 기반 프레임워크

Darknet YOLO
- https://pjreddie.com/darknet/yolo/
Darknet YOLO는 'pjreddie'라는 워싱턴 대학 출신의 개인 개발자 Joseph Redmon 이 C/Cuda를 이용하여 제작한 오픈소스(neural network framework)입니다. YOLO는 'you only look once'라는 의미로 실시간 오브젝트 디텍션 기능을 수행하고 클래스를 분류합니다. 학습된 모델을 가지고 이미지/영상에서 오브젝트를 검출하는 형식으로, 다른 딥러닝 라이브러리보다 가벼워 상대적으로 빠른 속도를 자랑합니다.
https://pjreddie.com/media/image/Screen_Shot_2016-11-26_at_11.22.46_PM.png

지금까지 딥러닝 프레임워크 혹은 API에 대해서 살펴보았습니다. 다음 연재에서는 각 프레임워크에서 이야기하는 알고리즘의 큰 그림에 대해서 알아보고, RNN, CNN 등으로 표현되는 축약어들은 무엇이고 실제로 어떻게 사용되는지에 대해 알아보겠습니다.



▶   해당 콘텐츠는 저작권법에 의하여 보호받는 저작물로 기고자와 삼성SDS에 저작권이 있습니다.
▶   해당 콘텐츠는 사전 동의없이 2차 가공 및 영리적인 이용을 금하고 있습니다.

4차 산업혁명 기술트렌드 연재
공유하기
도경태 프로
도경태 프로 IT테크놀로지 전문가
삼성SDS 개발실

SCP(SDS Certified Professional)로 삼성SDS에서 테크리드를 담당하고 있습니다. OSGeo에서 오픈소스 활동을 하고 있습니다. 잘 모르는 기술에 대해서 낯선 사람들과 이야기 하면서 배워 나가는 것을 좋아합니다.