나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2024-11-21 15:17:06

기계학습

머신 러닝에서 넘어옴
'''이론 컴퓨터 과학
{{{#!wiki style="display: inline-block; font-family:Times New Roman, serif;font-style:italic"'''
{{{#!wiki style="margin: 0 -10px -5px; min-height: calc(1.5em + 5px)"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin: -5px -1px -11px"
<colbgcolor=#a36> 이론
기본 대상 수학기초론{수리논리학(논리 연산) · 계산 가능성 이론 · 범주론 · 집합론} · 이산수학(그래프 이론) · 수치해석학 · 확률론통계학 · 선형대수학
다루는 대상과 주요 토픽
계산 가능성 이론 재귀함수 · 튜링 머신 · 람다대수 · 처치-튜링 명제 · 바쁜 비버
오토마타 이론 FSM · 푸시다운 · 튜링 머신(폰노이만 구조) · 정규 표현식 · 콘웨이의 생명 게임 · 형식언어
계산 복잡도 이론 점근 표기법 · 튜링 기계^고전, 양자, 비결정론적, 병렬 임의접근 기계^ · 알고리즘 · 자료구조 · 알고리즘 패러다임(그리디 알고리즘, 동적 계획법)
정보이론 데이터 압축(무손실 압축 포맷 · 손실 압축 포맷) · 채널 코딩(채널 용량) · 알고리즘 정보 이론(AIT) · 양자정보과학
프로그래밍 언어이론 프로그래밍 언어(함수형 언어 · 객체 지향 프로그래밍 · 증명보조기) · 메타 프로그래밍 · 유형 이론 · 프로그래밍 언어 의미론 · 파싱 · 컴파일러 이론
주요 알고리즘 및 자료구조
기초 정렬 알고리즘 · 순서도 · 탐색 알고리즘
추상적 자료형 및 구현 배열^벡터^ · 리스트^연결 리스트^ · 셋(set)^레드-블랙 트리, B-트리^ · 우선순위 큐^, 피보나치 힙^
수학적 최적화 조합 최적화 외판원 순회 문제 · 담금질 기법 · 유전 알고리즘 · 기계학습
볼록 최적화 내부점 방법 · 경사하강법
선형계획법 심플렉스법
계산 수론 및 암호학 밀러-라빈 소수판별법 · Pollard-rho 알고리즘 · 쇼어 알고리즘 · LLL 알고리즘 · 해시(MD5 · 암호화폐 · 사전 공격(레인보우 테이블) · SHA) · 양자 암호
대칭키 암호화 방식 블록 암호 알고리즘(AES · ARIA · LEA · Camellia) · 스트림 암호 알고리즘(RC4)
공개키 암호화 방식 공개키 암호 알고리즘(타원 곡선 암호 · RSA) · 신원 기반 암호 알고리즘(SM9)
계산기하학 볼록 껍질 · 들로네 삼각분할 및 보로노이 도형^Fortune의 line-sweeping 알고리즘^ · 범위 탐색^vp-tree, R-tree^ · k-NN
그래프 이론 탐색^BFS, DFS, 다익스트라 알고리즘, A* 알고리즘^ · 에드몬드-카프 · 크루스칼 알고리즘 · 위상 정렬 · 네트워크 이론
정리
정지 문제대각선 논법 · 암달의 법칙 · P-NP 문제미해결 · 콜라츠 추측미해결
틀:이산수학 · 틀:수학기초론 · 틀:컴퓨터공학 }}}}}}}}}



[[컴퓨터공학|컴퓨터 과학 & 공학
Computer Science & Engineering
]]
[ 펼치기 · 접기 ]
||<tablebgcolor=#fff,#1c1d1f><tablecolor=#373a3c,#ddd><colbgcolor=#0066DC><colcolor=white> 기반 학문 ||수학(해석학 · 이산수학 · 수리논리학 · 선형대수학 · 미적분학 · 미분방정식 · 대수학(환론 · 범주론) · 정수론) · 이론 컴퓨터 과학 · 암호학 · 전자공학 · 언어학(형태론 · 통사론 · 의미론 · 화용론 · 음운론) · 인지과학 ||
하드웨어 구성 SoC · CPU · GPU(그래픽 카드 · GPGPU) · ROM · RAM · SSD · HDD · 참조: 틀:컴퓨터 부품
기술 기계어 · 어셈블리어 · C/C++ · C# · Java · Python · BIOS · 절차적 프로그래밍 · 객체 지향 프로그래밍 · 해킹 · ROT13 · 일회용 비밀번호 · 사물인터넷 · 와이파이 · GPS · 임베디드 · 인공신경망 · OpenGL · EXIF · 마이크로아키텍처 · ACPI · UEFI · NERF · gRPC · 리버스 엔지니어링 · HCI · UI · UX · 대역폭 · DBMS · NoSQL · 해시(SHA · 브루트 포스 · 레인보우 테이블 · salt · 암호화폐) · RSA 암호화 · 하드웨어 가속
연구

기타
논리 회로(보수기 · 가산기 · 논리 연산 · 불 대수 · 플립플롭) · 정보이론 · 임베디드 시스템 · 운영 체제 · 데이터베이스 · 프로그래밍 언어{컴파일러(어셈블러 · JIT) · 인터프리터 · 유형 이론 · 파싱 · 링커 · 난해한 프로그래밍 언어} · 메타데이터 · 기계학습 · 빅데이터 · 폰노이만 구조 · 양자컴퓨터 · 행위자 모델 · 인코딩(유니코드 · MBCS) · 네트워크 · 컴퓨터 보안 · OCR · 슈퍼컴퓨터 · 튜링 머신 · FPGA · 딥러닝 · 컴퓨터 구조론 · 컴퓨터 비전 · 컴퓨터 그래픽스 · 인공지능 · 시간 복잡도(최적화) · 소프트웨어 개발 방법론 · 디자인 패턴 · 정보처리이론 · 재귀 이론 · 자연어 처리(기계 번역 · 음성인식) · 버전 (버전 관리 시스템 · Git · GitHub)

통계학
Statistics
{{{#!wiki style="margin:0 -10px -5px; min-height:calc(1.5em + 5px); word-break: keep-all"
{{{#!folding [ 펼치기 · 접기 ]
{{{#!wiki style="margin:-5px -1px -11px"
<colbgcolor=#4d4d4d><colcolor=#fff> 수리통계학 기반 실해석학 (측도론) · 선형대수학 · 이산수학
확률론 사건 · 가능성 · 확률 변수 · 확률 분포 (표본 분포 · 정규 분포 · 이항 분포 · 푸아송 분포 · 카이제곱분포 · t분포 · Z분포 · F-분포 · 결합확률분포) · 확률밀도함수 · 확률질량함수 · 조건부확률 · 조건부기댓값 · 조건부분산 · 전체 확률의 법칙 · 베이즈 정리 · 도박사의 오류 · 도박꾼의 파산 · 몬티 홀 문제 · 뷔퐁의 바늘 · 마르코프 부등식 · 체비쇼프 부등식 · 큰 수의 법칙 (무한 원숭이 정리) · 중심극한정리 · 벤포드의 법칙
통계량 평균 (제곱평균제곱근 · 산술 평균 · 기하 평균 · 조화 평균 · 멱평균 · 대수 평균) · 기댓값 · 편차 (절대 편차 · 표준 편차) · 분산 (공분산) · 결정계수 · 변동계수 · 상관계수 · 대푯값 · 자유도
추론통계학 가설 · 변인 · 추정량 · 점추정 · 신뢰 구간 · 상관관계와 인과관계 · 실험통계학 · p-해킹 · 통계의 함정 · 그레인저 인과관계 · 신뢰도와 타당도
통계적 방법 회귀 분석 · 최소제곱법 · 분산 분석 · 주성분 분석 (요인 분석) · 시계열 분석 · 패널 분석 · 2SLS · 생존 분석 · GARCH · 비모수통계학 · 준모수통계학 · 기계학습 (군집 분석 · 분류 분석) · 위상 데이터분석 · 외삽법 · 메타 분석 · 모델링 (구조방정식)
기술통계학 ·
자료 시각화
도표 (그림그래프 · 막대그래프 · 선 그래프 · 원 그래프 · 상자 수염 그림 · 줄기와 잎 그림 · 산포도 · 산점도 · 히스토그램 · 도수분포표) · 그래프 왜곡 · 이상점 }}}}}}}}}

1. 개요2. 상세3. 관련과목
3.1. 복수전공 및 부전공
4. 프로그래밍 언어5. 정의
5.1. 학습 종류에 따른 분류
5.1.1. 지도학습(supervised learning)5.1.2. 비지도 학습(unsupervised learning)5.1.3. 반지도 학습(semisupervised learning)5.1.4. 강화학습(reinforcement learning)
6. 알고리즘
6.1. 학습 알고리즘: 경사/기울기 하강법(gradient descent)6.2. 회귀기법6.3. 확률 기반
6.3.1. naive bayes classifier (NBC)6.3.2. hidden Markov model (HMM)
6.4. 기하 기반
6.4.1. k-means clustering6.4.2. k-nearest neighbors (k-NN)6.4.3. support vector machine (SVM)
6.5. 앙상블 기반6.6. 양자 기반
7. 응용 학문8. 대학, 취업, 창업에서의 기계학습9. 머신 러닝 소프트웨어10. 관련 문서11. 둘러보기

1. 개요

/ Machine Learning

파일:image76373739.gif

표현 그대로 기계가 데이터를 기반으로 학습하여 특정 작업을 수행하는 것이다.

2. 상세

인공지능의 대표적인 방법이었던 전문가 시스템은 사람이 직접 많은 수의 규칙을 구현하는 것을 전제로 하였다. 이 같은 접근 방법은 과학 분야, 예를 들어 의학이나 생물 분야에서는 큰 역할을 할 수 있었다. 의사들의 진단을 도와주는 전문가 시스템을 생각해 보면 인간이 지금까지 발견한 의학적인 규칙들을 데이터베이스화하여 등록시켜 주면 되는 것이었다.

하지만 시간이 지남에 따라 세상은 사람조차 스스로 어떻게 작동되는지 아직 정확히 모르는 영역을 구현하는 프로그램을 요구하기 시작했다. 대표적으로 음성인식을 예로 들 수 있다. 음성 인식 비서 서비스를 개발하는 경우, 일단 사람의 발화(Utterance)된 문장을 정확히 인식하고, 그 문장의 의미를 분석하고 해석하는 능력이 필요하다. 이 같은 시스템은 사람이 하나하나 규칙을 만들어 준다고 형성될 수 있는 것이 아니다. 소리 같은 경우에는 컴퓨터PCM의 형태로 전달이 되는데 대체로 이는 1초에 최소 나무위키 항목 하나 분량의 데이터를 포함하고 있다. 전체적인 데이터를 보고 그것이 의미하는 정보들을 명확히 짚어낼 줄 알아야 한다.

그리하여 나온 방법이 기계학습이다. 이름에서 알 수 있듯이 기계학습은 기계, 즉 컴퓨터를 인간처럼 학습시켜 스스로 규칙을 형성할 수 있지 않을까 하는 시도에서 비롯되었다. 인간의 사고를 효율적으로 처리하려는 관점에서부터 접근하여 모방하는 방법이다.[1][2]

지금에 이르러선 컴퓨터와 무관해보이던 다른 분야들도 빠르고 만족스러운 결과를 선보이기 위해 기계학습에 의존하는 추세이다.

3. 관련과목

3.1. 복수전공 및 부전공

장래에 기계학습 그 자체와 관련 연구분야의 최전선에 뛰어들 생각이 있으면 참고할 것.

요즘 기계학습 연구자들 중에는 아예 물리학 전공이나 수학 전공 출신도 종종 보인다. 컴퓨터과학자들이 먼저 그 연구를 주도한 것과는 별개로, 해당 분야에 대해 연구하는 데에 물리학과 수학 및 통계학을 공부하면 도움이 된다.

당장 호필드 네트워크, 볼츠만 머신 등이 동적 시스템과 통계역학을 연구한 물리학자들이 결정적인 공헌을 했다. 변분법 역시 원래 고전역학(정확히는 라그랑주 역학) 및 광학에서 그 동기를 찾을 수 있다. 기계학습에 쓰이는 기초적인 정도의 함수해석학도 양자역학 덕분에 오늘날 그 위상을 차지한 것이다.

통계학의 경우, 회귀 분석은 물론이고, '비지도 학습'이란 이름하에 퍼져있는 군집 분석 및 확률 분포 추정, 그리고 요즈음 '통계학습'이라는 이름하에 판을 치고 있는 베이즈 통계학 등 비중이 높다.

따라서 컴퓨터과학/물리학 복수전공을 권한다. 물론 할 수 있다면 말이다 미적분과 기초 통계학은 물론이고, 변분법, 통계역학, 함수해석학, 그리고 컴퓨터 비전 쪽으로 갈 경우 이미지 처리 그 자체에 종종 쓰이는 어느 정도 이상의 미분기하학 등은 모두 물리학을 공부하면서 아주 자연스럽게 배울 수 있기 때문이다.[5]

컴퓨터과학/수학 복수전공을 통해서도[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)을 달아놓은 데이터를 컴퓨터에 주면 컴퓨터가 그것을 학습하는 것이다. 사람이 직접 개입하므로 정확도가 높은 데이터를 사용할 수 있다는 장점이 있다. 대신에 사람이 직접 레이블을 달아야 하므로 인건비 문제가 있고, 따라서 구할 수 있는 데이터양도 적다는 문제가 있다.

5.1.2. 비지도 학습(unsupervised learning)

사람 없이 컴퓨터가 스스로 레이블 되어 있지 않은 데이터에 대해 학습하는 것. 즉 y 없이 x만 이용해서 학습하는 것이다. 정답이 없는 문제를 푸는 것이므로 학습이 맞게 됐는지 확인할 길은 없지만, 인터넷에 있는 거의 모든 데이터가 레이블이 없는 형태로 있으므로 앞으로 기계학습이 나아갈 방향으로 설정되어 있기도 하다. 통계학의 군집화와 분포 추정 등의 분야와 밀접한 관련이 있다.

최근에는 레이블을 사람이 직접 레이블하는 것이 아닌, 컴퓨터가 임의로 직접 레이블을 지정할 수 있어 레이블이 없는 데이터셋으로 학습할 수 있는 일부 문제[10]는 자가지도 학습(self-supervised learning)이라는 용어로 따로 분류하고 있다.

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)

다양한 분류기의 예측 결과를 결합하여 예측값을 얻는다는 방법. 단일 분류기에 비해 신뢰성이 높게 한다는 목표를 잡는다.

대표적인 방법으로 부스팅과 배깅이 있다.

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. 머신 러닝 소프트웨어

파일:top-analytics-data-science-machine-learning-software-2015-2017.jpg

일반적으로 파이썬을 많이 사용한다. 2020년 현재도 파이썬으로 AI가 대부분 개발되고 있다.
파일:getstartedwithdeepnetworkdesignerexample_02_ko_KR.png
머신 러닝을 위한 툴박스를 제공한다. 파이썬을 사용하기 전에 간단히 머신 러닝의 결과를 예측해 볼 수 있으며, 툴박스 덕택에 파이썬보다 개발이 더 빠르고 쉽다! 즉 가장 빠르게 즉시 상용에 머신러닝을 썼을 때의 예상 결과를 거의 바로 확인해 볼 수 있다. 고급 디버깅을 위해서는 파이썬이 더 유용한 편이지만... 실질적으로 최신 학회의 머신러닝 알고리즘을 로우코드로 논문을 읽으면서 구현하거나 뜯어고쳐야 되는 게 아니라면 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] 인공지능 학과라면 배울 수도 있다. 책과 강의도 많이 나왔고. 물론 대학원과 비교하긴 어렵지만.