brunch

You can make anything
by writing

C.S.Lewis

by 라인하트 Sep 05. 2019

인공지능의 이해 (1/6): 머신 러닝의 원리

인공 지능의 개요

   인공지능 (AI, Artificial Intelligence) 은 인간에 의해 만들어진 지능을 의미하며, 인간과 유사하게 학습하고 추론하는 능력을 보유한 시스템입니다. 인공지능은 1950년대에 개발된 머신러닝과 인공 신경망 알고리즘을 시작으로 장족의 발전을 거듭하였습니다. 인공지능은 초창기에 많은 관심을 가졌다가 암흑기를 거쳐 구글 딥마인드의 알파고까지 진화하면서 유명해졌습니다. 


   사람들이 인공 지능을 이야기를 할 때 너무 많은 용어들이 쏟아집니다. 인공지능의 어떤 부분을 강조하는 가에 따라 용어의 차이가 있을 뿐 본질적으로 비슷비슷합니다. 일정한 패턴을 파악을 할 수 있다는 점을 강조할 때는 패턴인식 (Pattern Recognition), 기존에 알기 힘든 정보를 제공한다는 점을 강조할 때는 데이터 마이닝 (Data Mining), 스스로 학습한다는 측면을 강조할 때는 머신 러닝 (Machine Learning), 인공 신경망을 활용하여 방대한 데이터를 다룬다는 것을 강조하고 싶을 때는 딥러닝(Deep Learning)이라는 용어를 사용합니다.    


    인공지능은 스스로 학습하고 추론하는 기계입니다. 기계가 학습한다는 의미가 무엇인지를 알기 위해 전통적인 기계학습 (머신러닝)의 원리부터 공부합니다.  



머신 러닝의 원리

   머신러닝(ML, Machine Learning)을 하는 기계는 세상을 수학으로 바라봅니다.  예를 들어, 고혈압을 진단하는 머신 러닝 알고리즘을 만든다고 가정합니다. 'x'는 고혈압 발생에 영향을 미치는 요소들입니다. x1은 식습관, x2는 흡연,  x3는 술,  x4는 수면, x5는 스트레스, x6는 운동이라고 정의합니다. 이외에도 새로운 요소가 발견되면 계속 추가합니다. 'w'는 각 요소들이 고혈압 발생에 얼마나 큰 영향을 미치는 지를 판단하기 위한 가중치입니다. 식습관을 나타내는 x1은 w1 만큼의 가중치를, 흡연을 나타내는 x2는 w2 만큼의 가중치를, 술을 나타내는 x3는 w3 만큼의 가중치를 가집니다. y는 고혈압을 일으키는 모든 원인에 가중치가 부여된 값의 총합입니다. 그리고, 'b'는 편향을 의미하는 'bias'의 약자입니다. 'H(x) = wx+b'는 일차함수이므로 'w'기울기를 가진 직선 그래프를 'b' 만큼 움직일 수 있습니다. 고혈압에 영향을 미치는 원인을 분석할 때 다음과 같은 가설을 세울 수 있습니다.


식습관(x1) 하나만으로 고혈압에 미치는 영향을 판단할 때
y= w1x1 + b

식습관(x1), 흡연(x2) 그리고 술(x3) 세 가지 요소로 고혈압에 미치는 영향을 판단할 때
y= w1x1 + w2x2 + w3x3 + b

이 세상의 모든 원인을 기준으로 판단할 때
y= w1x1 + w2x2 + w3x3 + w4x4 + w5x5 +...... + b


   고혈압을 진단하는 기계를 위해 가설 함수 H(x)를 만들 때 가장 어려운 요소는 무엇일까요? 고혈압을 일으키는 원인은 상대적으로 쉽게 나열할 수 있지만, 각 요소들에 가중치를 산정하는 것은 어렵습니다. 각 원인들의 가중치가 정확하지 않으면 정확한 진단이 나오지 않습니다. 그래서 기계는 주어진 'H(x)=wx + b'라는 가설식을 바탕으로 고혈압 진단을 받은 빅데이터를 입력하여 각 원인별 최적의 가중치 값이 나올 때까지 반복 실험합니다. 결국, 머신 러닝은 디자인된 함수에서 가장 정확한 가중치 (w)와 편향성(b)을 찾아내는 과정입니다.   


머신 러닝은 정확한 가중치(w)와 편향성(b)을 찾아내는 과정



선형 회귀 (Linear Regression) 함수를 다루는 머신러닝

   아래 표에서 x는 사과, y는 가격입니다. (1,1), (2,2), (3,3)이라는 세 개의 데이터가 있고, '사과 5개의 값은 얼마입니까?'라는 질문에 답을 찾아야 합니다. 일차함수의 해를 구하는 방법을 적용하면, 'y=x'라는 방정식을 만들어서 (5,5)라는 답을 유추합니다. 하지만, 일차방정식을 모르는 컴퓨터는 3개의 데이터에서 사과 5개의 값을 유추할 수 없습니다. 

  

   즉, 일차 평면에 그려진 점 3개가 어떤 의미를 가지는 지를 컴퓨터는 이해하지 못합니다. 기계가 현재의 문제를 해결할 수 있도록 가설식 'H(x)=wx + b'를 입력합니다. 기계는 가설식(Hypothesis)에 랜덤하게 선택한 가중치 'w'를 설정하고 3개의 데이터의 x를 입력하여 결과값 y와 오차가 얼마나 있는지를 계산합니다. 아래 왼쪽 그림의 파란색 실선은 기계가 랜덤하게 'w'를 0.3, 'b'를 1.2라는 값을 선정하여 만든 그래프입니다. 그래프의 일차 방정식은 'y= 0.3x + 1.2'입니다.


    


   기계는 실제값 y와 예측치 H(x)의 오차를 계산하기 위해 'H(x) - y' 식을 사용합니다. 이 오차를 비용(Cost) 또는 손실(Loss)이라고 합니다. Cost (비용)를 구하는 함수는 단순히 '실제값과 예측치의 오차'만을 표현하는 것이 아니라 오차를 줄이도록 최적화되어야 합니다. 선형 회귀식은 평균 제곱 오차 (MSE, Mean Squered Error)를 사용합니다. 파란색 실선의 일차 방정식 'y= 0.3x + 1.2'에 의한 실제 데이터는 (1,1.5), (2,1.8), (3,2.1)입니다. 예측치 H(x)와 실제값 y와의 오차는 1일 때 -0.5, 2일 때 0.2, 3일 때 0.9의 오차가 발생합니다. 단순하게 세 오차를 더한다면 음수로 인해 실제 오차를 정확히 측정할 수 없습니다. 그래서 음수를 제거하기 위해 각각의 오차에 제곱한 값을 모두 더하고, 데이터 개수로 나누어 줍니다. 따라서, 평균 제곱 오차 MSE = (0.25 + 2.25 + 0.81)/3 = 1.1입니다. 


   기계는 맨 처음 랜덤하게 가중치 'w'와 편향성 'b'를 찾았지만, 두 번째부터는 평균 제곱 오차 MSE가 적은 'w'와 'b'를 선택하기 위해 최적화 (옵티마이저, Optimizer) 알고리즘을 사용합니다. 비용 함수의 식은 평균 제곱 오차 MSE를 사용하므로 직선이 아닌 포물선 모양의 이차 방정식입니다. 포물선 모양의 함수에서 가장 기본적인 최적화 알고리즘은 경사하강법입니다. 

 

   

   기계는 최초에 랜덤 하게 w=0.3으로 설정했습니다. Cost가 0인 값을 찾으려면 그래프의 오른쪽으로 이동시켜야 합니다. 특정 지점을 기준으로 왼쪽과 오른쪽으로 이동하는 것은 접선의 기울기 값을 이용합니다. 기울기가 음수라면 오른쪽으로 양수라면 왼쪽으로 이동합니다. 접선의 기울기는 고등학교 때 배운 미분방정식으로 구할 수 있고, 경사하강법 알고리즘이 자동으로 찾아갑니다. Cost가 최소화된 값은 접선의 기울기가 0이 되는 지점입니다.   


   정리하면, 기계가 비용이 0인 지점의 가중치 'w'와 편향성 'b'를 를 찾는 과정을 학습(Training)이라고 합니다. 데이터가 많을수록 정확한 'w'와 'b'의 값을 얻을 수 있습니다. 


머신 러닝은 데이터 많을수록
 정확한 가중치 'w'와 편향성 'b'를 찾는다. 



현실 세계의 다양한 문제를 해결하는 머신 러닝

   현실 세계는 일차 함수의 선형 회귀식으로만 해결할 수는 없습니다. 과학자들은 복잡한 현실 세계를 반영할 수 있는 다양한 응용 함수를 개발합니다. 변수가 하나가 아닌 여러 개인 경우는 매트릭스와 같은 행렬을 활용합니다.  


   참 또는 거짓, 1 또는 0, 암인지 아닌지, 스팸 메일인지 아닌 지 등 O/X 같은 답을 원하는 질문들은 Binary Classification 함수를 이용합니다.  



   꽃이나 동물을 분류할 경우는 답이 여러 선택지 중에 하나입니다. 각 분류마다 선형 회귀 가설식을 만들고 이것을 세트로 묶어서 답을 산출합니다. 이를 Multi-label Classification이라고 합니다. 선택지의 수만큼 함수가 필요합니다.  




숫자 이미지를 인식하는 머신 러닝의 사례

   머신 러닝 기계는 고양이와 개의 사진을 구분하거나 꽃 사진을 분류할 수 있습니다. 머신 러닝은 기계가 이미지를 분류하는 작업의 정확도를 획기적으로 높였습니다. 기계는 수만 장의 사진을 통해 적절한 가중치를 학습한 후 새로운 이미지를 분류합니다. 처음 이미지 분류의 필요성을 느낀 분야는 우체국에 배달된 편지 봉투에 적힌 우편번호를 판독하는 것이었습니다.   


   MNIST 데이터셋은 기계가 손글씨로 작성된 우편번호를 자동으로 인식할 수 있도록 미국에서 만든 손글씨 숫자 7만 개로 구성된 기계 학습용 데이터셋입니다. MNIST 데이터셋은 기계가 학습하기 위해 사용하는 55,000 개의 학습용 데이터셋과 정확도를 테스트하기 위해 사용하는 15,000개의 테스트 셋으로 구성되었습니다.  


  예를 들어, 숫자 5에 대한 이미지 파일은 28*28인 784개의 픽셀로 이루어져 있습니다. 각 픽셀은 0~255 단계의 색 투명도를 0과 1 사이의 값으로 표현합니다. 가장자리는 숫자 0으로 표시되고, 글자가 지나간 픽셀은 투명도가 표시됩니다.    




   기계가 손글씨 숫자를 인식하도록 학습시키기 위해서는 두 가지가 필요합니다. 데이터와 가설식입니다. 데이터는 MNIST 데이타셋을 활용하고, 가설식은 Multi-label Classification을 활용합니다. 'x' 변수는 28*28 인 784의 픽셀이고, 'w'는 가중치입니다. y=w0x0 + w1x1+ w2x2 +... + w783x783이라는 선형 회귀식을 만듭니다. 또한, 결정되어야 할 선택지는 0부터 9까지 10개의 숫자이므로 Class를 10개로 만듭니다. 따라서, y0, y1, y2,...., y9까지 함수가 필요합니다. 각 함수마다 784개의 가중치 'w'가 있고, 총 열개의 클래스이므로 7840개의 'w'가 있습니다. 각각의 'w'를 구분하기 위해 wA0와 같이 알파벳을 추가합니다. 



   Multi-label Classification 가설식을 만들어 기계에 입력하고, 55,000개의 데이터셋을 입력합니다. 기계는 55,000번의 반복 작업을 통해 학습합니다. 이 가중치 'w'를 사람이 수작업으로 찾아내는 것은 거의 불가능합니다. 기계 학습이 가장 효율적입니다.  




참고자료:

   이 글은 송경빈 님의 브런치에 있는 '인공지능 기술/원리의 이해'라는 글을 필자가 공부하면서 각색하였습니다. 원문이 훨씬 더 이해하기 쉽고 자세합니다.  원문은 아래 링크를 참조하시기 바랍니다. 


https://brunch.co.kr/@morningb/3


머신러닝 알고리즘에 대해 더 깊이 알고 싶을 때




브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari