기계학습 관련 틀 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
1. 개요
機械學習 / Machine Learning표현 그대로 기계가 데이터를 기반으로 학습하여 특정 작업을 수행하는 것이다.
2. 상세
인공지능의 대표적인 방법이었던 전문가 시스템은 사람이 직접 많은 수의 규칙을 구현하는 것을 전제로 하였다. 이 같은 접근 방법은 과학 분야, 예를 들어 의학이나 생물 분야에서는 큰 역할을 할 수 있었다. 의사들의 진단을 도와주는 전문가 시스템을 생각해 보면 인간이 지금까지 발견한 의학적인 규칙들을 데이터베이스화하여 등록시켜 주면 되는 것이었다.하지만 시간이 지남에 따라 세상은 사람조차 스스로 어떻게 작동되는지 아직 정확히 모르는 영역을 구현하는 프로그램을 요구하기 시작했다. 대표적으로 음성인식을 예로 들 수 있다. 음성 인식 비서 서비스를 개발하는 경우, 일단 사람의 발화(Utterance)된 문장을 정확히 인식하고, 그 문장의 의미를 분석하고 해석하는 능력이 필요하다. 이 같은 시스템은 사람이 하나하나 규칙을 만들어 준다고 형성될 수 있는 것이 아니다. 소리 같은 경우에는 컴퓨터에 PCM의 형태로 전달이 되는데 대체로 이는 1초에 최소 나무위키 항목 하나 분량의 데이터를 포함하고 있다. 전체적인 데이터를 보고 그것이 의미하는 정보들을 명확히 짚어낼 줄 알아야 한다.
그리하여 나온 방법이 기계학습이다. 이름에서 알 수 있듯이 기계학습은 기계, 즉 컴퓨터를 인간처럼 학습시켜 스스로 규칙을 형성할 수 있지 않을까 하는 시도에서 비롯되었다. 인간의 사고를 효율적으로 처리하려는 관점에서부터 접근하여 모방하는 방법이다.[1][2]
지금에 이르러선 컴퓨터와 무관해보이던 다른 분야들도 빠르고 만족스러운 결과를 선보이기 위해 기계학습에 의존하는 추세이다.
3. 관련과목
- 통계학
- 일반통계학: 확률 '분포'란 무엇이며, 그에 따른 계산을 할 때 왜 적분을 써야 하는가, 베이즈 정리란 무엇인가 등의 지극히 기초적인 배경 정도는 반드시 필요하다. 심화학습으로 회귀 분석, 다변량 분석, 군집 분석, 확률 분포 추정, 마르코프/은닉 마르코프 모델, 서포트 벡터 머신, 베이즈 정리, 베이즈 확률론/베이지언 통계학을 배워야 한다.
- 수리통계학: 가설검정, 회귀 분석, 여러 가지 확률 분포들이 머신러닝 기법에 등장한다. 이를 개념적으로 아는 것뿐만 아니라 직접 수리적으로 다룰 수 있어야 한다. 조건부확률, 이산확률분포, 연속확률분포 등 수리적 개념을 확실히 하고 가는 것이 나중에 도움이 된다.
- 선형대수학: 고차원의 수적 데이터를 다루고, 따라서 행렬이 필연적으로 등장한다.
- 수치해석: 비선형 모델 및 소수점을 컴퓨터로 처리하는 과정 그 자체와 관련된 이러저러한 문제들에 대해 반드시 알아야 한다.
- 이산수학: 확률 그래프 모델이 등장하며, 엑셀 그래프 같은 게 아니다.
- 미적분학: 다변수함수의 미적분까지는 반드시 공부해야 한다. 테일러 급수와 그를 이용한 함수 근삿값 구하기[3], 라그랑주 승수법, 반복된 미분으로 기울기가 0으로 소멸(vanishing gradient problem) 등등 다변수함수 미적분학을 공부하면 알 수 있다.
- 병렬 및 분산 컴퓨팅: 어마어마한 양의 선형대수학 계산을 효율적으로 하는 데에 이만한 게 없다. 따라서 필수적으로 알아둬야 한다. 첨언하자면, Hadoop, spark 등이 그렇게 크게 히트를 친 이유가 기계학습 때문이다.
- 통계역학: 호필드 망, 볼츠만 기계 등 재귀신경망 기법들의 원리가 대부분 여기서 힌트를 얻어서 만들어졌다.
- 최적화 이론: 대부분의 학습방법이란 게 주어진 데이터에 맞춰서 오차를 최소화하면서 회귀 함수를 만드는 것인데, 이때 필연적으로 최적화와 관련된 이야기가 반드시 등장한다. 미적분과 더불어서 경사 하강법, 그리고 인공신경망의 학습과정과 관련된 문제들이 정확히 무슨 이야기인지 그 이해를 보충하는 데에 도움이 된다.
- 변분법: 베이즈 확률론에 기반한 알고리즘들을 쓰다 보면 여러 가지 의미로 어마어마한 적분들의 근삿값을 어떻게든 구해야 하는데, 이때 쓰이는 방법 중에 하나가 범함수를 이용한 것이며, 범함수를 다루려면 변분법을 알아야 한다.
- 함수해석학: 기하 기반의 알고리즘들을 공부하다 보면 내적 공간, 바나흐 공간, 힐베르트 공간 등에 대한 이야기가 필연적으로 나오며, SVM의 경우 '커널 기법'이라는 것이 사용되는데, 이 모든 것에 대한 이론적 근간이 바로 함수해석학에 있다. 단, 소볼레프 공간 등에 대해 배울 정도로 많이 배울 필요는 없고[4], 어지간한 물리학도들이나 공학도들이 하는 정도로만 하면 된다.
- 측도론: 확률이란 무엇인가를 근본적으로 탐구하게 된다.
3.1. 복수전공 및 부전공
장래에 기계학습 그 자체와 관련 연구분야의 최전선에 뛰어들 생각이 있으면 참고할 것.요즘 기계학습 연구자들 중에는 아예 물리학 전공이나 수학 전공 출신도 종종 보인다. 컴퓨터과학자들이 먼저 그 연구를 주도한 것과는 별개로, 해당 분야에 대해 연구하는 데에 물리학과 수학 및 통계학을 공부하면 도움이 된다.
당장 호필드 네트워크, 볼츠만 머신 등이 동적 시스템과 통계역학을 연구한 물리학자들이 결정적인 공헌을 했다. 변분법 역시 원래 고전역학(정확히는 라그랑주 역학) 및 광학에서 그 동기를 찾을 수 있다. 기계학습에 쓰이는 기초적인 정도의 함수해석학도 양자역학 덕분에 오늘날 그 위상을 차지한 것이다.
통계학의 경우, 회귀 분석은 물론이고, '비지도 학습'이란 이름하에 퍼져있는 군집 분석 및 확률 분포 추정, 그리고 요즈음 '통계학습'이라는 이름하에 판을 치고 있는 베이즈 통계학 등 비중이 높다.
따라서 컴퓨터과학/물리학 복수전공을 권한다.
컴퓨터과학/수학 복수전공을 통해서도[6] 당장 기계학습에 써먹기 적합한 종류의 수학은 전부 배울 수 있다. 심지어 측도론 같은 걸 파면 실험/응용 분야뿐만 아니라 이론 쪽도 건드릴 수 있다. 다만 위상수학, 정수론, 대수학 등으로 빠지지 않도록 주의할 것.[7]
4. 프로그래밍 언어
기계학습 알고리즘을 구현하기 위해서는 관련 프로그래밍 언어에 대한 이해가 필요하다. 대표적으로 3가지를 들자면, Python은 기계학습 분야에서 가장 널리 사용되는 프로그래밍 언어 중 하나이며, NumPy 라이브러리를 써서 쉽게 구현할 수 있다. Scipy 라이브러리 등을 추가하여 내부 변수의 계산을 하거나 Cython 등을 이용하여 알고리즘의 속도를 빠르게 하기에도 용이하다. 또, R언어는 대표적인 통계 기반 프로그래밍 언어이다. R 언어의 강점은 간단한 코딩으로 충분히 인지 가능할 정도로 시각화된 데이터를 얻어내는 것에 있다. 이를 통해 개발 파이프라인을 단축시키는 데 많은 기여를 한다. 마지막으로 MATLAB이 있는데 아무래도 수학적 정밀도가 어느 정도 보장되는 언어이다 보니 주로 연구실 등에서 사용된다. 기계학습에서 쓰이는 프로그래밍은 일반적으로 흔히 생각하는 객체지향 프로그램보다는 엄청난 스케일의 과학컴퓨팅 위주인데, 바로 이 점 때문에 아예 해당 분야에 최적화되어 있는 MATLAB이나 해당 라이브러리들이 원숙하게 개발되어 있는 Python을 쓰는 것이다. 또, 포트란이나 최근에 뜨고 있는 줄리아(Julia) 같이 과학 컴퓨팅에 최적화되어 있는 프로그래밍 언어들을 쓰는 것도 고려해 볼 수 있다.기계학습에 필요한 모델을 만들고 (엔지니어가 만든) 소프트웨어를 이용해 분석 및 통계 작업을 하는 것은 해당 전공 분야의 직업군에서 맡는다.[8] 널리 알려진 알고리즘들은 이미 함수로 구현까지 끝나 있다.
5. 정의
기계학습의 가장 그럴듯한 정의는 다음과 같다. 이는 "machine learning" 책을 지은 컴퓨터과학자이자 CMU의 기계학습 교수인 Tom M. Mitchell이 제시한 것이다."A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E"
즉, 특정 작업 T에 대해, 경험 E를 바탕으로 성능 P가 개선될 때, 이러한 과정을 기계학습이라고 할 수 있다.
정의에서 알 수 있듯이, 기계학습에서 가장 중요한 것은 E에 해당하는 데이터이다. 좋은 품질의 데이터를 많이 가지고 있다면 보다 높은 성능을 끌어낼 수 있다.
5.1. 학습 종류에 따른 분류
기계학습 문제들을 학습 종류에 따라 지도학습(문제와 답이 둘다 존재), 비지도학습(문제는 존재하지만 답은 알아서 알아야함.) 그리고 강화학습(문제도 답도 알아서 찾아나가야 함.)3가지로 나눌 수 있다.특히 지도학습과 비지도학습의 구분은 레이블(label)의 유무에 따라 이뤄진다. 여기서 레이블이란, 학습 데이터의 속성을 무엇을 분석할지에 따라 정의되는 데이터를 뜻한다.
5.1.1. 지도학습(supervised learning)
사람이 교사로서 각각의 입력(x)에 대해 레이블(y)을 달아놓은 데이터를 컴퓨터에 주면 컴퓨터가 그것을 학습하는 것이다. 사람이 직접 개입하므로 정확도가 높은 데이터를 사용할 수 있다는 장점이 있다. 대신에 사람이 직접 레이블을 달아야 하므로 인건비 문제가 있고, 따라서 구할 수 있는 데이터양도 적다는 문제가 있다.- 분류(classification): 레이블 y가 이산적(discrete)인 경우 즉, y가 가질 수 있는 값이 [0,1,2 ..]와 같이 유한한 경우 분류, 혹은 인식 문제라고 부른다. 일상에서 가장 접하기 쉬우며, 연구가 많이 되어있고, 기업들이 가장 관심을 가지는 문제 중 하나다. 이런 문제들을 해결하기 위한 대표적인 기법들로는 로지스틱 회귀법[9], KNN, 서포트 벡터 머신(SVM), 의사 결정 트리 등이 있다.아래와 같은 예시가 있다.
- 주차게이트에서 번호판 인식: 요새 주차장들은 티켓을 뽑지 않고, 차량 번호판을 찍어서 글자를 인식하는데 정확도를 높인다. 번호판은 정형화되어 있으므로 전통적인 컴퓨터 비전으로도 처리는 가능하나, 오염 등에 대해 정확도를 높이자면 기계학습을 하면 더 좋다. 이미지 픽셀값들에 따라 숫자 글자를 분류한다.
- 페이스북이나 구글 포토의 얼굴 인식: 역시 컴퓨터 비전을 이용하되 기계학습을 결합. 페이스북에 사진을 올리면 친구 얼굴 위에 이름이 자동으로 달리고는 하는데, 이것 역시 기계학습을 이용한 것. x가 이미지 픽셀, y가 사람 이름인 경우.
- 음성 인식: 음성 wav 파일에 대해서 해당 wav 부분이 어떤 음절인지를 인식하는 것. 애플 시리, 구글 보이스 등에서 사용된다(질문에 대해서 답해주는 부분 말고, 인식 부분만). x가 음성 파형, y가 음절.
- 회귀(regression): 레이블 y가 실수인 경우 회귀문제라고 부른다. 보통 엑셀에서 그래프 그릴 때 많이 접하는 바로 그것이다. 데이터들을 쭉 뿌려놓고 이것을 가장 잘 설명하는 직선 하나 혹은 이차함수 곡선 하나를 그리고 싶을 때 회귀기능을 사용한다. 잘 생각해 보면 데이터는 입력(x)과 실수 레이블(y)의 짝으로 이루어져 있고, 새로운 임의의 입력(x)에 대해 y를 맞추는 것이 바로 직선 혹은 곡선이므로 기계학습 문제가 맞다. 통계학의 회귀분석 기법 중 선형회귀 기법이 이에 해당하는 대표적인 예이다.
5.1.2. 비지도 학습(unsupervised learning)
사람 없이 컴퓨터가 스스로 레이블 되어 있지 않은 데이터에 대해 학습하는 것. 즉 y 없이 x만 이용해서 학습하는 것이다. 정답이 없는 문제를 푸는 것이므로 학습이 맞게 됐는지 확인할 길은 없지만, 인터넷에 있는 거의 모든 데이터가 레이블이 없는 형태로 있으므로 앞으로 기계학습이 나아갈 방향으로 설정되어 있기도 하다. 통계학의 군집화와 분포 추정 등의 분야와 밀접한 관련이 있다.최근에는 레이블을 사람이 직접 레이블하는 것이 아닌, 컴퓨터가 임의로 직접 레이블을 지정할 수 있어 레이블이 없는 데이터셋으로 학습할 수 있는 일부 문제[10]는 자가지도 학습(self-supervised learning)이라는 용어로 따로 분류하고 있다.
- 군집화(clustering): 데이터가 쭉 뿌려져 있을 때 레이블이 없다고 해도 데이터 간 거리에 따라 데이터를 몇 개의 군집으로 나눌 수 있다. 이렇게 x만 가지고 군집을 학습하는 것이 군집화이다.
- 분포 추정(underlying probability density estimation): 군집화에서 더 나아가서, 데이터들이 쭉 뿌려져 있을 때 얘네들이 어떤 확률 분포에서 나온 샘플들인지 추정하는 문제이다.
- 최근 들어 GPT-2 같이 데이터 일부를 가지고 나머지를 추측하는 방식으로 데이터를 이해하고자 하는 연구가 많이 진행되어 있다. 예로 든 GPT-2는 텍스트를 읽고 바로 다음에 올 단어를 예측하는데, 인터넷에서 수집한 텍스트 30GB로 훈련했더니 특별한 지도학습 없이도 대부분의 일을 수행하고[11], 약간의 지도학습을 곁들이면 모든 분야에서 모든 기존 방식을 앞질렀다. 특히 일반 상식을 묻는 시험에서는 아무런 지도 학습 없이도 다른 기존 방식을 큰 폭으로 제치고 1위를 달성했다.
5.1.3. 반지도 학습(semisupervised learning)
레이블이 있는 데이터와 없는 데이터 모두를 활용해서 학습하는 것인데, 대개의 경우는 다수의 레이블 없는 데이터를 약간의 레이블 있는 데이터로 보충해서 학습하는 종류의 문제를 다룬다.5.1.4. 강화학습(reinforcement learning)
위의 두 문제의 분류는 지도의 여부에 따른 것이었는데, 강화학습은 조금 다르다. 강화학습은 현재의 상태(state)에서 어떤 행동(action)을 취하는 것이 최적인지를 학습하는 것이다. 행동을 취할 때마다 외부 환경에서 보상(reward)이 주어지는데, 이러한 보상을 최대화하는 방향으로 학습이 진행된다. 그리고 이러한 보상은 행동을 취한 즉시 주어지지 않을 수도 있다(지연된 보상). 이 때문에 문제의 난이도가 앞의 두 개에 비해 대폭 상승하며, 시스템을 제대로 보상하는 것과 관련된 신뢰 할당 문제라는 난제가 여전히 연구원들을 괴롭히고 있다. 대표적으로 게임 인공지능을 만드는 것을 생각해 볼 수 있다. 체스에서 현재 나와 적의 말의 배치가 state가 되고 여기서 어떤 말을 어떻게 움직일지가 action이 된다. 상대 말을 잡게 되면 보상이 주어지는데, 상대 말이 멀리 떨어져 이동할 때까지의 시간이 필요할 수 있으므로, 상대 말을 잡는 보상은 당장 주어지지 않는 경우도 생길 수 있다. 심지어는 그 말을 잡은 것이 전술적으로는 이익이지만 판세로는 불이익이라 다 끝났을 때 게임을 질 수도 있다. (지연된 보상). 따라서 강화학습에서는 당장의 보상값이 조금은 적더라도, 나중에 얻을 값을 포함한 보상값의 총합이 최대화되도록 action을 선택해야 하며, 게다가 행동하는 플레이어는 어떤 행동을 해야 저 보상값의 합이 최대화되는지 모르기 때문에, 미래를 고려하면서 가장 좋은 선택이 뭔지 action을 여러 방식으로 수행하며 고민해야 한다. 좋은 선택이 뭔지 action을 찾는 것을 탐색, 지금까지 나온 지식을 기반으로 가장 좋은 action을 찾아 그것을 수행하는 것을 활용한다고 하여, 강화학습을 푸는 알고리즘은 이 둘 사이의 균형을 어떻게 잡아야 할지에 초점을 맞춘다. 위 방법들과는 다르게 실시간으로 학습을 진행하는 게 일반적이다.6. 알고리즘
기계학습에서 사용되는 대표적인 알고리즘에 대해 기술한다. 지도학습/비지도학습에 관련된 기본기들은 굳이 전산학이 아니라 통계학의 다변량 분석과 관련된 과목을 수강해도 익힐 수 있지만, 반지도학습, 강화학습 등은 반드시 컴퓨터과학, 그중에서도 관련 석사/박사들을 위한 특별 과목에서나 접할 수 있었다. 그러나 요즘은 학부과정에서도 관련 강의를 개설하는 대학이 있다. 마르코프 모델, 은닉 마르코프 모델 등도 굳이 컴퓨터과학뿐만 아니라 통계학에서도 관련 과목들을 취급하니 참고.베이즈 정리 그 자체야 통계학 1~2학년 때부터 나오는 이야기지만, 그 법칙을 이용한 분류 알고리즘 그 자체는 대개 기계학습 과목을 따로 들어야 한다.
6.1. 학습 알고리즘: 경사/기울기 하강법(gradient descent)
지도학습에서, 학습의 원리는 데이터에 맞춰 오차를 최소화하는 동시에 회귀식을 만드는 것이다. 경사 하강법은 오차함수가 볼록(convex) 혹은 오목(concave) 함수일 때, 반드시 최소점이 존재하므로 이 최소점을 찾아내는 알고리즘이 경사 하강법이다.기울기는 아주 특별한 의미를 지니는 벡터장인데, 방향도함수가 최대 변화를 나타내는 방향을 가리킨다.[12] 따라서, 오차함수가 오목(concave)/볼록(convex)함수라는 전제하에, 시작 위치를 잘 고르고 기울기의 반대 방향으로 계속 내려가다 보면 최소점을 언젠가는 찾아낼 수 있다.[13]
과거 인공신경망 학습에서 경사 하강법을 적용할 때 여러 어려움이 있었다.
대표적으로 기울기가 사라지는(?) vanishing gradient problem이 있다. 각 노드는 비선형성을 추가하기 위해 활성함수를 사용하는데, 대표적으로 sigmoid 함수가 있다. 이 함수의 특징은 어떤 x값이 들어와도 0~1 사이의 값을 내는데, 문제는 각 노드별 편미분값을 구하기 위해 chain rule을 이용하여 back propagation을 할 때 생긴다. 즉, 1 미만의 값이 지속적으로 곱해지며 전달되므로, 어느 순간에는 매우 0에 가까워지며, 결과적으로 컴퓨터의 부동소수점 연산으로 인하여 마치 기울깃값이 '사라져' 버리는 즉 0이 되어버린다. 그러면 그 노드보다 앞에 있는 노드들은 0만 전달받으므로 더 이상 업데이트가 불가능 즉 학습이 되지 않았다. 그러나 최근에는 이러한 문제를 완화하는 활성함수가 많이 개발되어 큰 문제가 되지는 않는다.
절대적인 최소점이 존재하지 않는 문제도 있었다. 무수히 많은 극솟값들 사이에서 계속해서 더 적은 극솟값을 향해 계산이 멈추지 않는 문제가 생기는데[14] 이 경우 임의의 값을 가지고 루프를 멈추어야 한다. 하지만 보통 경사 하강법을 적용하는 목적함수는 상한 혹은 하한값을 갖는 함수로 설계하므로 경사를 따라 무한히 오르거나 내려가는 문제는 없다.
한때 기울기를 따라 수렴하는 중 최소점이 아닌 임의의 극소점에서 수렴하는 문제(local optima)가 경사 하강법의 난제로 여겨졌다.[15] 그러나 심층학습모델처럼 차원이 높은 벡터를 다루는 모델이 이러한 부분 극소점을 가질 확률은 매우 낮고, 과거 부분 극소점으로 여겨진 것들이 실제는 경사가 매우 완만한 saddle point이어서 완만한 경사로 인해 학습이 지체되는 것이므로 학습률 가속을 통해 학습을 진전할 수 있다는 것이 최근의 주류 인식이다. 자세한 내용은 딥 러닝, 인공신경망 참조.
이것 자체를 이용해서 무언가에 대한 예측이나 글자체 인식에 대한 답을 뱉어내는 것이 아니고, 이것을 이용해서 글자체 인식, 안면 인식 등의 작업을 행하는 알고리즘들을 학습시킨다.
경사하강법도 다양한 optimizer를 사용하여 수렴 속도를 가속시킬 수 있다. 가장 기본적인 것은 SGD(stochastic gradient descent)이고, 여기에 momentum을 추가하여 loss를 변화 속도가 아니라 변화 가속도로 사용할 수 있다. Nesterov momentum 등도 존재하며, RMSProp이나 Adam처럼 기존에 존재하던 optimizing 방식을 합친 것들도 자주 사용된다. 다만 논문에서는 SGD + momentum이 많이 사용되는데, (엄밀하게 밝혀진 것은 아니지만) cosine learning rate annealing이나 LR boost, 그리고 learning rate decay 등을 사용해서 수렴 속도를 정밀하게 조절할 수 있어서 그렇다는 설이 있다.
6.2. 회귀기법
지도학습류 문제를 푸는 데에 주로 쓰인다.선형 회귀법, 로지스틱 회귀법이 대표적이다. 로지스틱 회귀법을 앙상블했다는 관점으로 보면 인공신경망도 여기에 해당한다. 선형 회귀법은 지도학습의 회귀문제를 푸는 데에 쓰이고( 새로운 값의 예측), 로지스틱 회귀법과 인공신경망은 지도학습의 분류문제를 푸는 데에 주로 쓰인다. 회귀 분석 문서 참조.
6.2.1. 인공신경망
인공신경망(Artificial Neural Network; ANN)은 CNN[16], RNN 등으로 나뉜다. 얼마나 인공신경망이 깊냐에 따라 딥 러닝(deep learning)이라고도 한다.6.3. 확률 기반
확률 기반 기계학습 알고리즘은 대부분 베이즈 정리에 기반한다. 베이즈 정리는 다음과 같은 형태로 확률적 추론에 이용되는 정리이다.[math({P(Y|X) = \frac{P(X|Y)P(Y)}{P(X)}})]
여기서 P(Y|X)는 조건부 확률로 "X가 주어졌을 때 Y가 발생할 확률"로 생각하면 된다.
의학 진단의 예를 들어 수식을 설명하자면 X가 "열이 많이 난다"고 Y가 "독감"이라면, P(Y|X)는 열이 많이 나는 환자가 독감 환자일 확률, P(X|Y)는 독감 환자가 열이 많이 나는 확률, P(X)는 환자 중에 열이 많이 나는 환자가 있을 확률, P(Y)는 환자 중에 독감이 발생한 환자가 있을 확률이다.
여기서 베이즈 정리의 강력함은 "열이 많이 나는 환자가 독감 환자일 확률"(구하기 힘든 값)을 "독감 환자가 열이 많이 날 확률"(구하기 쉬운 값)로 추정할 수 있다는 데 있다.
아래는 베이즈 정리에 기반한 대표적인 알고리즘들이다.
6.3.1. naive bayes classifier (NBC)
이름에서 알 수 있듯이 베이즈 정리를 활용한 단순한(naive) 분류기이다. 왜 나이브(순진)하냐 하면 입력값들이 서로 독립이라 가정하기 때문이다. 실생활에서는 대개 입력값들이 어떤 연관관계를 가진다.[math(Y)]가 일어날 원인 [math({X_1, X_2, X_3, …, X_N})]이 서로 독립임을 가정하면 [math({P(X|Y) = \Pi_{i=1}^N P(X_i|Y)})]임을 이용하여 [math({P(Y|X) = \frac{P(X|Y)P(Y)}{P(X)} \simeq \frac{\Pi_{i=1}^N P(X_i|Y)P(Y)}{P(X)}})]으로 레이블을 추정하는 알고리즘이다.
여기서 각 확률값의 연산과 증명은 대학교 미적분 때 배우는 라그랑주 승수법를 통해 진행할 수 있다.
6.3.2. hidden Markov model (HMM)
은닉 마르코프 모델(HMM: hidden Markov model)은 마르코프 모델의 일종으로, 시계열 분석을 할 때 자주 쓰이는 확률형 모델이다. 마르코프 모델이란 보통 여러 개의 상태가 존재하고 상태 간의 전이 확률을 마르코프 확률(Markov property)로 정의한 것을 말하는데, 이때 상태=출력(관측값이 상태와 같음)이면 마르코프 연쇄(MC: Markov chain), 상태!=출력(관측값이 상태가 아님) 은닉되어 있으면(함수라든가, 확률분포라든가..) HMM으로 부른다.*마르코프 모델이란 어제의 일이 오늘에만 영향을 미치는 모델을 말한다.
간단한 마르코프 모델을 잘 나타낸 그림으로, 상태 [math(X_{1})], [math(X_{2})], [math(X_{3})]가 존재하고, 상태가 전이할 확률 [math(a_{12})], [math(a_{21})], [math(a_{23})][17]이 존재한다. 다만 상태 [math(X_{1})], [math(X_{2})], [math(X_{3})]는 직접적인 관측값을 나타내지 않으며 실질적인 관측값인 [math(y_{1})], [math(y_{2})], [math(y_{3})], [math(y_{4})]가 일어날 확률을 [math(X_{1})]에서는 [math(b_{11})], [math(b_{12})], [math(b_{13})], [math(b_{14})], [math(X_{2})] 에서는 [math(b_{21})], [math(b_{22})], [math(b_{23})], [math(b_{24})] 이런 식으로 정의한다.
HMM의 주요 문제는 관측열이 나올 수 있는 확률을 계산하는 평가(evaluation), 관측열이 주어졌을 때 이 관측열이 나올 확률이 가장 높은 상태열을 추측하는 해석(decoding), 주어진 훈련세트로 모수를 학습하는 훈련(training)이 있다. 각 평가, 해석, 훈련 문제의 해결 방법은 forward 알고리즘, Viterbi 알고리즘, Baum-Welch 알고리즘이며, 이 셋 모두 EM알고리즘에 속한다.
6.4. 기하 기반
주어진 입력의 특징(feature)을 벡터(vector)로 만들어 특징 벡터끼리의 기하학적인 관계를 기반으로 추론을 진행하는 시스템을 이야기한다. 주로 벡터끼리의 거리나 코사인 유사도를 사용한다.예를 들어 가장 원시적인 형태의 검색엔진의 경우에는 문서에 어떤 단어가 몇 개 있는지를 벡터로 만든 후, 검색어도 마찬가지로 벡터로 만들어 벡터 유사도를 통해 문서를 순위화하는 vector space model을 사용하였다.
6.4.1. k-means clustering
주어진 입력을 군집화하는 비교사 학습 방법이다. 총 k개의 클러스터가 있다고 가정하고, 특징 공간(feature space)에서 k개의 중간점(centroid)를 찾는 알고리즘이다.6.4.2. k-nearest neighbors (k-NN)
지도학습 모델이다. 레이블 되어 있는 학습 데이터가 있어야 한다. 입력된 특징 벡터 X에 가장 가까운 점 k개를 뽑아 이들의 레이블을 사용하는 분류기이다. 점들이 서로 다른 레이블들을 가질 경우 가장 많은 레이블을 선택한다.(다수결). 다수결에서 결과가 특정되도록 만들기 위해 k는 홀수로 선정한다.6.4.3. support vector machine (SVM)
서포트 벡터 머신 참조support vector란 특징 공간에서 주어진 두 분류의 데이터를 구분 지을 수 있는 최적(optimal)의 초평면(hyperplane)을 의미한다. SVM은 그러한 support vector를 찾는 알고리즘으로 두 분류에서 가장 가까운 데이터를 하나씩 찾아서 그 거리를 계산했을 때 가장 멀어질 수 있는 초평면을 찾는 것을 목표로 한다.
이것만 하면 단순한 linear classifier이어서 XOR과 같이 직선으로 나눌 수 없는 함수는 학습을 진행하지 못하지만, SVM은 여기에 kernel function이란 개념을 도입하여 특징 공간을 접어버리거나 꼬아버려 선형으로 분류할 수 있게 만들어버린다.
기하 기반의 기계학습의 끝판왕으로 이것으로 필기인식, 사진 안에 있는 물체 인식, 영화 리뷰 분석 등 온갖 문제를 해결한다.
첨언하자면 SVM의 기본원리는 함수해석학에서 배우는 3개의 정리 중, 한-바나흐 정리에서 찾아볼 수 있다. 이 정리의 기하학적인 버전이 어느 vector space에서 두 개의 intersection이 비어있는 convex한 subset이 정의되었을 때(점들을 이어서 두 개의 convex hull을 만들어도 된다), 두 convex한 subset A와 B를 나누는 초평면이 반드시 존재한다라고 하고, 이는 곧 SVM의 실현 가능성을 의미한다.
6.5. 앙상블 기반
앙상블 학습(ensemble learning)다양한 분류기의 예측 결과를 결합하여 예측값을 얻는다는 방법. 단일 분류기에 비해 신뢰성이 높게 한다는 목표를 잡는다.
대표적인 방법으로 부스팅과 배깅이 있다.
- boosting: 잘못 분류된 개체들에 대한 학습 규칙을 정의하여 더 정확한 분류 규칙을 만듦.
- bagging (bootstrap aggregrating): 주어진 데이터에 대해 여러 부트스트랩을 형성한 뒤 각 부트스트랩 자료로부터 모델링을 하는 것.
6.6. 양자 기반
말그대로 양자컴퓨터의 특성을 활용한 학습 방법이다. 위 학습 방법들에 큐비트와 아다마르 게이트를 차용하여 확장시켰다.SVM을 예시로 들면, 아다마르 게이트를 적용해 유니터리 행렬 U로 나타낸 초기 데이터값의 행렬곱으로 표기하여 양자상태가 적용된 SVM의 초기 데이터를 나타낼수 있다. SVM의 커널 함수도 마찬가지로, 양자상태의 유니터리 행렬을 원소로 사용한다.
7. 응용 학문
기계학습을 위해선 용도 변경시킨 고가의 GPGPU 혹은 ASIC 방식으로 인공신경망에 최적화시킨 인공지능 칩이 주로 쓰인다. 이들의 병렬 연산이 양적으로는 방대하며 연산의 질적으로는 복잡하지 않은 데이터를 처리하는 기계학습에 알맞은 까닭이다.- 자연어 처리
- 컴퓨터 비전
- 데이터 마이닝
- 빅 데이터 프로세싱
- 정보검색(페이지 랭크 알고리즘)
- 로봇공학
- 생물정보학
- 금융공학(퀀트, 알고리즘 트레이딩)
8. 대학, 취업, 창업에서의 기계학습
회귀, 식별, 군집화, 확률 분포 추정, 마르코프 연쇄, 마르코프 무작위장, 은닉 마르코프 모델 등은 일단 통계학에서도 취급하기는 하지만, 반지도 학습, 강화학습[18] 등에 대해 자세히 알고 싶으면 컴퓨터과학 대학원에 진학을 하여 공부해야 했었다. 하지만 현재는 기계학습에 대한 자료가 많이 공유되고 있어 학습능력만 된다면 대학원에 가지않아도 공부가 가능하다.미국 등지의 대학원에서는 이미 기계학습(machine learning)이라는 단어가 일종의 유행어(buzz word)로서 아무 데나 쓰는 말이 되었다는 자조적인 이야기를 하는 사람들이 늘고 있다. Python 언어에 Pandas, scikit-learn, 텐서플로 같은 라이브러리가 있으면 중학생도 기계학습에 관련한 결과물을 활용할 수 있게 되었다. 문제는 이것만으로는 데이터 과학자 일을 하기에는 부족한데도 불구하고, 이들이 "데이터 과학자"를 자칭하면서 서류를 내거나 면접을 보러 와서 인사 담당자의 시간을 낭비하게 한다는 점이다. 그래서 한 데이터 과학자는 면접에서 사이킷런과 텐서플로 인강을 따라했다면서 기계학습을 할 줄 안다고 말하는 학부생들에게 "네, 제 16살짜리 딸도 파이썬을 쓸 줄 알지요."라고 냉소했을 정도. 한 기업의 데이터 과학자 채용 요건은 다음과 같다. 'NIPS, ICML, ICLR, CVPR, EMNLP 등 국제학회에 논문 게재 경험 우대'. 국제 최상위 학회에 논문을 쓰는 법은 순식간에 되는 것이 아니라 대학에서 학부, 대학원 과정을 거치면서 서서히 길러진다.
이런 데이터 과학자 채용이 아니라 SW엔지니어 채용이라 할지라도 라이브러리를 이용한 개발 경험만 가지고는 경쟁력을 가진다고 볼 수 없다. 어지간한 개발자들의 이력서에 이 정도의 경력은 흔하기 때문이다. 하지만 회사에서는 아무리 연구성의 프로젝트라도 실제 제품에 적용하는 과정이 필요하기 때문에, 이 부분에서는 위에서 말한 데이터 과학자들이 프론트엔드 개발을 공부해서 현장에 뛰어들던, 엔지니어들이 머신러닝 모델에 필요한 데이터를 가공하거나 추론 결과를 활용하는 등 누군가는 매개를 해 주어야 한다. 그래서 유행을 쫓는 건 패션 그 이상도 그 이하도 아니지만, 이에 뒤쳐질 정도로 지식이 없는 것은 반대로 경쟁력이 있다고 불 수 없다.
그리고 애초에 박사학위를 받거나 중요한 논문을 쓴 인공지능 대가들부터 대중들이나 엔지니어들을 위한 강의를 여는 등 이 분야에 대한 진입장벽을 낮추려고 노력을 하고 있기 때문에 고등 과정 수학에 대한 이해가 괜찮은 수준이라면 대학원에 가지 않더라도 위의 직무에 맞추어서는 충분히 공부가 가능하니 겁먹지 말자. 반대로 기계학습이 아닌 일반적인 SW개발도 이산수학, 추상대수학, 수리논리학, 수치해석, 언어학 등 수학적으로 심오한 지식을 활용해야 하는 부분이 있기 때문에 머신러닝이라고 특별히 더 심오한 수학이나 지식을 사용한다고 생각하고 겁먹을 필요 없다.
2016년 미래창조과학부에서 미래 성장동력으로 선정되면서 앞으로 중요도와 대학 내 입지가 커지고 있다.기사 링크
9. 머신 러닝 소프트웨어
일반적으로 파이썬을 많이 사용한다. 2020년 현재도 파이썬으로 AI가 대부분 개발되고 있다.
머신 러닝을 위한 툴박스를 제공한다. 파이썬을 사용하기 전에 간단히 머신 러닝의 결과를 예측해 볼 수 있으며, 툴박스 덕택에 파이썬보다 개발이 더 빠르고 쉽다! 즉 가장 빠르게 즉시 상용에 머신러닝을 썼을 때의 예상 결과를 거의 바로 확인해 볼 수 있다. 고급 디버깅을 위해서는 파이썬이 더 유용한 편이지만... 실질적으로 최신 학회의 머신러닝 알고리즘을 로우코드로 논문을 읽으면서 구현하거나 뜯어고쳐야 되는 게 아니라면 MATLAB 툴박스로 최신 머신러닝 알고리즘을 바로 적용하는 게 머신러닝 논문을 공부하면서 개발하는 것보다 생산적인 면에서 빠르다. 머신러닝의 성능을 1%라도 더 올리는 머신러닝 대회에 출연하거나, 1000만 원 이상의 컴퓨터를 구축하는 경우가 아니라면 MATLAB만 써도 상용에는 충분하고 개발이 빠르다.
10. 관련 문서
11. 둘러보기
학습 | |||||||||
행동학습 | 인지학습 | 기계학습 ⊃ 심층학습 | |||||||
비연합학습 | 연합학습 | 사회학습 | 잠재학습 | 통찰학습 | 지도학습 | 비지도학습 | 강화학습 | ||
습관화 | 민감화 | 고전적 조건형성 | 도구적 조건형성 |
[1] 기억하고 축약하며 깨우쳐 이해하기(기록하고 읽어 들이며 비교하고 알아내기)[2] 사실 조건을 맞춰서 컴퓨터를 돌리면 인간과 흡사한 '결과물'을 내기가 의외로 쉽다. 단적인 예시는 체스나 바둑이다. 실제로 인간처럼 '이해'했는냐는 좀 다른 문제다.[3] 기계학습에서 많이 써먹는 것 중 하나인 경사 하강법(gradient descent)에 등장[4] 함수해석학 과목들이 대개 오만가지 이름하에 여러 개가 개설되어 있는 경우가 많으니 진도표를 잘 보고 수강해야 한다. 진도 막판에 소볼레프 공간 이야기를 맛보기로 하는 정도라면 모를까, 처음부터 그런 이야기를 하면서 베소프 공간 같은 이야기를 하고 있다면 그건 편미분방정식 연구를 준비하는 수학 대학원생들을 위한 과목이다.[5] 어지간한 고전 수준의 미분기하학은 일반 상대성 이론까지 갈 것도 없이 고전역학과 전자기학을 공부하는 과정에서 반드시 선행으로 들어야 하는 벡터미적분을 통해 배울 수 있다. 물론, 수학 학부에서만 개설하는 3~4학년 수준의 미분기하학을 따로 들어야만 알 수 있는 개념들을 사용하는 논문들도 더러 있다.[6] 벡터미적분, 미분방정식, 함수해석학, 변분법, 동적시스템 등; 컴퓨터 비전 쪽이 관심 있다면 편미분방정식과 미분기하학도 건드려주면 아주 좋다.[7] 위상수학은 manifold learning 등 기하학적 방법을 이용하는 분석과 연관이 있으나 학부나 석사에서 잠깐 다룬 수준으로는 어림도 없다는게 문제고 대수학과 정수론은 기초적인 컴퓨터 과학, 암호학과 연관이 큰 만큼 번지수를 잘못 찾았다는 느낌이 강하게 들 것이다.[8] 리서치 사이언티스트(research scientist)/소프트웨어 엔지니어(software engineer)/데이터 사이언티스트(data scientist)는 각각 별도의 직군으로 분리되어 있다.[9] 통계학의 그것 맞다.[10] 예를 들어 이미지에 생긴 노이즈를 제거하는(denoising) 문제. 이 경우 데이터로 이미지만 잔뜩 주어지면 노이즈 낀 이미지는 그냥 원본 데이터셋에 노이즈를 뿌리는 것으로 만들 수 있고 이 경우 노이즈를 만든 이미지가 입력, 원본 이미지가 레이블이 된다. 즉 레이블이 주어지지 않은 데이터를 사용한 비지도 학습이지만 실제 학습은 직접 주어진 레이블을 사용하는 지도 학습으로 이루어진다. 해당 학습법의 대표적인 예시로 이미지의 전반적 특징(feature)을 추출하기 위해 이미지를 저차원인 특징 벡터로 엔코딩시키고 그 특징 벡터를 디코딩하여 원본 이미지와 같은 이미지를 출력하게 만드는 오토인코더(autoencoder)가 있다.[11] 한 예로 영화 감상평 분석의 경우 그 글과 very를 입력으로 주고 positive와 negative 중에 어떤 게 더 알맞은지를 찾는 방식[12] 이는 전미분의 정의나 벡터 스칼라곱의 기하학적 정의를 통해 이해할 수 있다.[13] [math(y = x^{2})] 같은 경우가 대표적인 예이다. 0보다 큰 임의의 x값에서 출발한 뒤, 계속해서 기울기의 반대 방향으로 내려가다 보면 언젠가는 (0, 0)에 도달한다.[14] 똑같이 [math( y = (x - 1)(x - 2)(x - 3) )]를 예로 들어서, 임의로 1보다 적은 x값을 가지고 기울기의 반대 방향으로 계속 하강하다 보면 끊임없이 밑으로 간다.[15] [math( y = (x - 1)(x - 2)(x - 3) )] 같은 경우, 시작지점을 x = 5 같은 데로 고르고 기울기의 반대 방향으로 하강하면 약 (2.58, -0.38)이라는 극솟값에서 멈추게 된다.[16] 딥마인드가 개발한 DQN은 CNN을 기반으로 만들어진 모델이다.[17] 여기서는 일부 상태로의 전이확률이 나타나지 않았지만, 보통 전이 확률은 자기 자신을 포함한 모든 상태로의 확률분포로 나타낸다.[18] 인공지능 학과라면 배울 수도 있다. 책과 강의도 많이 나왔고. 물론 대학원과 비교하긴 어렵지만.