티스토리 뷰

 

 

폭발적인 발전을 거듭하는

딥 러닝(Deep Learning)은 데이터에 존재하는 패턴을 복잡한 다계층 네트워크로 모델화하는 머신러닝의 일종이다. 딥 러닝은 문제를 모델화하는 가장 총체적인 방법이기 때문에, 컴퓨터 비전과 자��

www.itworld.co.kr

딥 러닝(Deep Learning)은 데이터에 존재하는 패턴을 복잡한 다계층 네트워크로 모델화하는 머신러닝의 일종이다. 딥 러닝은 문제를 모델화하는 가장 총체적인 방법이기 때문에, 컴퓨터 비전과 자연어 처리 같은 어려운 문제를 해결할 잠재력을 갖고 있다. 또 전통적인 프로그래밍, 기타 머신러닝 기법보다 낫다.

어렵지만 유용한 딥 러닝 
딥 러닝을 이용하면 다른 방법으로는 불가능한 유용한 결과를 얻을 수 있다. 또 다른 방법보다 더 정확한 모델을 만들 수 있고, 유용한 모델을 만드는 데 소요되는 시간을 줄일 수 있다. 그러나 딥 러닝 모델 트레이닝에는 아주 높은 컴퓨팅 성능이 필요하다. 또 다른 단점은 딥 러닝 모델 해석이 어렵다는 것이다. 

딥 러닝은 아주 중요한 특징 한 가지를 갖고 있다. 트레이닝 할 모델의 인풋과 아웃풋 사이에 숨겨진 계층(hidden layer)이 한 개 이상 존재해야 한다는 것이다. 대부분의 담론에서 딥 러닝은 심층신경망(Deep Neural Networks, DNN)을 사용하는 것을 의미한다. 그러나 신경망 외에도, 다른 종류의 숨겨진 계층을 사용해 딥 러닝을 구현하는 알고리즘들이 소수 존재한다.

딥 러닝 대 머신러닝
딥 러닝은 머신러닝의 한 종류다. 필자는 많이 사용되는 용례에 부합하게 딥 러닝과 관련이 없는 머신러닝을 전통적 머신러닝으로 지칭할 것이다. 일반적으로 전통적 머신러닝 알고리즘이 딥 러닝 알고리즘보다 더 빠르게 실행된다. 

하나 이상의 CPU로 전통적 모델을 트레이닝시키기 충분한 경우가 많다. 딥 러닝 모델의 경우, 트레이닝과 대규모 배포에 GPU, TPU, FPGA 같은 하드웨어 엑셀레이터(가속기)가 필요한 때가 많다. 엑셀레이터가 없다면, 모델 트레이닝에 몇 달이 소요될 수도 있다.

일부 전통적 머신러닝 알고리즘은 많은 문제에서 ‘충분히 좋은’ 모델을 생산해줄 것이다. 그러나 과거를 비춰봤을 때, 전통적 머신러닝 모델이 적합하지 않은 문제들도 있다.

딥 러닝 애플리케이션 분야
딥 러닝이 있어야 최상의 모델이 생산되는 문제들이 많다. 자연어 처리 프로세스(Natural Language Processing, NLP)가 대표적인 예이다.

2016년 가을, 구글 번역의 영어-프랑스어, 영어-중국어, 영어-일본어 번역 아웃풋(결과) 품질이 갑자기 크게 개선됐다. 단순히 언어를 버무리는 수준에서 전문 번역가의 번역 품질에 근사한 문장을 만들어낸 것이다. 구글 브레인과 구글 번역 팀이 구글 번역을 크게 향상시킨 결과였다. 구문에 기반을 둔 통계적 머신 번역 알고리즘(전통적 머신러닝의 일종) 대신 단어 임베딩으로 훈련시킨 DNN을 사용한 결과였다. 여기에 텐서플로우(TensorFlow) 프레임워크가 사용됐다.

쉬운 프로젝트는 아니었다. 박사 학위를 소지한 연구원이 몇달 간 모델을 향상시켰고, 모델 트레이닝을 위해 수천 GPU를 몇 주 동안 가동했다. 구글은 이를 바탕으로 새로운 칩을 만들었다. 구글 번역만을 목적으로 대규모로 신경망을 실행시키는 TPU(Tensor Processing Unit)라는 칩이다.

구글 번역처럼 언어 번역 문제만 다를 수 있는 것이 아니다. ▲자동 요약(Automatic Summarization) ▲대용어 해소(Co-reference Resolution) ▲담화 분석(Discourse Analysis) ▲형태론적 구분(morphological segmentation) ▲개체명 인식(Named Entity Recognition, NER) ▲자연어 생성 ▲자연어 이해 ▲POS(Part of Speech) 태깅 ▲감성 분석(sentiment analysis) ▲스피치 인식(speech recognition) 등이 주요한 NLP 프로젝트가 될 수 있다.

또 다른 딥 러닝 애플리케이션의 좋은 예는 이미지 분류이다. 생물은 대뇌의 시각령(visual cortex)으로 이미지를 처리한다. 이에 많은 연구원들이 포유류의 시각령이 갖고 있는 구조를 이미지 인식용 신경망 모델로 가져와 적용하고 있다. 이런 생물학적 연구는 1950년대로 거슬러 올라간다.

이미지와 관련된 신경망 분야의 획기적인 발견은 1998년 얀 르쿤의 LeNet-5이다. 이는 손으로 쓴 숫자를 32x32 픽셀 이미지로 디지털화한 것을 인식하는 7계층의 콘볼루션 신경망(Convolutional Neural Network, CNN)이다. 고화질 이미지를 분석하기 위해서는 LeNet-5를 더 많은 신경과 계층으로 확대해야 한다.

현존하는 최고의 딥 이미지 분류 모델은 칼라 HD 해상도의 물체에서 다양한 목록들을 식별할 수 있다. 순수한 DNN에 더해, 때때로 하이브리드 모델을 사용하기도 한다. 특정 하위 작업을 수행하기 위해 딥 러닝과 전통적 머신러닝 알고리즘을 결합한 것이다.

딥 러닝으로 해결한 기본적인 이미지 분류 외에도, 다룰 수 있는 다른 이미지 관련 문제들은 ▲로컬화 이미지 분류(Image classification with localization) ▲객체 탐지(Object detection) ▲객체 분할(Object segmentation) ▲이미지 스타일 전이(Image style transfer) ▲이미지 색상화(Image colorization) ▲이미지 재구성(Image reconstruction) ▲이미지 슈퍼레졸루션(Image super-resolution) ▲이미지 합성(Image synthesis) 등이다.

이미지 분류는 비디오에서 개별 프레임을 추출해 각 프레임을 분류하는 비디오 분류로 확대 적용할 수 있다. 비디오에서 탐지한 객체를 프레임 별로 추적할 수 있다.

구글펠로우(Goodfellow), 벤지오(Bengio), 쿠빌(Courville)이 2016년 발표한 자료에 따르면, 딥 러닝을 성공적으로 사용해 분자의 반응 형태를 예측할 수 있었다. 이는 제약회사의 신약 고안, 이원자 입자 탐구, 인간 뇌의 3D 맵을 구성하기 위해 사용하는 현미경 이미지를 자동으로 채우는 것 등에 도움을 줬다.

딥 러닝 신경망 
‘인공’ 신경망의 개념은 1940년대 처음 만들어졌다. 서로 연결된 한계 스위치(Threshold switches)를 통해 만든 인공 신경(뉴런) 네트워크를 학습시켜, 동물의 뇌와 신경계(망막 포함)처럼 패턴을 인식할 수 있게 만들 수 있다는 개념이다.

- 오차역전파(Backpropagation, 역전파)
심층 신경망은 두 뉴런(신경)이 트레이닝 동안 동시에 활성화되었을 때 두 뉴런 간 연결을 강화해 학습을 발생시킨다. 현대적인 신경망 소프트웨어의 경우, 이는 일반적으로 오차역전파(backprop, BP)이라는 규칙을 사용, 뉴런 간 연결 가중값을 증가시키는 것을 의미한다.

- 뉴런(신경 단위)
모델화한 뉴런은 어떨까? 각각 연결된 뉴런의 아웃풋(많은 경우 가중합과 함께)을 전이시키는 전파 함수(Propagation function)를 갖고 있다. 이 전파 함수의 아웃풋은 활성화 함수(Activation function)로 전달된다. 인풋이 한계 값을 초과할 때 작동을 시작하는 함수다.

- 활성화 함수(Activation function)
1940년대와 1950년대 인공 뉴런은 단계 활성화 함수(Step activation function)를 사용했으며, 퍼셉트론(Perceptrons)이라고 불렀다. 현대적인 신경망에도 퍼셉트론이 사용되고 있다고 말할 수 있지만, 평활 활성화 함수(Smooth activation function)를 갖고 있다. 논리(Logistic), 시그모이드 함수(Sigmoid function), 쌍곡선 탄젠트(hyperbolic tangent), ReLu(Rectified Linear Unit)가 여기에 해당된다. 빠른 수렴(Convergence)에는 일반적으로 ReLU가 가장 좋다 그러나 학습 계수(Learning rate)를 너무 높게 설정하면 트레이닝 동안 뉴런이 '죽는’ 문제가 있다.
추가적인 모양을 만들기 위해, 활성 함수 아웃풋을 아웃풋 함수로 전달할 수 있다. 그러나 아웃풋 함수가 항등 함수(Identity function)인 경우가 아주 많다. 활성화 함수의 아웃풋이 하방 연결 뉴런으로 전달된다는 의미다.

- 신경망 토폴로지 
뉴런에 대해 알아봤다. 이제 일반적인 신경망 토폴로지에 대해 학습할 필요가 있다. 피드포워드 망(Feed-forward network)에서 뉴런은 별개의 계층으로 구성된다. 1개의 인풋 계층, 몇 개의 숨겨진 처리 계층, 1개의 아웃풋 계층이다. 그리고 각 계층의 아웃풋은 다음 계층으로만 전달된다.
빠른 연결 형태를 가진 피드포워드 망의 경우, 일부 연결이 하나 이상의 중간 계층을 건너뛸 수도 있다. 순환 신경망(Recurrent Neural Network, RNN)의 경우, 뉴런은 직접, 또는 다음 계층을 통해 간접적으로 스스로에게 영향을 줄 수 있다.

- 트레이닝
신경망 학습의 지도 학습(Supervised learning)은 다른 머신러닝과 유사하게 이뤄진다. 네트워크에 트레이닝 데이터 그룹을 제시하고, 네트워크 아웃풋을 원하는 아웃풋과 비교하고, 오류 벡터를 생성하고, 오류 벡터를 토대로 네트워크에 수정을 적용한다. 수정을 적용하기 앞서 함께 실행하는 트레이닝 데이터 배치를 에포크(Epoch)라고 부른다.
좀 더 세부적인 내용을 설명하자면, 오차역전파는 모델의 가중치 및 편향에 대해 오류(또는 대가) 함수의 기울기를 사용해 오류를 최소화시킬 수정의 방향을 찾는다. 최적화 알고리즘(optimization algorithm)과 학습 계수 변수(learning rate variable) 이 두 가지가 수정을 적용하는 것을 통제한다. 통상 수렴이 보장되고, ReLU 뉴런이 죽는 문제를 방지하기 위해 가능한 작아야 한다.
 
- 옵티마이저
신경망의 옵티마이저(Optimizers)는 일반적으로 경사 하강(Gradient descent) 알고리즘을 사용해 오차역전파를 견인한다. 임의로 선택한 미니-배치(확률적 경사 하강)을 최적화하는 등 국소 최소한도 문제가 발생하는 것을 피하고, 경사에 탄성 수정치를 적용하는 데 도움을 주는 메카니즘을 사용하는 경우도 많다. 일부 최적화 알고리즘은 경사(기울기) 기록들인 AdaGrad, RMSProp, Adam을 조사해 모델 파라미터의 학습 계수를 조정한다.
다른 모든 머신러닝과 마찬가지로, 별개의 검증 데이터 세트를 대상으로 신경망의 예측치를 확인할 필요가 있다. 이렇게 하지 않으면, 일반화된 예측 도구가 될 학습 대신 인풋만 기억하는 신경망이 만들어질 위험이 있다.

- 실제 DNN
실제 문제를 대상으로 하는 DNN은 10개 이상의 숨겨진 계층을 갖고 있어야 할지 모른다. 이 토폴로지는 단순할 수도, 꽤 복잡할 수도 있다. 네트워크에 계층이 많을 수록 인식할 수 있는 특징도 많아진다. 하지만 네트워크에 계층이 많을 수록 연산에 더 많은 시간이 소요되고, 트레이닝도 어려워진다.

딥 러닝 알고리즘
앞서 언급했듯, 대부분의 딥 러닝에 DNN을 사용한다. CNN(Convolutional Neural Networks)는 컴퓨터 영상에 많이 사용한다. RNN(Recurrent Neural Networks)는 자연어, 기타 시퀀스 프로세싱에 사용하는 때가 많다. LSTM(Long Short-Term Memory) 네트워크와 어텐션(Attention) 기반 신경망도 마찬가지다. 랜덤 포레스트(Random Forests)는 다양한 분류와 회귀 문제에 유용하지만 신경망은 아니다.

 


 > 뉴스
Print머신러닝 / 빅 데이터 / 애플리케이션2019.05.28
폭발적인 발전을 거듭하는 "딥 러닝" 이해하기
Martin Heller | InfoWorld

- CNN 신경망
CNN은 통상 콘볼루션, 풀링, ReLu, 완전 연결, 손실(loss) 계층을 사용해 시각령을 시뮬레이션한다. 콘볼루션 계층은 기본적으로 수 많은 작은 중복 지역의 정수(Integral)를 가져온다. 풀링 계층은 일종의 비선형 다운 샘플링을 실시한다. ReLU 계층은 비포화(Non-saturating) 활성화 함수인 f(x) = max(0,x)를 적용한다. 완전 연결 계층의 경우, 뉴런은 앞선 계층의 모든 활성체와 연결이 된다. 손실 계층의 경우, 분류에는 소프트맥스(Softmax)나 크로스 엔트로피(Cross-entropy) 손실 함수를, 회귀에는 유클리드(Euclidean) 손실 함수를 사용해 예측한 레이블과 진짜 레이블 간 편향을 파악해 조정하는 네트워크 트레이닝에 대해 계산을 한다.

- RNN과 LSTM, 어텐션 기반 신경망
피드포워드 신경망은 인풋에서 숨겨진 계층, 아웃풋 순으로 정보가 전달된다. 이는 네트워크가 한 번에 1개의 상태만 처리하도록 제약한다.
RNN의 경우, 정보가 순환식으로 흐른다. 따라서 네트워크는 이전의 아웃풋을 기억하게 된다. 이를 통해 시퀀스와 시계열을 분석할 수 있다. RNN에는 2가지 일반적인 문제가 있다. 경사도를 중첩시켜 쉽게 고칠 수 있는 ‘경사도 폭발(Exploding gradients)’ 문제와 쉽게 고치기 힘든 ‘경사도 사라짐(Vanishing Gradients)’ 문제다.
LSTM의 경우, 가중치를 수정하는 방법으로 이전 정보를 잊거나, 기억하도록 만들 수 있다. 이는 LSTM에 장단기 기억 능력을 제공하며, ‘경사도 사라짐’ 문제를 해결한다. LSTM은 과거 인풋의 수백 시퀀스를 처리할 수 있다.
어텐션 모델은 인풋 벡터에 가중치를 적용하는 일반화된 게이트이다. 계층적인 뉴럴 어텐션 인코더는 여러 어텐션 모듈 계층을 사용, 수 많은 과거 인풋을 처리한다.

- 랜덤 포레스트
DNN이 아닌, 또 다른 종류의 딥 러닝 알고리즘이 랜덤 포레스트다. 랜덤 포레스터는 수 많은 계층으로부터 구성된다. 그러나 뉴런이 아닌 의사결정 트리로부터 구성된다. 또 아웃풋은 개별 트리의 통계적인 예측치 평균이다(분류의 경우 최빈값, 회귀의 경우 평균). 랜덤 포레스트는 임의성(무작위성, 확률성)을 갖는다. 개별 트리에 부트스트랩 총계치를 사용하고(일명 bagging), 임의의 특징 하위 집합을 가져오기 때문이다.


딥 러닝 프레임워크의 종류
첫 번째 원칙에서 딥 러닝 프로그램을 만들 수도 있지만, 딥 러닝 프레임워크를 사용하는 것이 훨씬 더 효율적이다. 무엇보다, GPU와 기타 액셀레이터(가속기)와 함께 사용할 수 있도록 최적화되어 있기 때문이다. 가장 유명한 프레임워크가 구글이 만든 텐서플로우다. 텐서플로우에서 인기있는 고수준 API는 케라스(Keras)다. 다른 백엔드 프레임워크와 함께 사용할 수도 있다.

페이스북 등의 파이토치(PyTorch)는 텐서플로우의 좋은 대안이 될 수 있다. 동적 신경망을 지원한다는 특징이 있다. 에포크마다 네트워크 특징을 변경할 수 있다는 의미다. 패스트AI(Fastai)는 파이토치를 백엔드로 사용하는 고수준의 서드파티 API다. 

아마존 등의 MXNet도 텐서플로우의 좋은 대안이 될 수 있다. 이들은 확장성이 더 뛰어나다고 주장한다. MXNet에 반드시 필요한 고수준 API는 글루온(Gluon)이다. IBM과 인텔 등의 체이너(Chaniner)가 파이토치에 일정 수준 ‘영감’을 줬다. 신경망을 실행(run)으로 정의하며, 동적 신경망을 지원하기 때문이다.

앞서 언급한 프레임워크는 모두 기본적으로 파이썬(Python)이다. 그러나 스카이마인드(Skymind)에서 시작됐고 지금은 아파치 프로젝트가 된 DL4J(Deeplearning4j)는 주로 자바(Java)와 스칼라(Scala)다. DL4J는 아파치 스파크 및 하둡과 호환된다.

ONNX는 원래 교환이 가능한 API 모델용 오픈 생태계로 제시됐었다. 지금은 교환이 가능한 파일 형식과 함께 런타임을 지원한다. 엔비디아(Nvidia)의 텐서RT(TensorRT)는 엔비디아 GPU를 활용하는 AI 모델용 런타임이다. ONNX 런타임이 텐서RT를 플러그인으로 사용할 수 있다.
 
딥 러닝 전이 학습
전이 학습(Transfer Learning)이란 하나의 데이터 세트에 트레이닝 된 모델을 다른 데이터 세트에 맞춰 조정하는 프로세스다. 전이 학습을 이용하는 것이 처음부터 모델을 트레이닝시키는 것보다 빠르다. 또 트레이닝에 필요한 데이터가 더 적다. 

구글 클라우드 오토ML(Cloud AutoML)에 영상, 번역, 자연어용 딥 러닝 전이 학습이 구현되어 있다. 애저 머신러닝 서비스(Azure Machine Learning Service) 또한 이와 유사한 딥 러닝 전이 학습 서비스를 맞춤형 비전, 맞춤형 스피치, 번역, 맞춤형 검색에 대해 제공하고 있다.
 
분산형 딥 러닝 트레이닝
텐서플로우에도 분산형 트레이닝을 파라미터 서버로 조정하는 독자적인 방법이 있지만, 더 일반적인 방법은 오픈 MPI(Message Passing Interface)를 사용하는 것이다. 우버가 만든 텐서플로우, 케라스, 파이토치용 분산형 트레이닝 프레임워크인 호로보드(Horovod)는 오픈 MPI와 엔비디아 NCCL을 사용한다. 호로보드는 65~90%의 스케일링 효율성이 보존된다. 이는 트레이닝하는 모델에 따라 달라진다.

딥 러닝 관련 책과 자료
딥 러닝 패키지 가운데 하나를 설치하고, 샘플을 테스트하고, 튜토리얼을 읽는 방법으로 딥 러닝에 대해 더 많이 학습할 수 있다. 더 깊이 공부하고 싶다면, 다음 자료 가운데 하나를 선택하면 된다. 

- Neural Networks and Deep Learning, 저자: 마이클 넬슨 
- A Brief Introduction to Neural Networks, 저자: 데이비드 크리셀
- Deep Learning, 저자: 여호수아 벤지오, 이언 굿펠로우, 애런 쿠르빌 
- A Course in Machine Learning, 저자: 할 다움 3세 
- TensorFlow Playground, 저자: 대니얼 스밀코프 및 샨 카터
- CS231n: Convolutional Neural Networks for Visual Recognition, 편찬: 스탠포드 대학 
editor@itworld.co.kr 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함