Загружаем каталог…
Загружаем каталог…
velog
오늘의 핵심 오늘은 단순히 개념을 외우는 수준보다, 왜 이런 식이 나오는지 수식적으로 연결하는 것 에 집중했다. 흐름은 크게 다음과 같다. BCE → Mini-batch Gradient → 분산 → Xavier Initialization → Entropy → Cross Entropy → KL Divergence → Mutual Information 1. Binary Cross Entropy는 무엇을 보는가? 📌 Binary Classification의 출력 Binary Classification에서 실제 정답은 보통 $$ y \in {0,1} $$ 이다. 예를 들어 스팸 분류라면: $y=1$ : 스팸 $y=0$ : 스팸 아님 하지만 모델은 바로 0 또는 1 을 출력하는 것이 아니라, 보통 $$ p = P(y=1\mid x) $$ 즉 입력 $x$가 class 1일 확률 을 예측한다. 예를 들어: p = 0.8 이면 모델은 해당 입력이 class 1일 확률을 80%로 보고 있다는 뜻이다. 최종 class는 필요하다면 threshold를 적용해 결정한다. p >= 0.5 → class 1 p < 0.5 → class 0 📌 BCE의 목적 Binary Cross Entropy는 실제 정답 $y\in{0,1}$과 모델이 예측한 확률 $p\in[0,1]$이 얼마나 잘 맞는지 를 측정하는 Loss다. 수식은 다음과 같다. $$ L = -\left[ y\log p + (1-y)\log(1-p) \right] $$ 여기서: $y$ : 실제 정답 $p$ : 모델이 예측한 class 1의 확률 정답이 1이면: $$ L=-\log p $$ 정답이 0이면: $$ L=-\log(1-p) $$ 따라서 모델이 정답 클래스에 높은 확률을 줄수록 Loss가 작아진다. 2. Cross Entropy에서 BCE로 내려오기 일반적인 Cross Entropy는 $$ L = -\sum_{k=1}^{K} y_k \log p_k $$ 이다. Binary Classification은 class가 두 개뿐이므로 $K=2$라고 생각하면 된다. class 1의 확률을 $p$라고 하면 class 0의 확률은 $$ 1-p $$ 이고, 정답도 하나의 binary 값 $y$로 표현하면 $$ y_1=y,\qquad y_0=1-y $$ 가 된다. 따라서 그대로 대입하면 $$ L = -\left[ y\log p + (1-y)\log(1-p) \right] $$ 즉 BCE가 나온다. 💡 BCE는 Cross Entropy를 Binary Classification에 맞게 표현한 형태라고 볼 수 있다. 3. 왜 마지막 Activation으로 Sigmoid를 사용하는가? 📌 Linear 출력은 확률이 아니다 마지막 Linear Layer는 보통 $$ z = Wx+b $$ 를 출력한다. 이때 $z$의 범위는 $$ -\infty < z < \infty $$ 이므로 그대로는 확률로 해석할 수 없다. Sigmoid는 $$ \sigma(z) = \frac{1}{1+e^{-z}} $$ 이고 출력 범위는 $$ 0 < \sigma(z) < 1 $$ 이다. 즉: Linear ↓ logit z ↓ Sigmoid ↓ class 1일 확률 p ↓ BCELoss 의 흐름이 만들어진다. 📌 왜 ReLU는 마지막 Activation으로 부적절한가? ReLU는 $$ ReLU(z)=\max(0,z) $$ 이고 출력 범위는 $$ [0,\infty) $$ 이다. 하지만 BCE에서 $p$는 확률이므로 $$ 0 \le p \le 1 $$ 이어야 한다. 따라서 2 , 10 같은 값도 출력할 수 있는 ReLU는 BCE 앞의 최종 Activation으로 부적절하다. 🎯 BCE가 원하는 것은 class 1의 확률이고, ReLU는 확률 범위를 보장하지 않는다. 4. BCELoss와 BCEWithLogitsLoss 📌 BCELoss BCELoss 는 이미 확률로 변환된 값을 입력으로 받는다. model = nn.Sequential( nn.Linear(..., 1), nn.Sigmoid() ) criterion = nn.BCELoss() 즉: logit ↓ Sigmoid ↓ probability ↓ BCELoss 이다. 📌 BCEWithLogitsLoss PyTorch에서는 보통 다음 형태를 더 많이 사용한다. model = nn.Linear(..., 1) criterion = nn.BCEWithLogitsLoss() 이 경우 마지막에 Sigmoid() 를 직접 붙이지 않는다. BCEWithLogitsLoss 가 내부적으로 Sigmoid + BCE를 수치적으로 더 안정적인 방식으로 계산 하기 때문이다. 🚨 BCEWithLogitsLoss 를 사용할 때 마지막에 Sigmoid를 중복해서 넣으면 안 된다. 5. Mini-batch Gradient Descent 📌 GD와 SGD 복습 전체 데이터가 $N$개라고 하자. 전체 Loss는 $$ L(\theta) = \frac{1}{N} \sum_{i=1}^{N} L_i(\theta) $$ 이다. 여기서: $\theta$ : 모델의 모든 Parameter $L_i$ : i번째 데이터의 Loss Batch Gradient Descent는 전체 데이터를 사용한다. $$ g = \nabla_\theta L = \frac{1}{N} \sum_{i=1}^{N} \nabla_\theta L_i $$ Pure SGD는 데이터 하나만 사용한다. $$ g_i = \nabla_\theta L_i $$ 📌 Mini-batch는 둘의 중간 Batch Size가 $B$라면 $$ L_B = \frac{1}{B} \sum_{i\in \mathcal{B}} L_i $$ 를 계산한다. 그리고 $$ g_B = \nabla_\theta L_B $$ 를 사용한다. 미분은 선형이므로 $$ \nabla_\theta \left( \frac{1}{B} \sum_{i\in\mathcal{B}}L_i \right) = \frac{1}{B} \sum_{i\in\mathcal{B}} \nabla_\theta L_i $$ 이다. 각 데이터의 Gradient를 직접 하나씩 구해서 평균내는 것과, 평균 Loss를 한 번 Backward 하는 것은 같은 결과를 준다. 6. PyTorch에서는 평균 Loss를 통해 Gradient 평균이 만들어진다 PyTorch의 많은 Loss 함수는 기본적으로 reduction="mean" 을 사용한다. 예를 들어: criterion = nn.MSELoss() loss = criterion(y_hat, y) loss.backward() 이면: 각 데이터 Loss 계산 ↓ Batch 평균 Loss ↓ Backward ↓ 결과적으로 Batch Gradient의 평균 이 만들어진다. 7. Batch Size와 Gradient Variance Mini-batch Gradient를 $$ g_B = \frac{1}{B} \sum_{i=1}^{B}g_i $$ 라고 하자. 각 데이터의 Gradient가 서로 어느 정도 독립이라고 단순하게 가정하면 $$ Var(g_B) \approx \frac{Var(g_i)}{B} $$ 이므로 $$ Var(g_B)\propto\frac{1}{B} $$ 이다. 즉: Batch Size ↑ ↓ 더 많은 Gradient를 평균 ↓ 개별 데이터 때문에 튀는 정도 감소 ↓ Gradient Variance ↓ 💡 여기서 분산은 Mini-batch를 다르게 뽑았을 때 Gradient 추정값이 얼마나 흔들리는가 를 의미한다. 8. Mini-batch의 분산과 초기화의 분산은 다른 이야기다 Mini-batch에서는 $$ g_B = \frac{g_1+\cdots+g_B}{B} $$ 처럼 평균 을 낸다. 반면 초기화에서는 다음 Layer의 Pre-activation이 $$ z = w_1x_1+w_2x_2+\cdots+w_nx_n $$ 처럼 여러 값을 합 한다. 여기서: $x_i$ : 이전 Layer의 Activation $w_i$ : Weight $n$ : Input Feature 수, 즉 fan-in $z$ : Activation Function을 통과하기 전 값 9. 분산(Variance)이란? 분산은 값 자체가 크냐 작냐가 아니라 값들이 자신의 평균 주변에서 얼마나 퍼져 있는가 를 나타낸다. $$ Var(X) = E[(X-E[X])^2] $$ 예를 들어: [1000, 1000, 1000] 은 값은 크지만 모두 같으므로 분산은 0이다. 반면: [-1000, 0, 1000] 은 평균 주변에서 크게 퍼져 있으므로 분산이 크다. 📌 Scale과 분산 중요한 성질은 $$ Var(aX) = a^2Var(X) $$ 이다. 즉 Weight 전체의 Scale을 줄이면 Weight 분포의 분산도 자연스럽게 줄어든다. 10. 초기화에서 왜 fan-in이 커지면 Weight를 작게 해야 하는가? 다음 식을 생각하자. $$ z = \sum_{i=1}^{n}w_ix_i $$ 일반적으로는 $$ Var(z) = \sum_iVar(w_ix_i) + 2\sum_{i<j}Cov(w_ix_i,w_jx_j) $$ 이다. 초기화 이론에서는 단순화를 위해 다음과 같은 가정을 둔다. Weight들이 서로 독립 입력 Activation들도 대략 비상관 평균이 0에 가까움 $w_i$와 $x_i$가 독립 그러면 Covariance 항을 무시할 수 있고 $$ Var(z) \approx \sum_iVar(w_ix_i) $$ 가 된다. 또한 $$ Var(w_ix_i) \approx Var(w_i)Var(x_i) $$ 라고 두면 $$ \boxed{ Var(z) \approx nVar(w)Var(x) } $$ 가 된다. 즉: fan-in n ↑ ↓ 더 많은 w_i x_i 항의 분산이 더해짐 ↓ Var(z) ↑ 가능 ↓ Weight Scale / Var(w)를 줄일 필요가 있음 11. 좋은 초기화의 핵심 좋은 초기화에는 두 가지 목표가 있다. 📌 1. Symmetry Breaking 모든 Weight가 동일하면 뉴런들이 같은 Feature를 학습할 수 있다. 따라서 Weight들이 서로 다른 값을 가져야 한다. 📌 2. 적절한 Scale Weight가 너무 크면 Activation과 Gradient가 불안정해질 수 있고, 너무 작으면 Signal이 지나치게 작아질 수 있다. 🎯 좋은 초기화 = 서로 다른 Weight + 적절한 Weight Scale 12. Xavier Initialization 📌 Forward 관점 Forward에서 $$ Var(z) \approx fan_{in}Var(w)Var(x) $$ 이다. Layer를 지나도 Activation의 분산을 대략 유지하고 싶다면 $$ Var(z) \approx Var(x) $$ 를 목표로 둘 수 있다. 따라서 $$ fan_{in}Var(w)Var(x) \approx Var(x) $$ 이고 $Var(x)\neq0$라면 $$ Var(w) \approx \frac{1}{fan_{in}} $$ 이 된다. 📌 Backward 관점 Backward에서는 대략 $$ Var(\delta_{prev}) \approx fan_{out}Var(w)Var(\delta_{next}) $$ 라고 볼 수 있다. Gradient의 분산을 유지하려면 $$ Var(w) \approx \frac{1}{fan_{out}} $$ 이 필요하다. Forward와 Backward의 요구가 다를 수 있으므로 Xavier는 둘을 절충해 $$ \boxed{ Var(w) = \frac{2}{fan_{in}+fan_{out}} } $$ 를 사용한다. 13. Xavier Normal Xavier Normal은 $$ w \sim \mathcal{N} \left( 0, \frac{2}{fan_{in}+fan_{out}} \right) $$ 이다. 표준편차는 $$ std = \sqrt{ \frac{2}{fan_{in}+fan_{out}} } $$ 이다. PyTorch: nn.init.xavier_normal_(model.weight) 14. Xavier Uniform Uniform Distribution에서 $$ w\sim U(-a,a) $$ 이면 $$ Var(w)=\frac{a^2}{3} $$ 이다. Xavier의 목표 분산과 맞추면 $$ \frac{a^2}{3} = \frac{2}{fan_{in}+fan_{out}} $$ 이므로 $$ a = \sqrt{ \frac{6}{fan_{in}+fan_{out}} } $$ 이다. 즉 $$ w \sim U\left( -\sqrt{\frac{6}{fan_{in}+fan_{out}}}, +\sqrt{\frac{6}{fan_{in}+fan_{out}}} \right) $$ 이다. PyTorch: nn.init.xavier_uniform_(model.weight) 15. Xavier는 학습 내내 분산을 유지하는 방법인가? 아니다. Xavier는 학습 시작 시 Activation과 Gradient가 너무 커지거나 작아지지 않도록 안정적인 초기 조건을 만들어주는 초기화 방법 이다. 학습이 시작되면 $$ W \leftarrow W - \eta\nabla_WL $$ 에 의해 Weight가 계속 바뀐다. 따라서 Xavier가 처음 설정한 분산이 학습 내내 유지된다는 보장은 없다. 또 Xavier의 유도에는 독립성, 평균 0, 비슷한 분산 등의 가정이 들어가므로 실제 네트워크에서 정확히 분산이 보존되는 것도 아니다. 💡 Xavier의 목적은 학습 가능한 좋은 출발점 을 만드는 것이다. 16. Entropy — 정보 하나의 정보량 어떤 사건 $x$가 발생할 확률이 $p(x)$라고 하자. 그 사건의 정보량(Self-information)은 $$ I(x) = -\log_2p(x) $$ 로 정의한다. 확률이 높은 사건은 자주 발생하므로 정보량이 작고, 확률이 낮은 사건은 드물기 때문에 정보량이 크다. 예를 들어: $$ p(x)=\frac12 $$ 이면 $$ I(x) = -\log_2\frac12 = 1\text{ bit} $$ 이다. 또 $$ p(x)=\frac18 $$ 이면 $$ I(x) = 3\text{ bits} $$ 이다. 17. 왜 로그 밑이 2인가? Binary Code 관점에서 정보를 표현한다면 밑이 2인 로그를 사용한다. $$ I(x) = -\log_2p(x) $$ 이 경우 단위는 bit이다. 로그 밑을 $e$로 사용하면 단위는 nat이다. 💡 로그 밑이 2인 이유는 정보가 반드시 이진이라서가 아니라, 이진 부호화 관점에서 정보량의 단위를 bit로 표현하기 위해서 다. 18. Entropy Entropy는 각 사건의 정보량을 확률적으로 평균낸 값이다. $$ \boxed{ H(X) = -\sum_xp(x)\log_2p(x) } $$ 또는 기대값으로 $$ H(X) = E_{x\sim P} [-\log_2p(x)] $$ 라고 쓸 수 있다. 즉: Entropy는 실제 확률분포 $P$를 알고 있을 때, 그 분포에서 발생하는 데이터를 표현하는 데 필요한 평균 정보량이다. 정보이론적으로는 긴 symbol sequence를 이상적으로 부호화할 때 얻을 수 있는 최적 평균 부호 길이의 이론적 하한과 연결되는 값 이다. 🚨 Entropy와 정확히 같은 길이의 단일 symbol code가 항상 존재한다는 뜻은 아니다. 긴 sequence를 효율적으로 부호화할수록 평균 code length를 Entropy에 가깝게 만들 수 있다. 19. Cross Entropy 실제 데이터 분포를 $P$라고 하고, 우리가 모델링한 예측 분포를 $Q$라고 하자. Cross Entropy는 $$ \boxed{ H(P,Q) = -\sum_xp(x)\log_2q(x) } $$ 또는 $$ H(P,Q) = E_{x\sim P} [-\log_2q(x)] $$ 이다. 중요한 점은: 실제 데이터는 $P$에서 발생 정보량 계산에는 $Q$를 사용 한다는 것이다. 즉: 실제 데이터가 $P$를 따르는데, 우리가 $Q$라는 확률 모델을 사용해 데이터를 표현할 때 필요한 기대 정보량 이라고 볼 수 있다. 20. Entropy와 Cross Entropy의 차이 Entropy: $$ H(P) = -\sum_xp(x)\log_2p(x) $$ Cross Entropy: $$ H(P,Q) = -\sum_xp(x)\log_2q(x) $$ 즉: Entropy : 실제 분포 P를 사용 Cross Entropy : 실제 데이터는 P지만 예측 분포 Q를 사용 모델이 실제 분포를 정확히 맞히면 $$ Q=P $$ 이므로 $$ H(P,Q)=H(P) $$ 가 된다. 21. KL Divergence Cross Entropy와 Entropy의 차이가 KL Divergence다. $$ \boxed{ D_{KL}(P\parallel Q) = H(P,Q)-H(P) } $$ 이를 풀어쓰면 $$ D_{KL}(P\parallel Q) = \sum_x p(x) \log_2 \frac{p(x)}{q(x)} $$ 이다. 📌 의미 Entropy $H(P)$는 실제 분포를 알고 있을 때의 최적 기대 정보량이고, Cross Entropy $H(P,Q)$는 $Q$를 사용했을 때의 기대 정보량이다. 따라서 $$ H(P,Q)-H(P) $$ 는 잘못되거나 불완전한 분포 $Q$를 사용해서 생기는 추가적인 기대 정보 비용 으로 해석할 수 있다. 즉: 최적 기대 비용 H(P) + 분포를 잘못 가정해서 생긴 추가 비용 D_KL(P||Q) = 실제 기대 비용 H(P,Q) 이다. 📌 중요한 성질 $$ D_{KL}(P\parallel Q)\ge0 $$ 이고, 두 분포가 같으면 $$ D_{KL}(P\parallel Q)=0 $$ 이다. 하지만 일반적인 거리함수와 달리 $$ D_{KL}(P\parallel Q) \neq D_{KL}(Q\parallel P) $$ 일 수 있다. 즉 KL Divergence는 대칭적이지 않다. 22. Cross Entropy Loss와 KL Divergence의 관계 실제 데이터 분포 $P$가 고정되어 있다면 $$ H(P) $$ 는 모델 Parameter와 무관한 상수다. 그리고 $$ H(P,Q) = H(P) + D_{KL}(P\parallel Q) $$ 이므로 Cross Entropy를 최소화하는 것은 결국 $$ D_{KL}(P\parallel Q) $$ 를 최소화하는 것과 같다. 즉: Cross Entropy Loss를 줄인다는 것은 모델의 예측 분포 $Q$를 실제 데이터 분포 $P$에 가깝게 만드는 것이라고 볼 수 있다. 23. Mutual Information 이제 KL Divergence를 이용해 두 변수 $X$, $Y$가 얼마나 서로 의존하는지를 측정할 수 있다. 두 변수가 독립이라면 $$ P(X,Y) = P(X)P(Y) $$ 이다. 따라서 다음 두 분포를 비교하면 된다. 실제 Joint Distribution: $$ P_{XY}(x,y) $$ 독립이라고 가정했을 때의 분포: $$ P_X(x)P_Y(y) $$ 이 둘의 차이를 KL Divergence로 측정한 것이 Mutual Information이다. $$ \boxed{ I(X;Y) = D_{KL} \left( P_{XY} \parallel P_XP_Y \right) } $$ 24. Mutual Information의 수식 풀어쓰면 $$ \boxed{ I(X;Y) = \sum_{x,y} p(x,y) \log \frac{p(x,y)}{p(x)p(y)} } $$ 이다. 📌 독립이면? 독립이라면 $$ p(x,y)=p(x)p(y) $$ 이므로 $$ \frac{p(x,y)}{p(x)p(y)}=1 $$ 이고 $$ \log1=0 $$ 이다. 따라서 $$ I(X;Y)=0 $$ 이다. 즉: Mutual Information이 0이면 두 변수는 독립이다. 📌 의존성이 강하면? $X$를 알았을 때 $Y$에 대한 불확실성이 크게 줄어든다면 Mutual Information이 커진다. 따라서: Mutual Information은 $X$와 $Y$가 서로 공유하는 정보의 양 이라고 해석할 수 있다. 25. Mutual Information과 Entropy의 관계 Mutual Information은 다음과 같이도 쓸 수 있다. $$ \boxed{ I(X;Y) = H(X)+H(Y)-H(X,Y) } $$ 또는 $$ \boxed{ I(X;Y) = H(X)-H(X\mid Y) } $$ 이며 $$ I(X;Y) = H(Y)-H(Y\mid X) $$ 이기도 하다. 여기서 $H(X)$는 원래 $X$에 대한 불확실성이고,
То, что RADAR обнаружил и классифицировал для этой возможности. Это опубликованный источником текст, а не подтверждение, что предложение ещё действует.
TIL — BCE, Mini-batch Gradient, Xavier Initialization, Entropy·KL Divergence·Mutual Information. 오늘의 핵심 오늘은 단순히 개념을 외우는 수준보다, 왜 이런 식이 나오는지 수식적으로 연결하는 것 에 집중했다. 흐름은 크게 다음과 같다. BCE → Mini-batch Gradient → 분산 → Xavier Initialization → Entropy → Cross Entropy → KL Divergence → Mutual Information 1. Binary Cross Entropy는 무엇을 보는가? 📌 Binary Classification의 출력 Binary Classification에서 실제 정답은 보통 $$ y \in…
Открыть источник