GAN이란?
- 두 신경망의 게임 : generator는 가짜 데이터를 만들고, discriminator는 진짜/가짜를 구별한다.
- 핵심 아이디어 : 서로 경쟁시키면( 적대적 학습 ), generator가 점점 "진짜 같은" 샘플을 만들어 낸다.
- 게임 이론 렌즈
- 플레이어 : generator는 "속이는 사람" , discriminator는 "판별하는 사람"
- 목표 : generator는 최대한 진짜처럼 보이는 샘플을 생성 , discriminator는 샘플을 정확히 구별하기.
- 게임 끝 : discriminator가 진짜와 가짜를 구분할 수 없을때이다.
- 확률 분포 렌즈
- 데이터 셋은 어떠한 "모르는 분포"에서 왔다고 본다.
- generator는 잡음을 받아 샘플를 뽑아내는데, 이 샘플들이 이루는 모형 분포가 "모르는 분포"와 같아지도록 훈련.
- discriminator는 한장의 이미지를 받으면 "모르는 분포"와 비슷한 점수를 내고, 피드백을 통해서 generator가 분포 간격을 줄여가도록 돕는다.
- generator 생성기
- 입력: 보통은 노이즈 벡터z( ex. 표준정규 128차원). 조건부라면 z+라벨/텍스트 임베딩 등.
- 출력: 데이터와 같은 형태 ( 이미지라면 픽셀 텐서 ).
- 역할: "잠재공간 --> 데이터 공간"으로의 변환기.
- 잠재공간의 한 점을 움직이면, 생성 이미지의 의미있는 변화가 연속적으로 일어나도록 학습된다.
- 이로 인해 interpolation이 자연스러운 변화를 보인다.
- 잠재공간의 한 점을 움직이면, 생성 이미지의 의미있는 변화가 연속적으로 일어나도록 학습된다.
- discriminator 판별기
- 입력: "진짜 데이터" or "generator의 가짜 데이터"
- 출력: "얼마나 진짜처럼 보이는지"를 나타내는 점수. ( 0~1 확률처럼 쓰이거나 , 실수 스칼라 점수)
- 역할: 단순히 분류기를 넘어서 품질 평가자/비평가.
- discriminator가 잘 훈련될수록 "가짜에서 진짜로 가까워지는 방향"으로 "유용한 기울기"를 generator에 제공.
- 핵심 : generator는 진짜 데이터를 직접 보지 않는다. 오직 discrminator의 기울기만 보고 방향을 잡는다. 그래서 discriminator의 품질과 균형이 결정적이다.
- 어떻게 학습이 굴러가나?
- 1. 실제 배치를 뽑아서, discriminator에 넣어서, "진짜 점수"가 커지게 discriminator를 업데이트.
- 2. 노이즈를 뽑아서 generator가 가짜를 만들고, 해당되는 가짜를 discriminator에 넣어서 "가짜 점수"가 낮아지도록 discriminator를 업데이트
- 3. 다시 같은 가짜를 두고, generator의 관점에서 "discriminator가 가짜를 진짜로 보도록" generator를 업데이트.( discriminator를 속이는 방향으로 generator의 파라미터 조정)
- 4. 1~3을 반복. 시간이 갈수록 discriminator를 점점 더 까다로워지며, generator는 그 기준을 통과하기 위해서 더 진짜 같은 분포를 학습한다.
- ==> 위의 과정은 "adversarial"이어서 목표가 고정돼 있지 않다는 점이 중요하다... discriminator가 변하면 generator가 최적화해야 하는 지형 자체가 변한다.
- 사실감 precision : 개별 샘플이 얼마나 고품질이며 자연스러운가
- 다양성 recall : 데이터가 가진 여러모드(종류/스타일/각도/배경)를 얼마나 폭넓게 커버하는가
- GAN은 종종 사실감은 높고, 다양성을 떨어지는 방향으로 치우치기 쉽다. ( =모드붕괴)
- ex. 고양이 데이터에 다양한 품종과 각도가 존재한다. 하지만 generator가 특정한 1~2스타일의 고양이만 아주 잘 만드는 상황
- 모드 붕괴는 왜 생기나?
- 속이기 쉬운 모드에 집착 : 어떤 특정 모양은 discriminator를 속이기 쉬운 지름길일 수 있다. ==> generator는 해당 지름길에 과도하게 수렴할 유인이 크다.
- 피드백의 국소성 : discriminator가 가르쳐주는 신호는 현재 가짜 근처에서만 유효하다.
- 쌍방 업데이트의 불균형 : discriminator가 너무 강하거나 or 너무 약하면 유익한 신호가 사라진다.
- 목표의 이동 : discriminator가 계속 변하며, "좋은 해법"이 흔들릴 수 있다.
'코딩 및 기타' 카테고리의 다른 글
| pytorch lstm (0) | 2025.09.10 |
|---|---|
| Diffusion Model (1) | 2025.09.09 |
| FLU , FRD , NED (2) | 2025.08.28 |
| MAVLink란? (2) | 2025.08.17 |
| q250 접속 (0) | 2025.08.13 |