누구나 이해하는 AI — “머신러닝” 알고리즘이 실제로 하는 일
"인공지능/머신러닝에 대해 “비전공자”도 궁금해할 만한 이야기"
[누구나 이해하는 AI — 성공의 배경]에서 다루었 듯, 머신러닝 (aka딥러닝,기계학습) 은 최근 AI 기술 발전에 있어 가장 중추적인 역할을 했다고 할 수 있습니다. 머신러닝이란 기존에 프로그래머에 의해 코딩된 대로만 작동하는 시스템, 소프트웨어가 아니라, 컴퓨터 시스템이 스스로 “경험적인 데이터”에 의해서 “유의미한” 정보들을 찾아내고 이를 바탕으로 무언가를 “예측”하고 “결정”할 수 있는 기술들을 의미합니다. 그리고 이런 방식의 기술들의 발달은 우리가 “AI의 겨울”이라고 회고하는 시대, 즉 한때 AI에 대한 관심과 투자가 크게 줄었던 시기를 벗어날 수 있도록 크게 도와 주었습니다. 더 나아가, 이제는 AI가 전세계 모든 정부와 기업들이 앞다투어 경쟁하는 분야가 되었는데 그 중심에는 이 “머신러닝” 이라는 기술 (혹은 알고리즘) 이 있습니다.
그렇다면 이 머신러닝 알고리즘이 하는 일은 좀더 구체적으로 무엇일까요? 앞 포스트에서는 조금은 추상적인 수준에서 머신러닝이 필요한 이유에 대해 얘기했습니만, 이번에는 보다 기술적인 측면에서 머신러닝에 대해 이야기해보려 합니다. 충분히 기술적이고 본질을 놓지지 않으면서도 누구든 쉽게 이해할 수 있는 수준에서 아래에 핵심적인 두 가지만 이야기해보겠습니다.
첫째, “가중치” 게임
간단한 인공지능 프로그램을 만든다고 생각해 보겠습니다. 이 프로그램의 목표는 스팸메일 필터로써, 이메일이 도착했을 때 이메일의 내용을 보고 스팸메일인지 아닌지 결정을 내리는 기능을 수행하는 것입니다. 스팸 메일을 감지해내는 성능이 좋으면 좋을 수록 이메일 사용자가 불필요한 이메일을 열어 보는데 소비하는 시간이 절약되고, 심지어 접속한 컴퓨터에 전이될 수 있는 잠재적인 바이러스의 위험으로부터도 자유로워질 수 있게 될겁니다.
간단히 생각해낼 수 있으면서도 매우 효과적인 방법은 스팸메일이라고 예측하기에 도움이 될만한 “특정 단어들”이 이메일 내용중에 있는지를 확인하는 것입니다. 예를들어 이메일 내용 중에 “할인”, “공짜”, “선착순”, “아이폰”, “클릭” 등의 단어가 있는지를 확인해서 있다면 스팸이라고 분류하고 아니라면 스팸이 아니라고 분류하는 것입니다. 이를 위해 받은 이메일에 “스팸 점수”를 매겨 보겠습니다. 스팸일 가능성에 대한 점수로 높으면 높을 수록 스팸 이메일일 가능성이 높다고 판단하는 점수입니다.
그리고 각 단어별로 “스팸 점수”에 공헌하는 정도가 다르겠죠? 예를들어 “공짜”라는 단어가 “아이폰”이나 “클릭”이라는 단어보다 스팸에 있을 것 같으니까요. 그래서 스팸점수를 계산할 때 단어별로 다른 가중치를 주고자 합니다. 예를들어 다음과 같이 줘보겠습니다.
“할인”=10점, “공짜”=9점 “선착순”=8점, “아이폰”=4점, “클릭”=3점, …
그럼 어떤 이메일 A가 저 단어를 다 포함하고 있다고 하면 이메일 A의 스팸점수는 34점, 이메일 B가 “할인”만 빼고 다 있다고 하면 24점으로 이메일 A가 이메일 B보다 더 스팸일 가능성이 크다는 결론을 내일 수 있게 되는 것입니다. 아주 쉽죠?
그런데 여기서 하나의 문제의식을 가지실 수 있을 겁니다. 과연 저 가중치가 합리적일까요? 누군가는 ‘“클릭”을 7점은 줘야지~’라고 생각할지 모르겠습니다. 누군가는 “아이폰” 4점이 너무 크다고 여길지도 모르겠습니다. 친구끼리 주고 받는 메시지에도 있을 법한 단어이니까요. 그래서 바로 이 “가중치!”를 보다 효과적으로 찾아내기 위해 우리는 “머신러닝”이라는 것을 활용하는 것입니다. 즉, 누군가 ‘컴퓨터가 머신러닝으로 학습한다’ 라고 말한다면 ‘가중치를 찾는 거구나’ 라고 이해하시면 됩니다. 과거 수많은 이메일 데이터들과 각 이메일이 스팸인지 아닌지에 대한 판단 기록을 가지고 컴퓨터한테 각 단어들에 대한 가중치를 찾게 하는 것입니다.
보다 어려운 문제들에서도 마찬가지 입니다. 예를들어 “아파트 매물”이 얼마에 최종적으로 판매가 될지 예측하는 AI 시스템이 있다고 가정해 보겠습니다. 중요할만한 정보는 스팸의 경우처럼 포함 단어가 아닌 아파트 매물의 “위치”, “평수”, “설립연도”, “학군” 등등이 될 수 있을 것입니다. 그렇다면 “위치”는 “평수”보다 얼마나 더 가중치를 줘야 할까요? 2배? 3배? 10배? “설립연도”는 “학군”보다 더 큰 가중치를 줘야 할까요 아니면 더 작은 가중치를 줘야 할까요? 그 차이는 얼마이어야 할까요? 이 “가중치 게임”을 잘 풀어내는 것이 바로 현재 머신러닝 알고리즘들의 핵심이라고 할 수 있겠습니다.
둘째, “임계치” 찾기
하나만 더 짧게 다뤄보도록 하겠습니다. 위의 스팸 분류 시스템에서 각 이메일별로 핵심 단어들에 가중치를 주고 합산하여 스팸점수를 계산한다고 말씀 드렸습니다. 그렇다면 몇점 이상을 “스팸”으로 몇점 미만을 “일반”으로 분류해야 할까요? 이 기준을 삼는 “임계점수” 또한 머신러닝 알고리즘이 학습할 대상이 됩니다. 인간 스팸 전문가가 “30점 이상은 스팸” 이라고 지정하는 것도 방법이겠지만, 머신러닝은 그 임계치를 데이터들로부터 찾아냅니다. 위에서 말씀 드렸듯이 수많은 이메일들과 더불어 각 이메일이 스팸인지 아닌지 판단한 기록을 통해 이 적절한 임계치를 찾는 것입니다. 예를들어 ‘32.21점 이상은 스팸’ 처럼 말이죠.
이런 임계치 없이는 ‘메일 A가 메일 B보다 더 스팸일 가능성이 크다’ 등의 상대 비교만 가능할 것입니다. 다른 응용 시나리오로는 ‘유튜브 비디오 A가 비디오 B보다 폭력성이 있다’ 등이 있을 것입니다. 하지만 우리는 AI시스템을 통해 무언가 결정을 내리길 원합니다. 스팸은 자동으로 걸러내고 폭력적이거나 선정적인 비디오는 누군가 시청하기 전에 알아서 삭제되도록 하는 시스템을 원합니다. 이 모든 것의 기본은 “가중치”와 “임계치”를 찾는 것이고 머신러닝이 데이터를 가지고 하는 일이 바로 이 일이라고 이해하시면 정확한 이해라고 할 수 있습니다.
정리해보겠습니다. 우리가 AI를 다루는 뉴스나 아티클 등에서 ‘수많은 데이터를 통해 컴퓨터가 학습을 했다’, ‘머신러닝으로 자동 예측/분류 시스템을 만들었다’ 등의 표현들을 쉽게 접하게 됩니다. 그것은 다름이 아니라 위에서 얘기한 두 가지 — “가중치”와 “임계치” — 를 데이터들로부터 찾는 일을 했다고 이해하시면 됩니다.
물론, 효과적으로 찾는 방법에 대해서는 여기서 논하지 않았습니다. 문제의 성격에 따라 아주 쉽게 잘 찾을 수도 있고, 그렇지 않을 수도 있습니다만, 모든 머신러닝 분야의 연구 및 개발이 결국은 저 두 가지에 관한 것이라고 생각하셔도 무방합니다. 스팸 메일 필터링 같은 문제는 비교적 매우 쉬운 문제이지만 사람의 언어를 이해하거나 무인자동차를 컨트롤 하는 등의 더 복잡한 문제에 있어서 적절한 가중치와 임계치를 찾는 것은 쉽지 않은 문제이기 때문입니다.
머신러닝 알고리즘이 한다는 “학습”, “트레이닝” 등에 대해 추상적으로만 알고 계셨던 분이 있다면 이 글이 조금이나마 도움이 되었길 바랍니다.