๐Ÿ“Œ ๋ชฉ์ฐจ

1. Normalizing Flow
2. RealNVP
3. GLOW  &  FFJORD
4. ์š”์•ฝ

 

๐Ÿง  preview: 

์•ž์„œ ์„ค๋ช…ํ•œ VAE, GAN, AR๋ชจ๋ธ์€ ๋ถ„ํฌ p(x)๋ชจ๋ธ๋ง๋ฌธ์ œํ•ด๊ฒฐ์„ ์œ„ํ•ด
Sampling๊ฐ€๋Šฅํ•œ latent variable์ด๋‚˜ (=VAE Decoder, GAN Generator)
์ด์ „ pixel๊ฐ’์— ๋Œ€ํ•œ ํ•จ์ˆ˜๋กœ ๋ถ„ํฌ๋ฅผ ๋ชจ๋ธ๋ง(=AR)ํ•œ๋‹ค.

Normalizing Flow์™€์˜ ๊ณตํ†ต์ :
โˆ™ AR์ฒ˜๋Ÿผ ๋‹ค๋ฃจ๊ธฐ ์‰ฝ๊ณ  ๋ช…์‹œ์ ์ธ data์ƒ์„ฑ๋ถ„ํฌ p(x)๋ฅผ ๋ชจ๋ธ๋ง
โˆ™ VAE์ฒ˜๋Ÿผ data๋ฅผ Gaussian๋ถ„ํฌ์ฒ˜๋Ÿผ ๊ฐ„๋‹จํ•œ ๋ถ„ํฌ์— mapping

Normalizing Flow์˜ ๋‹ค๋ฅธ์ :
โˆ™ mappingํ•จ์ˆ˜์˜ ํ˜•ํƒœ์— ์ œ์•ฝ์„ ๋‘”๋‹ค.
(= ์ด ํ•จ์ˆ˜๋Š” ๋ฐ˜์ „๊ฐ€๋Šฅํ•ด์•ผํ•˜๊ณ , ์ด๋ฅผ ์ด์šฉํ•ด ์ƒˆ data point์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•ด์•ผํ•จ.)

 

 

 

 

 

 

 

 


1. Normalizing Flow

Normalizing Flow๋Š” VAE์™€ ์ƒ๋‹นํžˆ ์œ ์‚ฌํ•˜๋‹ค.

VAE

Encoderํ•™์Šต โ†’ ๋ณต์žกํ•œ ๋ถ„ํฌ์™€ sampling๊ฐ€๋Šฅํ•œ ๊ฐ„๋‹จํ•œ ๋ถ„ํฌ๋ฅผ mapping
โ†’ Decoderํ•™์Šต โ†’ ๋‹จ์ˆœํ•œ๋ถ„ํฌ์—์„œ ๋ณต์žกํ•œ ๋ถ„ํฌ๋กœ mapping
โˆด ๋‹จ์ˆœํ•œ ๋ถ„ํฌ์—์„œ point z๋ฅผ sampling, ํ•™์Šต๋œ ๋ณ€ํ™˜์„ ์ ์šฉ ์‹œ, ์ƒˆ data point๋ฅผ ์–ป์Œ.
์ฆ‰, Decoder๋Š” p(x|z)๋ฅผ ๋ชจ๋ธ๋ง.
Encoder๋Š” p(z|x)์˜ ๊ทผ์‚ฌ์น˜์ธ q(z|x)๋กœ ๋‘˜์€ ์™„์ „ํžˆ ๋‹ค๋ฅธ ์‹ ๊ฒฝ๋ง์ž„.


Normalizing Flows

Decodingํ•จ์ˆ˜ = Encodingํ•จ์ˆ˜์˜ ์—ญํ•จ์ˆ˜ (= ๊ณ„์‚ฐ์ด ์šฉ์ดํ•จ.)
Butโ—๏ธ์‹ ๊ฒฝ๋ง์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฐ˜์ „๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค!
์ด๋ฅผ ์œ„ํ•ด ๋ณ€์ˆ˜๋ณ€ํ™˜์ด๋ผ๋Š” ๊ธฐ๋ฒ•์ด ํ•„์š”ํ•œ ๊ฒƒ.





Change of Variables

๋ณ€์ˆ˜๋ณ€ํ™˜:

px(x)๊ฐ€ 2์ฐจ์› x = (x1, x2) ์ง์‚ฌ๊ฐํ˜• X์œ„์— ์ •์˜๋˜์–ด์žˆ๋‹ค ๊ฐ€์ •ํ•˜์ž.
์ด ํ•จ์ˆ˜๋ฅผ ์ฃผ์–ด์ง„ ๋ถ„ํฌ์˜์—ญ์—์„œ ์ ๋ถ„ํ•˜๋ฉด 1์ด ๋œ๋‹ค. (x1์˜ ๋ฒ”์œ„: [1,4] , x2:[0.2])
๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž˜ ์ •์˜๋œ ํ™•๋ฅ ๋ถ„ํฌ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค:
์ด ๋ถ„ํฌ๋ฅผ ์ด๋™ํ•˜๊ณ  scalingํ•˜์—ฌ ๋‹จ์œ„ ์ •์‚ฌ๊ฐํ˜• Z์— ๋Œ€ํ•ด ์ •์˜ํ•œ๋‹ค ๊ฐ€์ •ํ•˜์ž.
์ด๋ฅผ ์œ„ํ•ด ์ƒˆ๋กœ์šด z=(z1, z2)๋ณ€์ˆ˜์™€ X์˜ ๊ฐ point๋ฅผ ์ •ํ™•ํžˆ Z์˜ ํ•œ Point์— mappingํ•˜๋Š” ํ•จ์ˆ˜ f๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋‹ค:
์ด๋Ÿฐ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์—ญํ•จ์ˆ˜(invertible function)๋ผ ํ•œ๋‹ค.
์ฆ‰, ๋ชจ๋“  z๋ฅผ ์ด์— ํ•ด๋‹นํ•˜๋Š” x๋กœ ๋‹ค์‹œ mapping๊ฐ€๋Šฅํ•œ gํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค. (๋ณ€์ˆ˜๋ณ€ํ™˜์— ํ•„์ˆ˜์ .)
์ด gํ•จ์ˆ˜๊ฐ€ ์—†์œผ๋ฉด ๋‘ ๊ณต๊ฐ„์‚ฌ์ด๋ฅผ mappingํ•  ์ˆ˜ ์—†๋‹ค.

์ด๋•Œ, pz(z) = ((3z1+1)-1)(2z2)/9 = 2z1z2/3๋กœ ๋ณ€ํ™˜๊ฐ€๋Šฅํ•˜๋‹ค.
๋‹ค๋งŒ, pz(z)๋ฅผ ๋‹จ์œ„๋ฉด์ ์— ๋Œ€ํ•ด ์ ๋ถ„ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฌธ์ œ์— ๋ด‰์ฐฉํ•œ๋‹ค:
1/6๊ฐ’์ด ๋‚˜์™”๊ธฐ์—, ๋”์ด์ƒ ์œ ํšจํ•œ ํ™•๋ฅ ๋ถ„ํฌ๊ฐ€ ์•„๋‹ˆ๋‹ค. (์ ๋ถ„๊ฒฐ๊ณผ๊ฐ€ 1์ด ๋˜์–ด์•ผํ•จ.)
์›์ธ: ๋ณ€ํ™˜๋œ ํ™•๋ฅ ๋ถ„ํฌ ์˜์—ญ์ด ์›๋ณธ์˜ 1/6๋กœ ์ž‘์•„์กŒ๊ธฐ ๋•Œ๋ฌธ.
ํ•ด๊ฒฐ: ์ƒˆ๋กœ์šด ํ™•๋ฅ ๋ถ„ํฌ์˜ ์ƒ๋Œ€์ ๋ฉด์ ๋ณ€ํ™”์— ํ•ด๋‹นํ•˜๋Š” ์ •๊ทœํ™”๊ณ„์ˆ˜๋ฅผ ๊ณฑํ•ด์•ผํ•จ
โ†’ ๋ณ€ํ™˜์— ์˜ํ•œ ๋ถ€ํ”ผ๋ณ€ํ™˜ = Jacobian Matrix์˜ ์ ˆ๋Œ“๊ฐ’.





Jacobian Matrix:

z = f(x)์˜ Jacobain Matrix๋Š” 1๊ณ„ ํŽธ๋ฏธ๋ถ„๋„ํ•จ์ˆ˜์˜ ํ–‰๋ ฌ์ด๋‹ค.

x1์— ๋Œ€ํ•œ z1์˜ ํŽธ๋ฏธ๋ถ„์€ 1/3์ด๊ณ , x1์— ๋Œ€ํ•œ z2์˜ ํŽธ๋ฏธ๋ถ„์€ 0์ด๋ฉฐ,
x2์— ๋Œ€ํ•œ z2์˜ ํŽธ๋ฏธ๋ถ„์€ 0์ด๊ณ , x2์— ๋Œ€ํ•œ z2์˜ ํŽธ๋ฏธ๋ถ„์€ 1/2์ด๋‹ค.

๋”ฐ๋ผ์„œ ํ•จ์ˆ˜ f(x)์˜ Jacobian Matrix๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

ํ–‰๋ ฌ์‹(determinant)์€ ์ •๋ฐฉํ–‰๋ ฌ(square matrix)์—์„œ๋งŒ ์ •์˜๋œ๋‹ค.
ํ•ด๋‹นํ–‰๋ ฌ๋กœ ํ‘œํ˜„๋˜๋Š” ๋ณ€ํ™˜์„ ๋‹จ์œ„ ์ดˆ์ž…๋ฐฉ์ฒด์— ์ ์šฉํ•ด ๋งŒ๋“ค์–ด์ง„ ํ‰ํ–‰์œก๋ฉด์ฒด ๋ถ€ํ”ผ์™€ ๊ฐ™๋‹ค.
์ฆ‰, 2์ฐจ์› ํ–‰๋ ฌ๋กœ ํ‘œํ˜„๋˜๋Š” ๋ณ€ํ™˜์„ ๋‹จ์œ„ ์ •์‚ฌ๊ฐํ˜•์— ์ ์šฉํ•ด ๋งŒ๋“ค์–ด์ง„ ํ‰ํ–‰์‚ฌ๋ณ€ํ˜•์˜ ๋ฉด์ ์— ํ•ด๋‹นํ•œ๋‹ค.


์•ž์„  ์˜ˆ์‹œ๋ฅผ ๋ณด์ž. det(a b c d) = ad - bc์ด๋ฏ€๋กœ 
์œ„ ์˜ˆ์‹œ์—์„œ Jacobian ํ–‰๋ ฌ์‹์€ 1/3 ร— 1/2 = 1/6์ด๋‹ค.
์ด๊ฐ’์ด ๋ฐ”๋กœ scaling๊ณ„์ˆ˜์ด๋‹ค.



๋ณ€์ˆ˜ ๋ณ€ํ™˜ ๋ฐฉ์ •์‹

ํ•˜๋‚˜์˜ ๋ฐฉ์ •์‹์œผ๋กœ X์™€ Z์‚ฌ์ด ๋ณ€์ˆ˜๋ณ€ํ™˜๊ณผ์ •์„ ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋ฅผ "๋ณ€์ˆ˜๋ณ€ํ™˜๋ฐฉ์ •์‹(change of variables equation)"์ด๋ผ ํ•œ๋‹ค.
๊ฐ„๋‹จํ•œ ๋ถ„ํฌ๋ผ๋ฉด, Xโ†’Z๋กœ mappingํ•  ์ ์ ˆํ•œ ๊ฐ€์—ญํ•จ์ˆ˜ f(x)์™€ 
sampling๋œ z๋ฅผ ๊ธฐ์กด domain point x๋กœ ๋‹ค์‹œ mapping ์‹œ ์‚ฌ์šฉํ•  ์—ญํ•จ์ˆ˜ g(z)๋ฅผ ์ฐพ์œผ๋ฉด ๋œ๋‹ค.
์ด๋ฅผ ์œ„ํ•ด, ํ•„์š”ํ•œ 2๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

โ‘  ๊ณ ์ฐจ์› ํ–‰๋ ฌ์‹์€ Too Hight Cost. O(n3)์‹œ๊ฐ„์ด ๋“ ๋‹ค.
โ‘ก f(x)์˜ ์—ญํ•จ์ˆ˜ ๊ณ„์‚ฐ์ด ๋ช…ํ™•ํ•˜์ง€ ์•Š๋‹ค.

์œ„์˜ ๋ฌธ์ œ๋“ค ํ•ด๊ฒฐ์„ ์œ„ํ•ด RealNVP๋ผ๋Š” ๋ณ€ํ™˜๊ธฐ๋ฒ•์œผ๋กœ ์ˆ˜ํ–‰๊ฐ€๋Šฅํ•˜๋‹ค.

 

 

 

 

 

 

 

 

 

 

 

 

 

 


2.  RealNVP

prev.

RealNVP๋Š” ๋ณต์žกํ•œ data๋ถ„ํฌ๋ฅผ ๊ฐ„๋‹จํ•œ Gaussian๋ถ„ํฌ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์‹ ๊ฒฝ๋ง์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
๋˜ํ•œ, ์—ญ๋ณ€ํ™˜์ด ๊ฐ€๋Šฅํ•˜๊ณ  Jacobian Matrix๋ฅผ ์‰ฝ๊ฒŒ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Coupling Layer

Coupling์ธต์€ input์›์†Œ์— ๋Œ€ํ•ด scale๊ณ„์ˆ˜์™€ translation๊ณ„์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค.


์•„๋ž˜ ์˜ˆ์‹œ์ฒ˜๋Ÿผ Linear์ธต์œผ๋กœ Scale์ถœ๋ ฅ์„ ๋งŒ๋“ค๊ณ ,
๋˜๋‹ค๋ฅธ Linearfh translation๊ณ„์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค.

class CouplingLayer(nn.Module):
    def __init__(self, input_dim, output_dim, hid_dim, mask):
        super().__init__()
        self.s_fc1 = nn.Linear(input_dim, hid_dim)
        self.s_fc2 = nn.Linear(hid_dim, hid_dim)
        self.s_fc3 = nn.Linear(hid_dim, output_dim)
        self.t_fc1 = nn.Linear(input_dim, hid_dim)
        self.t_fc2 = nn.Linear(hid_dim, hid_dim)
        self.t_fc3 = nn.Linear(hid_dim, output_dim)
        self.mask = mask

    def forward(self, x):
        x_m = x * self.mask
        s_out = torch.tanh(self.s_fc3(F.relu(self.s_fc2(F.relu(self.s_fc1(x_m))))))
        t_out = self.t_fc3(F.relu(self.t_fc2(F.relu(self.t_fc1(x_m)))))
        y = x_m + (1-self.mask)*(x*torch.exp(s_out)+t_out)
        log_det_jacobian = s_out.sum(dim=1)
        return y, log_det_jacobian

    def backward(self, y):
        y_m = y * self.mask
        s_out = torch.tanh(self.s_fc3(F.relu(self.s_fc2(F.relu(self.s_fc1(y_m))))))
        t_out = self.t_fc3(F.relu(self.t_fc2(F.relu(self.t_fc1(y_m)))))
        x = y_m + (1-self.mask)*(y-t_out)*torch.exp(-s_out)
        return xโ€‹
๋” ๋ณต์žกํ•œ ํ‘œํ˜„์„ ํ•™์Šตํ•˜๊ธฐ ์œ„ํ•ด ์ฐจ์›์„ ๋Š˜๋ ธ๋‹ค ๋‹ค์‹œ ์›๋ณธ์ฐจ์›์œผ๋กœ ์ถ•์†Œํ•œ๋‹ค.

Coupling Layer๋Š” input data๊ฐ€ ๋“ค์–ด๊ฐˆ ๋•Œ, Masking ํ›„ ๋ณ€ํ™˜๋˜๋Š” ๋ฐฉ์‹์ด ๋…ํŠนํ•˜๋‹ค.

Step 1. ์ฒ˜์Œ d์ฐจ์›๋งŒ Coupling Layer์— ์ฃผ์ž….
Step 2. ๋‚จ์€ D-d์ฐจ์›์€ ์™„์ „ํžˆ Masking(= 0์œผ๋กœ ์„ค์ •.)
์ด๋•Œ, ๋งŽ์€ ์ •๋ณด๋ฅผ Maskingํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ญ˜๊นŒ?
์ด๋ฅผ ์•Œ๊ธฐ์œ„ํ•ด, ์ด ํ•จ์ˆ˜์˜ Jacobian Matrix๋ฅผ ์‚ดํŽด๋ณด๋ฉด ์•Œ ์ˆ˜ ์žˆ๋‹ค.

์žฅ์  1

ํ•˜์‚ผ๊ฐํ–‰๋ ฌํ˜•ํƒœ๋กœ ํ•˜์‚ผ๊ฐํ–‰๋ ฌ์˜ ํ–‰๋ ฌ์‹์€ ๋‹จ์ˆœํžˆ ๋Œ€๊ฐ์›์†Œ์˜ ๊ณฑ๊ณผ ๊ฐ™๋‹ค.
์ฆ‰, ์ขŒ์ธกํ•˜๋‹จ์˜ ๋ณต์žกํ•œ ๋„ํ•จ์ˆ˜์™€ ์ƒ๊ด€์ด ์—†์–ด์ง„๋‹ค!



์žฅ์  2

์•„๋ž˜ ๊ทธ๋ฆผ ๋ฐ ์‹์„ ๋ณด๋ฉด, ์‰ฝ๊ฒŒ ์—ญ์ „ํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜๋ผ๋Š” ๋ชฉํ‘œ๋‹ฌ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
์ •๋ฐฉํ–ฅ๊ณ„์‚ฐ์„ ์žฌ์ •๋ ฌํ•˜๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์€ ์—ญํ•จ์ˆ˜์‹์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.


Step 3. ๊ทธ๋Ÿฌ๋ฉด ์ด์ œ ์ฒ˜์Œ ์ž…๋ ฅ์˜ d๊ฐœ ์›์†Œ๋ฅผ ์–ด๋–ป๊ฒŒ updateํ•ด์•ผํ• ๊นŒ?

 

Coupling Layer ์Œ“๊ธฐ


์„ ํ˜•๋Œ€์ˆ˜ํ•™์˜ ํ–‰๋ ฌ์‹ ์กฐ๊ฑด

๋”ฐ๋ผ์„œ ์œ„์˜ ์„ ํ˜•๋Œ€์ˆ˜ํ•™ ํ–‰๋ ฌ์‹์กฐ๊ฑด์— ๋”ฐ๋ผ Coupling Layer๋ฅผ ์Œ“๊ณ , 
๋งค๋ฒˆ Masking์„ ๋’ค์ง‘์œผ๋ฉด, ๊ฐ„๋‹จํ•œ Jacobian Matrix์™€ ๊ฐ€์—ญ์„ฑ์ด๋ผ๋Š” ํ•„์ˆ˜์†์„ฑ์„ ์œ ์ง€ํ•˜๋ฉฐ
์ „์ฒด input tensor๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ์‹ ๊ฒฝ๋ง์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

RealNVP ๋ชจ๋ธํ›ˆ๋ จ



class RealNVP(nn.Module):
    def __init__(self, input_dim, output_dim, hid_dim, mask, n_layers = 6):
        super().__init__()
        assert n_layers >= 2, 'num of coupling layers should be greater or equal to 2'

        self.modules = []
        self.modules.append(CouplingLayer(input_dim, output_dim, hid_dim, mask))
        for _ in range(n_layers-2):
            mask = 1 - mask
            self.modules.append(CouplingLayer(input_dim, output_dim, hid_dim, mask))
        self.modules.append(CouplingLayer(input_dim, output_dim, hid_dim, 1 - mask))
        self.module_list = nn.ModuleList(self.modules)
        
    def forward(self, x):
        ldj_sum = 0 # sum of log determinant of jacobian
        for module in self.module_list:
            x, ldj= module(x)
            ldj_sum += ldj
        return x, ldj_sum

    def backward(self, z):
        for module in reversed(self.module_list):
            z = module.backward(z)
        return z


mask = torch.from_numpy(np.array([0, 1]).astype(np.float32))
model = RealNVP(INPUT_DIM, OUTPUT_DIM, HIDDEN_DIM, mask, N_COUPLE_LAYERS)
optimizer = torch.optim.Adam(model.parameters(), lr=1e-4)
prior_z = distributions.MultivariateNormal(torch.zeros(2), torch.eye(2))


Loss functions: NLL Loss

def train(epoch):
    model.train()
    train_loss = 0
    for batch_idx, data in enumerate(train_loader):
        optimizer.zero_grad()
        z, log_det_j_sum = model(data)
        loss = -(prior_z.log_prob(z)+log_det_j_sum).mean()
        loss.backward()
        cur_loss = loss.item()
        train_loss += cur_loss
        optimizer.step()
        if batch_idx % LOG_INTERVAL == 0:
            print('Train Epoch: {} [{}/{} ({:.0f}%)]\tLoss: {:.6f}'.format(
                epoch, batch_idx * len(data), len(train_loader.dataset),
                100.*batch_idx / len(train_loader),
                cur_loss/len(data)))

    print('====> Epoch: {} Average loss: {:.4f}'.format(
        epoch, train_loss / len(train_loader.dataset)
    ))


[train ๊ฒฐ๊ณผ]:

๋ณต์žกํ•œ input์ด ๋‹จ์ˆœํ•œ Gaussian๋ถ„ํฌํ˜•ํƒœ๋กœ mapping๋จ.

 

 

 

 

 

 

 

 

 

 

 


3. GLOW  &. FFJORD

GLOW

๊ณ ํ’ˆ์งˆ sample์ƒ์„ฑ ๋ฐ ์œ ์˜๋ฏธํ•œ latent space ์ƒ์„ฑ๊ฐ„์œผ.
ํ•ต์‹ฌ: ์—ญ๋งˆ์Šคํ‚น ์„ค์ •์„ ๋ฐ˜์ „๊ฐ€๋Šฅํ•œ 1ร—1 conv๋กœ ๋Œ€์ฒด
์˜ค์ฃฝํ•˜๋ฉด ๋…ผ๋ฌธ์ œ๋ชฉ๋„ Glow: Generative Flow with Invertible 1x1 Convolutions

์ด๋ฅผ ์ด์šฉํ•ด ๋ชจ๋ธ์ด ์›ํ•˜๋Š” ์ฑ„๋„์ˆœ์œผ๋กœ ์กฐํ•ฉ์ƒ์„ฑ ๊ฐ€๋Šฅ.

FFJORD


Discrete time Normalizing Flows: RealNVP, GLOW
Continuous time Normalizing Flows: FFJORD

์ฆ‰, Normalizing Flow์˜ ๋‹จ๊ณ„์ˆ˜๊ฐ€ ๋ฌดํ•œ๋Œ€์ด๊ณ , ๋‹จ๊ณ„ํฌ๊ธฐ๊ฐ€ 0์— ๊ฐ€๊น๊ธฐ์—
์‹ ๊ฒฝ๋ง์— ์˜ํ•ด parameter๊ฐ€ ์ •์˜๋˜๋Š” ์ƒ๋ฏธ๋ถ„๋ฐฉ์ •์‹(ODE)์„ ์‚ฌ์šฉํ•ด
data๋ถ„ํฌ์™€ ํ‘œ์ค€์ •๊ทœ๋ถ„ํฌ์‚ฌ์ด ๋ณ€ํ™˜์„ ๋ชจ๋ธ๋ง:

 

 

 

 

 

 

 

 

4. ์š”์•ฝ

Normalizing Flow๋ž€, ๋‹ค๋ฃจ๊ธฐ ์‰ฌ์šด data๋ฐ€๋„ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๋ฉด์„œ ๊ณ ํ’ˆ์งˆ sample์„ ์ƒ์„ฑํ•˜๋Š” ๊ฐ•๋ ฅํ•œ ์ƒ์„ฑ๋ชจ๋ธ๋ง๋ฐฉ๋ฒ•์ด๋‹ค.
์ด๋ฅผ ์œ„ํ•ด ์‹ ๊ฒฝ๋ง์˜ ํ˜•ํƒœ๋ฅผ ์ œํ•œํ•ด ๊ฐ€์—ญ์„ฑ๊ณผ ๊ณ„์‚ฐํ•˜๊ธฐ ์‰ฌ์šด Jacobian determinant๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

'Gain Study > Generation' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[G]Part 2-6. Diffusion Models  (0) 2024.01.30
[G]Part 2-5. Energy-based Model  (0) 2024.01.29
[G]Part 2-3. Auto Regressive Models  (0) 2024.01.26
[G]Part 2-2. GAN  (0) 2024.01.26
[G]Part 2-1. VAE  (2) 2024.01.25

+ Recent posts