수학 기초 빠른 복습¶
이 페이지는 선형대수, 미적분, 확률과 통계를 처음부터 강의하지 않는다. 딥러닝 본문에서 수식과 그림을 읽는 데 필요한 뜻을 짧은 예로 복습한다. 계산이 막히면 해당 탭만 읽고 본문으로 돌아가면 된다.
어디까지 알면 될까
공식을 외우기보다 기호가 무엇을 가리키고, 값이 변할 때 다른 값이 어떻게 달라지는지 말로 설명할 수 있으면 충분하다.
벡터와 행렬은 숫자를 배열하는 방법이다¶
스칼라(scalar)는 하나의 수이고, 벡터(vector)는 순서가 있는 수의 묶음이다. 학생 한 명을 키와 몸무게로 표현하면 \((170, 65)\)라는 2차원 벡터가 된다. 행렬(matrix)은 여러 벡터를 행과 열로 배열한 것이다. 딥러닝에서는 여러 샘플이나 여러 특징을 한꺼번에 계산할 때 행렬을 쓴다.
shape는 각 축의 크기다. \((32, 3, 224, 224)\)인 이미지 텐서는 보통 샘플 32개, 색 채널 3개, 높이 224, 너비 224를 뜻한다. 라이브러리마다 축의 순서는 다를 수 있으므로 숫자만 보지 말고 각 축의 의미를 확인한다.
내적과 행렬 곱셈은 정보를 모은다¶
두 벡터의 내적(inner product)은 같은 위치의 수를 곱해 더한 값이다.
신경망의 뉴런은 입력 특징마다 가중치를 곱한 뒤 더한다. 행렬 곱셈은 이 내적을 여러 출력에 동시에 적용하는 연산으로 볼 수 있다. 앞 행렬의 열 수와 뒤 행렬의 행 수가 같아야 곱할 수 있다는 점만 먼저 기억한다.
길이, 거리, 방향¶
노름(norm)은 벡터의 크기를 재는 규칙이고, 두 벡터의 차이에 노름을 적용하면 거리를 만들 수 있다. 코사인 유사도는 벡터의 길이보다 방향이 얼마나 비슷한지를 본다. 임베딩을 비교할 때 어떤 거리나 유사도를 썼는지가 중요한 이유다.
선형변환과 기저¶
행렬 \(A\)를 벡터 \(x\)에 곱한 \(Ax\)는 벡터를 늘이거나 줄이고, 회전하거나 다른 차원으로 보내는 선형변환(linear transformation)으로 이해할 수 있다. 기저(basis)는 같은 벡터를 표현하는 좌표축의 선택이다. 주성분분석(PCA)은 데이터가 크게 퍼지는 새로운 축을 찾아 좌표계를 바꾼다.
고유값, 고유벡터, 특잇값분해
어떤 방향 \(v\)가 변환 뒤에도 방향을 유지해 \(Av=\lambda v\)를 만족하면 \(v\)를 고유벡터, \(\lambda\)를 고유값이라고 한다. PCA에서는 공분산행렬의 주요 고유벡터가 데이터가 많이 퍼진 방향을 나타낸다. 특잇값분해(SVD)는 직사각형 행렬에도 적용할 수 있는 분해이며 PCA를 계산하는 대표 방법이다. 세부 계산은 4장을 더 깊게 공부할 때 익혀도 된다.
확인: 벡터의 차원과 데이터셋의 샘플 수를 구분할 수 있는가? 행렬 곱셈이 여러 가중합을 묶은 계산이라는 점을 설명할 수 있는가?
함수는 입력을 출력으로 바꾸는 규칙이다¶
함수 \(y=f(x)\)는 입력 \(x\)를 출력 \(y\)로 바꾼다. 신경망은 여러 함수를 차례로 합성한 함수다. 예를 들어 \(z=g(f(x))\)에서는 \(x\)가 먼저 \(f\)를 지나고, 그 결과가 \(g\)의 입력이 된다.
미분은 작은 변화의 영향을 나타낸다¶
도함수(derivative)는 입력을 조금 바꿀 때 출력이 얼마나 변하는지를 나타낸다. 변수가 여러 개면 한 변수를 제외한 나머지를 고정한 편미분(partial derivative)을 사용한다. 모든 편미분을 한 벡터로 모은 것이 기울기(gradient)다.
손실 함수 \(L(\theta)\)의 기울기 \(\nabla_\theta L\)은 매개변수 \(\theta\)를 어느 방향으로 바꾸면 손실이 가장 빠르게 커지는지 알려 준다. 따라서 경사하강법은 반대 방향으로 이동한다.
여기서 \(\eta\)는 한 번에 움직이는 크기를 정하는 학습률이다.
연쇄법칙은 합성함수의 변화를 연결한다¶
합성함수에서는 바깥 함수의 변화율과 안쪽 함수의 변화율을 곱해 전체 변화율을 구한다. 이것이 연쇄법칙(chain rule)이다.
역전파는 연쇄법칙을 계산 그래프의 출력 쪽에서 입력 쪽으로 효율적으로 적용하는 절차다. 역전파는 기울기를 계산하고, 옵티마이저는 그 기울기로 매개변수를 갱신한다.
야코비안과 발산은 언제 필요한가
벡터를 입력받아 벡터를 출력하는 함수의 편미분을 행렬로 모으면 야코비안(Jacobian)이다. 벡터장의 각 성분이 자기 좌표 방향으로 얼마나 퍼지는지를 더한 값은 발산(divergence)이다. 플로 매칭과 연속 정규화 흐름에서 이름이 등장하지만, 입문 단계에서는 역할만 알아도 된다.
확인: 기울기 계산과 매개변수 갱신이 서로 다른 단계인 이유를 설명할 수 있는가?
확률분포는 가능한 값과 그 가능성을 함께 나타낸다¶
확률변수(random variable)는 결과에 따라 값이 정해지는 변수이고, 확률분포(probability distribution)는 가능한 값에 확률을 배정하는 규칙이다. 베르누이분포는 두 결과, 범주형분포는 여러 범주, 정규분포는 연속적인 값을 표현하는 대표적인 분포다.
기댓값(expectation)은 분포의 평균적인 위치, 분산(variance)은 값이 퍼진 정도를 나타낸다. 공분산(covariance)은 두 변수가 함께 커지거나 작아지는 경향을 측정한다. 공분산이 0이라고 해서 항상 두 변수가 독립인 것은 아니다.
조건부확률과 베이즈 정리¶
\(p(a\mid b)\)는 사건 \(b\)를 안다는 조건에서 사건 \(a\)의 확률이다. 베이즈 정리는 조건의 방향을 바꾸어 계산하는 관계다.
VAE에서는 관측 데이터 \(x\)가 주어졌을 때 잠재변수 \(z\)의 분포인 \(p(z\mid x)\)를 생각한다. 정확히 계산하기 어려워 근사분포를 도입한다는 것이 핵심이다.
우도는 관측된 데이터를 기준으로 모형을 본다¶
우도(likelihood)는 매개변수가 정해졌을 때 지금 관측한 데이터가 얼마나 그럴듯한지를 나타낸다. 확률과 같은 식을 쓰더라도 무엇을 고정하고 무엇을 바꾸어 보는지가 다르다. 곱셈을 덧셈으로 바꾸고 작은 수의 수치 문제를 줄이기 위해 로그우도를 자주 사용한다.
KL 발산은 두 분포의 차이를 한 방향으로 잰다¶
KL 발산은 두 확률분포가 얼마나 다른지를 나타내지만 일반적인 거리와 달리 방향을 바꾸면 값이 달라질 수 있다. VAE에서는 근사 사후분포가 기준 분포에서 지나치게 벗어나지 않도록 하는 항으로 등장한다.
확률밀도는 확률 그 자체가 아니다
연속확률변수에서는 한 점의 확률이 아니라 구간 아래의 넓이가 확률이다. 확률밀도 값은 1보다 클 수도 있지만 전체 구간에서 적분한 값은 1이다. 생성 모델에서 \(p(x)\)를 읽을 때 이 차이를 기억한다.
확인: 기댓값과 분산이 각각 분포의 어느 성질을 요약하는지, 조건부확률의 세로선이 무엇을 뜻하는지 설명할 수 있는가?
본문에서 자주 보는 기호¶
| 기호 | 읽는 법 | 이 자료에서 주로 뜻하는 것 |
|---|---|---|
| \(x\), \(y\) | 엑스, 와이 | 입력과 목표값 |
| \(\hat{y}\) | 와이 햇 | 모형의 예측값 |
| \(w\), \(b\), \(\theta\) | 더블유, 비, 세타 | 가중치, 편향, 매개변수 전체 |
| \(L\), \(\mathcal{L}\) | 엘 | 손실 함수 또는 목적 함수 |
| \(\nabla\) | 나블라 | 여러 편미분을 모은 기울기 연산자 |
| \(p(x)\) | 피 엑스 | \(x\)의 확률 또는 확률밀도 |
| \(\mathbb{E}[X]\) | 엑스의 기댓값 | 확률변수 \(X\)의 평균적인 값 |
다음으로 무엇을 읽을까¶
- 기호와 개념이 낯설다면 시작 전에 확인하기에서 필요한 범위를 먼저 고른다.
- 기울기와 역전파를 연결하려면 2. 신경망과 역전파로 간다.
- 고유벡터와 표현의 관계를 보려면 4. 차원 축소와 표현으로 간다.
- 확률분포가 생성 모델에 쓰이는 방식을 보려면 9. 생성 모델과 VAE로 간다.