기계학습(Machine Learning) 이란?
※ 본 글의 내용은 특정 자료를 보면서 쓴 글이 아니며 따라서 잘못된 지식/정보가 포함되어 있을 수 있습니다. 혹시 잘못된 내용이나 의문사항 있으시면 이메일 또는 덧글로 남겨주시기 바랍니다.
※ 본 글은 상업적인 용도가 아닌 이상 누구나 사용할 수 있으며, 원문 출처를 표기한다면 수정, 배포, 인쇄 등 어떠한 행위를 하여도 전혀 관심 없습니다.
※ 편의를 위해 본문은 높임체를 쓰지 않았습니다.
1. 기계학습 알고리즘이란?
아이들이 처음으로 사과를 먹고 '사과는 달콤하다'라는 정보를 알았다고 하자. 그러면 그 아이는 사과파이나, 사과잼 등 아직 먹어보지 않았지만 사과로 만든 여러 음식 또한 달콤할 것이라고 판단 할 것이다. 이와 같이, 컴퓨터 역시 이런저런 것들을 가르치면 그와 관련된, 하지만 직접적으로 가르쳐주지 않은 것들에 대해 답 할수 있다. 즉 학습 데이터를 바탕으로 입력데이터를 분류, 인식 할 수 있게 하는 알고리즘이 기계학습 알고리즘이다.
기계학습 알고리즘은 크게 학습영역과 인식영역으로 나뉜다. 아래의 서브챕터는 학습영역과 인식영역에 대해 간단히(?) 설명한 것이다.
1-1. 학습영역
이러한 기계학습은 일반적으로 학습영역과 인식영역으로 나뉜다. 우선 학습영역은 사람으로 비유를 들자면 아무것도 모르는 어린아이에게 몇가지 정보를 알려줘서 그에 대한 정보를 머릿속에 담게 하는 역할을 한다. 그림 1은 학습의 구조를 간단한 예를 통해 표현한 것이다.
우선 컴퓨터(혹은 유아)가 과일이나 채소에 대해 아무것도 모른다고 가정하겠다. 그림 1의 맨 위의 것들은 과일과 채소에 대해 가르치기 위해 준비한 학습 데이터이다. 각각의 학습데이터에는 맛과 색깔에 대한 두가지 정보를 가지고 있다. 이러한 정보들을 이/공학에서는 특징벡터(Feature Vector)라고 표현한다.(특징정보가 2개면 2차원 벡터가 되고, 10개면 10차원 벡터, 1000개면 1000차원 벡터가 되는 것이다.)
아무튼 이렇게 준비한 정보들을 학습영역에 때려박는다. 여기서는 우선 기계학습에 대해 설명하는 중이기 때문에 학습영역의 내부 구조는 추후에 설명하도록 하겠다.(이 학습영역의 내부구조에 따라 인공신경망, SVM 등 알고리즘이 달라진다.)
아무튼 이렇게 학습이 끝나고 나면 컴퓨터(혹은 유아)는 학습결과 영역과 같이 과일과 채소를 정의할 것이다.
과일이란? 빨간색 또는 노란색의 달콤한 것들.
채소란? 초록색 또는 보라색의 달콤하지 않은 것들.
1-2. 인식영역
인식과정은 학습한 데이터(머릿속에 저장된 정보)를 가지고 새로운 데이터가 입력되었을 경우 이미 학습한 정보를 이용하여 판별하는 역할을 한다. 1-1의 학습과정을 통해 컴퓨터(혹은 유아)는 과일과 채소에 대해 알게 되었다. 이와 같이 학습이 완료되면 이제부터는 학습된 정보를 바탕으로 인식을 수행할 수 있다. 그림 2를 보자.
그림 2. 인식과정의 예
우선 입력데이터의 분류를 ?로 한 이유는, 이것들이 과일인지 채소인지 모른다는 가정하에 분류하기 위해서이다.
그리고 분류영역, 이것의 구조는 학습영역과 거의 유사하다고 할 수 있다.
단 학습영역은 분류결과가 학습데이터의 분류결과와 일치(또는 근사)할 때까지 반복해서 계산해서 가중치(가중치가 무엇인지 모른다면 일단은 '분류를 결정하는 열쇠' 정도라고만 이해하고 넘어가자)를 갱신하는데 비해, 분류영역은 해당 가중치를 학습과정에서 계산하여 저장한 학습 데이터베이스에서 바로 가져다 쓴다는 차이가 있다.
분류에 필요한 학습데이터란 바로 위에서 말한 가중치들의 집합이다. 가중치에 대해 간단히 설명하자면, '과일은 달고 빨강, 또는 노랑색, 채소는 달지 않고 초록색 또는 보라색이다' 라는 정보를 분류할 수 있게 해주는 수치라고 판단하면 된다.
즉 학습영역에서 산출된 학습결과 가중치를 이용하여 분류를 수행하면 귤과 망고는 달고 노란색이기 때문에 과일, 배추는 달지 않고 초록색이기 때문에 채소로 분류한다.
1-3. 특징벡터
특징벡터는 위에서도 설명했지만, 학습 또는 분류하고자 하는 객체의 특징을 의미한다. 벡터라는 말을 사용하는 이유는, 특징이 1개 뿐이라면 이 특징을 수치화 시켰을 때, 예를 들면 달콤하다는 '0', 달콤하지 않다는 '1'과 같이, 하나의 숫자, 즉 스칼라값으로 표현 가능하지만, 2개 이상의 특징을 수치화 시키면 하나의 숫자로 표현되지 않기 때문에, 2개 이상의 숫자의 집합이라 할 수 있는 벡터라고 하는 것이다.
특징벡터는 기계학습 알고리즘을 어떤 것을 사용하느냐와 관계없이 객체를 학습/분류하는데 가장 큰 영향을 미친다. 그 이유는 아래 그림 3을 보면 알 수 있다.
우리가 알고 있기로는 단호박은 채소이다. 하지만 맛과 색이라는 두가지 특징벡터를 사용한다면 분류결과는 단호박의 경우 그림 3의 분류결과와 같이 과일로 분류된다. 이는 맛과 색이 과일과 채소를 나누는 결정적인 특징이 아니라는 얘기다. 따라서 과일과 채소를 구분하기 위해서는 맛과 색이 아닌 또다른 특징이 필요하다. 뿐만 아니라 오히려 위의 맛과 색은 과일과 채소를 나누는데 있어 전혀 도움되지 않는 특징이 될 수도 있다. 일반적으로는 특징의 개수가 많을수록 좋지만, 필요 이상으로 특징이 많으면 일부 특징은 잡음 역할을 해서 정확한 학습/인식에 악영향을 미치기도 한다.
그럼 맛과 색이 아닌 다른 어떠한 특징이 좋을까? 아마 이 글을 읽는 대부분의 사람들이 나무의 열매는 과일, 나무에서 열리지 않는 열매가 채소라는 점은 다 알고 있을 것이다. 해당 특징을 이용하면 1차원 특징벡터만으로도 상당히 우수한 학습/인식 결과를 나타낼 수 있다. 이처럼 특징 중에서 정말 무언가를 결정하는데 크리티컬한 특징들이 있다. '어떠한 기계학습 알고리즘을 사용하는지'에 대한 문제도 중요하지만 더욱 중요한 것은 '어떠한 특징을 사용하는지'에 관한 것이다.
다시한번 사람으로 예를 들자면, 기계학습 알고리즘을 선택하는 것은 어떤 방식으로 공부하느냐를 결정하는 것이고, 특징을 선택하는 것은 무엇을 공부하느냐를 선택하는 것이라고 할 수 있다.
집에서 공부하는 것보다는 학원, 또는 독서실에서 공부하는 것이 보다 효율이 좋겠지만, 영어시험을 보기 위한 공부라면 학원 독서실에서 중국어를 공부한 사람보다는 집에서 영어를 공부한 사람의 성적이 더 좋은 것은 당연한 것이다.
인공신경망 또는 다른 학습 알고리즘을 공부하기 전에 이와 같이 특징이 학습/인식에 미치는 영향이 얼마나 중요한지에 대해 한번쯤은 알고 넘어가는 것이 좋을 것이다.
기회가 된다면 다음 포스팅때에는 기계학습 알고리즘 중 하나를 선택해서 보다 자세하게 포스팅 하도록 하겠습니다.