본문 바로가기
  • 책상 밖 세상을 경험할 수 있는 Playground를 제공하고, 수동적 학습에서 창조의 삶으로의 전환을 위한 새로운 라이프 스타일을 제시합니다.
카테고리 없음

[2025-1] 조환희 - Flow-based Models

by jubilatee 2025. 2. 15.

1. 사전지식

아래와 같은 식이 있다고 하자.

여기서 a는 scale, b 는 bias 이다.

이떄 역함수를 표현하는 방법은 아래와 같이 된다.

행렬에서도 똑같다.

W는 scale 행렬, B는 bias 행렬이다.

 

y = Wx + B 처럼 벡터 공간(행렬)에서 선형변환(Linear Transformation) Wx과 Bias 행렬 B가 더해지는 변환을 Affine Transformation(아핀변환) 이라고 한다.

 

생성모델을 만들 때 우리는 최대한 특정 y=f(x)와 비슷한 잠재변수 z를 계산해 모델을 만든다. 그럼 아래와 같이 z를 이용해 x와 최대한 닮은 z를 계산할 수 있을 것이다.

Flow based 모델은 변수 x를 최대한 잘 표현할 수 있는 잠재변수 z를 계산하는 z = f(x)를 학습하되, f의 역함수 f-1를 이용해서 x를 계산하는 것이 목표이다.

Change of Variables Theorem (변수 변환)

변수 변환이란 f(x) = x - 1이라는 함수가 있을 때, x 대신에 t(시간)과 같은 새로운 변수를 넣어 x = 2t + 1 일때 f(t) = 2t 와 같은 다른 변수로 바꾸는 것을 변수 변환(Change of Variable)이라고 한다.

 

이를 확률 개념에 적용해보자. Single random variable z~ π(z)에 대해, invertible한 일대일 함수 f를 가정하고, 새로운 random variable x=f(x)를 구성한다. 

이때 확률 x의 확률 분포 p(x)와 z의 분포 π(z)는 다음을 만족한다.

이후 f가 scalar -> scalar transformation인 경우, 다음과 같이 변수를 변환해줄 수 있다.

이를 multivariable로 확장, 즉 함수 f가 vector -> vector transformation인 경우로 확장하면 다음과 같이 변수를 변환한다.

식의 determinant term은 변수 변환을 통해 invertible transformarion f-1을 적용한 후의 distribution π(z)를 normalize해주는 역할을 한다.

 

이를 통해 알지 못하는 확률 분포 p(x)를 z의 probability density function으로 표현해줄 수 있다.

 

Jacobian Matrix

자코비안 행렬, 말은 어려운데 별거 없다. 행렬의 미분 → 도함수의 미분 → 자코비안 행렬이다.

딥러닝 분야에서는 전부 Matrix를 활용한 연산이기 때문에, 단순한 변수가 아닌 행렬을 미분한 것이라 생각하면 된다.

자코비안 행렬은 위의 그림과 같이 정의된다. 행렬이라는 변수안에는 여러 변수(scalar값)이 존재하고 이를 똑같이 미분한다고 생각하면 된다. 이를 모아서 도함수 행렬, 즉 자코비안 행렬이라고 하는 것이다. 또한, 기존 함수의 차원을 N차원이라고 했을때 자코비안 행렬한 경우 N-1차원을 가지고 싿는 것 이 정도면 된다.

 

여기서 x=f(z)라고 하고 f가 invertible하면 다음을 만족한다 (Inverse function theorem). 변환의 자코비안과 역변환의 자코비안은 역행렬 관계를 가진다.

 

이제 이를 분포를 알고있는 z~ π(z)로부터 x의 분포를 구하는 것에 적용해보자. 변수 변환과 자코비안의 성질을 통해 아래와 같은 식을 얻을 수 있다.

 

2. Flow-based Models

Flow-based model의 핵심은 간단한 prior distribution p0(z0) 를 활용하여 복잡한 data distribution p(x)를 표현하는 것이다.

Normalizing flow(NF)

prior distribution z0가 normal distribution을 따른다고 가정해보면 다음과 같다.

(위에서 정리하던 식에서 z가 z_i-1이 되고 x가 z_i가 됐다고 생각하면 보다 쉽다

첫번째 줄에서 두번째 줄로 정리할 때는 자코비안의 역변환 성질을, 두번째 줄에서 세번째 줄로 정리할 때는 det(A-1)=(det A)-1임을 이용했다.

단 NF 방식을 통해 구하려면 아래 두가지 조건이 충족되어야 한다.

1. f가 invertible해야한다.

2. f에 대한 자코비안행렬식이 계산하기 쉬워야 한다. (복잡하면 학습하기 어렵기 때문)

 

Flow-based model은 invertible transformation에 어떤 함수를 사용하는지에 따라 나뉜다.

여러 예시에 대한 자세한 설명은 아래 링크를 통해 확인할 수 있다.

https://jjuke-brain.tistory.com/entry/Flow-based-Models-Normalizing-Flow-2