산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Equipment >> 산업용 로봇

TensorFlow로 변이형 오토인코더(VAE) 구축하기: 실전 가이드

오토인코더 기초 마스터, 변이형 오토인코더(VAE)가 어떻게 이를 강화하는지 이해, TensorFlow 단계별 구현 실습.

인공지능은 수많은 분야를 재편했고 데이터 압축도 예외가 아닙니다. 오토인코더, 특히 변이형 변종은 효율적이면서 표현력 있는 생성적 압축 스킴을 제공합니다. 이 가이드는 핵심 개념을 분해하고 MNIST 데이터셋을 사용한 전체 TensorFlow 구현을 안내합니다.

오토인코더 응용

오토인코더는 신경 기계 번역, 신약 발견, 이미지 디노이징, 이상 탐지 등 분야에서 널리 채택됩니다. 압축된 정보적 표현을 학습하는 능력으로 현대 ML 파이프라인의 필수 도구입니다.

오토인코더의 핵심 구성요소

일반적 신경망과 달리 오토인코더는 저차원 잠재 표현을 강제하는 병목이 있습니다. 아키텍처는 세 가지 주요 부분으로 구성:

인코더와 디코더는 보통 피드포워드 네트워크지만, 이미지용 컨볼루션, 텍스트용 순환 등 특화 변종이 실무에서 흔합니다.

인코더

인코더는 고차원 입력(예: 28×28 픽셀 이미지)을 콤팩트한 잠재 벡터로 매핑합니다. 학습 중 가중치를 최적화해 잠재 벡터가 필수 정보를 포착하도록 하여 디코더가 최소 손실로 입력을 재구성하게 합니다.

TensorFlow로 변이형 오토인코더(VAE) 구축하기: 실전 가이드

병목(잠재 벡터)

잠재 벡터 크기는 트레이드오프: 너무 작으면 중요 디테일 손실, 너무 크면 압축 약화와 연산량 증가. 적절한 차원 선택이 모델 성능에 중요.

디코더

디코더는 인코더의 미러로, 잠재 벡터를 원래 데이터 공간으로 변환. 보통 전치 컨볼루션이나 업샘플링 레이어로 공간 해상도 복구.

TensorFlow로 변이형 오토인코더(VAE) 구축하기: 실전 가이드

오토인코더 학습

오토인코더는 Adam 같은 그래디언트 기반 옵티마이저로 엔드투엔드 학습. 목적은 입력과 재구성 간 차이를 정량화하는 재구성 손실 최소화.

손실 함수

일반적 선택: L1, L2, 평균제곱오차(MSE). 각각 출력이 입력에 얼마나 가까운지 측정해 생성적 재구성 작업에 적합.

네트워크 변종

MLP(다층 퍼셉트론)도 인코더/디코더로 쓸 수 있지만, 이미지 데이터에는 공간 인식 좋은 CNN 선호. 순환 네트워크는 텍스트 등 시퀀스 데이터에 강점.

표준 오토인코더는 창의성이 부족해 학습 중 본 데이터만 재생산 가능. 변이형 프레임워크로 확률성을 도입해 생성 능력 부여.

TensorFlow로 변이형 오토인코더(VAE) 구축하기: 실전 가이드

변이형 오토인코더(VAE)

VAE는 표준 아키텍처를 두 가지로 수정:

추론 시 인코더가 학습된 분포에서 잠재 벡터를 샘플링해 디코더가 다양하고 사실적인 재구성 생성. 이 확률성이 결정론적 오토인코더에서 흔한 불연속성 완화.

TensorFlow로 변이형 오토인코더(VAE) 구축하기: 실전 가이드

TensorFlow 구현

아래는 MNIST로 학습된 컨볼루션 VAE의 간결한 프로덕션 레디 TensorFlow 구현.

데이터 준비

(train_images, _), (test_images, _) = tf.keras.datasets.mnist.load_data()
train_images = train_images.reshape(-1, 28, 28, 1).astype('float32')
test_images = test_images.reshape(-1, 28, 28, 1).astype('float32')
train_images /= 255.
test_images /= 255.
train_images[train_images >= .5] = 1.
train_images[train_images < .5] = 0.
test_images[test_images >= .5] = 1.
test_images[test_images < .5] = 0.
TRAIN_BUF = 60000
BATCH_SIZE = 100
TEST_BUF = 10000
train_dataset = tf.data.Dataset.from_tensor_slices(train_images).shuffle(TRAIN_BUF).batch(BATCH_SIZE)
test_dataset = tf.data.Dataset.from_tensor_slices(test_images).shuffle(TEST_BUF).batch(BATCH_SIZE)

VAE 모델 정의

class CVAE(tf.keras.Model):
  def __init__(self, latent_dim):
    super(CVAE, self).__init__()
    self.latent_dim = latent_dim
    self.inference_net = tf.keras.Sequential([
      tf.keras.layers.InputLayer(input_shape=(28, 28, 1)),
      tf.keras.layers.Conv2D(32, 3, strides=2, activation='relu'),
      tf.keras.layers.Conv2D(64, 3, strides=2, activation='relu'),
      tf.keras.layers.Flatten(),
      tf.keras.layers.Dense(latent_dim + latent_dim), # mean & logvar
    ])
    self.generative_net = tf.keras.Sequential([
      tf.keras.layers.InputLayer(input_shape=(latent_dim,)),
      tf.keras.layers.Dense(7*7*32, activation='relu'),
      tf.keras.layers.Reshape((7, 7, 32)),
      tf.keras.layers.Conv2DTranspose(64, 3, strides=2, padding='SAME', activation='relu'),
      tf.keras.layers.Conv2DTranspose(32, 3, strides=2, padding='SAME', activation='relu'),
      tf.keras.layers.Conv2DTranspose(1, 3, padding='SAME'), # logits
    ])
  @tf.function
  def sample(self, eps=None):
    if eps is None:
      eps = tf.random.normal(shape=(100, self.latent_dim))
    return self.decode(eps, apply_sigmoid=True)
  def encode(self, x):
    mean, logvar = tf.split(self.inference_net(x), num_or_size_splits=2, axis=1)
    return mean, logvar
  def reparameterize(self, mean, logvar):
    eps = tf.random.normal(shape=mean.shape)
    return eps * tf.exp(logvar * .5) + mean
  def decode(self, z, apply_sigmoid=False):
    logits = self.generative_net(z)
    if apply_sigmoid:
      return tf.sigmoid(logits)
    return logits

핵심 헬퍼 함수 encode, reparameterize, decode가 VAE 워크플로를 캡슐화. reparameterize 메서드는 재파라미터화 트릭을 구현해 확률적 샘플링을 통한 그래디언트 흐름 가능케 함.

재파라미터화 트릭

분포에서 직접 잠재 벡터 샘플링하면 미분 가능성 깨짐. 샘플을 z = mean + std * eps (여기서 eps ~ N(0,1))로 표현하면 그래디언트가 mean과 std로 전파. KL 발산 항이 학습된 분포를 표준 정규분포로 정렬해 매끄러운 잠재 공간 촉진.

TensorFlow로 변이형 오토인코더(VAE) 구축하기: 실전 가이드

단계 요약

  1. 인코더와 디코더 아키텍처 정의.
  2. 역전파를 위한 재파라미터화 트릭 구현.
  3. 재구성 손실 + KL 발산 최소화하며 엔드투엔드 학습.

전체 코드와 추가 학습 스크립트는 TensorFlow 공식 튜토리얼 참조.

이미지 크레딧: Chiman Kwan (수정)

산업용 로봇

  1. 3D 프린터가 금속 파트를 만드는 법: 파우더에서 정밀 부품까지
  2. 자율 로봇으로 낭비와 에너지 비용 절감
  3. 클라우드 기술 보안: 데이터 보호와 위험 완화를 위한 모범 사례
  4. 신뢰성의 인터넷(Internet of Reliability)에서 데이터 활용: 효과적 관리 전략
  5. IoT 활용 HVAC 빅데이터: 에너지·쾌적성·공기질 최적화 – 2부
  6. IBM과 테크데이터로 IoT 구현하기 – 2부
  7. IoT를 현실로: 테크데이터 & IBM 인사이트 – 1부
  8. AI 기반 로드맵: 공급망 기업을 위한 전략적 가이드
  9. 데이터 마이닝과 AI 활용: 산업 브랜드의 이커머스 성공 청사진
  10. 머신 데이터로 공구 수명 최적화: 현대적 가이드