본문 바로가기
딥러닝

[딥러닝] 생성형 AI의 개념과 주요 모델

by 배써니 2024. 7. 16.

생성형 AI는 주어진 입력 데이터를 기반으로 새로운 데이터를 생성하는 인공지능 기술이다.
생성형 AI의 예로는 텍스트 생성, 이미지 생성, 음악 생성 등이 있으며, 이는 다양한 분야에서 응용되고 있다.
이번 게시글에서는 생성형 AI의 기본 개념과 주요 모델에 대해 공부해보겠다. 


01. 생성형 AI란?

생성형 AI는 데이터를 학습해 새로운 데이터를 생성하는 모델이다.
이는 지도 학습(Supervised Learning)과 비지도 학습(Unsupervised Learning)을 포함하며, 주로 비지도 학습 방법이 사용된다. 생성형 AI 모델은 주로 데이터를 압축하여 중요한 특징을 추출하고, 이를 기반으로 새로운 데이터를 생성한다.

대표적인 생성형 AI 모델로는 오토인코더(Autoencoder), 변이형 오토인코더(Variational Autoencoder, VAE), 생성적 적대 신경망(Generative Adversarial Network, GAN) 등이 있다.

 

02. 생성형 AI의 주요 모델

오토인코더(Autoencoder)

오토인코더는 입력 데이터를 압축한 후, 이를 다시 복원하는 신경망이다. 입력 데이터의 중요한 특징을 학습하고, 이를 기반으로 새로운 데이터를 생성할 수 있다. 오토인코더는 인코더(Encoder)와 디코더(Decoder)로 구성된다. 인코더는 데이터를 압축하고, 디코더는 이를 복원하는 역할을 한다.

from keras.layers import Input, Dense
from keras.models import Model

# 입력 크기
input_dim = 784
encoding_dim = 32

# 입력 레이어
input_img = Input(shape=(input_dim,))

# 인코딩 레이어
encoded = Dense(encoding_dim, activation='relu')(input_img)

# 디코딩 레이어
decoded = Dense(input_dim, activation='sigmoid')(encoded)

# 오토인코더 모델
autoencoder = Model(input_img, decoded)

# 모델 컴파일
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')

# 데이터 로드 및 전처리
from keras.datasets import mnist
import numpy as np

(x_train, _), (x_test, _) = mnist.load_data()
x_train = x_train.astype('float32') / 255.
x_test = x_test.astype('float32') / 255.
x_train = x_train.reshape((len(x_train), np.prod(x_train.shape[1:])))
x_test = x_test.reshape((len(x_test), np.prod(x_test.shape[1:])))

# 모델 학습
autoencoder.fit(x_train, x_train,
                epochs=50,
                batch_size=256,
                shuffle=True,
                validation_data=(x_test, x_test))

 

변이형 오토인코더(Variational Autoencoder, VAE)

VAE는 오토인코더의 확장 버전으로, 데이터의 분포를 학습하여 새로운 데이터를 생성하는 모델이다. 입력 데이터를 잠재 공간(Latent Space)으로 매핑하고, 이를 기반으로 데이터를 생성한다. VAE는 생성된 데이터가 원본 데이터와 유사한 분포를 가지도록 유도하는 특징을 가진다.

생성적 적대 신경망(Generative Adversarial Network, GAN)

GAN은 두 개의 신경망, 즉 생성자(Generator)와 판별자(Discriminator)가 경쟁하며 학습하는 모델이다. 생성자는 가짜 데이터를 생성하고, 판별자는 이를 진짜 데이터와 구분하려 한다. 이 과정에서 생성자는 점점 더 진짜 같은 데이터를 생성하게 된다. GAN의 훈련 과정은 게임 이론에 기반하여 진행되며, 이는 매우 강력한 생성 모델을 만들 수 있게 한다.

from keras.layers import Input, Dense, Reshape, Flatten
from keras.models import Sequential

# 생성자 모델
generator = Sequential()
generator.add(Dense(256, input_dim=100))
generator.add(Reshape((16, 16, 1)))
generator.add(Dense(28 * 28, activation='sigmoid'))
generator.add(Reshape((28, 28)))

# 판별자 모델
discriminator = Sequential()
discriminator.add(Flatten(input_shape=(28, 28)))
discriminator.add(Dense(256, activation='relu'))
discriminator.add(Dense(1, activation='sigmoid'))

# GAN 모델
from keras.optimizers import Adam
from keras.models import Model

discriminator.compile(optimizer=Adam(), loss='binary_crossentropy')
discriminator.trainable = False

gan_input = Input(shape=(100,))
gan_output = discriminator(generator(gan_input))
gan = Model(gan_input, gan_output)
gan.compile(optimizer=Adam(), loss='binary_crossentropy')