머신러닝 이야기

머신 러닝을 처음 접하는 분들께 가능하면 쉽게 이야기 하듯이 소개하고 싶다. 어디서? 이곳에서 ㅎ 시간날때마다 소설을 업데이트 하듯이 조금씩 진행하고자 합니다. ^^

 

머신러닝이란 – 인공지능과 머신러닝 차이

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

그러나 머신러닝은 데이터 학습을 통해 똑똑한 컴퓨터를 하는 점이 다르다.  인공지능은 전문가 시스템과 같은 논리학으로부터의 접근이었다면 머신러닝은 일종의 귀납법이라 이해할 수 있다. 요약하면 머신러닝에서는 데이터가 중요하다. 데이터로부터 공통적인 특성들을 뽑아내서 인간처럼 어떻게 판단해야 할지를 배운다.

 

학습 기법의 분류 – 분류, 군집, 강화 학습

머신이 학습한다라는 의미를 조금 세분화해보면 크게 분류(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)을 배포한다. 클라우드 플랫폼을 사용하면 모델 배포가 클릭 몇 번만으로 완성된다

 

데이터 셋 구성 (aka. train/test)

머신러닝 모델을 선택하고 학습하기 위해서는 학습 모델에 대한 성능 평가가 필요하다. 데이터에 따라 학습 알고리즘 성능이 다르게 나타나기 때문이다.

그래서 학습을 할 때 검증을 하기 위한 데이터를 별도로 구분한다. 학습할 때 사용한 데이터로 테스트를 하면 머신이 이미 경험한 데이터라 성능 평가가 정당하지 않기 때문이다. 보통 데이터의 70% 정도는 학습(train)에 사용되고 나머지 30%는 모델 테스트(test)에 사용된다. 추가로 학습가 테스트 중간 과정으로 검증(validation)이라는 용도로 나뉘기도 한다. 테스트 전 모델 학습 자체를 여러 가지 지표를 기준으로 최적화하는 과정이다.

 

머신러닝 구현 – 개발 언어

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

익숙한 언어 혹은 원하는 언어를 선택하고 기본적인 언어 사용법을 익히고나서 머신러닝 관련 라이브러리 등을 설치하고 구현해 나가면 된다.

해당 언어를 설치했으면 이제 IDE 개발 환경을 설치해야 한다. 개인적으로는 파이썬 개발 환경으로는 Pycharm을, R은 RStudio를 추천한다. 필자는 Visual Studio code 를 종종 활용한다. 무료이면서 가벼운 느낌이면서 또한 여러 가지 확장 모듈 설치가 가능하다

예로 파이썬의 경우라면 파이썬 설치 -> 텐서플로우 -> 케라스 -> 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 와 같은 것들이 있다.

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

세부 알고리즘은 차차해도 되니 먼저 머신러닝에 대한 전체적이고 전반적인 흐름 등을 이해하면 도움이 된다.

 

k-NN

고전적인 분류 알고리즘이다. 학습할 데이터는 몇 개의 피쳐(feature) 벡터로 구성된다. 피쳐 벡터라 하면 DB로 이해하면 열(column)로 이해하며 된다. 각 행(row)은 데이터 인스턴스(instance)로 이해할 수 있다. 그러므로 피쳐 벡터는 데이터를 구성하는 실질적인 값인 셈이다. 피쳐값은 보통 실수값이나 카테로리 값 등으로 구성된다.

피쳐의 벡터 차원이 2차원라고 가정하면 아래와 같이, 데이터는 (x, y) 2축으로 그려낼 수 있다. k-NN은 지도 학습(supervised learning)에 속하기에 데이터마다 분류 정보가 주어져야 학습이 가능하다. 아래 그림에서 하얀색과 노락색 원들은 다른 데이터 분류값을 지니고 있는 것이다. 이럴 경우, 만약 파란색 쿼리(query) 데이터의 분류 정보를 알고 싶을 때, k-NN을 이용해보자.

k-NN은 쿼리되는 데이터의 k개 근처의 데이터를 보고 가장 많이 속해 있는 (가까운) 데이터의 분류로 쿼리 데이터의 분류 대상으로 정하는 방법이다.

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

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

 

신경망

인간의 뇌구조를 닮은 신경망 알고리즘은 뉴론(neuron)이라는 가장 기본적인 처리 장치(processing unit)으로 구성되어 있다. 신경망의 기능성에 비해서 놀랄만큼 뉴론의 구조는 단순하다. 단지 기준치(threshold)가 넘으면 활성화(activation) 된다. 정확히는 보통 시그모이드(sigmoid) 함수를 띈다.

한 개의 뉴론의 역할은 구분자(separator) 역할을 한다. 다시 말해, 피처(feature)를 구분짓는 역할을 한다. 쉽게 설명하면 가령 1차원의 피처라면 0, 1 사이의 데이터를 구분짓기 위해서는 0.5의 기준치를 갖는 뉴론을 사용하면 되는 것이다. 얼굴 인식을 하기 위한 복잡한 다차원의 피쳐일지라도 기준치 (시그모이드) 함수를 여러 개 이용해서 하는 것이다. 신경망은 뇌 구조를 모방하였으며 단순한 장치를 여러 개 연결해서 복잡한 기능을 수행하는 방법이라 할 수 있다.

Image Source

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

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

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

E=1/2(yt)^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에 연결하는 중