brunch

You can make anything
by writing

C.S.Lewis

by 한상훈 Aug 11. 2020

고양이도 이해하는 분류 알고리즘

어려운 알고리즘 개념 빠르게 핥아보기

"어린시절 스무고개 놀이 해보셨나요?"


스무고개는 "예"와 "아니오" 로 답변을 하면서 정답을 찾아가는 놀이입니다. 스무고개를 해보신 분들은 아시겠지만 이 놀이를 잘 하려면 처음과 나중의 질문을 잘 구성해야합니다. 처음엔 대분류에 해당하는 질문(살아있는 생명체입니까?)을 하는 게 좋습니다. 대분류로 필터링된 데이터를 바탕으로 점점 소분류로 좁혀가면서 정답을 찾아가야 합니다. 

스무고개 최강자 아키네이터. 하지만 이 놈은 응답을 바이너리로 받지 않는다;;

스무고개를 못하는 친구들은 처음에 분류를 너무 작게 해서 질문을 버립니다. 또는 이미 분류된 내용과는 무관한 질문을 하기도 합니다. 분류 알고리즘은 어린시절부터 우리에게 스무고개 필승법과 필패법을 알려주었는데, 이번 글에서는 이 분류 알고리즘을 살짝만 전문적으로 다뤄서 조금 똑똑한 기분을 들게 하는 걸 목표로 작성했습니다.


분류 알고리즘은 어디에 왜 쓰일까?

분류는 왜 하나요? 분석하고자 하는 대상이 무엇인지 구체화하기 위해 사용합니다. 바꿔말하면 구체화할 필요가 있는 모든 대상에게 분류 알고리즘은 사용될 수 있습니다. 대표적으로 요즘 핫한 인공지능의 신경망학습을 예로 들 수 있습니다. 

지금도 AI는 발전하고 있습니다.

"이것은 개인가 고양이인가?" 구별하게 하기 위해 인공지능이 애쓰고 있다는 사실은 모두 아실겁니다. 천문학적인 돈이 인간은 쉽게 하는 동물 구분이나, 이미지 판별을 학습시키려고 애쓰고 있죠. 이를 위해 수 백 만 장의 무고한 개와 고양이 사진이 지금도 분류되고 있습니다! 


인공지능에만 분류 알고리즘이 쓰이는건 아닙니다. 스팸 필터, 추천 피드, 자동 광고 등 우리 생활 속에 숨어서 삶을 조종하고, 행동을 이끌어가는 알고리즘도 분류 알고리즘의 영향을 받습니다. 덕분에 우리는 분류하는 삶을 살기도 하지만 분류 받는 삶도 살고 있습니다.

구글 애널리틱스, 그들은 모든 걸 알고 있다.

광고 알고리즘에서의 분류를 좀 더 이야기봅시다. 구글에서 제공하는 애널리틱스 도구를 사용하면 서비스 사용자의 인구 통계학적 정보 + 관심사 카테고리 + 지역 + 행동 추적 정보가 제공됩니다. 이런 결과를 구글이 어떻게 보여줄 수 있을까요? 바로 우리가 하는 행동, 관심을 하나하나 추적해 분류하는 알고리즘이 기저에 있다는 걸 알 수 있습니다. 지금도 구글신은 저와 여러분이 클릭하는 광고, 사용하는 앱, 방문하는 페이지, 접속 시간 및 활동 행태를 모두 분석해 나라는 사람을 분류하고 있습니다.(구글신을 노하게 해선 안돼)






분류 알고리즘을 크게 나눠서 생각해보기

분류는 최상위 레벨에서 보면 크게 두가지 형태로 구분될 수 있습니다. 바로 이진 분류다중 분류입니다.



예와 아니오로만 답해!

이진 분류(Binary)

스무고개 게임과 같습니다. 거짓말 테스트랑도 비슷합니다. 참가자는 답을 "예"와 "아니오"로만 말해야 하듯, 이 분류법에선 결과를 "예"와 "아니오"로만 분류합니다. 시스템적으론 "예"는 1, "아니오"는 0로 출력합니다. 



다중 분류 당하는 전주 최씨 하정우

다중 분류(Multiclass)

다중 분류는 여러 결과를 출력하는 분류법입니다. "지금 이 글을 보고 있는 사람이 사는 도시는 어디인가?" 라는 질문에 수 십가지 답이 나올 수 있습니다. 서울, 대전, 부산과 같이 여러 결과를 표현하고, 계급화하여 표현하는 방식을 사용합니다.


다중 분류에서는 계급화된 데이터가 이산되어 있는지(discrete), 연속적인지(continuous) 여부를 판단할 수 잇습니다. 다중 분류에서는 이산화된 정도와 연속적인 정도를 통해 예측이 가능해집니다. 싸움이 일어나서 그곳에 가보니 10,000명 중 9,999명의 직업이 깡패였다면, 나머지 1명의 직업도 깡패일 거 같은 느낌이 듭니다. 



구체적인 분류 알고리즘을 알아보자

분류 알고리즘은 위의 두 가지 큰 형태로 나눠볼 수 있지만, 방법적인 측면으로도 분류할 수 있습니다. 바로 통계적 알고리즘(statistical algorithms)구조적 알고리즘(structural algorithms)입니다. 통계적 알고리즘은 회귀(Regression), 나이브 베이즈(Naive Bayes), 베이즈 네트워크(Bayesian networks)로 나눌 수 있습니다. 


회귀는 연속 변수에 대해 예측하는데 특출난 알고리즘입니다. 이 알고리즘의 전제는 분석할 데이터가 충분히 많아서 모델을 예측하기에 충분하다는 가정을 둡니다. 일반적으로 다루고자 하는 변수에 대해서 선형 함수로 도출합니다.


인류를 스팸 메일에서 구원하신 토머스 베이즈 좌

나이브 베이즈와 베이즈 네트워크는 이름에서 알 수 있듯 베이즈와 관련 있어보입니다. 이 두 방법은 베이즈 정리(Bayes theorem)으로부터 나온 것입니다. 대상이 가진 여러 속성들간 종속성을 표현해 확률을 분석할 수 있게 해줍니다.


예를 들어 우리가 만나는 스팸메일은 비슷한 특징이 있습니다. 인터넷 도박 사이트 스펨 메일의 경우 자주 쓰이는 용어가 정해져있다보니 해당 메일에는 언제나 들어가는 단어들이 있습니다. "현금 즉시 지급","실시간 카지노" 등 마치 스팸 메일 학원이 있는 것처럼 유사한 패턴이 보입니다. 


베이즈 정리를 활용하면 메일 목록을 모두 가져온 후 사람이 스펨 메일과 아닌 것을 분류합니다. 그러면 스펨에서 자주 발생하는 단어 뭉치를 확률적으로 추려낼 수 있게 됩니다. 이 과정을 계속 반복하면 점점 더 많은 스팸 메일 리스트가 쌓이고, 정상적인 이메일 리스트가 쌓입니다. 이렇게 수 없이 반복하는 과정을 거치면 정교한 스팸 필터가 완성됩니다!


구조적 분류 알고리즘은 다음과 같습니다. 


첫번째로 규칙 기반(Rule-based) 알고리즘으로 생성 규칙(Production rule), 결정 트리(Decision trees)가 있습니다. 규칙 기반은 기본적으로 전향 연쇄(forward-chaining, 순방향 추론 또는 포워드 추론) 생성 시스템으로 구현됩니다. 어려운 말이 많은데 쉬운 예시를 들어봅시다.


규칙 1. 개는 포유류이다.

규칙 2. 포유류는 새끼를 낳는다.


이와 같은 규칙을 통해 전향 연쇄를 사용하면, "개는 새끼를 낳는다"를 추론할 수 있습니다. 결정 트리의 경우 위에서 설명한 "스무고개 놀이"가 적절한 예입니다. 질문을 반복하면서 점점 정교한 분류가 가능해지는 방식입니다. 


결정 트리의 단점으로는 새로운 데이터에 대해 분류하는게 어렵고, 속성이 질문으로 분류될 수 없는 경우에 대응하기 어렵습니다. 극단적인 비유를 하자면 "개는 전공 서적과 비교해 도움이 됩니까?" 같은 말도 안되는 질문이 나올 수도 있을 겁니다.


결정 트리를 최고로 활용하면 최대한 후보군을 많이 지우는 질문을 적절한 타이밍에 하는 것입니다. 스무고개에서도 적절한 질문을 하면 금방 답을 찾아낼 수 있지만, 처음부터 핀트를 잘못잡으면 20번의 질문으로도 답을 절대 찾지 못하는 것과 같습니다.


이 방법의 단점이 여기서 나옵니다. 얼마나 많은 후보군을 지우느냐가 핵심인데, 보기 좋지 않은(분류하기 힘든 속성) 데이터가 많은 경우에는 일반화하기 어렵습니다. 일반화의 어려움이 있기 때문에 유한한 형태로 분류될 수 있는 형태의 데이터를 분류하는데 적합합니다.


두번째로 거리 기반(Distance-based) 알고리즘으로는 kNN(k-nearest neighbor), 학습 백터 양자화(Learning vector quantization)가 있습니다. 거리 기반으로 분석한다는 것은 결과를 함수적으로 접근하거나 최근접 이웃을 사용한다고 볼 수 있습니다.


유사 척도를 측정하는데 적합하지만, 저차원에서만 높은 효율을 보입니다. 예를 들어 속성이 1,2차원인 경우 비교적 직관적으로 값을 해석할 수 있지만 3,4,5,6차원으로 커질수록 각각의 값이 갖는 거리가 유사도를 보장해주지 않기 때문입니다.


소득과 건강 기준으로만 보면 한국은 포트투갈하고 거의 닮았다. 하지만 한국이 다른 기준에서도 포르투갈하고 닮아있을까?


마지막으로 신경망에서는 다층 퍼셉트론(Mulilayer perceptron)이 있습니다. 신경망 알고리즘은 신체의 뉴런(neurons)과 시냅스(synapses)를 닮은 네트워크를 만들어 분류 알고리즘을 구현한다고 이해할 수 있습니다. 인간의 두뇌와 유사한 형태로 정보를 학습하도록 만들고, 이를 바탕으로 무엇이 개인지 고양인지 구별하는 것이죠.


신경망을 설명하는 사진, 어려워 보인다.

신경망에 대해서는 수학적, 통계적 배경 지식이 워낙 많이 필요합니다. 이 글은 수학, 통계를 다루지 않을 것이기 때문에 쉽게 예시를 들어보겠습니다. 

뉴런의 구조, Input을 통해 자극을 흡수하고, Output으로 자극을 알려준다

우리의 신경 세포는 너무 약한 자극은 감지하지 못합니다. 예를 들어 충분한 공기 입자가 피부를 때리지 않으면 바람이 분다고 생각하지 않습니다. 지금도 엄청난 공기 입자가 우리 피부를 때리고 있는데 말이죠. 이처럼 일정 자극 이상이 들어오면 신경 세포는 자극을 시냅스를 통해 전달합니다.


???: 이리 좀 와서 먹어봐유

만약 여러분이 단짠단짠을 좋아한다고 합시다. 혀에 들어오는 단맛과 짠맛의 자극이 있을겁니다. 이 자극은 Input에 해당하는 자극값입니다. 신경망에서는 x1, x2, x3 등으로 표현합니다. 여러분이 좋아하는 정도의 단맛과 짠맛은 신경망에서 사용하는 용어로는 가중치(weight)라 할 수 있습니다. 이렇게 단맛과 짠맛의 강도가 적당하면 여러분은 "존맛"이라 말할 것이고, 값이 원하는 수준과 다르면 "우웩"라고 말할겁니다.


이처럼 우리는 자신도 모르게 신경망 알고리즘을 통해  "존맛""우웩"을 분류하며 삽니다. 많은 인공지능 연구자들은 가중치를 변경하거나 입력값을 더 넓게, 또는 더 좁게 조정하는 것 뿐 아니라 재밌는 방법을 시도하면서 인공지능 연구를 지속하고 있습니다.


마지막으로 분류 알고리즘은 워낙 복잡한 내용이 많다보니 글을 작성하는 과정에서 축약하거나, 쉽게 표현하기 위해 극단적인 비유가 섞어봤습니다. 재미가 있어서 조금이라도 더 이해가 잘되기 때문에 이렇게 표현했다는 점을 알려드리니 참고 정도로 활용해주시면 감사하겠습니다.



매거진의 이전글 내가 보는 IT의 미래
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari