[기계학습 1주차] 정정 성공
정리하기에 앞서..
원래 기계학습을 수강할 생각은 없었지만, 수강신청에서 데이터베이스를 못 잡는 바람에 들을 전공 하나가 비게 되었다. 그래서 인공지능->기계학습 / 컴퓨터구조->운영체제로 이어지는 커리큘럼 중 하나를 동시에 수강하려고 하였는데..
인공지능은 잡고 컴퓨터구조를 못잡으면서 기계학습과 운영체제를 어쩔 수 없이 수강하게 되었다.
하지만 ㄱㅎㅊ 교수님의 기계학습은 필기를 알아보기 어렵다는 평이 많았고, ㅊㅅㄱ 교수님의 운영체제는 내가 이해하기에는 너무 양이 많고 진도가 빨랐다. 그래서…
지난 수요일 학년 정정을 통해서 기계학습을 ㅇㄷㅅ 교수님걸로 정정하고 2주차부터 수업을 듣게 되었다.
따라서 이 1주차 정리는 사실 강의를 듣지 않고 내 마음대로 정리한 것이라는 말!
Syllabus
일단 이번 학기에 수강하는 과목 중 하나 빼고 다섯 개가 모두 절대평가(!!)인데, 기계학습도 절대평가이다.
과제가 4개 예정되어 있는데, 과제가 있을 시 중간 30%, 기말 30%, 과제 30%, 퀴즈&출석 10% 정도로 조정하실 생각이라고.
grading 방식이 확정된 것은 아니어서 나중에 정확히 나오는 것을 기다려봐야할 듯.
오늘 알았는데 블보에 자율출석 방식이다. 오늘 안 찍었는데.. 난 몰라
1주차 요약
Introduction
기계학습(Machine Learning)이란?
일단 ML(기계학습)과 AI(인공지능)의 차이는 ‘규칙을 누가 정하느냐‘이다.
머신러닝은 프로그램이 규칙을 자체적으로 생산하는 반면, 인공지능은 인간이 직접 규칙을 설계하여 알려주고, 그것을 기반으로 AI가 판단한다.
ML이 AI의 하위 개념임을 생각하면 ML이 AI의 발전된 단계라는 것을 말씀하고 싶으신 듯
ML의 4가지 특징은 다음과 같다.
기계학습의 4가지 특징
- 데이터에서 패턴을 찾아 미래를 예측한다(detect patterns in data to predict future data)
- 학습을 통해 스스로를 알아서 개선한다(automatically improve themseleves with experience)
- 파라미터를 최적화한다(to optimize the parameters)
- 예측이나 답변을 위해 쓰인다(predictive to make predictions in the future, or descriptive to gain knowledge from data, or both)
기계학습은 크게 지도 학습, 비지도 학습, 강화 학습으로 나뉘는데 간단히 정리하면 다음과 같다.
ML 종류 | 수식 표현 | 설명 |
---|---|---|
지도 학습(Supervised Learning / Predictive Learning) | $$D=\left\{x^t, y^t\right\}_{t=1}^N$$ x: input(feature, attribute, or covariate), y: output(label or response variable), D: data | input과 output의 pair의 집합이다. y가 있으므로 정답이 있는 학습이다. 범주형 output의 분류(Classification)와 실수형 output의 회귀(Regression)로 나뉜다. |
비지도 학습(Unsupervised Learning / Descriptive Learning) | $$D=\left\{x^t\right\}_{t=1}^N$$ | 정답이 없는 학습이다. 패턴을 추출한다 |
강화 학습(Reinforcement Learning) | - | 정답이 있는지 없는지 조차 모르지만 매순간 ML은 성능 개선에 최선을 다하는 학습. 자기가 수행한 결과가 reward인지 punishment인지 구혈하여 reward를 최대화하려한다. |
준지도학습(Semi-supervise Learning) | - | 지도 학습이 비싸기 때문에, 초반에는 소규모로 지도학습을 하다, 점차 비지도학습으로 규모를 키운 경우에 해당한다. 경제적 이유로 인한 선회 |
자기지도학습(Self-supervise Learning) | - | label이 없는 데이터를 스스로 label을 만들어서 학습한다. |
분류와 회귀
분류(Classification)는 흔히 이진 분류(Two-class, binary) 처럼 0(negative)과 1(positive)로 구별하는 방식이나, 세 개 이상의 클래스로 나누는 Multiclass classification, 한 instance가 여러 클래스에 동시에 해당이 되는 Multilabel classification이 있다.
회귀(Regression)는 수치형 데이터를 내놓는 지도학습의 한 방식으로, 사실 regression과 classification은 근사를 통해 비슷하게 사용할 수 있다. (아마 로지스틱 회귀와 이진 분류의 관계를 말하는 듯)
비지도 학습과 강화 학습
비지도 학습은 상술했듯 label이 없는 학습이다. 보통 잠재요인분석(Latent Factors)과 차원 축소(Dimensionality Reduction)가 주된 갈래인데, 하나의 예로 주성분분석(PCA; Principal Component Analysis)이 있다.
강화 학습은 ‘현재 상태(state)를 인지’하고 ‘강화 학습을 수행(action)’하는 state-action의 반복이다. 항상은 아니지만 때때로 reward가 발생하는데, 이를 적절히 통제하는 policy로 강화 학습이 가능하다.
예를 들어 벽돌깨기 게임을 한다고 하면, ‘점수를 높여오라’라는 policy를 통해 알아서 점수가 높아지는 강화학습이 실현되는 것.
이외에도 ML의 갈래로 생성 모델(Generative Models)이라는 것이 있다. 이미지를 합성해 적절히 생성하거나(Image Synthesis), 음성을 모방하여 합성하거나(Speech Synthesis), 기존 이미지에 다른 이미지를 덧입히고(Image Translation), 해상도를 높이거나(Super Resolution), 자연스럽게 이미지를 편집(Image Inpainting)하고, 음성을 인코딩하는(Voice Conversion)하는 것 모두가 생성 모델의 일종이다.
그래서 기계학습을 왜 쓰는데?
ML을 사용하는 이유는 다음과 같다.
- 손으로 코딩을 할 수 없는 정도의 문제를 해결하기 위해
- 전문지식이 없어서 해결책을 모르는 경우
- 전문지식이 있지만 해결이 안되는 경우
- solution이 계속 바뀌어서 인간이 지정하기엔 어려울 때
Terminologies
우리 가족이 탈 차는 뭘로?
다음과 같이 한 가족이 탈 차를 선정하는 도식을 살펴보자. +로 표기된 건 살 만한 차(positive), -로 표기된 건 사지 않을 차(negative)이다. 판단 기준은 x1축의 가격과 x2축의 마력이다.
이렇게 클래스를 두고 학습을 시키는 것을 Concept Learning이라고 한다. 여기서 Concept은 Class라고 이해하면 된다. 클래스가 나온다? 이거 지도학습 중에서도 분류잖아.
따라서 \(D=\left\{x^t, y^t\right\}_{t=1}^N\)라는 ML model을 따라간다. 이때
input \(x^t = [x_1^t \cdots x_d^t]\)이고 (d는 input인 x^t 벡터의 길이이고, 여기선 d=2이다.)
output \(r^t=\begin{cases} 1\quad \text{if}\;x^t\;\text{is a positive example}\\ 0\quad \text{if}\;x^t\;\text{is a negative example}\\ \end{cases}\) 이다.
여기서 분류하고자 하는 범주를 Target concept, 혹은 target class, target function이라고 하는데 현재 target은 0과 1로 구분되어 있지만, 그 범위를 모르는 상태이다. 따라서 적절한 범위를 지정하는 p1, p2, e1, e2를 지정하기 위하여 ML이 사용되어야 한다.
가설 공간
앞으로 가설(Hypothesis)이라고 하면 학습 알고리즘에 의해 만들어진, 분류를 하는 ‘판단 근거‘를 지칭하는 말로 이해하면 된다.
다음과 같이 파란색의 label 범위와 노란색의 가설 범위가 있다고 하자. 위양성(False positive)는 사도 되지만 사지 말자고 판단한 경우, 위음성(False negative)은 사면 안되지만 사도 된다고 판단한 경우를 의미한다.
이때 에러의 종류로 일반화 에러와 실증적 에러가 있는데, 일반화 에러(Generalization error)는 현재까지는 문제가 없으나, 데이터가 추가되면 드러나는 에러를 의미한다. 즉 노란색의 가설범위가 틀렸다는 것인데, 현재까지의 instance로는 알 수 없는 것
이와 달리 실증적 에러(Empirical error)는 실제로 값이 틀린, 현재 확인할 수 있는 에러를 의미한다. 즉 위음성과 위양성 instance가 있으면 그것이 실증적 에러인 셈.
이 실증적 에러는 다음과 같이 수식으로 표현 가능한데,
\[E(h|D)=\sum_{t=1}^{n}1(h(x^t)\neq r^t)\]해석하자면 가설 h와 데이터 D에 대하여, 입력 x^t에 대한 가설에서의 예측 값 h(x^t)와 실제 레이블인 r^t 값이 다른, 즉 empirical error가 발생한 개수를 모두 더한 값을 E(h | D)라고 표현한다는 것. |
이처럼 입력 x가 들어왔을 때 그에 대한 출력 값이 존재할 수 있는 가설의 집합을 가설 공간(Hypothesis space / Hypothesis class)이라 하며 대문자 H로 표기한다. 여기서 가설 공간 H는 1사분면이 되는 것
Version Space
앞서 눈에 보이는 에러를 Empirical Error라고 했다. 이런 실증적 에러가 없는 경우의 가설을 Consistent Hypothesis라고 하는데 수식으로는
\[\text{CONSISTENT}(h, D) \equiv \forall (x,r)\in D[h(x)=r]\]해석하자면 입력 x에 대한 가설 h의 값이 label r과 일치하는 데이터 D에 모든 (입력, 출력) 쌍이 존재한다는 것이다. 말 그대로 empirical error가 없는 가설은 consistent한 것이다.
이때 가장 좁은, 즉 consistent를 가장 잘 설명하는 가설을 Most specific hypothesis(줄여서 s), 가장 큰 가설을 Most general hypothesis(줄여서 g)라 하며, g보다 크고 s보다 작은 가설들을 모은 집합을 Version space라 한다.
수식으로는
\[\text{VS}_{\mathcal{H, D}}\equiv \{ h\in \mathcal{H}|\text{CONSISTENT}(h,\mathcal{D}) \}\]즉, 가설 공간에 속한 가설 h 중 모든 consistent한 가설을 모은 집합이 Version Space다.
또는
\[\text{VS}_{\mathcal{H, D}}\equiv \{ h\in \mathcal{H}|\exists s\exists g[s\le h\le g] \}\]가설 공간에 속한 가설 h 중 s(specific)와 g(general) 사이에 있는 가설들을 모은 것이다. (그게 그거다)
이때 s와 g의 거리, 즉 positive 중에 중심에서 가장 먼 값과 negative 중에서 중심에서 가장 가까운 값의 차를 Margin이라 한다.
보통 우리가 사용하는 가설은 (당연히 가설 공간 H에 속하고) consistent한 가설 중, 적당한, 즉 s와 g의 평균값을 가설로 채택한다.
VC Dimensions
이제는 가설이 아닌 입력값에 대해서도 살펴보자. 가능한 모든 객체(instance)의 집합을 객체 공간(Instance Space)이라 하며, 약칭으로 J라 한다. 당연히 객체 공간 J에서 뽑은 값은 data(D)가 된다. 이때 각 데이터는 iid(확률적으로 독립이며 항상 같은 확률로 뽑힘)라 하자.
인자(parameter) theta에 대해 입력 x가 같은 모델을 g(x | theta)라 하면 손실 함수(Loss function) L은 |
라고 할 수 있는데, 앞엣것은 분류에 대한 0/1의 손실 함수, 뒤엣것은 회귀에 대한 MSE라는 손실함수를 예로 든 것이다.
이 손실 함수들을 모두 합친 것이 empirical error와 같다고 생각하면, 이 실증 에러를 최소로 만드는 인자 theta star를 찾는 것이 Inductive Learning(귀납적 학습) 방식이다.
inductive learning은 학습된 label 데이터를 통하여 에러를 최소로 하는 결론(파라미터 찾기)을 내는 것인 셈
여기서 용어가 또 등장한다.
N개의 instance를 객체 공간에서 뽑아오자. 이 N개의 instance를 누구는 0, 누구는 1로 labeling을 한다고 할 때 발생하는 모든 경우 2^N가지의 집합을 Dichotomy라 한다.
다음과 같이 객체가 3개라면 다이코토미는 8개인 셈. 그런게 이렇게 선 하나만으로 모든 다이코토미를 양분할 수 있는 반면
이렇게 불가능한 경우도 있다. 이때 모든 다이코토미에 대하여 정확하게 labeling할 수 있는 consistent한 hypothesis가 항상 존재할 경우, 이를 Shattering하다고 표현한다. 자 수식으로 보면 더 복잡하다.
\[\mathcal{H}\;\text{shatters}\;S\subseteq \mathcal{J}\Leftrightarrow \forall \text{dichotomy}\;D\;\text{of}\;S[\exists h\in \mathcal{H}, h\text{ is CONSISTENT(h,D)}]\]여기부턴 왜 굳이 수식으로 썼는지 이해가 안 될 정도이다. 무튼
객체 공간 J에 대한 모든 dichotomy가 가설 공간 H에서 shatter된다는 것은, 가설 공간 H에 속하며 consistent한 가설 h에 따르면, shatter한 공간 S에 모든 dichotomy D가 존재한다는 것이다.
이해 되는가? 앞선 예제 중 첫 번째는 직선이라는 가설로 shattering되고, 두 번째는 직선이라는 가설으로는 shattering되지 않는다는 것이다.
이처럼 객체 공간 J에서 정의된 가설 공간 H에 대하여, 가설 공간 H에 대해 shattering될 수 있는 객체 공간 J의 가장 큰 부분 집합의 크기를 Vapnik-Cherovonenkis(VC) dimension이라 한다. 첫번째 예제는 현재 VC 차원이 3인 것
이 VC 차원이 n임은 (1) H에 의해 shattering되는 instance n개 이상이 하나라도 존재함을 보이고 (2) n+1개는 모든 경우에서 불가능함을 보임으로 증명한다.
출처: 기계학습(COSE362) ㅇㄷㅅ 교수님, Purdue Univ.