본문 바로가기

수학,통계 for AI,DS/확률 및 통계 - [대학원] 전공 수업

[확률/통계] Normalizing Flow

 


1. Motivation 

생성모델에서 역변환이 가능한 함수가 필요하다

  • 하지만 우리가 보통 쓰는 신경망은
    입력 → 출력은 되지만, 출력 → 입력은 안 된다

 

- 기존 생각 : 한번에 복잡한 생성

- Normalizing Flow 

➡️ 복잡한 분포를 한 번에 학습하는 대신 단순한 분포를 여러 단계의 invertible transformation으로 점진적으로 변형하는 생성모델이다.

2. 확률변수 변환의 수학적 기초 

 

  • 어떤 확률변수를 함수로 변환하면 그에 따라 확률분포도 같이 변한다
  • Normalizing Flow의 수학적 출발점
    ➡️ 분포를 바꾼다 = 확률변수를 변환한다 (이때 역함수 존재 필수(ex. 함수 f(x)가 monotone일 때 역함수 존재))
  • 변환된 분포의 확률은 함수의 기울기 및 변형 정도에 의해 조정된다. (constant mass = 1이기 때문)
  • 즉, 확률은 “늘어나거나 줄어든 공간”을 고려해야 함 ➡️ 그래서 Jacobian determinant가 등장
  • Flow에서는 이 값을 반드시 계산 가능해야 함
[보충 설명 : Jacobian determinant란?]
Jacobian determinant란 부피 확대 비율 및 밀도 희석 비율로 1차원에서는 이게 기울기가 된다. 즉, y=2x에서 2를 뜻한다. 아래와 같이 상술될 수 있다.

 

  • Normalizing Flow의 기본 전략:
    • simple distribution → data distribution
    • 단, 신경망은 invertible해야 함
  • 다차원 확률변수 변환 : Jacobian Matrix (차원이 커지면 기울기가 아니라 행렬(jacobian)으로 변환량을 계산)
    • 실제 데이터는 고차원이므로 Jacobian determinant 계산 가능성이 핵심 제약이 됨

즉, 지금까지의 내용들을 정리하면

Normalizing Flow는
확률변수 변환(Change of Variables)을 통해
단순한 분포를 복잡한 분포로 변환하는 생성모델이며,
이를 위해 invertible 함수가 존재해야 되고, Jacobian determinant 계산이 필수적이다.

 

3. Normalizing Flow의 핵심 아이디어 

 

 

 

 

  • 동일한 차원의 random variable -> 이유 : 변환의 양방향(invertible) 사용
  • 확률 계산이 용이함

 

- 차원이 같아야 하는 이유 :

 

 

Normalizing Flow는 동일한 차원의 확률변수 공간에서
invertible transformation을 사용하여
확률밀도함수를 정확히 계산할 수 있는 생성모델이다.

 

 

- 그래서 단순하게 생성만 하고 끝나는게 아니고 이상탐지, 모델 성능 비교, 샘플이 얼마나 그럴듯한지 판단할 때 등에도 사용 가능 

 

4. 5. 연속 변환 구조 (Flow) 와 Likelihood 기반 학습 

Flow of Transformations

 

  • 이 때, Normalizing Flow에서 'normalizing'이란 Jacobian determinant를 통해 확률밀도함수가 항상 적분 1을 유지하도록 만드는 것을 의미한다.
  • 여러 개의 변환을 연속적으로(chaining) 적용
  • 각 변환은 invertible
  • 전체 변환도 invertible

 

- 아직 conditional 생성모델로 확장은 안했지만, 위를 챗지피티 케이스로 align 시켜 예시를 들자면 

 

Maximum Likelihood Estimation

 

Normalizing Flow는 invertible transformation을 사용하므로
데이터의 likelihood를 정확히 계산할 수 있고,
이를 최대화하는 Maximum Likelihood Estimation으로 학습된다.

 

즉, 챗지피티와 같은 언어모델 학습을 위키피디아로 한다고 가정한다면,

 

- 근데 계산 시 pdata는 활용하지 않음.

 

Normalizing Flow에서는
여러 개의 invertible transformation을 연결하여
likelihood를 단계별로 분해해 계산한다.
이를 위해 각 변환은 Jacobian determinant 계산이 쉬운 구조로 설계되며,
대표적으로 triangular Jacobian이 사용된다.

6. 실제 Flow 모델 예시 

 

Planar Flow, Radial Flow, Sylvester Flow는
Normalizing Flow에서 사용되는 대표적인 invertible transformation 예시로,
분포를 점진적으로 변형하면서도
Jacobian determinant를 계산할 수 있도록 설계된 모델들이다

 

7. 확장 구조 

Normalizing Flow에서는 일반적인 neural network를 그대로 쓸 수 없고, invertibility를 보장하도록 구조를 제한해야 한다.

 

그래서 일반적인 형태의 flow model은 아래와 같다.

Normalizing Flow에서는 likelihood 계산을 위해
변환이 invertible해야 하며,
이를 보장하기 위해 monotonicity나 convexity와 같은 제약을 사용한다.