인지야공/인공 지능 공부 치트 시트 정리/9번째 글
CS229 딥러닝 치트시트를 다시 쓴다 — 0.25 를 스무 번 곱하면
퍼셉트론부터 역전파까지의 흐름은 딥러닝 수학 글에, CNN 과 시퀀스 모델은 패턴인식 글에 적어 두었다. 여기서는 그 위에서 실제로 손이 걸리는 숫자들 — 왜 ReLU 인지, 패딩을 얼마로 줄지, 드롭아웃이 추론 때 무엇을 하는지 — 를 확인한 대로 적는다.
한 유닛이 하는 일
는 층, 는 그 층의 유닛이다. 선형결합 하나에 활성화 함수를 씌운 것이 전부이고, 층을 쌓는 것만으로는 여전히 선형이다. 비선형은 오직 활성화 함수에서 나온다.
활성화 함수 — 0.25 의 무게
| 이름 | 식 | 미분의 최댓값 |
|---|---|---|
| 시그모이드 | 0.25 | |
| tanh | 1.0 | |
| ReLU | 1 () | |
| Leaky ReLU | , | 1 () |
역전파는 연쇄법칙이라 층마다 미분이 곱해진다. 시그모이드의 미분은 아무리 커도 0.25 다.
1개 층 → 0.25
5개 층 → 0.000977
10개 층 → 0.00000095
20개 층 → 0.00000000000091
스무 층이면 앞쪽 층에 도달하는 기울기가 이다. 학습이 안 되는 게 아니라 갱신할 신호 자체가 사라진다. 이것이 그래디언트 소실이고, ReLU 로 갈아탄 이유다. ReLU 는 양수 구간의 미분이 1 이라 몇 층을 지나도 1 이다.
tanh 은 시그모이드와 모양은 같지만 출력이 0 을 중심으로 하고 로 네 배 크다. 시그모이드보다 나은 자리가 있는 이유가 이것이다. 다만 양 끝에서 포화되는 것은 마찬가지다.
출력층만은 목적에 따라 고정이다 — 이진분류는 시그모이드, 다중분류는 소프트맥스, 회귀는 활성화 없음.
손실과 학습 네 단계
- 학습 데이터에서 배치 하나를 꺼낸다
- 순전파로 손실을 구한다
- 역전파로 기울기를 구한다
- 기울기로 가중치를 갱신한다
학습률 는 한 걸음의 크기다. 요즘은 고정값 대신 Adam 처럼 파라미터마다 보폭을 조절하는 방법을 기본으로 쓴다.
과적합을 막는 두 가지
드롭아웃은 학습할 때 유닛을 확률 로 꺼 버린다. 매번 다른 부분망을 학습시키는 셈이라 특정 유닛에 기대는 것을 막는다. 그런데 그냥 끄면 다음 층이 받는 값의 합이 줄어든다.
그냥 끄면 → 평균 0.504 (절반으로 준다)
1/(1-p) 로 나누면 → 평균 1.008 (추론 때와 같아진다)
그래서 학습 때 살아남은 값을 로 키워 둔다(inverted dropout). 추론할 때는
드롭아웃을 끈다 — 프레임워크의 model.eval(), training=False 가 하는 일이 이것이다.
이걸 안 끄면 예측이 매번 달라진다.
배치정규화는 배치의 평균과 분산으로 정규화한 뒤, 학습되는 로 다시 조절한다.
전: 평균 5.015, 분산 9.433 → 후: 평균 ~0, 분산 1.0000
보통 완전연결/합성곱 층 다음, 비선형 앞에 넣는다. 큰 학습률을 쓸 수 있게 해 주고 초기값에 덜 민감해진다.
CNN — 크기 공식 하나면 된다
입력 크기, 필터 크기, 패딩, 스트라이드다. 실제 합성곱을 돌려 맞춰 봤다.
| 출력 | 확인 | ||||
|---|---|---|---|---|---|
| 32 | 3 | 0 | 1 | 30 | 실제 (30, 30) |
| 32 | 3 | 1 | 1 | 32 | 실제 (32, 32) — 크기 유지 |
| 32 | 5 | 2 | 1 | 32 | 크기 유지 |
| 32 | 3 | 1 | 2 | 16.5 | 정수가 아니다 |
크기를 그대로 유지하려면 다(스트라이드 1 기준). 이면 , 면
— 실무에서 쓰는 padding="same" 이 이 계산이다.
값이 정수로 떨어지지 않으면 프레임워크가 내림해서 가장자리를 버린다. 에러가 아니라 조용히 잘리는 쪽이라, 층을 쌓다 크기가 안 맞으면 이 공식을 손으로 한 번 계산해 보는 것이 가장 빠르다.
RNN — 게이트 세 개
| 게이트 | 결정하는 것 |
|---|---|
| 입력(input) | 지금 값을 셀에 쓸 것인가 |
| 망각(forget) | 셀의 기존 값을 지울 것인가 |
| 출력(output) | 셀 값을 밖으로 내보낼 것인가 |
기본 RNN 은 같은 가중치를 시점마다 곱하므로 위에서 본 0.25 문제가 시간 방향으로 그대로 일어난다. LSTM 이 망각 게이트를 두는 이유가 이것이다. 셀 상태가 곱셈이 아니라 덧셈으로 흘러가서 기울기가 살아남는다.
강화학습 — 다섯 쌍과 벨만
MDP 는 다. 상태, 행동, 전이확률, 할인율, 보상.
벨만 방정식은 “지금 보상 + 다음 상태의 가치” 라는 한 문장을 식으로 옮긴 것이다. 가치 반복은 에서 시작해 이 식을 되풀이한다. 전이확률을 모르면 Q 러닝으로 간다.
모델(전이확률)을 몰라도 된다는 것이 Q 러닝의 요점이다. 자세한 것은 강화학습 글에 적어 두었다.
출처
Afshine Amidi · Shervine Amidi 의 CS 229 VIP Cheatsheet: Deep Learning(Stanford, 2018)을 보고 다시 쓴 것이다. 원본은 stanford.edu/~shervine에 있고, 같은 저자들의 CS230 딥러닝 치트시트도 같은 곳에 있다. 숫자와 확인 결과는 내가 돌려 본 것이다.