brunch

You can make anything
by writing

C.S.Lewis

by 한규동 Jul 06. 2019

머신러닝, 기계가 학습한다는 의미

[인공지능 이야기] 머신러닝 과정에 구체적으로 무슨 일이 일어나는가?

머신러닝(Machine Learning), 즉 기계가 ‘학습’을 한다는 개념이 무엇인가?.


 머신러닝 이라는 말을 처음 사용(1959)한 아서 사무엘Arthur Samuel 교수는 머신러닝을 “명시적으로 프로그램되지 않고 학습할 수 있는 능력을 컴퓨터에게 주는 학문 분야”(Field of study that gives computers the ability to learn without being explicitly programmed)라고 정의했다. 즉, 일반적으로 프로그램은 사람이 “A라는 입력에 B라는 조건이 성립하면 X를 작동시켜라”와 같이 명시적으로 프로그램을 작성해 줘야 하는데, 머신러닝은 “A라는 입력이 들어왔을 때 결과가 X가 되는 조건 B를 찾도록” 기계를 학습시킨다.

(최근에는 톰 미첼Tom Mitchell 교수의 정의를 주로 사용한다. 앞의 글 '머신러닝 개념' 참고)



간단한 예제를 통해 본
머신러닝 학습의 결과는?

머신러닝에서 ‘학습’의 구체적인 결과는 무엇인가? 인간은 학습을 한 뒤에 학습한 내용을 두뇌에 기억하고 이해하거나(개념 지식) 몸에 익힌다.(체험 지식) 기계의 학습은 인간처럼 뭔가를 이해하는 것이 아니고, 매개변수(Parameter) 또는 가중치(weight)의 형태로 나타난다. 머신러닝입력값에 대응하는 결과값이 제대로 나오도록 하는 최적의 매개변수 값을 찾는 과정이며, 그때 학습(learning)의 결과물매개변수(가중치) 값이다.


예를 들어보자. 컴퓨터에게 계산을 시킨다고 해보자.  3 x 2 = ?, 8 x 3 = ?와 같이 입력값을 주고 결과값을 찾으라고 하는 것이 일반적인 방법이다. 답을 구하기 위해 컴퓨터에 “3 * 2”, “8 * 3” 등 명령어를 입력하여 답을 구한다.(답은? 각각 6과 24)

하지만 머신러닝 방법에서는 아래와 같이 다른 것을 묻는다.

여기서 □와 △를 매개변수 또는 가중치라 한다.

“인공지능, 기계학습 그리고 딥러닝” 강의자료 15쪽, https://www.slideshare.net/JinwonLee9/ss-70446412

(3, 2), (1, 4), (5, 5), (8, 3)을 입력값이라 하고,

1, -3, 0, 5는 정답(레이블label)이라고 한다. 기계는 학습을 통해 입력값에서 정답을 만들어내는 조건, 즉 가중치 또는 파라미터 값(□=1, △=-1)을 찾아낸다.

이렇듯 입력값과 출력값(정답)을 활용하여 적절한 매개변수 값을 찾아내는 과정을 기계학습(머신러닝)이라고 하며, 여기서 ‘학습’의 결과는 매개변수값(□=1, △=-1)으로 나타난다.



너무 간단한 예시를 들어서 실감이 안날 수 있겠다. 좀 복잡하고 뭔가 ‘머신러닝 다운’ 예제를 한번 들어보자.

 영어 알파벳을 인식하는 프로그램을 만든다고 해보자. 전통적으로 영문자 인식 방법은 아래와 같이 각 문자에 있는 사선·수직선·수평선·곡선의 개수를 파악하여 문자를 인식했다.

“Introduction to Pattern Analysis” 강의자료 13쪽, http://www.nada.kth.se/~stefanc/DATORSEENDE_AK/pr_l1.pd

손으로 쓴 숫자를 인식하는 것은 어떻게 했을까?

http://www.csam.or.kr/journal/download_pdf.php?spage=831&volume=6&number=3

왼쪽 그림을 보면, 숫자가 쓰여진 영역을 분할하여 각 분할된 영역내 화소의 방향별 획(런run)의 길이를 비교하는 방법을 썼다. 하지만 숫자를 이상하게 쓰는 사람도 있으니 모든 경우를 인식하기가 쉽지 않았을 것이다. 이러한 한계를 극복하기 위해, 즉 사람이 기술하지 못하는 다양한 특징을 기계 스스로 찾아서 처리할 수 있도록 하기위해 머신러닝 방법을 활용한다.




손으로 쓴 숫자를 인식하는
머신러닝 프로그램에서 학습의 결과는?

머신러닝을 이용하여 손으로 쓴 숫자를 인식하는 프로그램을 만들어 보자.

* 머신러닝의 여러 가지 방법 중에서 로지스틱 회귀(Logistic Regression) 모델(model)을 사용한다.

 (여기서부터의 모든 예제는 Andrew Ng 교수의 머신러닝 강의 중 프로그래밍 숙제 3번의 내용과 필자가 짰던 프로그램에 기반한 내용이다. Coursera Machine Learning 강의 중 Programming Exercise 3, https://www.coursera.org/learn/machine-learning/)


먼저, 입력값 X는 손으로 쓴 숫자 그림의 픽셀값을 입력한다. 여기서 각 숫자 이미지 각각은 20x20 픽셀, 즉 가로 세로 각각 20 픽셀씩으로 이루어진 이미지이다. 머신러닝에서는 사선·수직선·수평선·곡선 등 특징을 추출하지 않고 각 픽셀의 입력값을 그대로 입력한다. 따라서, 입력값 X는 400개의 픽셀값(20*20=400), 즉, x1, x2, ..., x399, x400으로 이루어진다.

실제, 숫자 0의 픽셀값 중 일부를 살펴보면 아래와 같다. (인간이 봐서는 무엇인지 알기 어렵다.)


다음으로, 정답(출력값) y는 각 이미지에 쓰여진 숫자 값이다. y값은 0, 1, 2, ..., 9까지 10개의 숫자 값이지만, 학습 편의를 위해 각각의 y값은 아래 오른쪽과 같이 벡터값으로 표현한다. 즉, 숫자 1인 경우 첫 번째 벡터값만 1이고 나머지는 0, 숫자 2인 경우는 두 번째 벡터값만 1이고 나머지는 0. 이와같이 벡터값에서 해당 숫자 위치만 1(True, 참), 다른 위치는 모두 0(False, 거짓)으로 표현한다.(편의상 숫자 0은 열 번째에 표현한다.)


이제 학습 모델을 만들어야 한다. 그냥 기계에 숫자 이미지 픽셀값 X와 정답 y를 입력한다고 해서 기계가 스스로 학습하지는 않는다. 기계가 최적의 매개변수 값을 스스로 찾도록 적당한 수식 모델을 정의해 주어야 한다. 숫자인식 머신러닝에서는 어떤 매개변수(파라미터)를 찾아야 할까?

위 수식의 매개변수 θ값들을 찾는 것이 이번 머신러닝의 과제이다. 즉, 머신러닝이 끝나면 학습의 결과가 매개변수 값이라는 말이다. 여기서 h1 함수는 숫자 1의 이미지 픽셀값(x1, x2, ..., x399, x400)을 입력했을 때만 1을 출력하고 다른 숫자 이미지일 때는 0을 출력하고, h2 함수는 숫자 2의 이미지 픽셀값을 입력했을 때만 1을 출력하고 다른 숫자 이미지일 때는 0을 출력하는 등 해당 숫자일때만 1을 출력하는 hi함수의 매개변수 θ값을 찾는다.(갑자기 수식이 나와서 미안하긴 하지만, 구체적으로 이해하려면 어쩔 수 없다.-_-)


여기서 숫자 인식을 위한 hi함수는 h1부터 h0까지 10개가 필요하며, 각각 함수마다 400개의 θ값(θ1, θ2, ..., θ399, θ400)이 필요하므로 총 4,000개(400*10)의 θ값들을 찾아야 한다.

초기에는 임의의 값을 θ값으로 시작하고, 계산된 hi값과 정답 y값과의 차이를 이용하여 hi값이 정답에 가까워지도록 θ값을 조절해 주는 과정을 거치는데, 이것이 머신러닝의 학습 과정이다.(이때 경사 하강법Gradient Descent을 쓰는데 너무 복잡해지므로 자세한 설명은 생략한다.)


 학습이 끝나면, 우리에게 4,000개의 θ값이 있고, 이 θ값을 이용한 10개의 함수(h1, h2, ..., h9, h0)가 준비되어 있다. 앞에서 정답 y는 해당 이미지의 숫자에 해당하는 위치만 1이고 나머지는 0인 벡터이고, 이러한 y값을 이용하여 학습을 시켰기 때문에, 학습결과 얻은 예측함수 hi는 해당 숫자에 해당하는 위치만 1이고 나머지는 0인 벡터를 출력하게 된다.(실제로는 학습 정확도에 따라 1 또는 0에 가까운 숫자를 출력한다.)


숫자 0을 인식하는 h0 함수의 실제 θ값을 살펴보면 아래와 같다. 머신러닝의 결과는 이러한 숫자들이고, 이 숫자들을 이용하여 예측 함수 h를 구한다.


이제 이 10개의 함수를 이용하여 숫자를 인식시킨다. 숫자 0의 이미지를 입력했을 때, 아래와 같이 h0 함수의 값이 1에 가깝게 계산되며, 따라서 이 입력 이미지는 0이라는 결론을 출력한다. 아래 그림에서 h0=0.999531, h1=0, h2=0.00003, h3=0.000029, h4=0, h5=0.000460, h6=0, h7=0, h8=0.00003, h9=0이다. 여기서 h값을 확률이라고도 생각할 수 있으며, h0의 값이 가장 높으므로 즉, 0일 확률값이 가장 높으므로 이 모델에서는 입력 이미지를 0이라고 인식하게 된다.


실제 프로그램을 실행하면, 숫자의 모양에 따라 확률이 달라진다. 같은 숫자 4를 인식하더라도, 모양에 따라서, 아래 첫 번째 이미지는 거의 1에 가까운 정도로 4라고 인식했지만, 두 번째 이미지4일 가능성(h4)이 가장 높지만, 숫자 2일 가능성(h2)도 다른 값들에 비해서 비교적 높게 나왔다. 실제 두 번째 이미지를 좌우 대칭이동 후 -90도 회전하면 숫자 2와 유사한 이미지를 얻을 수 있다.(상상이 되는지?^^)


물론, 틀린 경우도 있다. 아래는 원래 정답과 다른 예측을 한 경우이다. 모두 직접 작성한 프로그램을 실행한 결과 나온 값들이다.

머신러닝은 학습 횟수에 따라 정확도가 달라진다. 학습을 많이 할수록 정확도가 올라간다. 이러한 특성이, 작성된 알고리즘에 따라 정확도가 일정한 다른 전통적인 프로그램과의 차이점이다. 위에서 살표본 머신러닝 프로그램에서도 실제 학습 횟수(50~1200)에 따라 소요되는 학습시간도 다르며(9분~3시간) 그에 따른 인식 정확도도 차이가 났다(91%~93%). 로지스틱 회귀 방법을 쓰지않고 인공신경망(Artificial Neural Network) 방법을 쓰면 1200번 학습시 96%까지 정확도가 올라갔다.(데이터 양에 비례해서 정확도가 올라가는 인공신경망 모델의 특성이 여기서도 나타난다.)


처음 인공지능을 공부할 때는 손으로 쓴 숫자를 인식하는 프로그램을 머신러닝 방식으로 구현하기 위해서는 대단한(?) 인공지능 프로그램이 필요할 줄 알았다. 하지만 핵심 알고리즘은 아래에서 보다시피 복잡하지 않고(정말?^^), PC에서 학습시킬 수 있었다.(물론, 이건 빙산의 일각이다.)

손으로 쓴 숫자를 인식하는 Octave 프로그램 핵심 알고리즘

여기까지(헥헥^^), 마주보고 말로 설명하지 않고 글로써 모든 것을 설명하기에 부족함이 없지 않지만, 머신러닝의 ‘학습한다’는 것의 실체를 파악할 수 있는 계기가 되었기를 기대한다.



[인공지능 이야기 시리즈]

인공지능 개념(AI) | 인공지능 정의, 유형. 분야, 역사

머신러닝 개념(Machine Learning) | 머신러닝 정의, 종류, 예시, 통계와 비교

머신러닝, 기계가 학습한다는 의미 | 머신러닝 과정에 구체적으로 무슨 일이 일어나는가?

인공신경망 개념(Artificial Neural Network) | 생물학적 신경망, 인공신경망, 퍼셉트론, MLP

딥러닝 개념(Deep Learning) | 딥러닝 등장 3대 사건, 기본 개념, CNN, RNN, 장단점


* 표지 그림 출처 : https://www.freepik.com/free-photo/3d-render-robot-with-books_1166338.htm, Designed by kjpargeter



인공지능에 대해서 더 궁금하시면, 제가 쓴 아래 책을 참고하세요.

http://www.yes24.com/Product/Goods/110044822


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