아래 두 포스팅을 통해 GAN이 무엇인지 알아 보았다.
지금까지 과정을 지켜봤다면 의문점이 있을것이다. GAN은 여타 다른 CNN, LSTM, Transformer 등과 다르게 loss 값이 0에 수렴하는것이 '안좋게' 받아들여진다. 대충 '극단으로 편향되지 않고' 적절한 균형을 유지하는 것이 좋다는 것은 어렷품이 알고 있을 것이다. 하지만 그래도 최적 값이 존재할 텐데 그게 어떤 값일까?
GAN 에서 각종 손실함수의 최적값을 알아보자
참고로 '최적 손실값' 에 도달했다고 올바르게 학습되었다는 의미는 아니므로, 유의 바란다.
1. MSE
MSE 는 '평균제곱오차' 라는 의미이다. 이 평균제곱오차의 손실 최적값은 간단하다. 출력 노드에서 나온 값과 원하는 목푯값 사이의 차이를 계산 하면 된다. 이 값은 양의 값일수도, 음의 값일수도 있다. 하지만 이름과 같이 무조건 '제곱' 을 취하기에 최종적인 값은 항상 양의 값이 될 것이다.
이 손실 값은 아래와 같이 수학적으로 표기할 수 있다.
- $n$ - 출력 레이어 각 노드
- $o$ - 출력
- $t$ - 목푯값
$$ loss = {1 \over n } \sum_n (t-0)^{2} $$
여기서 판별기는 노드가 하나이기에 아래와 같이 식을 단순화 시킬 수 있다.
$$ loss = (t-0)^{2} $$
판별기가 생성된 데이터와 진짜 데이터 간의 차이를 파악할 수 있다면 결과가 1, 0 이 나오지 않을것이다. 1이라면 입력된 모든 데이터가 실제(real) 데이터라고 판단하는 것이고, 0 이라면 모든 데이터가 생성기가 생성한 거짓(fake) 데이터라고 판단하는 것이기 때문이다. 결국 잘 훈련된 판별기는 진짜로 잘 만들어진 가짜 데이터만 오판해야 한다.
이러한 근거를 토대로 보면 판별기의 결과는 0.5 가 나오는것이 바람직 한데, 이는 진짜인지 가짜인지 잘 파악할 수 없다는 의미이다. 즉, 출력이 0.5이고 목표가 1이라면 오차는 0.5 일 것이다. 만대로 목표가 0 라면 오차는 -0.5 일 것이다. 두 오차를 모두 제곱하면 결과는 0.25 이다.
결론적으로 GAN에서 MSE를 손실함수로 쓸 때의 가장 최적인 값은 0.25 이다.
2. BCE
BCE는 '이진 교차 엔트로피' 손실 이라는 의미이다
엔트로피는 불확실성을 설명하는 수학적 용어로서 양면 다 앞인 동전이 있다면 던져서 앞면이 나올 확률은 100% 이고, 뒷면이 나올 확률은 0% 일 것이다. 즉, 확실한 예측이 가능하면 = '불확실성이 0이면 → 엔트로피 역시 0' 라고 할 수 있다.
하지만 일반적인 동전은 던졌을 때 앞면이나 뒷면이나 모두 '같은 확률' 로 나오기에 이러한 경우 불확실성은 '최대화' 되고, 엔트로피 역시 최대화 된다. 이를 수학식으로 나타내면 아래와 같다.
$$ Entropy = \sum -p \cdot ln(p) $$
$p$는 결과에 대한 확률
결론적으로 엔트로피는 모든 가능한 결과의 합이다
위 식을 토대로 만약 동전이 '앞면만' 나올 때 어떻게 작동하는지 계산해 본다면 아래와 같다.
$$
\begin{flalign}
Entropy &= \sum -p \cdot ln(p)\\
&= -1 \cdot ln(1) - 0 \cdot ln(0) \\
&= 0
\end{flalign}
$$
이는 앞면과 뒷면에 대해 계산한 결과로서, 앞면이 나올 확률은 1, 뒷면이 나올 확률은 0 이기에 나온 결과이다.($ln(1) = 0$, $0*ln(0) = 0$)
즉, 동전이 공정하다면 교차 엔트로피가 낮은 상태이고, 공정하지 않다면 (불확실성이 높다면) 교차 엔트로피가 높은 상태이다. 결론적으로 교차 엔트로피는 두 확률분포의 차이라고 생각할 수 있으며 두 분포 차이가 없는 만큼 교차 엔트로피 역시 낮아진다. (정확히 일치한다면 교차 엔트로피는 0)
이를 신경망에 적용해 본다면, 출력결과가 확률 분포이고, 실제 결과도 확률 분포로 가정해 보자. 이 두 분포가 다르다면 = 교차 엔트로피는 높고(정답과 크게 다르다면), 둘이 비슷하다면 = 교차 엔트로피는 낮은 것(정답에 가깝다면)이다. 이는 우리가 생각하는 손실함수와 일치한다!
따라서 아래와 같이 정의할 수 있다.
- $x$ - 분류를 통해서 관측된 확률값
- $y$ - 해당 분류에서의 실제 확률
$$ Cross\,Entropy - \sum -y \cdot ln(x) $$
이러한 교차 엔트로피를 사용하는 이유는, '잘못된 답에 큰 피드백을 주기 때문' 이다. MSE 손실과는 다르게 교차 엔트로피는 log(ln) 계산이 포함되어 있어 1.0 보다 훨씬 커질 수 있다. 때문에 이격이 크다면 손실 함수가 가팔라지기에 이는 신경망에 오답에 더해 더 크게 피드백을 줄 수 있는 것이다.
교차 엔트로피 중 '이진 교차 엔트로피' 는 이진 분류 문제에서 사용하는 교차 엔트로피이다. 판별기 중에서 참을 1.0, 거짓을 0.0 으로 표시하는 신경망이 대표적으로 이러한 손실함수를 쓴다고 볼 수 있다.
결론적으로 판별기는 진짜와 가짜를 구별해내는 데 무차별해야 하므로 결과는 항상 0.5 여야 한다. 어떤 값들이 1.0 이라면 다른 값들은 0.0 이여야 한다는 의미이다. 이를 토대로 계산하면 아래와 같다.
$x = 0.5$, $y=1.0$ 일때
$$
\begin{flalign}
Cross\,Entropy &= \sum -y \cdot ln(x)\\
&= -(1.0) \cdot ln(0.5) - (0.0) \cdot ln(1-0.5) \\
&= 0.693
\end{flalign}
$$
$x=0.5$,$y=0.0$ 일때
$$
\begin{flalign}
Cross\,Entropy &= \sum -y \cdot ln(x)\\
&= -(0.0) \cdot ln(0.5) - (1.0) \cdot ln(1-0.5) \\
&= 0.693
\end{flalign}
$$
결론적으로, `BCELoss()`를 사용할 때 이상적인 loss 값은 0.693 이다.
'Artificial Intelligence > Basic' 카테고리의 다른 글
batch_size 란? (0) | 2024.03.05 |
---|---|
인공지능에서 Parameter 란? (0) | 2024.01.27 |
CGAN(Conditional GAN) (0) | 2023.06.18 |
GAN이란? (이미지 숫자 생성) (0) | 2023.06.07 |
벨만 방정식(Bellman Equation) (0) | 2023.05.29 |