인지야공/인공 지능 공부 치트 시트 정리/6번째 글
CS229 지도학습 치트시트를 다시 쓴다 — 무엇이 무엇의 특수한 경우인가
알고리즘을 하나씩 외우면 여덟 개가 여덟 개다. CS229 치트시트가 좋은 이유는 무엇이 무엇의 특수한 경우인지를 계속 보여 주기 때문이다. 그 뼈대만 남기고 다시 썼다.
알고리즘별 특징과 실기 코드는 알고리즘 정리 글에 이미 적어 두었으니 여기서는 되풀이하지 않는다. 여기는 왜 그 식이 그렇게 생겼는가 쪽이다.
판별 모델과 생성 모델
| 판별 모델 | 생성 모델 | |
|---|---|---|
| 배우는 것 | 를 직접 | 를 배워 를 유도 |
| 결과물 | 결정 경계 | 데이터의 확률분포 |
| 예 | 선형·로지스틱 회귀, SVM, 신경망 | GDA, 나이브 베이즈 |
생성 모델은 “각 부류의 데이터가 어떻게 생겼는지”를 배우고 베이즈 정리로 뒤집는다.
가정이 강한 대신 데이터가 적을 때 유리하다. 판별 모델은 가정이 약한 대신 데이터를 더 요구한다. 어느 쪽이 낫다가 아니라 이 교환이 전부다.
모델이 다른 게 아니라 손실이 다른 것이다
| 손실 | 식 | 쓰는 곳 |
|---|---|---|
| 최소제곱 | 선형회귀 | |
| 로지스틱 | 로지스틱 회귀 | |
| 힌지 | SVM | |
| 교차엔트로피 | 신경망 |
넷 다 “얼마나 틀렸는가”를 재는 함수이고, 모델의 뼈대()는 같다. 힌지 손실을 숫자로 보면 SVM 의 성격이 바로 보인다.
y=+1, z= 2.0 → 0.0 경계에서 충분히 떨어졌다. 벌점 없음
y=+1, z= 0.5 → 0.5 맞혔지만 경계에 너무 가깝다 → 벌점
y=+1, z=-1.0 → 2.0 틀렸다
맞혀도 아슬아슬하면 벌점을 준다 — 이것이 “마진을 최대화한다”의 실제 구현이다.
최적화 — 경사하강과 뉴턴법
| 방식 | 한 번 갱신에 쓰는 데이터 |
|---|---|
| 배치 경사하강 | 전체 |
| 미니배치 | 묶음 하나 |
| 확률적(SGD) | 한 개 |
뉴턴법은 을 직접 찾는다. 2차 미분까지 쓰므로 훨씬 적은 횟수로 수렴하지만, 다차원에서는 헤시안 의 역행렬이 필요해서 변수가 많으면 비싸진다.
변수가 수천 개인 요즘 모델이 뉴턴법 대신 SGD 를 쓰는 이유가 여기 있다.
선형회귀 — 정규방정식은 정말 닫힌 해다
직접 확인해 보면 sklearn 과 소수점까지 같다.
Xb = np.c_[np.ones(len(X)), X]
theta = np.linalg.solve(Xb.T @ Xb, Xb.T @ y) # [1.0005, 2.006, -0.9994, 0.4939]
LinearRegression().fit(X, y) # [1.0005, 2.006, -0.9994, 0.4939]
식에는 역행렬이 있지만 코드에서는 solve 를 쓴다. 이유는 SciPy 글에
적었다 — 더 빠르고 오차도 적다.
GLM — 회귀들이 하나로 묶이는 자리
일반화 선형 모델은 세 가정 위에 서 있다.
- — 지수족을 따른다
- — 예측값은 조건부 기댓값이다
- — 자연모수가 입력의 선형결합이다
지수족은 이렇게 쓸 수 있는 분포들이다.
| 분포 | 자연모수 | 대응하는 모델 |
|---|---|---|
| 가우시안 | 선형회귀 | |
| 베르누이 | 로지스틱 회귀 | |
| 포아송 | 포아송 회귀 (계수 데이터) |
최소제곱과 로지스틱 회귀는 서로 다른 알고리즘이 아니라 같은 틀에 다른 분포를 넣은 것이다. 베르누이의 자연모수를 뒤집으면 시그모이드가 그냥 나온다.
확인해 보면 로지스틱 회귀의 predict_proba 는 정확히 다. 부류가
셋 이상이면 소프트맥스로 확장된다(합이 1 이 되도록 정규화할 뿐이다).
로지스틱 회귀에는 정규방정식 같은 닫힌 해가 없다. 그래서 반드시 반복 최적화를 돈다.
SVM — 마진과 커널
를 줄이는 것이 곧 마진을 넓히는 것이다. 현실 데이터는 완전히 갈라지지 않으므로 여유(slack)를 허용하고 그 값에 만큼 벌점을 매긴다. 가 크면 오분류를 못 참고 마진이 좁아진다 — 과적합 쪽이다.
커널은 “고차원으로 올려서 가른다”를 올리지 않고 하는 방법이다. 다항커널로 확인해 보면 값이 정확히 같다.
a, b = [1., 2.], [3., 4.]
(a@b + 1)**2 # 144.0
phi(a) @ phi(b) # 144.0 ← 6차원으로 올려 내적한 것과 같다
를 실제로 계산하지 않고 만 계산하면 되니, 무한 차원(RBF)도 다룰 수 있다.
생성 모델 둘
GDA 는 각 부류가 같은 공분산의 정규분포를 따른다고 본다.
공분산을 공유하기 때문에 결정 경계가 직선이 된다(sklearn 의 LDA 가 이것이다). 가정이 맞으면 로지스틱 회귀보다 적은 데이터로 같은 성능에 도달하고, 틀리면 로지스틱 쪽이 안전하다.
나이브 베이즈는 특징들이 부류가 주어졌을 때 서로 독립이라고 본다.
“나이브(순진)“라는 이름 그대로 현실에서는 거의 틀린 가정인데, 분류 성능은 자주 멀쩡하다. 확률값 자체는 못 믿어도 순위는 유지되기 때문이다. 확률을 그대로 보고해야 하는 문제라면 주의한다.
학습이론 한 줄
VC 차원은 그 모델이 어떤 라벨 조합이든 완전히 가를 수 있는 점의 최대 개수다. 2차원 직선 분류기의 VC 차원은 3 이다 — 점 3개는 어떻게 라벨을 붙여도 직선으로 가를 수 있지만, 4개부터는 불가능한 조합(XOR 모양)이 생긴다.
표현력이 클수록 VC 차원이 크고, 일반화 오차의 상한도 함께 커진다. 모델을 키우면 왜 과적합이 오는가에 대한 이론 쪽 답이다. 실무 쪽 답인 편향-분산은 다음 글에서 본다.
출처
Afshine Amidi · Shervine Amidi 의 CS 229 VIP Cheatsheet: Supervised Learning (Stanford, 2018)을 보고 다시 쓴 것이다. 원본은 stanford.edu/~shervine에서 볼 수 있다. 수식은 옮겨 적으며 직접 확인했고, 코드로 맞춰 본 결과는 위에 적은 그대로다.