수아랩 리서치 블로그 첫 번째 글의 주제는 ‘머신러닝이란 무엇인가?’ 입니다. AI(인공지능)를 가능하게 하는 핵심 기술이라고 할 수 있는 머신러닝에 대해서, 글을 읽는 모든 분들이 이해하실 수 있도록 최대한 쉬운 언어로 이야기를 풀어나가고자 합니다.

  1. 본 글은 저자의 개인 블로그 글 <머신러닝이란 무엇인가?>에서 출발하여, 일부 내용을 추가, 수정하고 확장하였습니다.
  2. 본문의 머신러닝 예시를 위해 작성한 Python 코드를 부록으로 함께 첨부하였습니다.

서론

머신러닝(machine learning)이 무엇일까요? 공학에 익숙하지 않으신 분들에게 대단한 위화감을 선사하는 이 영어 단어를 그대로 직역하면 ‘기계학습’입니다. 인간이 하나부터 열까지 직접 가르치는 기계를 의미하는 것이 아니라, 학습할 거리를 일단 던져놓으면 이걸 가지고 스스로 학습하는 기계를 의미합니다.

러닝머신(running machine)과는 전혀 무관합니다.

그럼 기계를 왜 학습시킬까요? 사람이 할 수 있는(혹은 할 수 없는) 작업을 기계가 할 수 있도록 만들어서, 해당 작업을 아주 빠른 속도로 365일 24시간 내내 자동으로 수행하도록 하기 위함입니다. 어떻게 보면 특정 작업에 한해서는 사람보다 일을 훨씬 더 잘 하는 자그마한 AI를 탑재하는 과정으로 볼 수 있는데, 그러한 맥락에서 혹자들은 머신러닝을 약한 인공지능(weak AI)을 위한 기술이라고도 부릅니다.

기계를 학습시켜 사람이 하는 일을 기계로 하여금 더 빨리, 더 오래 하도록 한다는 것은, 기업이나 국가의 입장에서 비용 절감을 위한 아주 매혹적인 대안이 아닐 수 없습니다. 수십 년 전까지만 하더라도 머신러닝을 통해 기계가 대체할 수 있는 일의 범위는 대단히 제한적이었는데, 21세기에 접어들면서 기술의 발전으로 인해 기계가 대체 가능한 영역이 점차적으로 확장되었고, 최근에 접어들어서는 ‘머신러닝을 통해 학습된 기계들이 인간의 일자리를 위협한다’는 말까지 돌아다닐 정도로 그 수준이 대단히 고도화되었습니다. 이로 인해 오늘날 전 세계의 수많은 기업 및 기관 등에서 머신러닝 기술을 어떻게든 적용하여 비용 절감을 도모해보고자 군침을 흘리고 있는 상황이라고 할 수 있습니다.

그러면 이제, 이렇게 핫한 머신러닝 기술을 이해하기 위해, 딱딱한 사전적 정의 대신 한 가지 친숙한 예시를 들면서 이야기를 시작하도록 하겠습니다.

유년 시절 단어 학습의 기억

여러분이 아주 어렸을 적, 꼬마 시절 기억을 떠올려봅시다. 여러분이 어느 대상의 개념을 처음 익힐 때를 기억하시나요? 말을 시작한 지 얼마 되지 않은 네살배기 꼬마 여러분이 어머니의 손을 붙잡고 공원으로 나간 상황을 가정해봅시다. 여러분을 둘러싼 주변의 수많은 대상들을 관찰하던 와중에, 여러분은 아래 그림과 같이 생긴 대상을 관찰하게 됩니다.

나무의 전형적인 예시 이미지 나무의 전형적인 예시 이미지

저러한 대상을 관찰할 때만 하더라도 여러분은 저 대상이 무엇인지 몰랐는데, 어머니께 ‘엄마, 저게 뭐야?’라고 물어봤더니 어머니께서 ‘나무’라고 알려주셨습니다. 그런데, 실제로는 모든 나무가 위 그림처럼 생겼을 리가 없습니다. 나무도 그 종이 매우 다양하며, 동종의 나무라고 하더라도 자라온 환경에 따라 그 모양이 당연히 다를 수 있습니다. 따라서, 엄밀히 말하자면, 위 그림은 실제 ‘나무’라는 개념을 완전히 온전하게 설명해주진 못하며, ‘나무’라는 대상의 실체에 대하여 간접적으로 접근하여 관찰된 하나의 ‘예시(example)‘에 불과하다고 할 수 있습니다. 꼬마 여러분들이 접한 나무 예시는 위의 저 그림밖에 없기 때문에, 여러분들의 머릿속에는 ‘나무 = 저것 그 자체’로 자리잡은 상태일 것입니다(언어적으로 풀어 설명하자면 ‘갈색의 딱딱하고 커다란 무언가가 하나 있고, 그 윗쪽으로 좀 더 얇은 무언가가 여러 개 뻗어있으며 각 가지에는 자잘하고 아주 얇은 녹색의 무언가가 여러 개 매달려 있는 대상’ 따위가 되겠죠).

호기심이 많은 꼬마 여러분은, 이후에도 어머니를 따라 이곳저곳을 돌아다니면서 다양한 대상들을 더 관찰합니다. 그러면서 어머니께 시도때도 없이 질문합니다: ‘엄마, 저건 뭐야?’ ‘응, 저것도 나무란다’, ‘엄마, 이것도 나무야?’ ‘응, 저건 나무가 아니란다’ 등등 말이죠. 이와 같은 과정에서 여러분들은 ‘나무’의 다양한 예시들을 더 많이 접하게 되며, 여러분의 머릿속에서는 맨 처음 봤던 나무의 예시인 ‘갈색의 딱딱하고… 매달려 있는 대상’만이 존재하였던 상태에서, 나무의 예시들을 확장적으로 받아들이면서 동시에 ‘나무’라는 대상의 핵심이 되는 특질을 서서히 압축해 나가게 됩니다. 나무의 핵심 특질이 압축된 결과물이 여러분의 머릿속에서 추상적인 형태로 자리잡아 나가는 것입니다.

예시에 기반한 학습의 필요성

지식의 통용을 위해, 나무를 다년간 연구해 온 사람들은 이를 다음과 같이 언어적으로 정의하였습니다.

나무[나무]
  1. 줄기나 가지가 목질로 된 여러해살이 식물.
  2. 집을 짓거나 가구, 그릇 따위를 만들 때 재료로 사용하는 재목.
  3. [같은 말] 땔나무(땔감이 되는 나무).

여러분이 이해했던 ‘나무’의 개념은 1번 정의에 가장 가까울 것입니다. 몇몇 분들은 위 정의를 보면서 이런 생각을 하실 수 있습니다: ‘처음부터 정의된 문장으로 나무의 개념을 학습한다면, 굳이 여러 개의 샘플을 접해가면서 나무의 개념을 확립해 나가고자 애를 쓰지 않아도 될 것 같은데?’ 일견 일리가 있어 보이는 생각입니다. 그런데, 당연해 보일 수 있겠지만, 실제로는 꼬마 시절의 여러분의 머리로는 그게 될 리가 없습니다. 유아기 시절의 여러분은 ‘줄기’도, ‘가지’도, ‘목질’도, ‘여러해살이’도, ‘식물’조차도 무엇인지 모르는 상태입니다. 만약 여러분이 할 일이 없고 한가해서, ‘줄기’나 ‘가지’의 의미를 국어사전에서 계속 찾아나가면서 그 과정에서 새로 등장하는 단어들의 의미를 연이어 추적하고자 한다면, 아마도 머지않아 무한 반복의 함정에 빠져버린 자기 자신을 발견하게 될 것입니다.

국어사전에서는 ‘줄기’를 ‘고등 식물에 있어서 기본 기관의 하나. 식물체를 받치고 뿌리로부터 흡수한 수분이나 양분을 체관부, 물관부를 통하여 각 부에 나르는 역할을 한다.’라고 설명하고 있는데.. 고등 식물? 기관? 뿌리? 양분?? What the f#$k??

즉 다시 정리해보면, 추상적이거나 혹은 구체적인 실체가 있는 대상의 아주 기초적인 개념을 머릿속에 자리잡게 하기 위해서, 여러분들이 선택할 수 있는 최선의 방법은 그 대상을 나타내는 수많은 예시들을 받아들이면서 이를 여러분의 머릿속에서 압축된 형태로 정립해 나가도록 여러분의 뇌에 맡기는 것입니다.

머신러닝의 핵심 요소

왜 이렇게 뜬금없는(?) 이야기로 서론이 길었을까요? 머신러닝이 ‘기계를 학습시키는’ 과정이, 여러분이 꼬마 시절 ‘나무’라는 대상의 개념을 익혔던 과정과 매우 흡사하기 때문입니다.

데이터

예시1: 나무 여부 구별 기계

먼저, 꼬마인 여러분들을 학습시키기 위해 수많은 예시들이 필요했듯이, 기계를 학습시키기 위해서도 수많은 예시들이 필요합니다. 어느 컴퓨터로 하여금 매번 랜덤한 대상이 포함된 이미지(image)를 던져줬을 때, 그것이 ‘나무인지 아닌지’를 구별할 수 있도록 학습을 시키고자 한다고 가정해봅시다. 꼬마 시절 여러분들이 수많은 나무 예시들을 눈으로 관찰했듯이, 기계로 하여금 학습을 하도록 하려면 대단히 많은 수의 나무 이미지를 제시해줘야 합니다. 머신러닝에서는 이러한 수많은 예시들의 집합을 ‘데이터(data)‘라고 부릅니다.

이 때 중요한 것은, 기계로 하여금 어느 대상의 이미지를 주고 그것이 나무인지 아닌지 구별하도록 하기 위해서는, 나무 이미지뿐만 아니라 나무가 아닌 이미지도 충분히 많이 제시해줘야 합니다. 따라서 실제로는 어느 랜덤한 이미지를 주고 {‘나무’, ‘나무X’} 중 하나의 표식을 붙여 그것의 정체를 나타내도록 하는데, 이를 ‘레이블(label)‘이라고 합니다. 다시 말해, 머신러닝(정확히는 지도 학습(supervised learning) 패러다임에서의 머신러닝)에서는 수많은 (예시, 레이블) 쌍의 집합이 한 덩어리의 데이터가 되어 기계로 전달됩니다.

'나무' vs '나무X' 데이터 - 예시와 레이블의 나열 ‘나무’ vs ‘나무X’ 데이터 - 예시와 레이블의 나열

예시2: 3개월 내 채무 이행 여부 예측 기계

머신러닝은, 앞선 예시1에서의 ‘이미지를 보고 나무인지 아닌지 구별하는’ 것처럼 사람이 쉽게 할 수 있는 작업을 기계로 하여금 할 수 있도록 하는 데 적용될 수 있습니다. 그런데, 어떤 수치화된 데이터에 대한 분석을 통해 최적의 의사결정을 내리는 것과 같이, 사람이 쉽고 빠르게 할 수 없는 작업에 대해서도 머신러닝이 적용될 수 있습니다. 기계 입장에서는 사실 이런 작업을 학습하는 것이 더 쉽습니다.

이렇게 수치화된 데이터에 기반한 의사결정과 관련된 다른 예시를 하나 들어 보겠습니다. 고객의 등골을 쪽쪽 빨아먹기로 악명 높은 대부업체인 ‘빨대론’에서는 수천명의 고객을 보유하고 있는데, 이들의 데이터를 바탕으로 하여 채무 이행 기한이 임박한 이들이 3개월 내에 채무를 이행할지/불이행할지 여부를 맞추고자 합니다. 머신러닝을 응용한 다년간의 연구 끝에 빨대론에서는 고객의 ‘나이’와 ‘연봉’정보만을 사용하여 해당 고객이 3개월 내로 채무를 이행할지 여부를 매우 높은 정확도로 예측하는 컴퓨터를 학습시키는 데 성공하였습니다(문제의 단순화를 위해 다소 과격한 가정을 하겠습니다).

머신러닝을 위해서는 먼저 데이터가 필요합니다. 컴퓨터로 하여금 나이와 연봉만을 주고 채무 이행 여부를 맞추도록 하기 위해서는 먼저 (예시, 레이블) 쌍의 집합으로 구성된 충분한 양의 데이터가 필요합니다. 빨대론의 경우, 예시에는 ‘나이와 연봉’ 정보가 포함되어 있을 것이고, 레이블은 ‘채무 이행여부’가 될 것입니다.

좀 더 구체적인 예시를 들어봅시다. 데이터 확보를 위해, 빨대론에서는 과거에 3개월 내에 채무를 이행한 기록이 있거나, 혹은 이행하지 못한 기록이 있는 고객들의 데이터를 활용하고자 하였습니다. 예를 들어 2014년 3월 27일에 대출한 29세 ‘박갑부’씨는 연봉이 5천6백만원인데, 2014년 5월 31일에 채무를 이행한 기록이 있습니다. 한편 2015년 8월 10일에 대출한 33세 ‘최빈궁’씨는 연봉이 3천3백만원인데, 채무 이행 기한인 2015년 11월 9일까지 채무를 이행하지 못했다고 기록되어 있습니다. 빨대론에서는 이런 과거의 데이터를 모두 긁어모아 하나의 커다란 데이터 집합(data set)을 만들었습니다.

번호 나이 연봉(백만원) 이행여부
1 29 56 O
2 64 89 O
3 33 17 X
4 45 94 O
5 24 26 X
6 55 24 X
7 35 52 O
8 57 65 O
9 45 32 X
10 52 75 O
11 62 31 X

빨대론의 고객 데이터 일부

러닝 모델

다음으로 중요한 것이 사람으로 따지면 ‘뇌’에 해당하는 것인데, 머신러닝에서는 이를 ‘러닝 모델(learning model)‘이라고 합니다. 러닝 모델은, 아주 간단히 말해서 하나의 커다란 함수로 구성되어 있다고 보면 됩니다. 여러분이 학창 시절 지식을 떠올려 보면, 대략 함수는 어떤 주어진 입력 변수에 대하여 특정한 연산을 수행한 결과를 출력 변수로 내뱉는 장치라고 배웠을 것입니다.

함수의 구조 함수의 구조

우리가 만들어내고자 하는 ‘나무 여부 구별 기계’의 경우에도, 이를 하나의 함수로 보아 단순화시키면, 입력 변숫값이 이미지이고 출력 변숫값이 {‘나무’, ‘나무X’} 중 하나인 함수라고 할 수 있습니다.

나무인지 아닌지 구별하는 함수 나무인지 아닌지 구별하는 함수

한편 ‘3개월 내 채무 이행여부 예측 기계’의 경우, 입력 변숫값이 신규 고객의 ‘나이’와 ‘연봉’이고, 출력 변숫값이 {‘이행’, ‘이행X’} 중 하나인 함수라고 할 수 있습니다. 예를 들어 오늘 막 대출한 신규 고객 ‘김호구’씨가 있는데, 이 사람의 나이가 40세이고 연봉이 40백만원(=4천만원)일 때 향후 3개월 내로 채무를 이행할지 여부를 맞추는 것입니다.

채무 이행여부 예측 함수 채무 이행여부 예측 함수

러닝 모델에 대해 이 이상으로 더 설명하려면, 좀 더 수학적인 설명을 하지 않을 수가 없습니다. 수학에 약하신 분들을 배려하여, 이 지점에서 미리 양해를 구합니다.

그럼 러닝 모델은 구체적으로 어떻게 생겼으며, 어떻게 학습되는 것일까요? 앞선 두 개의 예시를 붙들고 좀 더 자세히 접근해보도록 하겠습니다.

예시2: 3개월 내 채무 이행 여부 예측 기계

앞서 빨대론의 11명 고객 데이터를 표로 나타내었는데, 표는 한 눈에 들어오지 않으므로 이를 플롯으로 찍어보도록 하겠습니다. 표기의 편의 상 나이를 , 연봉을 로 하고, 고객이 채무를 이행한 경우 해당 고객의 좌표에 ‘O’, 그렇지 않으면 ‘X’로 표기하도록 하겠습니다. 그럼 아래와 같은 플롯을 얻게 됩니다.

X1-X2 플롯 X1-X2 플롯

데이터 내의 각 (예시, 레이블)을 플롯으로 나타내니, 보기에 좀 더 직관적으로 되었습니다. 빨대론의 목표는 현재 대출한 모 고객의 나이와 연봉만을 알고 있을 때, 이 고객이 3개월 내로 채무를 이행할지 여부를 맞추는 것입니다. 다시 말하면, 어느 새로운 예시가 들어왔고 이 예시의 과 의 값만을 알 때, 위 플롯 상에 떨어뜨린 점 가 ‘O’가 될지, ‘X’가 될지 예측하는 것입니다. 한 번 더 생각하면, 플롯 상에서 원래 ‘O’가 모여있는 영역과 ‘X’가 모여있는 영역의 명확한 ‘경계’를 찾으면 될 것 같다는 생각이 듭니다.

선형 모델

위 플롯에서 ‘O’의 집단과 ‘X’의 집단을 가장 간단하게 나눌 수 있는 방법은 직선을 긋는 것입니다. 이렇게 데이터를 살펴보고 처음에 경계를 어떻게 결정하면 좋을지 살펴보고 생각하는 과정은, 러닝 모델로 사용할 함수의 형태를 결정하는 데 있어서 아주 중요합니다. 방금 직선을 그으면 될 것 같다고 했는데, 아래와 같은 함수를 생각해보도록 하겠습니다.

\begin{equation} f(x_1, x_2) = w_0 + w_1x_1 + w_2x_2 \end{equation}

위 함수는 입력 변수가 , 이며, 그 계수가 각각 , , 상수항이 인 함수입니다. 이게 직선과 무슨 관련이 있나 궁금하실 것인데, 우변을 0으로 놓으면 이를 만족하는 는 곧 평면 상에서의 직선이 됩니다.

\begin{equation} w_0 + w_1x_1 + w_2x_2 = 0 \end{equation}

이렇게 직선(또는 평면, 초평면 등)의 형태로 정의되는 러닝 모델을 특별히 선형 모델(linear model)이라고 부르며, 이는 가장 단순한 러닝 모델에 해당합니다. 선형 모델을 사용하기로 결정하였으므로, 이제 이 직선의 위치와 기울기를 잘 조정하여 그 윗쪽에는 ‘O’ 집단이, 아랫쪽에는 ‘X’ 집단이 위치할 수 있도록 분류할 수 있어야 합니다. 즉, 위 함수에서 , , 를 잘 찾아야 하는 것입니다.

이를 위해, 먼저 , , 의 초깃값을 (대충) 적절하게 잡겠습니다. 예를 들어, , , 로 잡았다고 하겠습니다. 이 직선을 플롯 상에 나타내면 아래와 같이 됩니다.

X1-X2 플롯과 초기 선형 모델 X1-X2 플롯과 초기 선형 모델

그런 다음 각 점들을 돌아가면서 관찰하여, 해당 점이 직선에 의해 제대로 분류되었는지 살펴보겠습니다. 위 플롯에 표시된 바와 같이, ‘O’인데도 직선 아랫쪽으로, ‘X’인데도 직선 윗쪽으로 잘못 위치한 점들이 4개 있습니다. 이들 점에 해당하는 예시들을 제대로 분류하려면, 현재 직선의 기울기를 낮춰야 할 것 같습니다. 러닝 모델은, 이에 결부되어 있는 모종의 러닝 알고리즘(learning algorithm)에 의거하여 , , 의 값을 적절하게 조정, 잘못 분류된 점이 제대로 분류되도록 합니다.

X1-X2 플롯과 1차 학습된 선형 모델 X1-X2 플롯과 1차 학습된 선형 모델

, , 로 조정하였더니, 방금 전보다 잘못 분류된 점의 수가 감소하였습니다. 그런데, 여전히 잘못 분류된 점이 있습니다. 러닝 모델은 러닝 알고리즘에 의해 , , 의 값을 다시 한 번 조정합니다.

X1-X2 플롯과 학습이 완료된 선형 모델 X1-X2 플롯과 학습이 완료된 선형 모델

이제 완벽합니다. 빨대론에서 가지고 있는 11개 예시 고객 데이터를 모두 정확히 분류하는 선형 모델을 찾았습니다. 이를 최종적인 함수 형태로 나타내면 다음과 같습니다.

\begin{equation} f(x_1, x_2) = -50 -x_1 + 2x_2 \end{equation}

이제 이것이 어떻게 사용되는지 살펴봅시다. 신규 고객 ‘김호구’ 씨가 추가되었는데, 이 분의 나이가 40세이고 연봉이 40백만원(=4천만원)이라고 합시다. 이 사람은 과연 3개월 내로 채무를 이행할 수 있을까요? 애매해 보이는데, 여러분이 학습시킨 러닝 모델에게 물어봅시다.

\begin{equation} f(40, 40) = -50 -40 + 2\cdot40 < 0>

김호구 씨의 채무 이행 여부 확인 결과 김호구 씨의 채무 이행 여부 확인 결과

새로 찍은 김호구 씨의 점이 러닝 모델이 만들어낸 직선의 아랫쪽에 위치하므로, ‘X’로 분류됨이 확인되었습니다. 즉, 김호구 씨는 3개월 내로 채무를 이행할 수 없을 것이므로, 사전에 고강도의 조치(?)를 취해야 함이 확인되었습니다.

예시1: 나무 여부 구별 기계

앞선 ‘3개월 내 채무 이행 여부 예측 기계’의 예시를 통해, 여러분은 러닝 모델이 무엇인지 어렴풋이 이해했을 것입니다.

사실, 이해를 제대로 못 하셨어도 괜찮습니다. 처음에는 누구든지 그게 정상입니다.

제 입장에서는, 이제 첫 번째 예시였던 ‘나무 여부 구별 기계’에서 러닝 모델을 도입하여 학습을 구체적으로 어떻게 수행하는지 설명하는 데 조금 자신감이 붙게 되었습니다.

나무 여부 구별 기계의 경우에는 채무 이행 여부 예측 기계와 조금 다른 점이 있는 것이, 먼저 데이터를 기계가 이해할 수 있는 형태로 수치화시켜야 한다는 점입니다. 채무 이행 여부 예측 기계의 경우, 애초부터 ‘나이’나 ‘연봉’처럼 이미 수치화된 정보를 사용했기 때문에 러닝 모델에 바로 입력하는 데 전혀 무리가 없었습니다. 하지만 이미지의 경우, 사람은 눈을 통해 받아들인 빛의 파장을 감각 기관에서 적절히 받아들여 변환하고, 이를 뇌 속에서 이리저리 정리하여 ‘어느 지점의 색상이 무엇인지’ 등의 정보를 빠른 시간 내에 직관적으로 받아들이고 이해할 수 있지만, 기계는 그렇지 못합니다.

그래서 이미지의 경우, 다음과 같은 방법으로 먼저 데이터를 ‘수치화’시키는 과정을 거쳐야 합니다. 먼저, 주어진 이미지를 픽셀(pixel, 이미지 상에서의 하나의 점) 단위로 잘게 자릅니다. 그런 다음, 각 픽셀이 어떤 색상을 나타내는지를 RGB 가산혼합 방식으로 나타냅니다(픽셀과 RGB 가산혼합에 대한 내용은, 각 단어에 연결된 링크를 참조하시길 바랍니다). 이미지의 특정 픽셀 위치를 ‘이미지 맨 위에서부터 번째, 맨 왼쪽에서부터 번째’ 식으로 생각하면 와 같이 좌표 형태로 나타낼 수 있을 것인데, 예를 들면 에 위치한 픽셀의 RGB 값은 이 되는 식입니다.

(*주의: 격자 안의 하나의 정사각형의 크기는 실제 1픽셀보다는 크며, 설명을 돕기 위해 과장하였습니다.)" srcset="/includes/uploads/feed/20191119160415_480.png 480w, /includes/uploads/feed/20191119160415_800.png 800w, /includes/uploads/feed/20191119160415_1280.png 1280w" data-src="/includes/uploads/feed/20191119160415_80.png" data-action="zoom" data-lazy-src="" data-height="" data-width="" height="" width="" data-lazy-srcset="" data-lazy-sizes=""> 나무 이미지의 (53, 121)에 위치한 픽셀의 RGB 값*
(*주의: 격자 안의 하나의 정사각형의 크기는 실제 1픽셀보다는 크며, 설명을 돕기 위해 과장하였습니다.)

위 이미지 하나에 포함된 픽셀은 총 몇 개일까요? 이미지 해상도가 (세로x가로)100x150이었다고 하면, 개 정도 됩니다. 이 15,000개 픽셀 각각의 RGB 값을, 위치에 따라 아래와 같이 일렬로 정리해 놓은 것을 데이터로 활용한다고 생각하시면 됩니다.

픽셀 번호(Y,X) R G B
1 (1, 1) 255 255 255
2 (1, 2) 255 254 192
3 (1, 3) 249 253 187
4 (1, 4) 237 211 209
14997 (100, 147) 97 0 35
14998 (100, 148) 27 188 70
14999 (100, 149) 64 192 66
15000 (100, 150) 0 0 1

나무 이미지 예시 하나의 수치화된 데이터

나무 여부 구별 기계를 위해 러닝 모델은 무엇을 사용해야 할까요? 지금으로서 우리가 아는 것은 선형 모델밖에 없으니 그걸 써 봅시다. 입력 변수는 총 몇 개일까요? 명심할 것은, (아까 빨대론의 사례와는 다르게) 위 표에 나타낸 것이 한 장의 예시 이미지 데이터라는 것입니다! 예시 하나에 [R, G, B] 값의 조합이 총 15,000개 있으므로, 단순 계산으로 개의 입력 변수가 필요합니다.

\begin{equation} f(x_1, x_2, …, x_{45000}) = w_0 + w_1x_1 + w_2x_2 + … + w_{45000}x_{45000} \end{equation}

우선 입력 변수가 45,000개인 함수의 경우, 3차원을 넘어가 버리기 때문에 앞에서처럼 평면 혹은 공간 상에서 가시적으로 표현할 수가 없으므로 사람이 이해하기가 어렵습니다. 뿐만 아니라, 조정해야 할 계수들이 무려 45,001개로 너무 많기 때문에, 러닝 알고리즘에 의해 학습하는 데도 엄청나게 오랜 시간이 걸리거나, 최악의 경우 아예 학습 자체가 불가능할 수도 있습니다.

나무 여부 구별을 위한 첫 번째 시도: 새로운 요인 정의

그래서 보통 맨 첫 번째로, 러닝 모델의 입력 변수를 줄이고자 하는 시도를 합니다. 예를 들어, 한 예시 이미지 내의 15,000개 픽셀들의 [R, G, B] 값 각각에 대하여, 이들의 평균값을 대표로 사용하면 어떨까요? 이렇게 하면, 픽셀의 위치와는 무관하게 다음과 같이 [R, G, B] 조합 한 개만이 얻어질 것입니다.

픽셀 번호(Y,X) R의 평균 G의 평균 B의 평균
N/A 192.34 34.56 11.67

나무 이미지 예시로부터 추출한 ‘RGB 평균값’ 요인

이렇게 원 데이터에서 ‘R의 평균’, ‘G의 평균’, ‘B의 평균’과 같이, 데이터를 설명하는 새로운 항목들을 정의하여 위와 같이 새로운 형태의 데이터를 생성함으로써 입력 변수의 개수를 감소시키는 작업은 머신러닝에서 필수적이라고 할 수 있는데, 이 때의 항목을 ‘요인(feature)이라고 부릅니다. 이렇게 새로 생성된 ‘R의 평균’, ‘G의 평균’, ‘B의 평균’이라는 3개의 요인을 추출하여, 이를 선형 모델에 주고 학습시키고자 할 경우, 단 3개의 입력 변수를 가지는 선형 모델을 활용할 수 있으며, 단 4개의 계수만을 조정하면 됩니다.

\begin{equation} f(x_1, x_2, x_3) = w_0 + w_1x_1 + w_2x_2 + w_3x_3 \end{equation}

그런데, 그 의미를 조금만 생각해보면, 위에서 새로 정의한 요인들은 설령 입력 변수의 갯수를 줄여줄 지언정, 원래의 목표인 ‘나무 여부 구별’ 측면에서는 쓸모가 없어져 버립니다. 전체 이미지를 지배하는 평균 색상이 무엇인지를 구했을 뿐, 평균을 구하는 과정에서 이미지 상의 ‘어느 지점의 색상이 무엇인지’의 정보가 모두 소멸되어 버렸기 때문입니다.

사람조차도, 이 정보만으로는 나무 여부를 구별할 수가 없습니다.

‘RGB 평균값’ 요인보다 좀 더 그럴싸한 요인을 생각해봅시다. 주어진 이미지를 수평 방향으로 반으로 갈라, 윗쪽 절반의 정중앙에 해당하는 픽셀을 선택하여 해당 픽셀의 [R, G, B] 값과, 아랫쪽 절반의 정중앙 픽셀을 선택하여 해당 픽셀의 [R, G, B] 값을 각각 요인으로 정의하는 것입니다. 즉, ‘윗쪽 절반 중앙의 [R, G, B]값’, ‘아랫쪽 절반 중앙의 [R, G, B]값’으로 총 6개의 요인을 정의할 수 있습니다.

픽셀 위치 R G B
윗쪽 중앙 77 215 86
아랫쪽 중앙 49 55 33

나무 이미지 예시로부터 추출한 ‘윗쪽 중앙, 아랫쪽 중앙 픽셀의 RGB 값’ 요인

이렇게 하면, 총 6개의 입력 변수를 가지는 선형 모델을 활용하여 7개의 계수를 조정하면 됩니다.

\begin{equation} f(x_1, x_2, …, x_6) = w_0 + w_1x_1 + w_2x_2 + … + w_6x_6 \end{equation}

필자가 막 지어낸 엄청나게 허접해보이는(?) 요인이지만, 적어도 제 생각에는 앞선 ‘RGB 평균값’ 요인보다는 이게 더 나을 것 같습니다. 일반적인 나무 이미지를 생각해보면, 윗쪽 중앙에는 무성한 초록색 잎사귀가 위치해 있고, 아랫쪽 중앙에는 줄기가 위치해 있지 않았던가요? 이 때문에 나무 이미지의 경우 윗쪽 중앙의 [R, G, B] 값이 녹색에 해당하는 값에 가까울 것이고, 아랫쪽 중앙의 [R, G, B] 값은 갈색에 해당하는 값에 가까울 것입니다. 러닝 모델은 6개의 입력 변수로부터 이러한 경향을 받아들인 뒤, 이러한 특성을 잘 설명할 수 있는 방향으로 계수를 조절할 것으로 기대할 수 있습니다.

나무 이미지의 윗쪽 절반 중앙 픽셀 색상과 아랫쪽 절반 중앙 픽셀 색상 나무 이미지의 윗쪽 절반 중앙 픽셀 색상과 아랫쪽 절반 중앙 픽셀 색상

참고로, 위에서 소개한 2가지 요인은 이해를 돕기 위해 대충(?) 급조해 낸 요인들이며, 실제 이미지 인식(image recognition) 문제에서는 절대 사용되지 않습니다. 실제 이미지 인식 문제에서 일반적으로 많이 사용되는 요인 추출 기법은 대부분 이미지 상의 픽셀들을 영역별, 혹은 횡적/종적으로 스캔하면서 이 과정에서의 픽셀 강도의 변화 경향을 추적하며, 이를 수치화시킨 형태로 정의합니다.

이미지 인식 분야에서의 대표적인 요인 추출 알고리즘 이미지 인식 분야에서의 대표적인 요인 추출 알고리즘

머신러닝에서 러닝 모델을 성공적으로 학습하기 위해서는 효과적인 요인을 잘 정의하는 것이 대단히 중요한데, 이는 해당 분야에 대한 풍부한 지식과 뛰어난 직관에 힘입은, 가히 예술에 가까운 작업이라고 할 수 있습니다. 실제로 ‘나무 여부 구별’이나 ‘채무 이행여부 예측’ 따위의 문제에 있어서, ‘어떤 요인을 정의해서 기계를 학습했더니 성능이 월등하게 잘 나왔더라’와 같은 내용의 연구 결과가 하나의 논문거리가 되는 경우가 허다합니다.

나무 여부 구별을 위한 두 번째 시도: 선형 모델 외의 다른 러닝 모델 사용

사실, 오늘날 이미지 인식 분야에서는 선형 모델을 잘 쓰지 않습니다. 선형 모델은 가장 단순하고 (선형 모델로 학습이 가능한 데이터 집합에 한해서) 학습 속도가 빠르며 인간이 이해하기 쉬운 대신, 원 데이터 자체가 수많은 픽셀로 이루어져 있는 이미지와 같은 데이터의 경우에는 데이터의 복잡성을 선형 모델에 충분히 반영하는 것이 불가능합니다. 반면 예시2에서와 같이 애초에 원 데이터 자체가 ‘나이’, ‘연봉’ 등 적은 수의 요인들로 구성되어 있는 경우, 선형 모델을 충분히 적용해 볼 만합니다.

그래서, 실제 이미지 인식 분야에서는 선형 모델 대신 인공신경망(artificial neural networks)과 같은 복잡성이 높은 러닝 모델을 사용합니다. 이렇게 복잡성이 높은 신경망(neural networks) 구조를 러닝 모델로 사용하는 머신러닝 패러다임을 ‘딥 러닝(deep learning)‘이라고 합니다.

주요한 러닝 모델 및 러닝 알고리즘 주요한 러닝 모델 및 러닝 알고리즘

결론

긴 글을 정리하자면, 머신러닝이란 사람이 할 수 있거나 혹은 하기 어려운 작업을 대신 해낼 수 있는 기계를 만들어내기 위해, 기계를 학습시키는 일련의 작업을 의미합니다. 머신러닝을 위해서는 데이터와 러닝 모델이 필요하며, 선형 모델은 가장 간단한 러닝 모델입니다. 성공적인 학습을 위해서는 우선 데이터를 면밀히 조사하고 데이터의 특징을 파악한 뒤 이에 가장 적합한 러닝 모델을 잘 골라야 하며, 원 데이터를 그대로 사용하는 것보다는 효과적인 요인을 새로 정의하여, 이를 추출한 뒤 러닝 모델에 입력해주는 것이 좋습니다.

한편 본 글에서는 러닝 모델의 계수를 조정하는 데 관여한 러닝 알고리즘에 대해서는 전혀 설명하지 않고 어물쩡 넘어갔습니다. 러닝 알고리즘을 이해하고자 하는 시점부터, 비로소 프로그래밍, 미적분학, 선형대수학, 통계학에 대한 기본적인 지식이 필요하기 때문입니다! 비록 러닝 알고리즘을 자세히 살펴보지 못하셨더라도, 본 글을 통해서 머신러닝의 큰 그림과 핵심 요소를 파악하셨다면, 앞으로 머신러닝, 딥 러닝, 인공지능 등과 관련된 내용을 받아들이고 이해하는 데 좀 더 용이하실 것이라고 생각합니다.

*향후 글에서는, 오늘날 각광받고 있는 머신러닝 패러다임인 딥 러닝에 대하여, 최대한 쉬운 언어로 좀 더 자세히 살펴보도록 하겠습니다.

References