2017.02.08

좀더 깊이 있게 살펴보는 딥러닝의 '의미'와 '활용법'

Martin Heller | InfoWorld
인공지능(AI)과 머신러닝, 특히 딥러닝은 아마 2016년 가장 성공적이었던 기술 주제라 표현할 수 있을 것이다. 딥러닝의 '의미'와 이를 직접 활용하는 '방법'에 대해 알아본다.




관심 있게 지켜봤던 이라면 아마 감지했을 것이다. 2016년 가을, 개별 단어의 뜻을 모호하게 연결시킨 번역 결과물만 내놓던 구글 번역(Google Translate)이 갑자기 세련되면서도 조리 있는 문장으로 구성된 번역 결과물을 제시하기 시작했다. 모든 언어에 해당되는 이야기는 아니지만, 최소한 영어-불어, 영어-중국어, 영어-일본어 등에서의 번역이 크게 개선됐다.

이렇게 품질이 개선된 것은 9개월에 걸친 협력 때문이었다. 구글 브레인(Google Brain)과 구글 번역 측은 구글 텐서플로우(TensorFlow) 프레임워크를 활용해 이 같은 성과물을 달성했다. 단어 임베딩과 딥러닝으로 교육한 신경망을 적용했던 것이다.

마법 같은 일이 일어난 것일까? 전혀 그렇지 않다. 쉬운 일이 아니었다. 개선 프로젝트에 참여한 연구원들은 네트워크를 교육하기 위해 방대한 번역 자료를 활용해야 했다. 그들은 또 교육을 위해서는 수 천 개의 GPU가 필요하고, 교육 시킨 신경망에서 대규모로 번역을 실행시키려면 TPU(Tensor Processing Unit)이라는 새로운 '칩'을 만들어야 한다는 사실을 깨닫기도 했다. 시스템이 사람 번역가처럼 능력을 발휘하도록 훈련시키는 과정에서, 수 백 차례 네트워크를 쇄신하는 업무를 진행하기도 했다.

그렇다면 구글 정도의 '규모'를 갖추고 있어야 딥러닝을 활용할 수 있을까? 그렇지 않다. 클라우드 덕분이다. 다수의 CPU 코어와 RAM으로 중무장한 클라우드 VM과 콘테이너 인스턴스를 실행시킬 수 있는 것은 물론, 수많은 GPU도 클라우드에서 활용할 수 있다. 딥러닝 소프트웨어 포함하고 있는 선탑재 이미지도 마찬가지다.

기존의 프로그래밍
딥러닝의 작동 원리를 알려면, 기존 프로그램과 방식이 크게 다른 머신러닝과 신경망(신경 네트워크)를 이해해야 한다. 기존 프로그래밍의 경우, 컴퓨터가 실행시킬 특정 명령을 쓴다. C 프로그래밍 언어의 'Hello, World' 프로그램을 예로 들어보자.

/* Hello World program */
#include <stdio.h>
main()
{
printf("Hello, World");
}


컴파일링하면, 이 프로그램은 단 한 가지 일을 한다. 표준 아웃풋 포트에 'Hello, World'라는 스트링을 출력한다. 실행될 때마다 매번 프로그래머가 명령한 이 일만 한다.

다음으로는 동일한 인풋으로 다양한 아웃풋을 만드는 프로그래밍 방법이 궁금할지 모르겠다. 이를테면 게임 캐릭터가 용에 도끼를 휘두르는 동작이 이에 해당된다. 이를 위해서는 난수 생성기, 생성기가 생성한 수를 기준으로 여러 동작을 수행하는 프로그램이 필요하다.

BOOL Swing_ax_at_dragon()
{
BOOL retval = rand()>SOME_THRESHOLD;
if (retval)
printf("Your ax hits. Dragon dies.");
else
printf("Your ax misses. Dragon spits flames.");
return retval;
}


다시 말해, 기존 프로그래밍의 경우 동일한 동작이 아닌 통계적으로 다양한 동작을 원한다면 '변수'를 프로그래밍 해야 한다. 머신러닝은 바로 이 개념을 바꿔 놓았다.

머신러닝
머신러닝(ML)에서 핵심적인 업무는, 동일한 인풋들로부터 미래의 아웃풋을 도출하는 프레딕터(Predictor)를 만드는 것이다. 이 업무는 역사적 데이터를 가지고 프레딕터를 통계적으로 교육시킴으로써 이뤄진다.

예상 값이 '실수(Real Number)'라면, "화요일 오후 MSFT 주식 가격은 얼마일까?" 같은 회기(regression) 문제에 해당한다. 과거의 MSFT 주식 거래 역사값, 관련 주식, 뉴스, 주가와 상관관계가 있는 각종 경제 데이터를 교육에 이용하게 된다.

'예'나 '아니오' 대답을 예상하는 경우라면, "화요일 오후 MSFT 주가는 현재 대비 상승 또는 하락할까?"라는 2진법 질문에 해당된다. 회귀 문제처럼 수 많은 데이터를 적용할 수 있지만, 프레딕터 최적화에 쓰는 것과는 다른 알고리즘이 사용된다.

2가지 이상을 예측해야 하는 경우도 있다. "MSFT 주식에 대해 할 수 있는 최고의 선택은 무엇일까? 팔까? 살까? 보유할까?"와 같은 질문이다. 앞에서와 마찬가지로 수 많은 데이터를 적용할 수 있지만, 알고리즘이 다르다.

일반적으로 ML에서 가장 먼저 준비해야 하는 것은 역사적 데이터다(저자의 애저 ML 튜토리얼 참고). 그리고 데이터를 무작위로 2 그룹으로 분리한다. 각각 ‘교육’과 ‘테스팅’이라는 그룹이다. 교육 데이터 처리에는 알려진 목표 값을 이용한다. 그렇지만 테스팅 데이터 처리에는 다른 데이터로 목표 값을 예상한 후, 예상치와 목표치를 비교해 오류율을 계산한다.

마이크로소프트의 머신러닝 알고리즘 치트 시트(Machine Learning Algorithm Cheat Sheet)는 알고리즘 선택에 도움을 주는 자료다. 특히 애저 ML이나 기타 범용 ML 라이브러리, 서비스를 이용하고 있다면 유용하다. 앞서 언급한 주식 시장 데이터에서 회귀 문제에는 디시전 포레스트(Decision Forest, 정확성과 빠른 교육이 장점)가, 2가지 분류에는 로지스틱 리그레션(Logistic Regression, 빠른 교육과 선형 모델)이, 여러 가지 분류에는 디시전 정글(Decision Jungle, 정확성과 작은 메모리 크기)이 각각 적합할 수 있다.

그렇지만 최고의 알고리즘을 찾을 수 있는 유일한 방법은 모두 시험해보는 것이다. 참고로 Spark.ML 등 몇몇 ML 패키지와 서비스는 알고리즘을 비교, 최고를 선택하는데 유용한 가이드를 제시하고 있다.

한편 신경망(neural networks)은 위에서 설명한 예측 질문 3종 모두에 이용될 수 있는 옵션이다. 신경망은 또 정확성이 높고, 교육 시간이 길다는 특징을 지닌다. 이 외에 신경망만의 특성은 무엇이 있는지 이어서 살펴본다.

신경망
신경망 개념의 '뿌리'는 1940년대까지 거슬러 올라간다. 서로 연결된 한계 스위치(threshold switches)로 인공 신경 네트워크를 구축하면 동물의 두뇌와 신경 시스템(망막 포함)과 유사한 방식으로 패턴을 학습할 수 있다는 개념이다.
 
CIO의 프리미엄 콘텐츠입니다. 이 기사를 더 읽으시려면 개인정보 등록이 필요합니다. 이미 등록하신 분은 '본인확인'을 해주십시오.
2017.02.08

좀더 깊이 있게 살펴보는 딥러닝의 '의미'와 '활용법'

Martin Heller | InfoWorld
인공지능(AI)과 머신러닝, 특히 딥러닝은 아마 2016년 가장 성공적이었던 기술 주제라 표현할 수 있을 것이다. 딥러닝의 '의미'와 이를 직접 활용하는 '방법'에 대해 알아본다.




관심 있게 지켜봤던 이라면 아마 감지했을 것이다. 2016년 가을, 개별 단어의 뜻을 모호하게 연결시킨 번역 결과물만 내놓던 구글 번역(Google Translate)이 갑자기 세련되면서도 조리 있는 문장으로 구성된 번역 결과물을 제시하기 시작했다. 모든 언어에 해당되는 이야기는 아니지만, 최소한 영어-불어, 영어-중국어, 영어-일본어 등에서의 번역이 크게 개선됐다.

이렇게 품질이 개선된 것은 9개월에 걸친 협력 때문이었다. 구글 브레인(Google Brain)과 구글 번역 측은 구글 텐서플로우(TensorFlow) 프레임워크를 활용해 이 같은 성과물을 달성했다. 단어 임베딩과 딥러닝으로 교육한 신경망을 적용했던 것이다.

마법 같은 일이 일어난 것일까? 전혀 그렇지 않다. 쉬운 일이 아니었다. 개선 프로젝트에 참여한 연구원들은 네트워크를 교육하기 위해 방대한 번역 자료를 활용해야 했다. 그들은 또 교육을 위해서는 수 천 개의 GPU가 필요하고, 교육 시킨 신경망에서 대규모로 번역을 실행시키려면 TPU(Tensor Processing Unit)이라는 새로운 '칩'을 만들어야 한다는 사실을 깨닫기도 했다. 시스템이 사람 번역가처럼 능력을 발휘하도록 훈련시키는 과정에서, 수 백 차례 네트워크를 쇄신하는 업무를 진행하기도 했다.

그렇다면 구글 정도의 '규모'를 갖추고 있어야 딥러닝을 활용할 수 있을까? 그렇지 않다. 클라우드 덕분이다. 다수의 CPU 코어와 RAM으로 중무장한 클라우드 VM과 콘테이너 인스턴스를 실행시킬 수 있는 것은 물론, 수많은 GPU도 클라우드에서 활용할 수 있다. 딥러닝 소프트웨어 포함하고 있는 선탑재 이미지도 마찬가지다.

기존의 프로그래밍
딥러닝의 작동 원리를 알려면, 기존 프로그램과 방식이 크게 다른 머신러닝과 신경망(신경 네트워크)를 이해해야 한다. 기존 프로그래밍의 경우, 컴퓨터가 실행시킬 특정 명령을 쓴다. C 프로그래밍 언어의 'Hello, World' 프로그램을 예로 들어보자.

/* Hello World program */
#include <stdio.h>
main()
{
printf("Hello, World");
}


컴파일링하면, 이 프로그램은 단 한 가지 일을 한다. 표준 아웃풋 포트에 'Hello, World'라는 스트링을 출력한다. 실행될 때마다 매번 프로그래머가 명령한 이 일만 한다.

다음으로는 동일한 인풋으로 다양한 아웃풋을 만드는 프로그래밍 방법이 궁금할지 모르겠다. 이를테면 게임 캐릭터가 용에 도끼를 휘두르는 동작이 이에 해당된다. 이를 위해서는 난수 생성기, 생성기가 생성한 수를 기준으로 여러 동작을 수행하는 프로그램이 필요하다.

BOOL Swing_ax_at_dragon()
{
BOOL retval = rand()>SOME_THRESHOLD;
if (retval)
printf("Your ax hits. Dragon dies.");
else
printf("Your ax misses. Dragon spits flames.");
return retval;
}


다시 말해, 기존 프로그래밍의 경우 동일한 동작이 아닌 통계적으로 다양한 동작을 원한다면 '변수'를 프로그래밍 해야 한다. 머신러닝은 바로 이 개념을 바꿔 놓았다.

머신러닝
머신러닝(ML)에서 핵심적인 업무는, 동일한 인풋들로부터 미래의 아웃풋을 도출하는 프레딕터(Predictor)를 만드는 것이다. 이 업무는 역사적 데이터를 가지고 프레딕터를 통계적으로 교육시킴으로써 이뤄진다.

예상 값이 '실수(Real Number)'라면, "화요일 오후 MSFT 주식 가격은 얼마일까?" 같은 회기(regression) 문제에 해당한다. 과거의 MSFT 주식 거래 역사값, 관련 주식, 뉴스, 주가와 상관관계가 있는 각종 경제 데이터를 교육에 이용하게 된다.

'예'나 '아니오' 대답을 예상하는 경우라면, "화요일 오후 MSFT 주가는 현재 대비 상승 또는 하락할까?"라는 2진법 질문에 해당된다. 회귀 문제처럼 수 많은 데이터를 적용할 수 있지만, 프레딕터 최적화에 쓰는 것과는 다른 알고리즘이 사용된다.

2가지 이상을 예측해야 하는 경우도 있다. "MSFT 주식에 대해 할 수 있는 최고의 선택은 무엇일까? 팔까? 살까? 보유할까?"와 같은 질문이다. 앞에서와 마찬가지로 수 많은 데이터를 적용할 수 있지만, 알고리즘이 다르다.

일반적으로 ML에서 가장 먼저 준비해야 하는 것은 역사적 데이터다(저자의 애저 ML 튜토리얼 참고). 그리고 데이터를 무작위로 2 그룹으로 분리한다. 각각 ‘교육’과 ‘테스팅’이라는 그룹이다. 교육 데이터 처리에는 알려진 목표 값을 이용한다. 그렇지만 테스팅 데이터 처리에는 다른 데이터로 목표 값을 예상한 후, 예상치와 목표치를 비교해 오류율을 계산한다.

마이크로소프트의 머신러닝 알고리즘 치트 시트(Machine Learning Algorithm Cheat Sheet)는 알고리즘 선택에 도움을 주는 자료다. 특히 애저 ML이나 기타 범용 ML 라이브러리, 서비스를 이용하고 있다면 유용하다. 앞서 언급한 주식 시장 데이터에서 회귀 문제에는 디시전 포레스트(Decision Forest, 정확성과 빠른 교육이 장점)가, 2가지 분류에는 로지스틱 리그레션(Logistic Regression, 빠른 교육과 선형 모델)이, 여러 가지 분류에는 디시전 정글(Decision Jungle, 정확성과 작은 메모리 크기)이 각각 적합할 수 있다.

그렇지만 최고의 알고리즘을 찾을 수 있는 유일한 방법은 모두 시험해보는 것이다. 참고로 Spark.ML 등 몇몇 ML 패키지와 서비스는 알고리즘을 비교, 최고를 선택하는데 유용한 가이드를 제시하고 있다.

한편 신경망(neural networks)은 위에서 설명한 예측 질문 3종 모두에 이용될 수 있는 옵션이다. 신경망은 또 정확성이 높고, 교육 시간이 길다는 특징을 지닌다. 이 외에 신경망만의 특성은 무엇이 있는지 이어서 살펴본다.

신경망
신경망 개념의 '뿌리'는 1940년대까지 거슬러 올라간다. 서로 연결된 한계 스위치(threshold switches)로 인공 신경 네트워크를 구축하면 동물의 두뇌와 신경 시스템(망막 포함)과 유사한 방식으로 패턴을 학습할 수 있다는 개념이다.
 
CIO의 프리미엄 콘텐츠입니다. 이 기사를 더 읽으시려면 개인정보 등록이 필요합니다. 이미 등록하신 분은 '본인확인'을 해주십시오.
X