AI/Hands-on ML

[ํ•ธ์ฆˆ์˜จ ๋จธ์‹ ๋Ÿฌ๋‹] 17์žฅ(4) - GAN, ์ƒ์„ฑ์  ์ ๋Œ€ ์‹ ๊ฒฝ๋ง

KIM DEON 2021. 5. 21. 23:17

๐Ÿƒ ์ด์ „ ๊ธ€ # ๋ณ€์ดํ˜• ์˜คํ† ์ธ์ฝ”๋”, Variational AutoEncoder

 

[ํ•ธ์ฆˆ์˜จ ๋จธ์‹ ๋Ÿฌ๋‹] 17์žฅ(3) - ๋ณ€์ดํ˜• ์˜คํ† ์ธ์ฝ”๋”, Variational AutoEncoder

[AI/Hands-on ML] - [ํ•ธ์ฆˆ์˜จ ๋จธ์‹ ๋Ÿฌ๋‹] 17์žฅ(2) - ํ•ฉ์„ฑ๊ณฑ ์˜คํ† ์ธ์ฝ”๋”, ์ˆœํ™˜ ์˜คํ† ์ธ์ฝ”๋”, ์žก์Œ ์ œ๊ฑฐ ์˜คํ† ์ธ์ฝ”๋”, ํฌ์†Œ ์˜คํ† ์ธ์ฝ”๋” [ํ•ธ์ฆˆ์˜จ ๋จธ์‹ ๋Ÿฌ๋‹] 17์žฅ(2) - ํ•ฉ์„ฑ๊ณฑ ์˜คํ† ์ธ์ฝ”๋”, ์ˆœํ™˜ ์˜คํ† ์ธ์ฝ”๋”, ์žก์Œ

kdeon.tistory.com


17. 9 ์ƒ์„ฑ์  ์ ๋Œ€ ์‹ ๊ฒฝ๋ง

- 2014๋…„ ๋…ผ๋ฌธ์—์„œ ์ œ์•ˆ๋œ ์•„์ด๋””์–ด๋กœ, ํš๊ธฐ์ ์ด์ง€๋งŒ GAN ํ›ˆ๋ จ์˜ ์–ด๋ ค์›€์„ ๊ทน๋ณตํ•˜๋Š” ๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ์Œ

- ์‹ ๊ฒฝ๋ง์„ ์„œ๋กœ ๊ฒจ๋ฃจ๊ฒŒ ํ•˜๊ณ  ๊ฒฝ์Ÿ์„ ํ†ตํ•ด ์‹ ๊ฒฝ๋ง์„ ํ–ฅ์ƒํ•˜๋Š” ๊ฒƒ์„ ๊ธฐ๋Œ€ํ•จ

 

์ƒ์„ฑ์ž

๋žœ๋คํ•œ ๋ถ„ํฌ(ex. ๊ฐ€์šฐ์‹œ์•ˆ ๋ถ„ํฌ)๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„ ์ด๋ฏธ์ง€์™€ ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ถœ๋ ฅ

- ๋žœ๋คํ•œ ์ž…๋ ฅ์€ ์ƒ์„ฑํ•  ์ด๋ฏธ์ง€์˜ ์ž ์žฌ ํ‘œํ˜„(=์ฝ”๋”ฉ)

- ๋ณ€์ดํ˜• ์˜คํ† ์ธ์ฝ”๋”์˜ ๋””์ฝ”๋”์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ (๊ฐ€์šฐ์‹œ์•ˆ ์žก์Œ -> ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€ ์ƒ์„ฑ, ํ›ˆ๋ จ ๋ฐฉ์‹์€ ๋‹ค๋ฆ„)

โœ”๏ธ ๋ชฉํ‘œํŒ๋ณ„์ž๋ฅผ ์†์ผ ๋งŒํผ ์ง„์งœ ๊ฐ™์€ ์ด๋ฏธ์ง€ ์ƒ์„ฑ

 

ํŒ๋ณ„์ž

์ƒ์„ฑ์ž์—์„œ ์–ป์€ ๊ฐ€์งœ ์ด๋ฏธ์ง€๋‚˜ ํ›ˆ๋ จ ์„ธํŠธ์—์„œ ์ถ”์ถœํ•œ ์ง„์งœ ์ด๋ฏธ์ง€๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„, ์ž…๋ ฅ๋œ ์ด๋ฏธ์ง€๊ฐ€ ๊ฐ€์งœ์ธ์ง€ ์ง„์งœ์ธ์ง€ ๊ตฌ๋ถ„ํ•จ

โœ”๏ธ ๋ชฉํ‘œ: ์ง„์งœ ์ด๋ฏธ์ง€์™€ ๊ฐ€์งœ ์ด๋ฏธ์ง€๋ฅผ ์ž˜ ๊ตฌ๋ถ„

์ƒ์„ฑ์  ์ ๋Œ€ ์‹ ๊ฒฝ๋ง, GAN (์ถœ์ฒ˜: https://hyeongminlee.github.io/post/gan001_gan/)

GAN์€ ๋‹ค๋ฅธ ๋ชฉํ‘œ๋ฅผ ๊ฐ€์ง„ ๋‘ ๋„คํŠธ์›Œํฌ๋กœ ๊ตฌ์„ฑ๋˜๋ฏ€๋กœ, ํ›ˆ๋ จ ๋ฐ˜๋ณต์ด ๋‘ ๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ง

๐Ÿ“Œ ๋‹จ๊ณ„ 1 # ํŒ๋ณ„์ž ํ›ˆ๋ จ

- ํ›ˆ๋ จ ์„ธํŠธ์—์„œ ์‹ค์ œ ์ด๋ฏธ์ง€ ๋ฐฐ์น˜๋ฅผ ์ƒ˜ํ”Œ๋งํ•˜๊ณ 

- ์ƒ์„ฑ์ž์—์„œ ์ƒ์„ฑํ•œ ๋™์ผํ•œ ์ˆ˜์˜ ๊ฐ€์งœ ์ด๋ฏธ์ง€๋ฅผ ํ•ฉ์นจ

- ๊ฐ€์งœ ์ด๋ฏธ์ง€์˜ ๋ ˆ์ด๋ธ”์€ 0, ์ง„์งœ ์ด๋ฏธ์ง€๋Š” 1๋กœ ์„ธํŒ…

- ํŒ๋ณ„์ž๋Š” ์ด์ง„ ํฌ๋กœ์Šค ์—”ํŠธ๋กœํ”ผ๋ฅผ ์‚ฌ์šฉํ•ด ํ•œ ์Šคํ… ๋™์•ˆ ์œ„์ฒ˜๋Ÿผ ๋ ˆ์ด๋ธ”๋œ ๋ฐฐ์น˜๋กœ ํ›ˆ๋ จ

- ์ด ๋‹จ๊ณ„์—์„œ, ์—ญ์ „ํŒŒ๋Š” ํŒ๋ณ„์ž์˜ ๊ฐ€์ค‘์น˜๋งŒ ์ตœ์ ํ™”

 

๐Ÿ“Œ ๋‹จ๊ณ„ 2 # ์ƒ์„ฑ์ž ํ›ˆ๋ จ

- ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•ด ๋‹ค๋ฅธ ๊ฐ€์งœ ์ด๋ฏธ์ง€ ๋ฐฐ์น˜๋ฅผ ๋งŒ๋“ฆ

- ๊ทธ ํ›„, ํŒ๋ณ„์ž๋ฅผ ์‚ฌ์šฉํ•ด ์ด๋ฏธ์ง€๊ฐ€ ์ง„์งœ์ธ์ง€ ๊ฐ€์งœ์ธ์ง€ ํŒ๋ณ„ํ•จ

- ๋ฐฐ์น˜์— ์ง„์งœ ์ด๋ฏธ์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๊ณ , ๋ ˆ์ด๋ธ”์„ ๋ชจ๋‘ 1(์ง„์งœ)๋กœ ์„ธํŒ…

-> ์ฆ‰, ์ƒ์„ฑ์ž๋Š” ํŒ๋ณ„์ž๊ฐ€ ์ง„์งœ๋ผ๊ณ  ๋ฏฟ์„๋งŒํ•œ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ๋ชฉ์ 

-> ์ƒ์„ฑ์ž๊ฐ€ ๋งŒ๋“  ๊ฐ€์งœ๋ฐ์ดํ„ฐ๋ฅผ ํŒ๋ณ„์ž๊ฐ€ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋ผ๊ณ  ์ถ”์ •ํ•  ํ™•๋ฅ ์„ ์ตœ๋Œ€ํ™”ํ•˜๋„๋ก ํ•™์Šต

- ํŒ๋ณ„์ž์˜ ๊ฐ€์ค‘์น˜๋ฅผ ๋™๊ฒฐํ•ด, ์—ญ์ „ํŒŒ๋Š” ์ƒ์„ฑ์ž์˜ ๊ฐ€์ค‘์น˜์—๋งŒ ์˜ํ–ฅ 

- ์ƒ์„ฑ์ž๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›๋Š” ๊ฒƒ์€ ํŒ๋ณ„์ž๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋˜๋Š” ๊ทธ๋ž˜๋””์–ธํŠธ๊ฐ€ ์ „๋ถ€

-> ์ฆ‰, ์ƒ์„ฑ์ž๋Š” ์ง„์งœ ์ด๋ฏธ์ง€๋ฅผ ๋ณด์ง€ ์•Š๊ณ , ํŒ๋ณ„์ž์˜ ๋ฐ˜์‘๋งŒ์„ ๋ณด๊ณ  ํ•™์Šต์„ ํ•จ

 


ํŒจ์…˜ MNIST ๋ฐ์ดํ„ฐ์…‹์œผ๋กœ GAN ํ•™์Šตํ•˜๊ธฐ 

1. ์ƒ์„ฑ์ž์™€ ํŒ๋ณ„์ž ์ƒ์„ฑ

codings_size = 30

generator = keras.models.Sequential([
    keras.layers.Dense(100, activation="selu", input_shape=[codings_size]),
    keras.layers.Dense(150, activation="selu"),
    keras.layers.Dense(28 * 28, activation="sigmoid"),
    keras.layers.Reshape([28, 28])
])
discriminator = keras.models.Sequential([
    keras.layers.Flatten(input_shape=[28, 28]),
    keras.layers.Dense(150, activation="selu"),
    keras.layers.Dense(100, activation="selu"),
    keras.layers.Dense(1, activation="sigmoid")
])
gan = keras.models.Sequential([generator, discriminator])

- ์ƒ์„ฑ์ž๋Š” ์˜คํ† ์ธ์ฝ”๋”์˜ ๋””์ฝ”๋”์™€ ๋น„์Šทํ•œ ๋ชจ์Šต

- ํŒ๋ณ„์ž๋Š” ์ผ๋ฐ˜์ ์ธ ์ด์ง„ ๋ถ„๋ฅ˜๊ธฐ (์ด๋ฏธ์ง€ ์ž…๋ ฅ, ํ•˜๋‚˜์˜ ์œ ๋‹›, sigmoid์˜ Dense์ธต)

- ํ›ˆ๋ จ ๋ฐ˜๋ณต์˜ ๋‘ ๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ์ž์™€ ํŒ๋ณ„์ž๊ฐ€ ์—ฐ๊ฒฐ๋œ ์ „์ฒด GAN ๋ชจ๋ธ ํ•„์š”

2. GAN ๋ชจ๋ธ ์ปดํŒŒ์ผ

discriminator.compile(loss="binary_crossentropy", optimizer="rmsprop")
discriminator.trainable = False
gan.compile(loss="binary_crossentropy", optimizer="rmsprop")

- ํŒ๋ณ„์ž๋Š” ์ด์ง„ ๋ถ„๋ฅ˜๊ธฐ์ด๋ฏ€๋กœ, ์ด์ง„ ํฌ๋กœ์Šค ์—”ํŠธ๋กœํ”ผ ์†์‹ค ์‚ฌ์šฉ

- ์ƒ์„ฑ์ž๋Š” gan ๋ชจ๋ธ์„ ํ†ตํ•ด์„œ๋งŒ ํ›ˆ๋ จ๋˜๋ฏ€๋กœ, ๋”ฐ๋กœ ์ปดํŒŒ์ผํ•  ํ•„์š”X

- gan ๋ชจ๋ธ๋„ ์ด์ง„ ๋ถ„๋ฅ˜๊ธฐ์ด๋ฏ€๋กœ, ์ด์ง„ ํฌ๋กœ์Šค ์—”ํŠธ๋กœํ”ผ ์†์‹ค ์‚ฌ์šฉ

* ๋‘ ๋ฒˆ์งธ ๋‹จ๊ณ„์—์„œ ํŒ๋ณ„์ž๋ฅผ ํ›ˆ๋ จํ•˜์ง€ ์•Š์Œ -> gan ๋ชจ๋ธ์„ ์ปดํŒŒ์ผํ•˜๊ธฐ ์ „์— ํŒ๋ณ„์ž๊ฐ€ ํ›ˆ๋ จ๋˜์ง€ ์•Š๋„๋ก ์„ค์ •

 

๐Ÿ“ trainable ์†์„ฑ : ๋ชจ๋ธ์„ ์ปดํŒŒ์ผํ•  ๋•Œ๋งŒ ์˜ํ–ฅ์„ ๋ฏธ์นจ

-  ์œ„ ์ฝ”๋“œ ์‹คํ–‰ ํ›„, discriminator์˜ fit() ๋˜๋Š” train_on_batch()๋ฅผ ํ˜ธ์ถœํ•ด๋„, ํŒ๋ณ„์ž๋Š” ํ›ˆ๋ จ๋จ
- ๋ฐ˜๋ฉด, gan ๋ชจ๋ธ์˜ method์„ ํ˜ธ์ถœํ•  ๋•Œ๋Š” ํ›ˆ๋ จ๋˜์ง€ ์•Š์Œ

3. ์ด๋ฏธ์ง€๋ฅผ ์ˆœํšŒํ•˜๋Š” Dataset ์ƒ์„ฑ

batch_size = 32
dataset = tf.data.Dataset.from_tensor_slices(X_train).shuffle(1000)
dataset = dataset.batch(batch_size, drop_remainder=True).prefetch(1)

4. ํ›ˆ๋ จ ๋ฐ˜๋ณต ์ฝ”๋“œ ๊ตฌํ˜„

- ํ›ˆ๋ จ์ด ์ผ๋ฐ˜์ ์ธ ๋ฐ˜๋ณต์ด ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์—, fit() method๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ

- ์‚ฌ์šฉ์ž ์ •์˜ ํ›ˆ๋ จ ๋ฐ˜๋ณต๋ฌธ์„ ๋งŒ๋“ค์–ด ์‚ฌ์šฉ

def train_gan(gan, dataset, batch_size, codings_size, n_epochs=50):
    generator, discriminator = gan.layers
    for epoch in range(n_epochs):
        for X_batch in dataset:
            # ํŒ๋ณ„์ž ํ›ˆ๋ จ
            noise = tf.random.normal(shape=[batch_size, codings_size])
            generated_images = generator(noise)
            X_fake_and_real = tf.concat([generated_images, X_batch], axis=0)
            y1 = tf.constant([[0.]] * batch_size + [[1.]] * batch_size)
            discriminator.trainable = True
            discriminator.train_on_batch(X_fake_and_real, y1)
            # ์ƒ์„ฑ์ž ํ›ˆ๋ จ
            noise = tf.random.normal(shape=[batch_size, codings_size])
            y2 = tf.constant([[1.]] * batch_size)
            discriminator.trainable = False
            gan.train_on_batch(noise, y2)
            
 train_gan(gan, dataset, batch_size, codings_size)

์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„

- ๊ฐ€์šฐ์‹œ์•ˆ ์žก์Œ์„ ์ƒ์„ฑ์ž์— ์ฃผ์ž…ํ•˜์—ฌ ๊ฐ€์งœ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑ

- ์ƒ์„ฑํ•œ ์ด๋ฏธ์ง€์™€ ๋™์ผํ•œ ๊ฐœ์ˆ˜์˜ ์ง„์งœ ์ด๋ฏธ์ง€๋ฅผ ํ•ฉ์ณ ๋ฐฐ์น˜๋ฅผ ๊ตฌ์„ฑ

- ํƒ€๊นƒ y1์€ ๊ฐ€์งœ ์ด๋ฏธ์ง€์ผ ๊ฒฝ์šฐ 0, ์ง„์งœ ์ด๋ฏธ์ง€์ผ ๊ฒฝ์šฐ 1๋กœ ์„ค์ •

- ์ด ๋ฐฐ์น˜์—์„œ ํŒ๋ณ„์ž๋ฅผ ํ›ˆ๋ จ

 

๋‘ ๋ฒˆ์งธ ๋‹จ๊ณ„

- GAN์— ๊ฐ€์šฐ์‹œ์•ˆ ์žก์Œ์„ ์ฃผ์ž…

- ์ƒ์„ฑ์ž๊ฐ€ ๋จผ์ € ๊ฐ€์งœ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ํŒ๋ณ„์ž๊ฐ€ ๊ทธ ์ด๋ฏธ์ง€๊ฐ€ ๊ฐ€์งœ์ธ์ง€ ์ง„์งœ์ธ์ง€ ์ถ”์ธก

- ํŒ๋ณ„์ž๊ฐ€ ๊ฐ€์งœ ์ด๋ฏธ์ง€๋ฅผ ์ง„์งœ๋กœ ๋ฏฟ๊ฒŒ ๋งŒ๋“ค๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์—, ํƒ€๊นƒ y2๋ฅผ 1๋กœ ์ง€์ •

5. ์ƒ์„ฑ๋œ ์ด๋ฏธ์ง€ ์ถœ๋ ฅ

์ฒซ ๋ฒˆ์งธ epoch์ด ๋๋‚œ ํ›„ GAN์ด ์ƒ์„ฑํ•œ ์ด๋ฏธ์ง€

- ์ฒซ ๋ฒˆ์งธ epoch์—์„œ ํŒจ์…˜ MNIST์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•œ ๋ชจ์Šต

- ํ•˜์ง€๋งŒ ์ด๋ณด๋‹ค ๋” ์ข‹์€ ์ด๋ฏธ์ง€๊ฐ€ ์ƒ์„ฑ๋˜์ง€ ์•Š๊ณ , ์˜คํžˆ๋ ค ์–ด๋–ค epoch์—์„œ๋Š” GAN์ด ํ•™์Šตํ•œ ๊ฒƒ์„ ์žŠ์–ด๋ฒ„๋ฆฐ ๋“ฏํ•œ ๋ชจ์Šต์„ ๋ณด์ž„

 


17. 9. 1 GAN ํ›ˆ๋ จ์˜ ์–ด๋ ค์›€

ํ›ˆ๋ จ ๊ณผ์ •์—์„œ ์ƒ์„ฑ์ž์™€ ํŒ๋ณ„์ž๋Š” ๋Š์ž„์—†์ด ์„œ๋กœ ์•ž์„œ๋ ค๊ณ ํ•จ -> ์ œ๋กœ์„ฌ ๊ฒŒ์ž„

=> ์ด์— ๋”ฐ๋ผ, ํ›ˆ๋ จ์ด ๋‚ด์‹œ ๊ท ํ˜•์ด๋ผ๋Š” ์ƒํƒœ์— ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ์Œ

 

โœ”๏ธ ๋‚ด์‹œ ๊ท ํ˜•

๋‹ค๋ฅธ ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ „๋žต์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ด๋ฏ€๋กœ, ์–ด๋–ค ํ”Œ๋ ˆ์ด์–ด๋„ ์ž์‹ ์˜ ์ „๋žต์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ

ex. ๋ชจ๋“  ์‚ฌ๋žŒ์ด ๋„๋กœ ์™ผ์ชฝ์œผ๋กœ ์šด์ „ํ•  ๋•Œ, ์–ด๋–ค ์šด์ „์ž๋„ ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์œผ๋กœ ์šด์ „ํ•˜๋Š” ๊ฒƒ์ด ๋„์›€์ด ๋˜์ง€ ์•Š๋Š” ์ƒํƒœ

-> ์ด ์˜ˆ์‹œ์—์„œ๋Š”, ๊ท ํ˜•์— ๋‹ค๋‹ค๋ฅด๋Š” ์ตœ์  ์ „๋žต์ด ์žˆ์Œ = ๋‹ค๋ฅธ ์‚ฌ๋žŒ๊ณผ ๋™์ผํ•œ ๋ฐฉํ–ฅ์œผ๋กœ ์šด์ „ํ•˜๊ธฐ

- ๋‚ด์‹œ ๊ท ํ˜• ํ•˜๋‚˜๋Š” ๊ฒฝ์Ÿ ์ „๋žต๋„ ํฌ๊ด„ํ•  ์ˆ˜ ์žˆ์Œ

ex. ํฌ์‹์ž๋Š” ๋จน์ด๋ฅผ ์ซ“๊ณ  ๋จน์ด๊ฐ์€ ๋„๋ง์นจ -> ๋‘˜ ๋‹ค ์ „๋žต์„ ๋ฐ”๊พธ์ง€ ์•Š์„ ๊ฒƒ

 

GAN์€ ํ•˜๋‚˜์˜ ๋‚ด์‹œ ๊ท ํ˜•์—๋งŒ ๋„๋‹ฌํ•  ์ˆ˜ ์žˆ์Œ

- ์ƒ์„ฑ์ž๊ฐ€ ์™„๋ฒฝํ•˜๊ฒŒ ์‹ค์ œ์™€ ๊ฐ™์€ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค์–ด๋‚ด, ํŒ๋ณ„์ž๊ฐ€ ์ถ”์ธก๋ฐ–์— ํ•  ์ˆ˜ ์—†์„ ๋•Œ 

=> ์ฆ‰, ํŒ๋ณ„์ž๊ฐ€ 50% ํ™•๋ฅ ๋กœ ์ •๋‹ต์„ ๋งž์ถ”๋Š” ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜๊ฒŒ ๋  ๋•Œ

- GAN์„ ์ถฉ๋ถ„ํžˆ ํ›ˆ๋ จํ•˜๋ฉด ์™„๋ฒฝํ•œ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด ์ด ๊ท ํ˜•์— ๋„๋‹ฌํ•˜๊ฒ ์ง€๋งŒ, ๋ณด์žฅํ•  ์ˆ˜ ์—†์Œ

=> ์ด๋•Œ ๊ฐ€์žฅ ํฐ ์–ด๋ ค์›€์€ ๋ชจ๋“œ ๋ถ•๊ดด

 

๐Ÿ“Œ ์–ด๋ ค์›€ 1 # ๋ชจ๋“œ ๋ถ•๊ดด

์ƒ์„ฑ์ž์˜ ์ถœ๋ ฅ์˜ ๋‹ค์–‘์„ฑ์ด ์ค„์–ด๋“ค ๋•Œ ๋ฐœ์ƒ

 

๐Ÿค” ์ƒ์„ฑ์ž๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋ณด๋‹ค ์‹ ๋ฐœ์„ ๋” ๊ทธ๋Ÿด๋“ฏํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค๊ณ  ๊ฐ€์ •

1. ์‹ ๋ฐœ์ด ํŒ๋ณ„์ž๋ฅผ ์†์ด๊ธฐ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์—, ๋” ๋งŽ์€ ์‹ ๋ฐœ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค๋„๋ก ์œ ๋„๋จ

 -> ์ƒ์„ฑ์ž๋Š” ์ ์ฐจ ๋‹ค๋ฅธ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์žŠ๊ฒŒ ๋จ

2. ๊ทธ๋™์•ˆ ํŒ๋ณ„์ž๊ฐ€ ๋ณด๊ฒŒ ๋  ๊ฐ€์งœ ์ด๋ฏธ์ง€๋Š”, ์‹ ๋ฐœ์ด ์œ ์ผํ•˜๊ฒŒ ๋  ๊ฒƒ

 -> ๋”ฐ๋ผ์„œ ํŒ๋ณ„์ž๋„ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ฐ€์งœ ์ด๋ฏธ์ง€๋ฅผ ๊ตฌ๋ณ„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์žŠ์–ด๋ฒ„๋ฆฌ๊ฒŒ ๋จ

3. ํŒ๋ณ„์ž๊ฐ€ ์‹ ๋ฐœ์„ ์ž˜ ๊ตฌ๋ณ„ํ•˜๊ฒŒ ๋˜๋ฉด, ์ƒ์„ฑ์ž๋Š” ๋‹ค๋ฅธ ํด๋ž˜์Šค๋กœ ์˜ฎ๊ฒจ๊ฐ€์•ผ ํ•จ

 -> ์…”์ธ ๋กœ ์˜ฎ๊ฒจ๊ฐ€์„œ ์ž˜ ํ›ˆ๋ จ์„ ํ•˜๊ฒŒ๋˜๋ฉด, ์‹ ๋ฐœ์— ๋Œ€ํ•ด์„œ๋Š” ๋˜ ์žŠ์–ด๋ฒ„๋ฆฌ๊ฒŒ ๋จ

4. ๊ทธ๋ ‡๊ฒŒ ๋˜๋ฉด, ํŒ๋ณ„์ž๋„ ๋’ค๋”ฐ๋ผ ๊ฐ€๊ฒŒ ๋จ

 

=> ๊ฒฐ๋ก ์ ์œผ๋กœ, ์ด GAN์€ ๋ช‡ ๊ฐœ์˜ ํด๋ž˜์Šค๋ฅผ ์˜ค๊ฐ€๋‹ค๊ฐ€, ์–ด๋–ค ํด๋ž˜์Šค์—์„œ๋„ ์ข‹์€ ๊ฒฐ๊ณผ๋ฅผ ๋งŒ๋“ค์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Œ

 

๐Ÿ“Œ ์–ด๋ ค์›€ 2 # ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ๋ณ€๋™

์ƒ์„ฑ์ž์™€ ํŒ๋ณ„์ž๊ฐ€ ์ง€์†์ ์œผ๋กœ ์„œ๋กœ์—๊ฒŒ ์˜ํ–ฅ์„ ์ฃผ์–ด, ํŒŒ๋ผ๋ฏธํ„ฐ ๋ณ€๋™์ด ํฌ๊ณ , ๋ถˆ์•ˆ์ •ํ•ด์งˆ ์ˆ˜ ์žˆ์Œ

- ํ›ˆ๋ จ์ด ์•ˆ์ •์ ์œผ๋กœ ์‹œ์ž‘๋˜์–ด๋„, ์ด์œ  ์—†์ด ๊ฐ‘์ž๊ธฐ ๋ฐœ์‚ฐํ•  ์ˆ˜ ์žˆ์Œ

 

=> ์—ฌ๋Ÿฌ ์š”์ธ์ด ์ด๋Ÿฐ ๋ณต์žกํ•œ ๊ด€๊ณ„์— ์˜ํ–ฅ์„ ์ฃผ์–ด GAN์˜ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋งค์šฐ ๋ฏผ๊ฐํ•˜๋ฉฐ, ์ด๋Ÿฐ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹์„ ์œ„ํ•ด์„œ ๋งŽ์€ ๋…ธ๋ ฅ์ด ํ•„์š”

 


 

์œ„์™€ ๊ฐ™์€ ๋ฌธ์ œ๋“ค๋กœ, ์ด ์ฃผ์ œ์™€ ๊ด€๋ จ๋œ ๋…ผ๋ฌธ์ด ๋งŽ์ด ์ถœ๊ฐ„๋˜์—ˆ์Œ

- ์ƒˆ๋กœ์šด ๋น„์šฉ ํ•จ์ˆ˜๋ฅผ ์ œ์•ˆํ•˜๊ฑฐ๋‚˜ (-> 2018๋…„ ๊ตฌ๊ธ€ ๋…ผ๋ฌธ์—์„œ, ์ด๋Ÿฐ ํ•จ์ˆ˜๋“ค์˜ ํšจ์œจ์„ฑ์— ์˜๋ฌธ ์ œ๊ธฐ)

- ์•ˆ์ •์ ์œผ๋กœ ํ›ˆ๋ จํ•˜๊ฑฐ๋‚˜, ๋ชจ๋“œ ๋ถ•๊ดด๋ฅผ ํ”ผํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ฒ•์„ ์ œ์•ˆ

 

์•ˆ์ •์ ์ธ ํ›ˆ๋ จ์„ ์œ„ํ•œ ๋ฐฉ๋ฒ•?

โœ”๏ธ ๊ฒฝํ—˜ ์žฌ์ƒ

- ๋งค ๋ฐ˜๋ณต์—์„œ ์ƒ์„ฑ์ž๊ฐ€ ๋งŒ๋“  ์ด๋ฏธ์ง€๋ฅผ ์žฌ์ƒ ๋ฒ„ํผ์— ์ €์žฅํ•˜๊ณ 

- ์‹ค์ œ ์ด๋ฏธ์ง€์™€ ์ด ๋ฒ„ํผ์—์„œ ๋ฝ‘์€ ๊ฐ€์งœ ์ด๋ฏธ์ง€๋ฅผ ๋”ํ•ด ํŒ๋ณ„์ž๋ฅผ ํ›ˆ๋ จ

=> ํŒ๋ณ„์ž๊ฐ€ ์ƒ์„ฑ์ž์˜ ๊ฐ€์žฅ ์ตœ๊ทผ ์ถœ๋ ฅ์— ๊ณผ๋Œ€์ ํ•ฉ๋  ๊ฐ€๋Šฅ์„ฑ์„ ์ค„์ž„

 

โœ”๏ธ ๋ฏธ๋‹ˆ๋ฐฐ์น˜ ํŒ๋ณ„

- ๋ฐฐ์น˜ ๊ฐ„์— ์–ผ๋งˆ๋‚˜ ๋น„์Šทํ•œ ์ด๋ฏธ์ง€๊ฐ€ ์žˆ๋Š”์ง€ ์ธก์ •ํ•˜์—ฌ, ์ด ํ†ต๊ณ„๋ฅผ ํŒ๋ณ„์ž์—๊ฒŒ ์ œ๊ณต

- ํŒ๋ณ„์ž๋Š” ๋‹ค์–‘์„ฑ์ด ๋ถ€์กฑํ•œ ๊ฐ€์งœ ์ด๋ฏธ์ง€ ๋ฐฐ์น˜ ์ „์ฒด๋ฅผ ์‰ฝ๊ฒŒ ๊ฑฐ๋ถ€ํ•  ์ˆ˜ ์žˆ์Œ

=> ์ƒ์„ฑ์ž๊ฐ€ ๋‹ค์–‘ํ•œ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ์œ ๋„ํ•ด, ๋ชจ๋“œ ๋ถ•๊ดด์˜ ์œ„ํ—˜์„ ์ค„์ž„

 

๋‹ค๋ฅธ ๋…ผ๋ฌธ๋“ค์—์„œ๋Š”, ํ›ˆ๋ จ์ด ์ž˜ ์ˆ˜ํ–‰๋˜๋Š” ๋„คํŠธ์›Œํฌ ๊ตฌ์กฐ๋ฅผ ์ œ์•ˆํ•˜๊ธฐ๋„ ํ•จ

 


 

๐Ÿ’ก ๊ฒฐ๋ก ์ ์œผ๋กœ, ์ด ๋ถ„์•ผ๋Š” ์—ฌ์ „ํžˆ ํ™œ๋ฐœํžˆ ์—ฐ๊ตฌ ์ค‘์ด๋ฉฐ, GAN์˜ ์—ญํ•™์€ ์•„์ง ์™„๋ฒฝํ•˜๊ฒŒ ํŒŒ์•…ํ•˜์ง€ ๋ชปํ•จ

ํ•˜์ง€๋งŒ ๋งŽ์€ ์ง„์ „์ด ์žˆ์—ˆ๊ณ , ์ผ๋ถ€ ๋ชจ๋ธ์€ ๋งค์šฐ ๋›ฐ์–ด๋‚œ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ฃผ์—ˆ์Œ

 


๐Ÿƒ ๋‹ค์Œ ๊ธ€ # ์—ฌ๋Ÿฌ๊ฐ€์ง€ GAN ๋ชจ๋ธ : DCGAN, ProGAN, StyleGAN

 

[ํ•ธ์ฆˆ์˜จ ๋จธ์‹ ๋Ÿฌ๋‹] 17์žฅ(5) - DCGAN, ProGAN, StyleGAN

๐Ÿƒ ์ด์ „ ๊ธ€ # ์ƒ์„ฑ์  ์ ๋Œ€ ์‹ ๊ฒฝ๋ง, GAN์ด๋ž€? [ํ•ธ์ฆˆ์˜จ ๋จธ์‹ ๋Ÿฌ๋‹] 17์žฅ(4) - GAN, ์ƒ์„ฑ์  ์ ๋Œ€ ์‹ ๊ฒฝ๋ง [AI/Hands-on ML] - [ํ•ธ์ฆˆ์˜จ ๋จธ์‹ ๋Ÿฌ๋‹] 17์žฅ(3) - ๋ณ€์ดํ˜• ์˜คํ† ์ธ์ฝ”๋”, Variational AutoEncoder [ํ•ธ์ฆˆ์˜จ ๋จธ์‹ ๋Ÿฌ..

kdeon.tistory.com