머신러닝 개요 Introduction

머신 러닝을 처음 접하는 분들께 가능하면 쉽게 이야기 하듯이 설명드리고자 합니다. 틀린 내용이나 수정 내용 있으시면 댓글 달아주시면 감사하겠습니다 ^^

 

머신러닝이란

요즘 4차산업 혁명이라는 기사와 종종 뜨는 머신러닝이란 과연 무엇일까? 한마디로 정의하기 어려운 주제이다. 하지만 머신러닝을 이해하려면 인공지능에 대한 이해가 필요하다. 물론 인공지능도 막상 공부하려면 어려운 주제이다. 그러나  목적은 참 쉽다. 인간처럼 생각하는 컴퓨터를 만들고자 하는 것이다. 머신러닝도 비슷한 목적에서 출발한다.

인고지능은 인간처럼 생각하는 컴퓨터를 만들고자 온갓 기술을 다 이용한다. 논리, 추론, 상태공간 등등. 그러나 머신러닝은 데이터를 이용한다.  인공지능은 전문가 시스템과 같은 논리학으로부터의 접근이었다면 머신러닝은 일종의 귀납법적 접근이다. 따라서 머신러닝에서는 데이터가 중요하다. 데이터로부터 공통적인 특성(feature)들을 뽑아내서 인간처럼 어떻게 판단해야 할지를 배운다.

 

인간처럼 생각하는 컴퓨터를 만드는 기법 – 분류, 군집, 강화 학습

인간처럼 똑똑한 머신을 만드다는 의미에 대해서 조금은 구체적으로 생각해보자. 막연히 알아서 다 해주는 머신은 없다. 머신을 똑똑하게 만드는 과정을 학습이라고 한다. 머신이 학습한다라는 의미를 조금 세분화해보면 분류(classification), 군집(cluster), 강화(reinforcement)로 나뉠 수 있다. 분류는 머신이 학습해서 사물이나 대상을 구별할 수 있는 능력을 학습한다. 회귀 분석(regression)도 일종의 분류 기법에 속한다.  군집은 비슷한 대상끼리 묶어내는 능력을 학습한다.  강화는 머신이 시행착오를 겪어서 학습하도록 한다. 환경에서 주어지는 보상(reward)을 학습에 이용한다. 여러 가지를 시도해 보고 좋은 경로나 방법을 찾아낸다. 알파고에서 사용된 학습 방법이 강화학습이다.

머신러닝을 공부하다 보면 항상 나오는 단어들이 있다. 지도학습(Supervised Learning)비지도 학습(Unsupervised Learning). 지도학습은 라벨 혹은 타겟이 포함된 데이터를 학습한다. 예로 새가 그려진 이미지를 학습한다면 이미 그 이미지는 새라는 정답을 주어진 체 학습한다. 그래서 지도학습이라고 한다. 비지도학습 시에는 비슷한 이미지를 묶어내는 방식으로 학습한다. 해당 이미지가 새라는 것은 모르지만 새가 포함되어 있는 이미지와 비슷한 부류에 속하도록 학습할 수 는 있다. 지도 학습이 분류를 위한 것이며, 비지도학습은 군집을 위한 학습 방법이다.

 

데이터 수집에서 모델 배포까지

머신러닝은 결국 데이터를 이용해 학습하는 분야이다. 데이터를 학습하기 위해서는 실제 어떤 과정이 필요한지 알아보자. 먼저 1) 데이터 수집해야 한다. 데이터는 csv 포맷이나 xml, json 형태로 주로 주어지고 웹 URL을 통해서 데이터를 다운로드 하여 얻을 수 있다. 오픈 데이터를 검색하면 의료나 보험, 고객 등 다양한 수 많은 데이터들을 얻을 수 있다. 데이터 수집이 끝나면 2) 데이터 정제해야 한다. 데이터 자체에 오류도 있으며 빈값(결측값) 등도 있다. 오류가 있을 경우 수정(또는 삭제)을 해야 하고 부분 결측값인 경우에는 기본값 또는 평균값 등으로 변경한다. 데이터 정제가 끝나고 나면 3) 데이터 분석한다. 간단하게는 데이터 행수와 피처(feature) 개수, 피처별 평균값, 최대값, 최소값, 분산, 표준편차 등을 확인한다. 더 나아가 피처간 상관 관계 등도 확인한다. 이 때 데이터 시각화 (visualization) 등을 통해 파악할 수 있다. 데이터 분석이 끝나면 이제는 4) 모델(model)을 학습한다. 여러 가지 알고리즘에 따라 성능이 다를 수 있기에, 최적(최상)의 성능이 나올 수 있도록 여러 가지 모델을 비교, 평가(evaluation)한다. 모델간 성능 평가에 있어 컨퓨젼 메트릭스(confusion matrix)  나 ROC 커브가 종종 사용된다. 최종 모델이 선택되면 데이터를 예측하고 학습할 수 있는 API 형태로 머신러닝 5) 모델(model)을 배포한다.  MS 애저와 같은 클라우드 플랫폼을 사용하면 모델 배포가 클릭 몇 번만으로 완성된다

 

데이터셋 구성

최적의 모델 선정 및 학습을 위해서는 모델의 성능 평가가 필요하다.  그래서 보통은 학습용 데이터셋 그리고 테스트용 테스트셋으로 데이터를 분리해서 사용한다. 학습할 때 사용한 데이터로 테스트를 하면 머신이 이미 경험한(학습한) 데이터라 머신이 보지 못한 데이터에 대해서는 성능이 나빠질 수 있기에, 모델 선정을 위한 성능 평가로는 적당하지 않기 때문이다. 데이터의 크기에 따라 다르지만, 보통 데이터의 70% 정도는 학습(train)에 사용되고 나머지 30%는 테스트(test)에 사용된다. 더 나아가 학습 데이터 70%에서의 일부(10%)를 모델 검증(validation)용 데이터로 사용하기도 한다. 모델 검증이란 모델이 갖는 파라미터를 여러 가지 옵션으로 조합하여 최적의 모델 파라미터를 찾아 주어진 모델에서 최적의 파라미터 기반 모델을 구성하기 위함이다. 데이터 100% 기준으로 학습용 60, 검증용 10%, 테스트 30%으로 구성하는 것이다.

 

머신러닝 개발

이제 머신러닝 개발에 대해서 알아보자. 개발은 실체를 만드는 과정이다. 아이디어만 있으면 누구든 개발할 수 있다. 머신러닝 구현에 있어서 전통적인 자바(Java)와 C/C++ 와 같은 언어도 많이 사용되지만 최근 들어는 파이썬(python), R과 같은 언어가 인기를 끌고 있다. 이들 언어는 스크립트형 언어로 별도의 컴파일 과정이 필요없고 또한 패키지 형태로 관리되는 특징이 있다. 필자는 머신러닝 구현 언어로 파이썬(python)을 기반으로 한 텐서플로우(tensorflow)케라스(Keras)  파이토치(Pytorch) 등을 추천한다. 일종의 응용 라이브러리인 셈이다. 알고리즘 내부까지를 깊이 이해할 필요가 없다. 관련 언어와 라이브러리 사용법만 알면 왠만한 머신러닝을 구현할 수 있다.

해당 언어를 설치했으면 이제 IDE 개발 환경을 설치해야 한다. 파이썬 개발 환경으로는 Pycharm을, R은 RStudio를 추천한다. 파이썬의 경우라면 파이썬 설치 -> 텐서플로우 -> 케라스 -> PyCharm 순서로 설치하면 된다. 주의할 점은 파이썬은 2.x, 3.x 버전으로 구분되어 있고 32비트와 64비트 환경으로 구별하여 설치가능한데 텐서플로우 등은 64비트 설치해야 하기에 머신러닝을 하려면 파이썬 3.x 버전 64비트 환경 설치를 권장한다.

 

주가 예측을 위한 간단한 활용 사례

지금까지 설명한 내용을 리뷰해보자. 머신러닝을 구현하기 위한 언어를 선택하고 관련 라이브러리를 설치한다. 개발 환경을 설치한다. 그리고 간단한 예제를 확인한다.

머신러닝에 사용되는 간단한 데이터 샘플을 다운로드 한다. 샘플을 로드한 후 정제한 후, 머신러닝 알고리즘 가령 SVM을 이용해 학습한다. train셋으로 모델이 학습되고 나면 test 셋으로 모델의 학습 성능을 평가한다. 결과가 좋으면 모델을 배포한다.

배포된 모델에 새로운 데이터를 넣으면 머신러닝에서 학습한 방식으로 결과를 리턴한다. 이로써 일종의 서비스 구축도 가능한 것이다. 아래 링크의 파이썬 코드를 살펴보면 데이터를 얻어오는 과정, 정제하는 과정, 모델로 학습하는 과정 그리고 예측하는 과정 등을 확인해볼 수 있다.

케라스 활용 주가를 예측하기 위한 머신러닝 사례 살펴보기

 

머신러닝 알고리즘

데이터를 수집해서 준비가 끝나면 데이터를 정제하고 그리고 나서 학습과 테스트를 해야 하는데, 각종 알고리즘이 많다. 크게 지도 학습과 비지도 학습으로 분류되고 지도학습에는 분류(classification)와 회귀분석(regression)으로 나뉜다. 분류로는 k-NN, 신경망(Neural Network), SVM(Support Vector Machine), 의사결정트리(Decision Tree) 그리고 확률적인 베이시안(Bayesian) 기법등이 있으며 회귀분석에는 선형 회귀(Linear Regression), 로지스틱 회귀(Logistic Regression) 등이 있다. 비지도학습에는 군집의 방법이 있다. 군집에는 k-means, 계층군집(Hierarchical Clustering), DBSCAN(Density-based spatial clustering of applications with noise) 등이 있다. 기타로는 강화학습이 있으며 대표적으로는 Q-learning 와 같은 것들이 있다.

알고리즘마다의 특징이 있고 방법론도 다르지만 머신러닝 관점에서의 방법론은 거의 같다. 심지어 파이썬 머신러닝 라이브러리 중 scikit 의 경우 훈련할 때는 <model>.fit, 모델을 사용할 때는 <model>.predict 라는 함수로 구성이 동일하다. 다시 말해, 내부 알고리즘은 가지 각색이고 어렵지만 다행히 훈련하는 방법과 사용하는 방법은 비슷하게 구성되어 있으니 복잡한 내부 구현은 몰라도 머신러닝에 대한 관심만 충분히 있다면 해나가갈 수 있으리라 본다.

 

k-NN (k-Nearest Neighbor)

고전적인 분류 알고리즘이다. 학습할 데이터는 몇 개의 피쳐(feature) 로 구성된다. 피쳐라 하면 DB로 쉽게 생각하면 열(column)이라 된다. 그리고 각 행(row)은 데이터 인스턴스(instance)로 이해할 수 있다. 그러므로 피쳐는 데이터의 특징을 결정짓는 요소인 셈이다. 피쳐값은 보통 실수값이나 카테고리(category) 값 등으로 구성된다. 또는 피쳐의 차원이 2차원라고 가정하면 아래와 같이, 데이터는 (x, y) 2축으로 그려낼 수 있다.

k-NN은 지도 학습(supervised learning)에 속하기에 데이터마다 분류 정보가 주어져야 학습이 가능하다. 아래 그림처럼 하얀색과 노락색 원들은 다른 데이터 분류값을 지니고 있는 것이다. 이럴 경우, 만약 파란색 쿼리(query) 데이터에 대한 분류를 하고자 할때 이를 k-NN을 써서 이용해보자.

k-NN은 개념적으로 설명하면 쿼리되는 데이터(파란색)에 대하여, 근처 k개의 데이터를 보고 가장 많이 속해 있는 (가까운) 데이터의 분류로 쿼리 데이터의 분류 대상으로 정하는 방법이다.

아래 예에서 k가 3일때 근처 3개의 데이터를 보니 하얀색이 1개, 노란색이 2개이기에 쿼리 데이터(파란색)의 분류값은 노란색으로 분류하는 것이다

data feature 2D kNN에 대한 이미지 검색결과

 

신경망 (Neural Network)

인간의 뇌구조를 닮은 신경망 알고리즘은 뉴론(neuron)이라는 가장 기본적인 처리 장치(processing unit)으로 구성되어 있다. 신경망은 뉴론의 구조를 단순화한 것이다. 단지 뉴론으로부터 입력된 값들의 합이 주어진 기준치(threshold)보다 크면 활성화(activation) 된다. 정확히는 보통 시그모이드(sigmoid) 함수를 띈다.

한 개의 뉴론의 역할은 공간적 그래프 관점에서 보면 일종의 하이퍼플랜(hyperplane)을 의미하는 구분자(separator) 역할을 한다. 다시 말해, 피처(feature)들을 각 축으로 해서 뉴론의 웨이트(weight)를 법선벡터로 구성된 평면(2차원에서는 직선)을 통해 공간을 구분(분류)짓는 역할을 한다. 또는 뉴론들은 압축이나 확장 등의 피처 transformer 의 역할도 수행한다. 가령 3개의 입력 뉴론(노드)가 5개 혹은 1개의 뉴론으로 변환되는 구조로 이해할 수 있다.

놀라운 사실은 이렇게 단위 구조에서의 단순함을 이용해서도, 얼굴 인식과 같은 복잡한 태스크일지라도, 뉴론을 여러 개 그리고 다층으로 이용하면 해결이 가능하다.

Image Source

신경망은 입력층(input layer) 과 은닉층(hidden layer) 그리고 출력층(output layer)로 구성되어 있으며 위 그림에서 원이 하나의 뉴론(시그모이드 함수)을 나타낸다.

신경망의 층간에는 가중치(weight)라는 것이 있다. 입력 피쳐(노드)와 피쳐(노드) 연결 간에는 가중치가 있다. (위 그림에서는 화살표로 표시) 가중치는 피쳐간 영향력이나 중요성을 의미한다. 가령 얼굴인식에서 눈의 피쳐가 중요하면 관련 입력 피쳐의 가중치를 올리도록 학습하는 원리이다

신경망의 학습은 가중치 값을 입력과 출력에 대해서 조절하는 방식이며 역전파(back propagation)이라는 알고리즘을 사용한다. 역전파는 특정 입력값에 대해서 출력값(y^)과 원하고자 하는 기대값(y) 간의 오류(E) 차이를 활용해서 학습한다. (아래 식 참고) 즉 신경망의 출력값과 기대값 간의 오류로 가중치를 조절한다.

E=1/2(y^−y)^2

신경망을 좀 더 이해하고자 한다면 역전파의 원리 중 하나인 경사 하강법(gradient descent) 에 대해서 알아야 한다. 오류가 최소인 점을 찾고자 할 때 기울기 값을 보고 최소 오류를 찾아가는 방법이다. 마치 등고선에서 아래로 내려가고자 할 때 서있는 위치에서의 기울기 변화값을 보고 이동하는 방법이다.

정리하면 신경망에서 가중치를 학습해야 하며 가중치를 학습하기 위해서 역전파 알고리즘을 사용하고 역전파의 주요 원리로 오류를 최소화하기 위해 경사 하강법을 이용한다.

 

의사 결정 트리

의사 결정 트리(Decision Tree)는 분류 즉, 지도 학습의 일종이다. 데이터 안에 관측값뿐 아니라 목표값이 주어져야 한다. 아래는 타이타닉 침몰 시 생존자를 구별짓기 위한 의사 결정 트리를 나타낸다의사 결정트리에 대한 이미지 검색결과

구별하는 방법이 트리 모양과 같음을 볼 수 있다. 예로 남자이면서 나이가 작으면 타이타닉에서의 생존 확률이 높을 것을 확인할 수 있다.

의사 결정 트리에는 세부적으로는 ID3, C4.5, CART 등여러 가지 관련 알고리즘이 있다. 트리를 구성하는 방법 즉, 데이터를 학습하는 방법은 엔트로피 지표나 지니 인덱스(Gini index) 지표 등을 이용한다. 그러한 지표는 데이터를 효과적으로 나누기 위한 피처를 선택하기 위해 사용된다. 다시 말해, 목표값 기준으로 데이터가 섞혀 있으면 엔트로피(또는 불순도)가 높은 것으로 보는데, 결국 피처(노드 기준)들을 선택하면서 엔트로피를 낮추는 방법이 필요하다. 이를 가장 효율적으로 낮추기 위해 결정적인 지표들을 선택해나간다. 가령 위 타이타닉 예에서는 성별이 목표값(사망/생존)을 결정짓는 가장 결정적인 요소이기에 가장 먼저 확인하는 노드(루트) 구성된 것이다.

또한 신경망에서는 학습할 때 피처를 동시에 사용하는데 반해, 의사 결정 트리는 피처별로 개별 사용해서 학습하는 것이 다르다. 예로 데이터가 2차원이라면 신경망은 x, y 피처를 동시에, 공간적인 정보를 이용해서 학습하는 데, 의사결정 트리는 개별 x 따로, y 따로 피처별로 사용해서 학습한다. 데이터베이스로 이야기 하면 신경망은 인스턴스 (행기준)으로 의사결정 트리는 컬럼(열기준)으로 데이터를 학습해 나간다.

 

SVM(Support Vector machine)

딥러닝이 나오기 전에 SVM은 엄청난 인기를 끌었다. 성능 면에서 우수했기 때문이다. 데이터를 분류할 때 최적의 성능이 나오도록 하는 접근 방법을 취하고 있기 때문이다.

SVM 알고리즘은 데이터 분류 시 사용되는 경계의 마진(margin)을 최대화해서 분리한다. 아래 그림을 보면 클래스가 2개인 데이터(빨간색, 네모 데이터와 보란색 계통 원 데이터)로 구성되어 있으며 데이터를 가로지르는 초평면(hyperplane)이 2종류의 데이터를 분리하고 있다. 마진은 초평면과 데이터와의 거리이며 서포트 벡터(support vector)는 초평면과 가장 가까운 데이터를 의미한다. 아래 그림에서는 색칠되어 있는 데이터 지점을 가리킨다. 즉, 서포트 벡터는 데이터 유형을 결정짓는 (지지하는) 벡터라는 의미로 지어진 이름인 것이다.

The Optimal hyperplane
(그림 발췌는 여기)

위와 같은 데이터의 경우 데이터가 주어지면 눈으로도 초평면을 그릴 수 있을 것이다. 그렇지만 컴퓨터가 찾아내는 것은 쉽지는 않을 것이다. SVM 은 결국 최대 마진을 만족시키는 초평면을 찾아내는 알고리즘이다.

SVM 을 이해하기 위해서는 몇 가지 수학적인 이해가 필요한데, 가장 기본이 되는 것은 점과 선과의 거리 공식이다. 위 그림에서 초평면은  간단히 직선으로 모델링 될 수 있다. 그리고 초평면 (직선)의 법선 벡터(수직 벡터)를 W=(w1, w2)라 하고 w1x+w2y+c=0으로 표현 가능하다. 결론적으로 말하면 점과 직선의 거리는 1/|W| 에 비례한다

따라서 마진을 최대로 한다는 의미는 |W|를 최소화하는 조건과 동일하다. 그러면서 중요한 것은 |W|를 최소화하면서 각각의 데이터도 잘 분리해내는 W 벡터를 찾아야 한다는 것이다. W 벡터를 무조건 최소화시키면 W는 (0, 0)으로 접근할 것이기 때문이다. 이 때 사용되는 것이 라그랑지 승수(Lagrange multiplier)이다.

SVM은 직선 패턴뿐 아니라 커널이라는 것을 이용해 비선형 데이터도 분류할 수 있다. 커널의 원리는 데이터의 차원을 고차원으로 올려서 데이터를 분리한다. 직관적인 이해를 돕고자 유튜브 영상을 하나 소개한다.

 

확률의 이해

인공지능과 확률은 서로 관계가 깊다. 인공지능 또는 머신러닝을 이해하기 위해서는 확률이 언젠가는 나온다. 따라서 확률에 대한 이해는 반드시 필요하기에 기본적인 개념을 소개해본다.

확률을 이해하기 위해서는 두 가지를 기억하면 된다. 이벤트와 전체 집합(Super set)이다. 전체 집합에서 이벤트가 나오는 회수를 무한히 반복하면 확률에 근접한다. 가령 주사위를 굴릴 때 1이 나올 확률을 알아보면, 우선 전체 집합은 주사위를 아무리 굴려도 1~6까지의 숫자가 나오기에, 전체 집한 {1, 2, 3, 4, 5, 6} 이다. 그 외 경우의 수는 없다. 가령 100번을 반복하면 23번이 1이 나올 수도 있다. 그렇지만 무한히 반복하게 되면 결국 n{1}/n{1,2,3,4,5,6} = 1/6 인 확률로 근접하게 된다.

p= P(A) 라고 하면 0 <= p <= 1 사이의 값을 지니고 A라는 이벤트임을 의미한다. 확률을 이해하기 위해서는 A 라는 이벤트의 전체 집합이 무엇인지를 항상 알고 있어야 한다.

확률을 이해하면 조건부 확률이라는 개념이 나온다. P(A|B)라고 표시한다. 가운데 ‘|’ 표시가 있다. B라는 이벤트가 일어났다고 가정한 경우의 A가 일어날 확률이다. P(간암|흡연) 이라고 하면 흡연을 했을 경우의 간암이 걸릴 확률이다. 그렇다면 P(흡연)은 얼마 정도일까? 전체집합이 흡연하는 남자의 비율일까? 아니면 여자의 비율일까? 도메인에 따라 다르다 일반적인 경우이니 흡연하는 사람(남자+여자)일 경우일 것이다. 전 세계 인구중 흡연 인구의 비율을 측정하면 알 수 있다.

그렇다면 P(간암|흡연)은 어떻게 알 수 있을까? 흡연을 했을 때 간암이 걸릴 확률은 얼마일까? 간암과 흡연과의 인과 관계에 해당하기에 민감함 사항일 수 있다. 여기서 베이즈 정리(Bayes Theorem)가 나온다. 원인과 결과에 해당하는 이벤트가 단일 식으로 정리된다. 또는 P(간암)일 때의 사전 확률(prior)과 P(간암|흡연)의 사후 확률(posterior)과의 관계도 알 수 있다.

P(간암|흡연) = P(흡연|간암)P(간암)/P(흡연)

P(간암|흡연)이 P(흡연)과 P(간암) 그리고 P(흡연|간암) 등 데이터로부터 구할 수 있는 확률로 되버린다. 간암에 영향을 주는 요소가 흡연 외 식생활, 나이, 유전 등 여러 개 요소가 있다라고 가정하면 나이브 베이즈 분류 문제가 된다. 하지만 각각의 원인 간에는 서로 영향을 미치지 않는다는 조건에서 사용이 가능하다. 조건이 실질적으로 맞지 않는다 해도 나이브 베이즈는 문서 분류에서도 사용 가능하다. 간단하지만 좋은 성능을 내는 것으로 알려져 있다. 정리하면 신경망이나 의사결정트리도 가능하지만 이와 같은 확률적인 접근에서도 머신 기반 분류가 가능한 것이다. 머신러닝을 제대로 하기 위해서는 확률적인 접근 방법에 대한 이해도 소홀히 해서는 안 된다.

 

강화학습

머신러닝 학습 기법에는 지도 학습이나 비지도학습 외 강화학습(reinforcement learning)이라는 것이 있다. 게임이나 로봇을 학습할 때 사용하는 기법으로 대표적으로는 알파고에서 사용된 학습 알고리즘이다. 강화학습은 지도학습처럼 입력과 출력 라벨을 쌍으로 주어지며 학습할 필요가 없다. 게임을 학습한다고 했을 때 게임의 매 컨트롤마다 입려과 출력 라벨을 제공할 수 없음을 이해하면 지도학습과는 다른 방법으로 학습이 필요하다는 사실을 알 수 있다.

강화학습에는 지도학습과는 달리 에이전트와 환경이라는 객체가 등장한다. 에이전트가 환경에 대해서 행동을 하고 환경은 에이전트가 한 행동에 대해서 보상(reward)을 한다. 보상은 지도학습처럼 매 순간 주어질 필요도 없다. 지연 보상(delayed reward)라고도 한다.

Screen Shot 2017-02-28 at 4.00.34 PM

(출처: The Agent-Environment Interface)

보상과 비슷한 개념으로 가치(value) 라는 용어가 있다. 강화학습을 알고자 한다면 2가지 개념에 대한 이해가 필요하다. 보상은 즉각적인 값이며 가치는 보상의 기대값(expectation)이다. 현 시점에서 미래에 받을 수 있는 보상이 있다면 보상에 대한 기대가 생기며 따라서 가치가 생기는 것이다. 가치는 현재 상태(또는 행동)에 대한 가치이다.

강화학습의 에이전트는 결국 상태 공간(표)를 만들어 놓고 상태마다의 가치값을 탐색하고 업데이트한다. 행동을 하다 우연히 보상을 받게 되면 지난 상태로 가치가 파급된다.

최종적으로는 상태(또는행동)마다의 가치값을 알고 나면, 가치를 증가시키는 방향으로 상태를 전이시키거나 행동하면 되기에 결국 상태마다의 가치값을 알고자 하는 것이 강화학습이 실체이다.

상태가 너무 많을 경우에는 상태 표를 만들기 보다 DQN이라는 딥러닝 기법으로 상태에서의 가치값을 예측하기도 한다. 알파고 혹은 아타리(Atari) 게임을 학습한 알고리즘이기도 한다.

 

머신러닝과 딥러닝 차이

인공지능과 머신러닝간의 차이점은 데이터 학습에 있다고 앞에서 설명한바 있다. 그렇다면 머신러닝과 딥러닝의 차이점은 무엇일까. 당연히 딥이라는 느낌에서 알 수 있듯이 일반적인 머신러닝 기법보다는 학습에 사용되는 파라미터(parameter) 갯수가 많다. 딥러닝에서는 적게는 수십만개에서 많게는 백만개 이상의 파라미터들이 사용된다. 또한 머신러닝에서 데이터 형태나 형질 또는 요소 (DB에서의 컬럼)인 피처(feature)가 학습에 필요하나 딥러닝에서는 피처를 명시적으로 주어질 필요가 없다. 가령 얼굴인식의 예를 들어보자. 머신러닝에서는 얼굴 인식을 할 때 눈의 위치, 길이, 코의 위치, 길이, 입 길이 위치 등 얼굴인식에 사용되는 여러 가지 피처를 추출해서 학습에 사용되지만 딥러닝에서는 이미지 자체 픽셀값들을 이용해 학습한다. 피처를 알고리즘 자체에서 추출한다고 이해하면 된다.

 

주요 딥러닝 알고리즘

딥러닝 알고리즘에는 신경망의 확장으로 RNN (Recurrent Neural Network) 계열과 CNN (Convolution Neural Network) 계열이 있다. RNN는 음성, 자연어처리와 같은 시계열 데이터를 주로 처리하기 위한 알고리즘이며 CNN은 이미지 처리를 하기 위한 신경망이다.

RNN 알고리즘의 특징은 일반 신경망(중간층의 노드는 입력 노드로만 결정)과 달리, 중간층 노드(h_t)가 입력(x_t)뿐 아니라 이전 중간층의 노드(h_{t-1})로 결정되는 점이다. 다시 말해, 현재 시점(t)의 중간층 (hidden state) 출력은 과거 시점(t-1)의 중간층 출력과 현재 시점(t)의 입력값으로 결정된다. (h_t = f(h_{t-1}, x_t))

그리고 망이 깊어지면서 시계열 관련 학습이 잘 안되는 현상이 있는데(그레이언트 소실), 이를 해결하기 위해 신경망에 별도의 기억소자를 둔 LSTM, GRU 등의 알고리즘들이 나와있다.

CNN은 기본적으로 컨볼루션(Convolution)이라는 이미지 처리 알고리즘을 이용한다. 컨볼루션은 주로 이미지 필터링할 때 사용되는데(아래 그림) , 복잡해 보이는 이미지 처리도 픽셀들에 대한 단순한 컨볼루션 계산으로 구성할 수 있다.

convolution 이미지에 대한 이미지 검색결과

CNN은 바로 이러한 컨볼루션을 사용하며, 이미지에 적용되는 컨볼루션 자체를 학습하기 위한 알고리즘이다. 기존 신경망과 달리 컨볼루션에 필요한 숫자(파라미터)값만을 학습하기에 신경망 대비 적은 파라미터(가중치) 개수로도 망 학습이 가능하다. 적은 파라미터를 사용하면서 좋은 효과를 낼 수 있는 이유는, 컨볼루션이라는 기존 이미지 처리 알고리즘을 신경망에 결합(적용)했기 때문이다.

CNN은 인식률 향상 등 여러가지 알고리즘을 개선하기 위해 Alexnet, VGG16, Inception, ResNet 등의 알고리즘들이 나와 있다. 특히, ResNet의 경우 2015년 ILSVRC라는 대회에서 오류율 3.6%로, 인간의 분류 오차가 5% 수준이라는 점을 감안하면 딥러닝의 경이로운 성과를 엿볼 수 있다.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중