머신러닝 · 딥러닝 · 학부 입문 개념 학습서

머신러닝·딥러닝 개념 학습서

데이터에서 규칙을 배우는 방법을 선형회귀부터 트랜스포머까지 14개 장으로 따라갑니다. 장마다 직접 조작하는 실험과 확인 문제가 있습니다.

근거 교재는 두 권입니다. Goodfellow·Bengio·Courville 『Deep Learning』(MIT Press, 2016)과 Murphy 『Machine Learning: A Probabilistic Perspective』(MIT Press, 2012). 13–14장은 원 논문인 Bahdanau 외(2015)와 Vaswani 외(2017)를 근거로 썼습니다. 각 장 머리에 해당 교재 장과 논문을 적었습니다. 실험은 모두 이 페이지 안에서 직접 계산하며, 데이터는 교재의 예를 바탕으로 만든 합성 데이터입니다.

신경망 학습 중 · 은닉층 2개 × 뉴런 12개

파란 점과 주황 점은 서로 감긴 두 나선입니다. 직선 하나로는 가를 수 없지만, 작은 신경망은 학습을 거듭하며 휘어진 경계를 스스로 찾습니다. 배경색은 신경망이 각 위치를 주황으로 볼 확률입니다. 9장에서 직접 바꿔 볼 수 있습니다.

  1. 요소 1데이터셋무엇에서 배우는가 · 1–2장
  2. 요소 2모델어떤 함수로 설명하는가 · 3, 6, 9, 12–14장
  3. 요소 3비용 함수얼마나 틀렸는지 재는 기준 · 3, 6장
  4. 요소 4최적화 절차비용을 줄이는 방법 · 4, 10–11장
  5. 확인일반화 평가처음 보는 데이터에서도 맞는가 · 5, 7장

Goodfellow 등(5.10절)은 거의 모든 딥러닝 알고리즘을 같은 조리법으로 설명합니다. 데이터셋, 비용 함수, 최적화 절차, 모델 네 가지를 조합하는 것입니다. 이 학습서의 장들은 이 네 요소와, 그 결과가 새 데이터에서도 통하는지 확인하는 평가를 차례로 다룹니다.

1장

머신러닝이란 무엇인가

교재: Goodfellow 1장, 5.1절 · Murphy 1.1–1.3절

정의 · Mitchell (1997), Goodfellow 5.1절에서 인용

컴퓨터 프로그램이 어떤 과제 T에서 성능 척도 P로 잰 성능이 경험 E를 통해 나아진다면, 그 프로그램은 T와 P에 대해 E로부터 학습한다고 말한다.

Murphy(1.1절)는 머신러닝을 데이터에서 패턴을 자동으로 찾아내고, 찾은 패턴으로 미래 데이터를 예측하거나 불확실한 상황에서 결정을 내리는 방법들의 모음이라고 정의합니다. 규칙을 사람이 일일이 적는 대신, 예시를 보여 주고 규칙을 찾게 하는 것입니다.

학습의 세 갈래

  • 지도 학습은 입력 x와 정답 y의 쌍으로 이루어진 학습 데이터에서 x를 y로 보내는 함수를 배웁니다. y가 범주(스팸, 정상 메일)이면 분류, 실수(집값, 기온)이면 회귀라고 합니다.
  • 비지도 학습은 정답 없이 입력만 받아 데이터 안의 구조를 찾습니다. 비슷한 것끼리 묶는 군집화, 데이터를 적은 수의 축으로 요약하는 차원 축소가 대표적입니다. 무엇을 찾을지 미리 정해져 있지 않아 지도 학습보다 문제가 덜 명확합니다.
  • 강화 학습은 가끔 주어지는 보상이나 벌을 보고 어떻게 행동할지 배웁니다. Murphy는 아기가 걷는 법을 배우는 과정을 예로 듭니다.

입력의 각 항목을 특징(feature)이라고 합니다. 사람의 키와 몸무게처럼 숫자 벡터일 수도 있고, 이미지, 문장, 시계열처럼 구조가 있는 대상일 수도 있습니다 (Murphy 1.1.1절).

실험 1-1

어떤 학습 문제일까

상황마다 알맞은 학습 유형을 고르세요. 고르면 이유가 나옵니다.

맞힌 판정0 / 8

2장

확률과 베이즈 규칙

교재: Murphy 2.2–2.4절 · Goodfellow 3.5, 3.9, 3.11절

머신러닝은 불확실성을 다룹니다. 데이터에는 잡음이 있고, 같은 입력에도 정답이 하나로 정해지지 않을 때가 많습니다. 그래서 모델의 출력은 흔히 "이 메일이 스팸일 확률 0.93"처럼 확률로 나옵니다.

조건부 확률 p(A | B)는 B가 일어났을 때 A가 일어날 확률입니다. 베이즈 규칙은 원인에서 결과로 가는 확률 p(결과 | 원인)을, 결과에서 원인으로 거슬러 가는 확률 p(원인 | 결과)로 바꿔 줍니다.

\[\begin{aligned}p(y\mid x)&=\frac{p(x\mid y)\,p(y)}{p(x)}\\ p(x)&=\sum_{y'} p(x\mid y')\,p(y')\end{aligned}\]\(p(y)\)는 데이터를 보기 전의 믿음인 사전 확률, \(p(x\mid y)\)는 가능도, \(p(y\mid x)\)는 데이터를 본 뒤의 사후 확률입니다 (Murphy 식 2.7).

Murphy(2.2.3.1절)의 예를 봅시다. 40대 여성이 유방암 검사(유방 촬영술)를 받아 양성이 나왔습니다. 검사의 민감도는 80%, 즉 암이 있으면 80% 확률로 양성이 나옵니다. 그렇다면 암일 확률은 80%일까요? 많은 사람이 그렇게 답하지만 틀렸습니다. 이 연령대에서 암이 있을 사전 확률은 0.4%로 매우 낮고, 암이 없어도 10%는 양성이 나옵니다. 베이즈 규칙으로 계산하면 실제 확률은 약 3%입니다. 사전 확률을 무시하는 이 실수를 기저율 오류라고 합니다.

실험 2-1

양성이 나왔을 때 실제로 병이 있을 확률

칸 하나가 검사받은 사람 한 명입니다. 기본값은 Murphy의 유방암 검사 예입니다. 사전 확률을 바꿔 보면 같은 검사라도 결과의 의미가 크게 달라집니다.

병 있음, 양성병 있음, 음성 (놓침)병 없음, 양성 (위양성)병 없음, 음성

정규분포

연속값을 다룰 때 가장 많이 쓰는 분포는 정규(가우스) 분포 \(\mathcal{N}(x;\mu,\sigma^2)\)입니다. 평균 μ를 중심으로 종 모양이고, 표준편차 σ가 퍼짐을 정합니다. 3장의 선형회귀는 "정답 = 직선 + 정규분포 잡음"이라는 가정으로 볼 수 있습니다 (Goodfellow 3.9.3, 5.5.1절).

3장

선형회귀와 최소제곱

교재: Goodfellow 5.1.4절, 4.5절 · Murphy 1.4.5절, 7.1–7.3절

선형회귀는 입력 x에서 실수 y를 예측하는 가장 단순한 모델입니다. 입력이 하나라면 예측은 직선 ŷ = wx + b이고, 기울기 w와 절편 b가 모델의 매개변수입니다. 학습이란 데이터를 가장 잘 설명하는 w와 b를 찾는 일입니다.

"가장 잘"을 재는 기준이 비용 함수입니다. 선형회귀는 보통 평균제곱오차(MSE)를 씁니다. 예측과 정답의 차이(잔차)를 제곱해 평균한 값입니다. 제곱을 하므로 크게 틀린 점일수록 벌점이 훨씬 커집니다.

\[\begin{aligned}\mathrm{MSE}(w,b)&=\frac{1}{m}\sum_{i}\left(wx_i+b-y_i\right)^2\\ \mathbf{w}^{*}&=\left(X^{\top}X\right)^{-1}X^{\top}\mathbf{y}\end{aligned}\]\(m\)은 학습 예의 수입니다. 기울기가 0이 되는 조건을 풀면 정규 방정식이 나옵니다 (Goodfellow 식 5.12, Murphy 7.3.1절). \(X\)는 각 행이 \([x_i,\ 1]\)인 행렬입니다.

실험 3-1

제곱 오차를 눈으로 보기

슬라이더로 직선을 움직이거나 점을 끌어 보세요. 각 점의 잔차를 한 변으로 하는 정사각형이 그려집니다. MSE는 이 정사각형 넓이의 평균입니다.

점을 끌어 다른 점들에서 멀리 떨어뜨려 보세요. 점 하나가 직선 전체를 끌어당깁니다. 제곱 오차가 이상치에 민감한 이유입니다 (Murphy 7.4절).

4장

경사하강법

교재: Goodfellow 4.3절, 5.9절 · Murphy 8.3.2절, 8.5.2절

선형회귀는 정규 방정식으로 한 번에 풀리지만, 대부분의 모델은 그런 공식이 없습니다. 그래서 비용을 조금씩 줄여 가는 반복 방법을 씁니다. 기울기(gradient) \(\nabla f\)는 함수가 가장 가파르게 오르는 방향을 가리킵니다. 그 반대 방향으로 조금 움직이면 비용이 줄어듭니다. 이것이 경사하강법입니다.

\[\mathbf{x}'=\mathbf{x}-\epsilon\,\nabla_{\mathbf{x}}f(\mathbf{x})\]\(\epsilon\)은 한 번에 움직이는 크기인 학습률입니다 (Goodfellow 식 4.5). 학습률은 사람이 미리 정하는 값이라 하이퍼파라미터라고 부릅니다.

학습률이 너무 작으면 수렴이 느리고, 너무 크면 골짜기를 건너뛰어 오히려 비용이 커질 수 있습니다 (Goodfellow 4.3.1절). 비용 곡면이 한 방향으로만 길쭉하면, 곧 헤세 행렬의 조건수가 크면 경사하강법은 골짜기 벽 사이를 지그재그로 오가며 느려집니다.

데이터가 많으면 기울기를 매번 전체 데이터로 계산하기 어렵습니다. 확률적 경사하강법(SGD)은 데이터에서 무작위로 뽑은 작은 묶음(미니배치)으로 기울기를 추정합니다. 경로가 흔들리지만 한 걸음이 훨씬 싸서, 딥러닝 학습의 기본 방법이 되었습니다 (Goodfellow 5.9절).

실험 4-1

비용 곡면 위를 내려가기

배경은 선형회귀의 비용 MSE(w, b)입니다. 밝을수록 비용이 큽니다. 곡면을 눌러 출발점을 정하고 실행하세요. 학습률을 바꾸고, 미니배치를 켜 경로가 어떻게 흔들리는지도 보세요.

5장

과적합과 일반화

교재: Goodfellow 5.2–5.4절 · Murphy 1.4.7–1.4.8절, 6.4.4절, 7.5절

머신러닝의 목표는 학습 데이터를 외우는 것이 아니라, 처음 보는 데이터에서도 잘 맞히는 것입니다. 이 능력을 일반화라고 합니다. 학습 데이터에서의 오차를 학습 오차, 새 데이터에서의 기대 오차를 일반화 오차(테스트 오차)라고 합니다.

모델이 표현할 수 있는 함수의 다양성을 용량(capacity)이라고 합니다. 용량이 너무 작으면 학습 데이터조차 설명하지 못하는 과소적합이 생기고, 너무 크면 학습 데이터의 잡음까지 외워 새 데이터에서 틀리는 과적합이 생깁니다. Goodfellow 그림 5.2는 이차 함수에서 만든 데이터에 1차, 2차, 9차 다항식을 맞춘 예입니다. 1차는 곡률을 못 잡고, 9차는 모든 점을 지나지만 점 사이에서 엉뚱하게 출렁입니다.

용량을 줄이는 다른 방법이 정규화입니다. 가중치 감쇠는 비용에 가중치 크기의 제곱합을 더해, 꼭 필요하지 않은 큰 계수를 억누릅니다. 같은 9차 다항식이라도 λ를 적당히 주면 이차 함수에 가까운 모양을 되찾습니다 (Goodfellow 그림 5.5, Murphy 7.5절의 능형 회귀).

\[J(\mathbf{w})=\mathrm{MSE}_{\text{train}}+\lambda\,\mathbf{w}^{\top}\mathbf{w}\]\(\lambda\)가 클수록 단순한 함수를 선호합니다. \(\lambda=0\)이면 정규화가 없습니다 (Goodfellow 식 5.18).

실험 5-1

다항식 차수와 일반화

참 함수(점선)는 이차 함수이고, 학습 점(채운 점)은 여기에 잡음을 더한 것입니다. 차수를 올려 과적합을 만들어 보고, 학습 점 수나 λ를 바꿔 다시 잡아 보세요. 오른쪽 그래프는 차수별 학습 오차와 테스트 오차입니다.

학습 오차테스트 오차λ 슬라이더를 맨 왼쪽에 두면 정규화가 없습니다

검증 세트와 교차검증

차수나 λ 같은 하이퍼파라미터를 테스트 데이터로 고르면, 테스트 데이터가 더 이상 "처음 보는 데이터"가 아니게 됩니다. 그래서 학습 데이터의 일부를 떼어 검증 세트로 씁니다. Goodfellow(5.3.1절)는 보통 학습 데이터의 약 80%로 학습하고 20%로 검증한다고 적습니다. 데이터가 적으면 데이터를 k개로 나눠 돌아가며 검증하는 k-겹 교차검증을 씁니다.

어떤 모델도 모든 문제에서 최고일 수는 없습니다. 이를 공짜 점심은 없다 정리라고 합니다 (Murphy 1.4.9절). 그래서 문제마다 모델과 하이퍼파라미터를 검증 데이터로 골라야 합니다.

6장

분류: k-최근접 이웃과 로지스틱 회귀

교재: Murphy 1.4.2절, 1.4.6절, 8.1–8.3절 · Goodfellow 5.7.1절, 5.7.3절, 6.2.2절

k-최근접 이웃 (k-NN)

가장 단순한 분류기는 새 점과 가장 가까운 학습 점 K개를 보고, 그중 많은 쪽 클래스로 판정합니다 (Murphy 1.4.2절). 따로 학습할 매개변수가 없고 학습 데이터 자체가 모델입니다. 이런 모델을 비모수 모델이라고 합니다. K가 작으면 경계가 학습 점 하나하나에 휘둘리고, K가 크면 경계가 매끄러워집니다.

\[p(y=c\mid \mathbf{x},\mathcal{D},K)=\frac{1}{K}\sum_{i\in N_K(\mathbf{x})}\mathbb{I}(y_i=c)\]\(N_K(\mathbf{x})\)는 \(\mathbf{x}\)와 가장 가까운 학습 점 \(K\)개, \(\mathbb{I}\)는 조건이 참이면 1인 지시 함수입니다 (Murphy 식 1.2).

실험 6-1

K에 따라 바뀌는 결정 경계

배경색은 그 위치를 k-NN이 어느 클래스로 판정하는지 보여 줍니다. K = 1에서 시작해 늘려 보세요. 오른쪽 그래프는 K에 따른 학습 정확도와 테스트 정확도입니다.

로지스틱 회귀

로지스틱 회귀는 선형회귀의 출력 \(\mathbf{w}^{\top}\mathbf{x}+b\)를 시그모이드 함수 \(\sigma(z)=1/(1+e^{-z})\)에 넣어 0과 1 사이의 확률로 바꿉니다. 이름에 회귀가 들어가지만 분류 모델입니다. \(p(y=1\mid\mathbf{x})=0.5\)가 되는 곳, 곧 \(\mathbf{w}^{\top}\mathbf{x}+b=0\)인 직선이 결정 경계입니다 (Murphy 8.2절).

비용 함수로는 정답 클래스에 매긴 확률의 음의 로그를 평균한 교차 엔트로피(음의 로그 가능도)를 씁니다. 정답에 높은 확률을 주면 비용이 작고, 정답에 낮은 확률을 주면 비용이 크게 늘어납니다. 정규 방정식 같은 닫힌 해가 없어서 경사하강법으로 풉니다 (Murphy 8.3절, Goodfellow 5.7.1절).

\[\begin{aligned}J(\mathbf{w},b)=-\frac{1}{m}\sum_{i}\Big[\,&y_i\log\sigma(\mathbf{w}^{\top}\mathbf{x}_i+b)\\ &+(1-y_i)\log\big(1-\sigma(\mathbf{w}^{\top}\mathbf{x}_i+b)\big)\Big]\end{aligned}\]기울기는 \(\nabla_{\mathbf{w}}J=\frac{1}{m}\sum_i\big(\sigma(\mathbf{w}^{\top}\mathbf{x}_i+b)-y_i\big)\mathbf{x}_i\)로, 선형회귀의 기울기와 모양이 같습니다 (Murphy 식 8.5).

실험 6-2

로지스틱 회귀 학습 지켜보기

학습을 누르면 경사하강법이 한 걸음씩 진행됩니다. 배경의 진하기가 확률을, 실선이 p = 0.5인 결정 경계를 나타냅니다. 클래스가 더 겹치게 해 보세요.

7장

모델 평가: 정확도만으로는 부족하다

교재: Goodfellow 5.3절, 11.1절 · Murphy 5.7.2절

Goodfellow(11.1절)의 예입니다. 백만 명에 한 명꼴로 걸리는 희귀병 검사를 만든다고 합시다. 무조건 "병 없음"이라고 답하는 분류기도 정확도가 99.9999%입니다. 정확도가 높아도 쓸모없는 모델일 수 있다는 뜻입니다.

그래서 양성 클래스를 따로 봅니다. 정밀도(precision)는 모델이 양성이라고 한 것 가운데 실제로 양성인 비율이고, 재현율(recall)은 실제 양성 가운데 모델이 찾아낸 비율입니다. 두 값을 하나로 합칠 때는 조화평균인 F 점수를 씁니다. 정밀도는 2장의 베이즈 계산에서 본 사후 확률 p(병 | 양성)과 같은 양입니다.

분류기는 보통 점수나 확률을 내고, 그 값이 임계값을 넘으면 양성으로 판정합니다. 임계값을 낮추면 더 많이 찾아내지만(재현율 상승) 헛경보도 늘고(정밀도 하락), 높이면 그 반대입니다. 임계값을 옮기며 그린 정밀도–재현율 곡선(PR 곡선)이 이 맞바꿈을 보여 줍니다. 어느 오류가 더 비싼지는 문제마다 다릅니다 (Murphy 5.7.2절).

\[\begin{aligned}\text{정밀도}&=\frac{TP}{TP+FP}\\ \text{재현율}&=\frac{TP}{TP+FN}\\ F&=\frac{2pr}{p+r}\end{aligned}\]\(TP\)는 맞게 찾은 양성, \(FP\)는 헛경보, \(FN\)은 놓친 양성입니다 (Goodfellow 11.1절).

실험 7-1

임계값과 유병률에 따른 평가 지표

위 그래프는 음성(파랑)과 양성(주황) 사례의 분류기 점수 분포이고, 세로선이 임계값입니다. 임계값과 유병률을 바꿔 보세요. 유병률을 낮추면 같은 분류기의 정밀도가 무너집니다.

8장

비지도 학습: k-평균과 PCA

교재: Goodfellow 2.12절, 5.8절 · Murphy 1.3절, 11.4.2.5절, 12.2절, 25.1절

k-평균 군집화

k-평균은 데이터를 K개의 무리로 나눕니다. 중심 K개를 정한 뒤 두 단계를 번갈아 반복합니다. 각 점을 가장 가까운 중심의 무리에 배정하고, 각 중심을 자기 무리 점들의 평균으로 옮깁니다. 배정이 더 바뀌지 않으면 멈춥니다 (Goodfellow 5.8.2절, Murphy 알고리즘 11.1).

반복할 때마다 각 점에서 자기 중심까지 거리 제곱의 합(왜곡)이 줄어들지만, 그렇게 도달한 답이 가장 좋은 답이라는 보장은 없습니다. 결과가 처음 중심을 어디에 두었는지에 따라 달라집니다. K를 정하는 일도 쉽지 않습니다. K를 늘리면 왜곡은 계속 줄어들기 때문입니다. Murphy(11.4.2.5절)는 k-평균을 가우스 혼합 모델의 EM 알고리즘을 단순화한 형태로 설명합니다.

실험 8-1

k-평균 한 단계씩

배정과 갱신을 직접 눌러 진행해 보세요. 십자 표시가 중심입니다. 새 초기값을 여러 번 뽑으면 끝나는 모양이 달라지기도 합니다.

주성분 분석 (PCA)

PCA는 데이터를 더 적은 수의 축으로 요약합니다. 데이터를 한 축에 투영했다가 다시 원래 공간으로 되돌렸을 때 잃는 정보(재구성 오차)가 가장 작은 축을 찾습니다. 이 축은 투영한 데이터의 분산이 가장 큰 방향과 같고, 공분산 행렬의 가장 큰 고유값에 해당하는 고유벡터입니다 (Goodfellow 2.12절, Murphy 12.2.1절). PCA가 만든 새 좌표들은 서로 상관이 없어집니다 (Goodfellow 5.8.1절).

실험 8-2

분산 최대화와 재구성 오차 최소화는 같은 일

축을 돌려 보세요. 점에서 축으로 내린 가는 선이 재구성 오차입니다. 투영 분산과 재구성 오차를 더하면 언제나 같은 값이 나옵니다.

9장

신경망: XOR에서 다층 퍼셉트론까지

교재: Goodfellow 6.1–6.4절 · Murphy 16.5절, 28.3절

선형 모델로는 풀 수 없는 가장 작은 문제가 XOR입니다. 두 입력 중 정확히 하나만 1일 때 1을 내야 합니다. Goodfellow(6.1절)가 네 점에 선형 모델을 최소제곱으로 맞추면 w = 0, b = 0.5가 나옵니다. 모든 입력에 0.5를 답하는 셈입니다. x₁이 0일 때와 1일 때 x₂의 효과가 반대여야 하는데, 선형 모델은 x₂에 하나의 계수만 줄 수 있기 때문입니다.

해법은 입력을 새 표현으로 바꾸는 은닉층입니다. 은닉층은 \(\mathbf{h}=g(W^{\top}\mathbf{x}+\mathbf{c})\)를 계산하고, 출력층은 \(\mathbf{h}\) 위에서 다시 선형 모델 \(y=\mathbf{w}^{\top}\mathbf{h}+b\)를 적용합니다. 여기서 \(g\)가 활성화 함수입니다. \(g\)가 없으면 층을 몇 개 쌓아도 전체가 하나의 선형 함수라서 아무 도움이 되지 않습니다. 오늘날 기본 추천은 ReLU, \(g(z)=\max(0,z)\)입니다.

\[W=\begin{pmatrix}1&1\\1&1\end{pmatrix},\quad \mathbf{c}=\begin{pmatrix}0\\-1\end{pmatrix},\quad \mathbf{w}=\begin{pmatrix}1\\-2\end{pmatrix},\quad b=0\]Goodfellow 식 6.4–6.6이 제시한 XOR 해입니다. ReLU를 지나면 (0,1)과 (1,0)이 은닉 공간의 한 점 (1,0)으로 모이고, 네 점이 직선 하나로 갈라집니다.

실험 9-1

은닉층이 XOR을 펴는 방법

왼쪽은 원래 입력 공간, 오른쪽은 은닉층이 만든 공간입니다. ReLU를 끄면 네 점이 한 직선 위에 늘어서 가를 수 없게 됩니다. 켜면 출력 1인 두 점이 한 점으로 겹칩니다.

보편 근사 정리와 깊이

보편 근사 정리에 따르면, 은닉층이 하나뿐이라도 은닉 단위가 충분히 많으면 신경망은 연속 함수를 원하는 만큼 정확하게 근사할 수 있습니다 (Goodfellow 6.4.1절). 다만 Goodfellow는 그 층이 감당할 수 없을 만큼 커질 수 있고, 학습이 그 해를 찾지 못하거나 잘 일반화하지 못할 수 있다고 덧붙입니다. 많은 경우 층을 깊게 쌓으면 더 적은 단위로 같은 함수를 표현하고 일반화 오차도 줄일 수 있습니다.

실험 9-2

신경망 놀이터

데이터와 신경망 구조를 고르고 학습을 누르세요. 신경망은 Adam으로 학습합니다(11장). 은닉 뉴런을 1–2개로 줄이면 나선을 풀지 못하고, 층과 뉴런을 늘리면 풀어냅니다.

데이터
활성화 함수

10장

역전파

교재: Goodfellow 6.5절, 6.3.2절, 8.2.5절, 11.5절 · Murphy 16.5.4절

경사하강법을 쓰려면 모든 매개변수에 대한 비용의 기울기가 필요합니다. 신경망은 함수가 여러 겹으로 합성된 구조라서, 기울기는 미분의 연쇄 법칙으로 구합니다. \(y=g(x),\ z=f(y)\)이면 \(\dfrac{dz}{dx}=\dfrac{dz}{dy}\dfrac{dy}{dx}\)입니다 (Goodfellow 식 6.44).

계산을 연산 하나하나를 노드로 하는 계산 그래프로 그리면 이해가 쉽습니다. 순전파는 입력에서 출력 쪽으로 값을 계산하고, 역전파는 출력에서 입력 쪽으로 거슬러 가며 각 노드의 기울기를 계산합니다. 역전파는 중간 결과를 저장해 두었다가 다시 쓰므로, 같은 식을 반복해서 계산하는 낭비를 피합니다 (Goodfellow 6.5절).

직접 짠 역전파 코드는 버그가 생기기 쉽습니다. Goodfellow(11.5절)는 역전파로 구한 기울기를 유한 차분으로 구한 수치 기울기와 비교해 보라고 권합니다. 아래 실험이 그 비교를 보여 줍니다.

실험 10-1

뉴런 하나의 순전파와 역전파

뉴런 하나가 \(a=\sigma(wx+b)\)를 계산하고, 비용은 \(L=(a-y)^2\)입니다. 값을 바꾸면 위쪽 숫자(순전파 값)와 아래쪽 빨간 숫자(역전파 기울기)가 함께 바뀝니다.

기울기 소실과 폭주

층이 깊으면 연쇄 법칙의 곱셈이 길어집니다. 층마다 1보다 작은 값이 곱해지면 기울기가 지수적으로 작아지고(소실), 1보다 큰 값이 곱해지면 지수적으로 커집니다(폭주) (Goodfellow 8.2.5절). 시그모이드는 입력이 크거나 작으면 기울기가 거의 0이 되는 포화 구간이 넓고, 미분의 최댓값도 0.25입니다. 이 때문에 깊은 신경망의 은닉층에는 잘 쓰지 않습니다 (Goodfellow 6.3.2절).

실험 10-2

층을 지날 때마다 줄어드는 기울기

층마다 가중치 w와 활성화 함수의 미분이 곱해진다고 단순화했습니다. 세로축은 로그 눈금입니다.

시그모이드tanhReLU (활성 구간)

11장

심층 신경망 학습하기: 최적화와 정규화

교재: Goodfellow 7.8절, 7.12절, 8.1–8.5절 · Murphy 8.5절, 16.5.6절

모멘텀과 Adam

골짜기가 길쭉하면 기본 경사하강법은 지그재그로 느리게 내려갑니다. 모멘텀은 지난 걸음들의 방향을 속도 v로 누적합니다. 일관된 방향으로는 점점 빨라지고, 계속 바뀌는 방향은 서로 상쇄됩니다. 업데이트는 \(\mathbf{v}\leftarrow\alpha\mathbf{v}-\epsilon\nabla J,\ \boldsymbol{\theta}\leftarrow\boldsymbol{\theta}+\mathbf{v}\)이고, \(\alpha\)로는 0.5, 0.9, 0.99를 흔히 씁니다 (Goodfellow 8.3.2절).

Adam은 매개변수마다 학습률을 따로 조절하는 적응형 방법입니다. 기울기의 평균(1차 모멘트)과 제곱의 평균(2차 모멘트)을 함께 추적합니다. Goodfellow 알고리즘 8.7의 추천 기본값은 학습률 0.001, 감쇠율 \(\rho_1=0.9\)와 \(\rho_2=0.999\), 안정화 상수 \(10^{-8}\)입니다 (8.5.3절). 하이퍼파라미터에 비교적 덜 민감해 널리 쓰입니다.

실험 11-1

세 최적화 방법의 경주

길쭉하게 기운 골짜기(조건수 25)에서 같은 출발점으로 내려갑니다. 곡면을 눌러 출발점을 바꿀 수 있습니다. Adam의 학습률은 이 곡면의 크기에 맞춰 0.1로 두었습니다.

모멘텀 α
경사하강법모멘텀Adam

조기 종료와 드롭아웃

큰 신경망을 오래 학습시키면 학습 손실은 계속 줄지만, 검증 손실은 어느 순간부터 다시 오릅니다. Goodfellow 그림 7.3의 비대칭 U자 곡선입니다. 조기 종료는 학습 중 검증 손실이 가장 낮았던 때의 매개변수를 저장해 두었다가 그것을 결과로 씁니다 (7.8절). 가장 흔하게 쓰는 정규화 방법입니다.

드롭아웃은 학습할 때마다 뉴런 일부를 무작위로 끕니다. 보통 입력 단위는 0.8, 은닉 단위는 0.5의 확률로 남깁니다 (7.12절). 신경망이 특정 뉴런에 기대지 못하게 되고, 많은 작은 신경망의 앙상블을 학습하는 효과가 납니다. 평가할 때는 모든 뉴런을 켭니다.

실험 11-2

학습 곡선과 조기 종료

잡음이 섞인 적은 데이터(학습 40개)로 큰 신경망(은닉층 2개 × 뉴런 20개)을 학습했습니다. 세로선이 검증 손실이 가장 낮았던 시점입니다. 드롭아웃을 켜고 곡선과 경계가 어떻게 바뀌는지 보세요.

12장

합성곱 신경망

교재: Goodfellow 9.1–9.3절 · Murphy 16.5.1절

이미지는 화소가 격자로 늘어선 데이터입니다. 합성곱은 작은 가중치 격자인 커널을 이미지 위로 밀며, 겹치는 화소와 커널 값을 곱해 더합니다. 그 결과를 특징 맵이라고 합니다. 수학의 합성곱은 커널을 뒤집어 곱하지만, 대부분의 머신러닝 라이브러리는 뒤집지 않는 교차상관을 구현하고 그것을 합성곱이라 부릅니다 (Goodfellow 9.1절).

Goodfellow(9.2절)는 합성곱의 세 가지 장점을 듭니다. 출력 하나가 입력의 작은 영역에만 연결되는 희소 상호작용, 같은 커널을 모든 위치에 다시 쓰는 매개변수 공유, 입력이 이동하면 출력도 같은 만큼 이동하는 이동 등변성입니다. 그림 9.6의 예에서 높이 280, 너비 320 화소인 이미지의 세로 경계를 찾는 데는 원소 2개짜리 커널이면 충분합니다. 같은 변환을 행렬 곱셈으로 쓰면 행렬 원소가 80억 개를 넘습니다.

전형적인 합성곱 층은 세 단계입니다. 여러 커널로 합성곱을 하고, ReLU 같은 비선형 함수를 적용하고(검출 단계), 풀링을 합니다 (9.3절). 최대 풀링은 주변 영역의 최댓값만 남겨, 입력이 조금 움직여도 출력이 거의 바뀌지 않게 합니다.

실험 12-1

커널을 바꾸며 특징 맵 보기

커널을 고르거나 숫자를 직접 고쳐 보세요. 오른쪽 특징 맵에서 주황은 양수, 파랑은 음수입니다. 특징 맵의 칸을 누르면 그 값을 만든 입력 영역과 계산이 나옵니다.

입력 이미지
커널
커널 값 (3×3)
처리

특징 맵의 칸을 누르면 계산이 여기에 나옵니다.

13장

순환 신경망과 어텐션의 등장

교재·논문: Goodfellow 10.1–10.2절, 10.7절, 10.10절, 12.4.5.1절 · Bahdanau 외 (2015)

문장, 음성, 시계열처럼 순서가 있는 데이터는 길이가 제각각입니다. 순환 신경망(RNN)은 같은 가중치를 시점마다 다시 쓰면서, 지금까지 본 내용을 은닉 상태 \(\mathbf{h}\)에 요약해 다음 시점으로 넘깁니다. 시간 축으로 펼쳐 그리면 층이 시점 수만큼 쌓인 깊은 신경망과 같습니다 (Goodfellow 10.1절).

\[\begin{aligned}\mathbf{a}^{(t)}&=\mathbf{b}+W\mathbf{h}^{(t-1)}+U\mathbf{x}^{(t)}\\ \mathbf{h}^{(t)}&=\tanh\!\left(\mathbf{a}^{(t)}\right)\end{aligned}\]\(\mathbf{x}^{(t)}\)는 시점 \(t\)의 입력, \(W\)는 시점과 시점을 잇는 가중치, \(U\)는 입력 가중치입니다. 모든 시점이 같은 \(W\)와 \(U\)를 씁니다 (Goodfellow 식 10.8–10.9).

장기 의존성 문제

RNN은 같은 함수를 시점마다 거듭 합성합니다. 그래서 먼 과거에서 오는 기울기는 10장에서 본 것처럼 대개 사라지고, 드물게는 폭주합니다 (Goodfellow 10.7절). 비선형성을 빼고 \(\mathbf{h}^{(t)}=W^{\top}\mathbf{h}^{(t-1)}\)로 단순화하면, \(t\)시점 뒤의 영향은 \(W\)의 고유값을 \(t\)제곱한 크기로 줄거나 늘어납니다. LSTM은 입력·망각·출력 게이트로 정보를 얼마나 남길지 학습해, 이 문제를 크게 덜었습니다 (10.10절).

고정 길이 벡터라는 병목

번역용 인코더–디코더 RNN은 원문 전체를 고정 길이 벡터 하나로 압축한 뒤, 그 벡터에서 번역문을 만듭니다. Bahdanau 등(2015)은 이 고정 길이 벡터가 성능의 병목이라고 보았습니다. 그래서 디코더가 단어를 하나 낼 때마다 원문에서 관련 있는 부분을 부드럽게 찾아 가중 평균하게 했습니다. 이것이 어텐션입니다. Goodfellow(12.4.5.1절)의 말로는, 문장 전체를 읽어 요지를 잡은 뒤 번역 단어를 하나씩 내면서 매번 원문의 다른 부분에 집중하는 방식입니다.

Vaswani 등(2017)은 여기서 한 걸음 더 나아가, 순환 없이 어텐션만으로 문장을 처리하는 트랜스포머를 내놓았습니다. 순환 층은 시점 순서대로 계산해야 하지만, 셀프 어텐션은 모든 위치를 한꺼번에 계산합니다. 또 멀리 떨어진 두 단어 사이의 경로 길이가 RNN에서는 \(O(n)\)이지만 셀프 어텐션에서는 \(O(1)\)입니다 (Vaswani 외 표 1).

실험 13-1

순환 층과 셀프 어텐션 비교

왼쪽은 첫 단어의 기울기가 n번째 단어까지 몇 배로 남는지, 오른쪽은 층 하나의 계산량입니다(Vaswani 외 표 1의 차수). 셀프 어텐션은 어느 두 위치든 한 걸음에 연결되므로, 왼쪽 그래프에서 RNN만 줄어듭니다.

순환 층 (RNN)셀프 어텐션

14장

트랜스포머

논문: Vaswani 외, 「Attention Is All You Need」 (NeurIPS 2017) · Goodfellow 12.4.5.1절

트랜스포머는 순환도 합성곱도 쓰지 않고 어텐션만으로 만든 인코더–디코더 모델입니다. 인코더는 같은 층 6개(\(N=6\))를 쌓았고, 각 층은 멀티헤드 셀프 어텐션과 위치별 피드포워드 신경망 두 부분으로 되어 있습니다. 디코더도 층 6개이며, 인코더 출력을 보는 어텐션이 하나 더 있습니다. 각 부분은 잔차 연결과 층 정규화로 감쌉니다. 곧 출력이 \(\mathrm{LayerNorm}(x+\mathrm{Sublayer}(x))\)이고, 모든 층의 출력 차원은 \(d_{\text{model}}=512\)입니다 (Vaswani 외 3.1절).

질의, 키, 값

어텐션은 질의(query) 하나와 키(key)–값(value) 쌍 여러 개를 받아, 값들의 가중합을 냅니다. 가중치는 질의와 각 키가 얼마나 잘 맞는지로 정합니다. 도서관에 비유하면 질의는 찾는 주제, 키는 책등의 제목, 값은 책의 내용입니다. 트랜스포머는 질의와 키의 내적을 \(\sqrt{d_k}\)로 나눈 뒤 소프트맥스를 씁니다. 이것이 스케일드 닷-프로덕트 어텐션입니다.

\[\mathrm{Attention}(Q,K,V)=\mathrm{softmax}\!\left(\frac{QK^{\top}}{\sqrt{d_k}}\right)V\]\(Q, K, V\)는 질의·키·값을 행으로 쌓은 행렬, \(d_k\)는 키의 차원입니다 (Vaswani 외 식 1). 셀프 어텐션에서는 세 행렬이 모두 같은 문장에서 나옵니다.

실험 14-1

어텐션 가중치 직접 계산하기

질의 단어를 고르세요. 그 단어가 문장의 각 단어에 주는 가중치가 계산됩니다. 두 헤드는 원리를 보이려고 손으로 만든 예입니다. 실제 모델의 헤드는 학습으로 정해집니다. 마스크를 켜면 디코더처럼 뒤쪽 단어를 볼 수 없습니다.

헤드
설정

왜 \(\sqrt{d_k}\)로 나눌까

질의와 키의 성분이 서로 독립이고 평균 0, 분산 1이라면, 둘의 내적은 평균 0, 분산 \(d_k\)가 됩니다. \(d_k\)가 크면 내적 값이 크게 벌어지고, 소프트맥스는 가장 큰 값 하나에 거의 모든 가중치를 몰아줍니다. 이 영역에서는 소프트맥스의 기울기가 극히 작아 학습이 어렵습니다. 그래서 \(\sqrt{d_k}\)로 나눠 분산을 1로 되돌립니다 (Vaswani 외 3.2.1절, 각주 4).

실험 14-2

나누지 않으면 소프트맥스가 한쪽으로 쏠린다

성분이 평균 0, 분산 1인 무작위 질의 하나와 키 8개를 뽑았습니다. 차원 \(d_k\)를 키우면서 나누기 전과 후의 가중치를 비교해 보세요.

\(\sqrt{d_k}\)로 나누지 않음\(\sqrt{d_k}\)로 나눔

멀티헤드 어텐션과 마스크

어텐션을 한 번만 하면 여러 관계가 하나의 평균으로 뭉개집니다. 트랜스포머는 질의·키·값을 서로 다른 학습된 행렬로 \(h\)번 투영해 어텐션을 따로 계산하고, 결과를 이어 붙여 다시 투영합니다. 이것이 멀티헤드 어텐션입니다. 원 논문은 \(h=8\)개의 헤드를 쓰고, 헤드마다 \(d_k=d_v=512/8=64\)입니다. 헤드마다 차원이 줄어든 덕분에 전체 계산량은 차원을 다 쓴 헤드 하나와 비슷합니다 (3.2.2절). 실험 14-1의 두 헤드처럼, 헤드마다 서로 다른 관계에 주목할 수 있습니다.

디코더는 번역문을 한 단어씩 만들기 때문에, i번째 위치가 그 뒤의 단어를 미리 보면 안 됩니다. 그래서 디코더의 셀프 어텐션은 뒤쪽 위치의 점수를 소프트맥스 전에 −∞로 바꿔 가중치를 0으로 만듭니다. 이 마스크와 출력을 한 칸 밀어 넣는 방식 덕분에, i번째 예측은 i보다 앞선 단어에만 기댑니다 (3.1절, 3.2.3절).

위치 인코딩

어텐션은 단어들을 집합처럼 다루므로, 그대로는 단어 순서를 알 수 없습니다. 그래서 단어 임베딩에 같은 차원의 위치 인코딩을 더합니다. 원 논문은 차원마다 주파수가 다른 사인·코사인을 썼습니다. 파장은 2π에서 10000·2π까지 기하급수로 늘어납니다. 저자들은 이 방식이 상대 위치를 배우기 쉽게 하고, 학습 때보다 긴 문장에도 쓸 수 있을 것이라고 보았습니다. 학습된 위치 임베딩과 성능은 거의 같았습니다 (3.5절).

\[\begin{aligned}PE_{(pos,\,2i)}&=\sin\!\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)\\ PE_{(pos,\,2i+1)}&=\cos\!\left(\frac{pos}{10000^{2i/d_{\text{model}}}}\right)\end{aligned}\]\(pos\)는 위치, \(i\)는 차원 번호입니다 (Vaswani 외 3.5절).

실험 14-3

위치 인코딩의 무늬

왼쪽은 위치(세로)마다 위치 인코딩 벡터(가로)를 색으로 그린 것입니다. 앞쪽 차원은 빠르게, 뒤쪽 차원은 느리게 진동합니다. 오른쪽은 고른 위치의 벡터와 다른 위치 벡터들의 내적입니다. 가까운 위치일수록 값이 큽니다.

피드포워드 층과 모델 크기

어텐션 뒤에는 위치마다 따로, 같은 방식으로 적용하는 2층 신경망 \(\mathrm{FFN}(x)=\max(0,\,xW_1+b_1)W_2+b_2\)가 옵니다. 안쪽 차원은 \(d_{\text{ff}}=2048\)입니다 (3.3절). 단어는 학습된 임베딩으로 벡터가 되고, 입력 임베딩 두 개와 출력 직전의 선형 변환이 같은 가중치 행렬을 함께 씁니다 (3.4절).

원 논문의 기본(base) 모델은 매개변수 6,500만 개이고, P100 GPU 8개로 10만 걸음, 12시간 학습했습니다. 큰(big) 모델은 2억 1,300만 개이고 3.5일 학습했습니다. 큰 모델은 WMT 2014 영어→독일어 번역에서 BLEU 28.4로, 앙상블을 포함한 이전 최고 기록을 2.0 넘게 앞섰습니다 (5.2절, 6.1절, 표 2–3).

실험 14-4

트랜스포머 매개변수 계산기

논문의 base와 big 설정을 고르거나 값을 바꿔 보세요. 막대는 매개변수가 어느 부분에 있는지 보여 줍니다. 층마다 FFN이 어텐션보다 매개변수를 두 배 가까이 가집니다.

논문 설정
어텐션피드포워드 (FFN)공유 임베딩층 정규화

어텐션 하나는 \(W^Q, W^K, W^V, W^O\)와 편향으로 \(4d^2+4d\)개, FFN은 \(2d\,d_{\text{ff}}+d_{\text{ff}}+d\)개입니다. 인코더 층은 어텐션 1개, 디코더 층은 2개를 씁니다. 헤드 수 \(h\)는 계산을 나눌 뿐 매개변수 수를 바꾸지 않습니다. 논문 표 3의 값(base 65M, big 213M)과는 어휘 크기를 "약 37,000"으로 넣은 데다 편향과 정규화 항을 세는 방식에 따라 조금 차이가 납니다.

트랜스포머 이후

  • BERT (Devlin 외 2019): 트랜스포머 인코더를 양방향 문맥으로 사전학습한 뒤, 과제마다 미세 조정합니다.
  • GPT (Radford 외 2018): 마스크를 쓴 트랜스포머 디코더 12층을 레이블 없는 텍스트로 생성적 사전학습한 뒤 미세 조정합니다. 오늘날 대형 언어 모델의 출발점입니다.
  • 비전 트랜스포머 (Dosovitskiy 외 2021): 이미지를 16×16 패치로 잘라 단어처럼 넣어, 순수 트랜스포머로도 이미지 분류를 잘할 수 있음을 보였습니다.
  • 오토인코더와 표현 학습(Goodfellow 14–15장), 심층 생성 모델(20장), 확률 모델의 관점(Murphy 5, 10, 11, 15장)도 이어서 공부할 주제입니다.

부록 A

용어집

부록 B

교재 대응표

이 학습서의 장과 두 교재의 장·절을 맞춰 두었습니다. 두 교재는 트랜스포머(2017)보다 먼저 나와서, 13–14장은 아래 논문을 함께 근거로 썼습니다.

장Goodfellow 외 2016Murphy 2012
1 머신러닝이란1, 5.11.1–1.3
2 확률과 베이즈3.5, 3.9, 3.112.2–2.4
3 선형회귀4.5, 5.1.41.4.5, 7.1–7.4
4 경사하강법4.3, 5.98.3.2, 8.5.2
5 과적합과 일반화5.2–5.41.4.7–1.4.9, 6.4.4, 7.5
6 분류5.7.1, 5.7.3, 6.2.21.4.2, 1.4.6, 8.1–8.3
7 모델 평가5.3, 11.15.7.2
8 비지도 학습2.12, 5.81.3, 11.4.2.5, 12.2, 25.1
9 신경망6.1–6.416.5, 28.3
10 역전파6.3.2, 6.5, 8.2.5, 11.516.5.4
11 최적화와 정규화7.8, 7.12, 8.1–8.58.5, 16.5.6
12 합성곱 신경망9.1–9.316.5.1
13 RNN과 어텐션10.1–10.2, 10.7, 10.10, 12.4.5.1– (Bahdanau 외 2015)
14 트랜스포머12.4.5.1– (Vaswani 외 2017)

교재 서지

  • Goodfellow, I., Bengio, Y., & Courville, A. (2016). Deep Learning. MIT Press.
  • Murphy, K. P. (2012). Machine Learning: A Probabilistic Perspective. MIT Press.

논문

  • Bahdanau, D., Cho, K., & Bengio, Y. (2015). Neural machine translation by jointly learning to align and translate. ICLR. arXiv:1409.0473
  • Vaswani, A., Shazeer, N., Parmar, N., Uszkoreit, J., Jones, L., Gomez, A. N., Kaiser, Ł., & Polosukhin, I. (2017). Attention is all you need. NeurIPS. arXiv:1706.03762
  • Radford, A., Narasimhan, K., Salimans, T., & Sutskever, I. (2018). Improving language understanding by generative pre-training. OpenAI. PDF
  • Devlin, J., Chang, M.-W., Lee, K., & Toutanova, K. (2019). BERT: Pre-training of deep bidirectional transformers for language understanding. NAACL. arXiv:1810.04805
  • Dosovitskiy, A., et al. (2021). An image is worth 16×16 words: Transformers for image recognition at scale. ICLR. arXiv:2010.11929