AI Deep Dive, Chapter 1. 딥러닝을 위한 필수 기초 수학
AI Deep Dive Note
OT
- Chapter 1 - 딥러닝을 위한 필수 기초 수학
- Chapter 2 - 왜 현재 AI가 가장 핫할까?
- Chapter 3 - 왜 인공 신경망을 공부해야 하는가?
- Chapter 4 - 딥러닝, 그것이 알고 싶다.
- Chapter 5 - 이진 분류와 다중 분류
- Chapter 6 - 인공 신경망, 그 한계는 어디까지인가?
- Chapter 7 - 깊은 인공 신경망의 고질적 문제와 해결 방안
- Chapter 8 - 왜 CNN이 이미지 데이터에 많이 쓰일까?
- Chapter 9 - 왜 RNN보다 트랜스포머가 더 좋다는 걸까?
01-01 함수와 다변수 함수
한 개 입력, 한 개 출력
\[x \rightarrow f \rightarrow f(x) = y = x^2\]여러 개 입력, 한 개 출력
\[f(x, y) = z = yx^2\]한 개 입력, 여러 개 출력
\[x \rightarrow [f1, f2] = [x, x^2]\]두 개 입력, 두 개 출력
\[z = f(x, y) = [xy^2, x+y]\]01-02 로그 함수
- 지수함수의 역함수
- 로그 함수의 성질
01-03 벡터와 행렬
- 열 벡터, 행 벡터, 행렬, 성분
- 연립 1차 방정식
\(\begin{bmatrix} 1 & 2 \\ 2 & 5 \end{bmatrix} \begin{bmatrix} x \\ y \end{bmatrix} = \begin{bmatrix} 4 \\ 9 \end{bmatrix}\)
-
행렬과 벡터의 곱
-
벡터의 방향과 크기
시점이 달라도, 방향과 크기가 같으면 같은 벡터이다.
크기
- 벡터의 길이
- l2 norm \(({2^2 + 1^2})^{\frac{1}{2}}\)
- l1 norm \(({2^1 + 1^1})^1\)
방향
- 사잇각
01-04 전치와 내적
- Transpose
\(A^T_{ij} = A_{ji}\) $$
( \begin{bmatrix} a_{1 1} & a_{1 2} \ a_{2 1} & a_{2 2} \end{bmatrix}
\begin{bmatrix} x_1 \ x_2 \end{bmatrix} )^T = { \begin{bmatrix} b_1 \ b_2 \end{bmatrix} }^T $$
$$
[x_1 x_2] \begin{bmatrix} a_{1 1} & a_{2 1} \ a_{1 2} & a_{2 2} \end{bmatrix}
= [b_1 b_2]
$$
-
내적
- 내적은 닮은 정도를 나타낸다
- 사잇각이 같은 경우, cos 0 최대
- cos 90인 경우, 0
- 반대 방향인 경우, 반대로 닮음.
01-05 극한과 입실론-델타 논법
- \(\lim_{x \rightarrow a} f(x)\) : x가 a와 무진장 가까운 값일 때, f(x)는 뭐랑 무진장 가깝냐?
- 다가간다든가, 움직이는 것 아님
- \(\lim_{x \rightarrow a} f(x) = L\)을 만족하는 것을 그래프로 봅시다
- \(\lim_{x \rightarrow a} f(x) = L: L\) 주변 갭으로 어떤 양수 \(\epsilon\) 을 잡더라도 요 갭 안으로 싹다 보내버릴 수 있는 a 주변 갭 \(\delta\)가 존재하면 a에서의 극한 값은 L이다.
01-06 미분과 도함수
- 미분: 순간 기울기
극한을 이용해서 구할 수 있다.
\[x^n \rightarrow n x^{n-1}\] \[e^x \rightarrow e^x\]01-07 연쇄 법칙
01-08 편미분과 그라디언트
편미분: 다른 변수를 상수 취급
그라디언트: 벡터로 묶은 것
\[\begin{bmatrix} \frac{\delta f}{ \delta x} \\ \frac{\delta f}{ \delta y} \end{bmatrix}\]한 점에서의 그라디언트 구하기: 편미분하고 값을 대입
01-09 테일러 급수
C0, C1, C2 구하기
- 양변을 미분한 후 x에 0 대입
일반화하면
\[e^x, ln x\]01-10 스칼라를 벡터로 미분하는 법
01-11 왜 그라디언트는 가장 가파른 방향을 향할까
learning rate가 필요한 이유: 근사를 활용하기 때문에 너무 많이 움직이면 근사가 깨짐
테일러 급수를 이용한 증명
강의 내용 필기
01-12 벡터를 벡터로 미분하는 법
- back propagation을 간단히 표현하는 데에 도움
01-13 벡터를 벡터로 미분할 때의 연쇄 법칙
01-14 스칼라를 행렬로 미분하는 법
01-15 행렬을 행렬로, 벡터를 행렬로 미분하는 법
행렬을 벡터로 변환한 후, 벡터 미분을 활용한다.
01-16 랜덤 변수와 확률 분포
랜덤 변수는 함수다
입력: 사건 (동전의 앞면 1, 뒷면 0)
출력: 실수의 값
함수: 실수 값을 확률 값으로 바꿔주는 것이 확률 함수, 앞면 1 -> 1/2, 뒷면 0 -> 1/2
확률 함수의 종류
- 확률 질량 함수: 동전의 앞면, 뒷면 처럼 딱딱 떨어질 때
- 확률 밀도 함수: 대한민국 남성의 키 평균, 동전처럼 딱딱 떨어지지 않는 것
01-17 평균과 분산
확률 분포를 설명하는 두 가지 대푯값
평균
- mean: 수학적 언어
- 산술평균, 기하평균, 조화평균
-
average: 일상적 언어
-
expectation: 기댓값
-
주사위를 다섯번 던져서 나온 값들
\[E[X] = \sum_i x_i p_i\]
-
-
연속 랜덤 변수
\[E[X] = \int_{+\inf}^{-\inf} xp(x)dx, E[X] = \mu\]-
x를 곱한 상태로 적분한 것
-
동전의 앞면 1, 확률 1/2, 뒷면 0, 확률 1/2, 모두 더하면 기댓값은 1/2
-
보통은 중심 값이 나온다
-
분산
- 편차의 제곱의 평균
-
편차의 절대값은 분포에 대한 정확도가 떨어진다. 범위가 다름.
- 예시
- 시험 점수 A = [100, 0], B = [50, 50]
- 평균에 대한 차이, 편차를, 양수로 만들어준 후 모두 더해 줌, 평균 냄
- 평균 50
- 이산 확률 일 때, \(V[X] = \sum_i (x_i - \mu)^2 p_i\)
-
연속 확률 일 때, \(= \int (x-\mu)^2 p(x) dx\)
-
다르게 쓰자면, 편차의 제곱의 평균
\[E[(X-\mu)^2]\] \[E[x^2 - 2x\mu + \mu^2]\] \[E[x^2] - 2\mu E[x] + \mu^2\]\(E[x] = \mu\) 이므로
\[E[x^2] - \mu^2\]- 곧, 분산은 제곱 기댓값 빼기 평균 제곱으로 구할 수 있다
표준편차
- sqrt(V[X])
- 단위를 맞춰주기 위함, 분산은 단위가 면적과 혼동을 줌 \(cm^2\)
01-18 균등 분포와 정규 분포
딥러닝에서 아주 많이 씀
균등 분포
-
uniform distribution
- 주사위, 동전 던지기, 연속적으로도 마찬가지
- X ~ U 라고 표기 함. X가 Uniform distribution을 따른다.
- 확률은 \(\frac{1}{b-a}\)
정규 분포
01-19 최대 우도 추정 (MLE)
-
인공신경망은 MLE 기계이다
- Maximum Likelihood Estimation
- 조건부 확률 vs likelihood 비교
-
우도 함수 Likelihood Function:
- \(L(\theta; x)\)는 매개변수 \(\theta\)가 주어졌을 때 데이터 x가 나올 확률
-
로그 우도 (Log-Likelihood)
-
우도 함수에 로그를 취한 것. 로그는 단조 증가 함수이므로, 로그 우도를 최대화하는 것은 원래의 우도를 최대화하는 것과 같다.
\[l(\theta; x) = log L(\theta; x)\]
-
-
최대 우도 추정치 (Maximum Likelihood Estimation)
-
우도 함수 또는 로그 우도 함수를 최대화하는 매개변수 \(\hat{\theta}\)
\[\hat{\theta} = arg_{\theta} max L(\theta; x)\] \[\hat{\theta} = arg_{\theta} max l(\theta; x)\]
-
- 이산 확률 분포에서의 최대 우도 추정해 보기
MLE를 한다 = likelihood를 보고(확률 값을 비교하여) 가장 크게 끔하는 조건을 고르는 것
우도가 최대가 되는 x값을 찾으면, 그 x값이 가장 그럴듯한 매개변수나 상태라고 판단하는 것입니다. 이는 확률론적 관점에서의 추정이며, 이 x값이 바로 우리가 찾고자 하는 “최적의 추정치”입니다.
- 연속 확률 분포에서의 최대 우도 추정해보기
- 동전 던지기를 이용한 최대 우도 추정
측정된 데이터를 통해서, likelihood를 최대화하는 확률을 추정했다
01-20 최대 사후 확률 (MAP)
MAP(Maximum A Posteriori)는 사후 확률(posterior probability)을 최대화하는 방법으로, 우도(likelihood)와 사전 확률(prior distribution)을 모두 고려합니다.
- MLE (최대우도추정): “만약 측정값이 z이고 조건이 x라면, 우도(likelihood)는 측정값이 이렇게 나올 확률입니다. 이 경우, 우리는 x의 값을 바꿔가면서(입력 변수 x) 그에 따른 확률 밀도값(출력 함수)을 살펴봅니다. 그리고 그 중에서 가장 큰 확률 밀도값을 주는 x를 선택합니다.”
- \[\hat{x} = arg_x max P(z|x)\]
- MAP (최대 사후 확률 추정): “측정값이 z로 주어져 있을 때, 우리는 x에 대한 확률 밀도값을 고려합니다. 이 확률 밀도값은 사전 확률과 측정값을 결합한 것입니다. 그래서, 이 사후 확률을 최대화하는 x를 결정하게 됩니다. 이것이 바로 MAP의 방법입니다.”
-
\[arg_x max p(x|z) = arg_x max \frac{p(z|x) p(x)}{p(z)} = arg_x max(p(z|x)p(x))\]
- 최대 사후 확률을 추정 할 때, 사전 확률도 고려 함.
- p(z)는 x에 의한 항이 아니므로 최대값을 찾을 때에는 생략 가능 함.
- MLE와 차이: p(x)만 추가됨. 즉, ‘x의 분포’를 사전에 알고 있다. A 농장의 닭의 무게가 정규 분포 N(1.1kg, 0.1kg^2)을 따른다. 등. 사전 분포 Prior distribution이라고 한다. 사전에 분포 정도는 알고 있을 때, 접근 가능한 방법이다.
- MAP 문제를 풀라고 할 때에는, 적어도 측정값 z(x+n1, x+n2 등)과, 사전 분포는 넘겨줄 것이다.
- 사전 분포를 모르면 MLE likelihood로 문제를 풀 수 밖에 없다.
- 사전 분포가 잘못되었을 수도 있다. 이러면 추정 성능에 악영향을 줄 수 있다.
- MAP 문제를 풀라고 할 때에는, 적어도 측정값 z(x+n1, x+n2 등)과, 사전 분포는 넘겨줄 것이다.
-
\[arg_x max p(x|z) = arg_x max \frac{p(z|x) p(x)}{p(z)} = arg_x max(p(z|x)p(x))\]
판서 요약
로그를 취할 때, -log를 취하면, 앞의 두 항은 MSE, 뒤는 l2 norm이 된다
import numpy as np
array = np.array([1, 3, 2, 4, 5]) # 임의의 배열 생성
max_index = np.argmax(array) # 최대값의 인덱스 찾기
- 사전, 사후?
-
데이터를 얻기 전 후라는 시간적 의미를 담고 있다
사전 확률: “사전 확률”은 새로운 데이터를 얻기 전에 이미 알고 있는 정보를 확률적으로 표현한 것입니다. 이는 주관적인 믿음이나 이전의 연구 결과, 전문가의 의견 등을 기반으로 할 수 있습니다.
사후 확률: “사후 확률”은 새로운 데이터를 얻은 후에 업데이트된 확률입니다. 사전 확률과 새로운 데이터의 우도(likelihood)를 결합하여 계산됩니다. 이를 통해 초기의 믿음이나 가정을 새로운 데이터에 기반하여 업데이트할 수 있습니다.
이러한 네이밍은 베이즈 통계학의 핵심 개념을 잘 반영하고 있습니다. 즉, 초기에 가지고 있는 정보(사전 확률)를 새로운 데이터가 주어졌을 때 어떻게 업데이트할 것인지(사후 확률)를 설명합니다. 이 과정을 통해 불확실성을 줄이고 더 정확한 추론이나 예측을 할 수 있습니다.
베이즈 정리
베이즈 정리의 유도
베이즈 정리 예시
예시 - 언어 모델
- Likelihood: 주어진 매개변수(예: 언어 모델의 가중치)가 얼마나 그럴듯한지를 나타내는 확률입니다. 예를 들어, 언어 모델이 “I am” 다음에 “happy”가 올 확률이 얼마나 높은지를 나타냅니다.
- Prior Distribution: 매개변수에 대한 사전 지식이나 믿음을 확률 분포로 표현합니다. 예를 들어, 언어 모델의 가중치가 특정 범위 내에 있을 것이라는 믿음을 수학적으로 표현할 수 있습니다.
- Posterior: 사전 확률과 우도를 결합하여 업데이트된 확률을 계산합니다. 이 사후 확률을 최대화하는 매개변수 값을 찾는 것이 MAP의 목표입니다.
예시 - 이미지 모델, CNN
- Likelihood (우도): 주어진 이미지 데이터에 대해, 모델의 매개변수(가중치와 편향 등)가 얼마나 그럴듯한 예측을 하는지를 나타냅니다. 예를 들어, 모델이 고양이 이미지를 정확히 ‘고양이’로 분류할 확률입니다.
- 우도 계산: 이미지 모델이 주어진 훈련 데이터(이미지와 레이블)에 대해 얼마나 잘 예측하는지를 계산합니다. 예를 들어, 고양이 이미지를 ‘고양이’로, 개 이미지를 ‘개’로 잘 분류하는지를 확인합니다.
- Prior Distribution (사전 확률): 매개변수에 대한 사전 지식이나 믿음을 확률 분포로 표현합니다. 예를 들어, 가중치가 너무 크거나 작지 않을 것이라는 믿음을 수학적으로 표현할 수 있습니다.
- 사전 확률 설정: 모델의 매개변수(가중치)가 특정 범위 내에 있을 것이라는 사전 확률을 설정할 수 있습니다. 이는 모델이 과적합(overfitting)을 피하도록 도와줍니다.
- Posterior (사후 확률): 사전 확률과 우도를 결합하여 업데이트된 확률을 계산합니다. 이 사후 확률을 최대화하는 매개변수 값을 찾는 것이 MAP의 목표입니다.
- 사후 확률 최대화: 우도와 사전 확률을 결합하여 사후 확률을 계산하고, 이를 최대화하는 매개변수를 찾습니다. 이 과정에서는 보통 베이지안 최적화, MCMC(Markov Chain Monte Carlo) 등의 방법이 사용될 수 있습니다.
- 모델 업데이트: 사후 확률을 최대화하는 매개변수로 모델을 업데이트합니다. 이렇게 업데이트된 모델은 사전 정보와 새로운 데이터를 모두 고려하여 더 정확한 예측을 할 가능성이 높아집니다.
01-21 정보 이론 기초 Entropy, Cross-Entropy, KL-divergence, Mutual information)
소스 코딩이란?
소스 코딩의 종류
- Huffman Coding: 가장 자주 등장하는 심볼에 더 짧은 코드를 할당하는 방식으로, 텍스트나 이미지 압축에 널리 사용됩니다.
- Arithmetic Coding: 심볼의 확률을 사용하여 하나의 실수로 전체 메시지를 인코딩합니다. 이 방법은 높은 압축률을 제공하지만 계산 복잡성이 높을 수 있습니다.
- Run-Length Encoding (RLE): 동일한 심볼이 연속으로 등장하는 경우, 그 심볼과 그 길이를 함께 저장합니다. 주로 단순한 그래픽이나 텍스트에 사용됩니다.
- Delta Encoding: 데이터의 차이만을 저장하는 방식으로, 시계열 데이터나 오디오 파일에 주로 사용됩니다.
- Lempel-Ziv-Welch (LZW): 사전 기반의 압축 방식으로, GIF 이미지나 UNIX의
compress
명령어 등에 사용됩니다. - Burrows-Wheeler Transform (BWT): 데이터를 더 쉽게 압축할 수 있는 형태로 변환하는 알고리즘으로, bzip2 압축에 사용됩니다.
- Golomb Coding: 일정한 확률 분포를 가진 데이터에 효과적인 압축을 제공합니다. 이는 특히 로스리스 오디오 압축에 유용합니다.
- JPEG, MPEG: 이러한 표준들은 이미지나 비디오 압축에 특화된 여러 가지 소스 코딩 방법을 조합하여 사용합니다. (python library opencv)
머신 러닝에서 자주 사용하는 소스 코딩의 종류
- Huffman Coding: 의사결정 트리(decision tree)나 랜덤 포레스트(random forest)와 같은 트리 기반 모델에서 특성의 중요도를 측정할 때 사용될 수 있습니다. 또한, 텍스트 데이터의 전처리나 압축에서도 사용됩니다. (python library heapq, huffman)
- Arithmetic Coding: 높은 압축률이 필요한 경우, 특히 자연어 처리(NLP)에서 텍스트 데이터를 효율적으로 저장하거나 전송할 때 사용될 수 있습니다. (python library arithmetic-coding)
- Delta Encoding: 시계열 데이터나 연속적인 값을 가진 특성을 처리할 때 사용됩니다. 이 방법은 데이터의 변화를 캡처하여 더 효율적인 표현을 가능하게 합니다. (numpy diff)
- Run-Length Encoding (RLE): 이미지나 텍스트 데이터에서 반복되는 패턴을 효율적으로 저장할 때 사용될 수 있습니다. 이는 주로 데이터의 전처리 단계에서 적용됩니다. (python library rle, numpy)
- Lempel-Ziv-Welch (LZW): 텍스트나 시퀀스 데이터를 압축하는 데 사용될 수 있으며, 특히 큰 데이터셋을 다룰 때 유용합니다. (python library lzw)
- Golomb Coding: 이산 확률 분포를 가진 데이터에 효과적인 압축을 제공합니다. 이는 특히 로스리스 오디오 압축이나 특정 유형의 데이터 압축에 사용될 수 있습니다.
사용 목적
-
데이터의 전처리, 저장, 전송 등을 효율적으로 하기 위해 사용
-
알고리즘의 성능을 향상
-
모델의 크기를 줄임
- Bits 이진수
- Source Coding 소스 코딩: 전송할 데이터를 인코딩한다. 이진수로 효율적으로 표현하자.
- 정보는 랜덤하다.
- 높은 확률로 나오는 글자는 짧게, 낮은 확률로 나오는 글자는 길게하는 게 효율적 이겠다.
- 연인과의 카톡에서 하트 ❤️가 나올 확률 P(❤️) = 0.5, ㅗ가 나올 확률 P(ㅗ)=0.001
Entropy
엔트로피의 의미
엔트로피와 소스코딩
엔트로피를 계산하는 목적
강의 내용
❤️를 111, ㅗ를 0로 인코딩 하는 경우
❤️를 0, ㅗ를 111로 인코딩 하는 경우
길이가 훨씬 줄어든다. 효율적이다.
평균 길이를 봐야 한다.
\[평균 \sum x_i p_i \rightarrow 문자 길이에 대한 평균 \sum l_i p_i\]평균 길이는, 문자의 길이 x 문자가 나올 확률, 이 평균 길이가 최소가 되는 것이 좋다.
섀넌 - Entropy가 평균 코드 길이의 이론적 최소임을 밝힘. 하한을 정해줌.
Entropy - 3만 나오는 주사위를 만들었을 때, 엔트로피는 0. 불확실성 없다.
식: \(\sum_i - p_i log_2 p_i\) 즉, i 번째 글자에 대해 코드 길이를 \(p_i\)에 맞춰 \(-log_2 p_i\)로 하면 된다는 뜻.
Cross Entropy & KL divergence
강의 메모 - 두서 없음
Cross Entropy
\[\sum_i - p_i log_2 q_i\]\(p_i\)는 실제 값을 모르거나, 문자길이가 소수일 수 없으므로 대신 \(q_i\)를 넣기도 하는데, 이를 통해 구한 \(\sum_i - p_i log_2 q_i\)를 cross entropy라고 하며, cross entropy - entropy를 KL divergence라고 한다.
Cross Entropy를 사용하는 목적
KL divergence
KL divergence
\[\sum_i - p_i log_2 \frac{p_i}{q_i}\]cross entropy는 entropy보다 항상 크다. 빼면 양수 값이다.
p와 q의 분포 차이(거리)로 해석 가능
만약 출력 q_i 만 업데이트할 수 있다면, cross entropy를 줄이는거나 KL을 을 최소화하는 해는 동일하다.
Mutual Information
참고. 손실 함수
회귀 문제 (Regression)
- Mean Squared Error (MSE): 예측값과 실제값의 차이의 제곱의 평균입니다.
- Mean Absolute Error (MAE): 예측값과 실제값의 차이의 절대값의 평균입니다.
- Huber Loss: MSE와 MAE를 결합한 손실 함수로, 오차가 작을 때는 MSE를, 큰 경우에는 MAE를 사용합니다.
분류 문제 (Classification)
- Cross-Entropy Loss: 두 확률 분포 사이의 차이를 측정합니다. 이진 분류와 다중 클래스 분류에 모두 사용됩니다.
- Hinge Loss: 서포트 벡터 머신(SVM)에서 사용되며, 마진을 최대화하는 방향으로 모델을 학습시킵니다.
- Zero-One Loss: 예측이 정확한 경우 0, 그렇지 않은 경우 1을 반환합니다. 이는 이론적으로는 유용하지만, 미분이 불가능하기 때문에 실제로는 잘 사용되지 않습니다.
순서형 문제 (Ranking)
- RankNet Loss: 순서를 예측하는 문제에서 사용되며, 주로 검색 엔진 최적화에 사용됩니다.
- Pairwise Loss: 두 개의 아이템이 주어졌을 때, 어느 것이 더 높은 순위인지를 예측하는 문제에 사용됩니다.
시퀀스 문제 (Sequence)
- Sequence Loss: 시퀀스 데이터를 다룰 때 사용되며, RNN, LSTM, GRU 등에서 활용됩니다.
- CTC (Connectionist Temporal Classification) Loss: 시퀀스 레이블링 문제에서 사용되며, 특히 음성 인식이나 핸드라이팅 인식에 사용됩니다.
생성 모델 (Generative Models)
- Generative Adversarial Loss: GANs에서 사용되며, 생성자와 판별자 사이의 손실을 최소화합니다.
- Kullback-Leibler Divergence: 두 확률 분포의 차이를 측정하는 데 사용됩니다.
기타
- Cosine Similarity Loss: 두 벡터 사이의 코사인 유사도를 최대화하는 방향으로 모델을 학습시킵니다.
- Triplet Margin Loss: 유사한 아이템은 가깝게, 다른 아이템은 멀게 배치하는 것을 목표로 합니다.