본문 바로가기

관리 메뉴

딥러닝(2) - RNN, GAN 본문

AI

딥러닝(2) - RNN, GAN

ITst 2025. 3. 24. 14:50

RNN    Recurrent Neural Network; 순환신경망

특징

  • 가장 대중적인 딥러닝 알고리즘
  • 현재 단계의 결과를 다음 단계의 입력으로 순차적으로(Sequentially) 전달
  • RNN 분석 과정
    • 신경망 내부는 데이터의 시변적 특성을 저장하도록 구성됨
    • 여러 개의 데이터가 순서대로 입력되었을 때 앞서 입력받은 데이터를 기억함
    • 기억된 데이터가 얼마나 중요한지 판단하고 별도의 가중치를 주어 다음 데이터로 넘어감
    • 모든 입력값에 해당 작업을 순서대로 실행하므로 다음 층으로 넘어가기 전에 같은 층을 맴도는 것처럼 보임
  • NLP에서의 RNN의 처리 방식  
    • 단어를 하나 처리할 때마다 기억해 다음 입력 값의 출력을 결정함
    • 이렇게 비슷한 두 문장이 입력되었을 때, 그 차이를 구별해 출력 값에 반영할 수 있음
    RNN의 자연어처리 방식
  • 문단이나 문서 수준으로 양이 많은 순차적 데이터를 기억하고 학습할 수 있음
  • RNN은 단어 간의 관계나 문맥의 의미의 이해가 필요한 시계열 데이터, 자연어처리, 음성인식, 번역기에 폭넓게 사용됨
  • RNN의 문제 
    • 한 층 안에서 반복을 많이 해야하는 RNN의 특성상 일반 신경망보다 기울기 소실 문제가 더 많이 발생함
    • 기울기 소실 문제로 인해 장기 의존성 문제(Long-Term Dependency Issue)도 발생
  • RNN의 활성화 함수
    • 인공신경망 은닉층의 활성화 함수로 relu를 사용했으나, RNN에서는 일반적으로 LSTM을 사용
    • LSTM과 GRU 등으로 장기 의존성 문제를 해결하여 개선 가능
    • LSTM(Long Short-Term Memory): 출력, 입력, 삭제 게이트라는 3개의 게이트가 존재하여 relu에 비해 더 긴 데이터를 기억할 수 있게 설계
    • GRU(Gated Recurrent Unit): 업데이트 게이트와 리셋 게이트 두 가지 게이트만이 존재하여 복잡했던 LSTM의 구조를 간단화시킴
  • RNN은 모형의 구성에 따라 다양한 용도로 활용할 수 있음

    RNN 모형의 구성

    • one to one
      ◼️   입력과 출력이 각각 하나씩 대응하는 모형
      ◼️   텍스트 분류, 감정 분석 등에서 활용 가능
      ◼️   예시: ‘이 영화는 재미있다’ “긍정적(감정 분석)”
    • one to many
      ◼️   그림을 한 장 입력받아 그림을 설명하는 문장을 여러 개 생성하는 방식으로 활용 가능
      ◼️   이미지 캡션 생성이나 Q&A 시스템에서 주로 활용
      ◼️   예시: ‘사진에 강아지가 있다.’ “강아지는 공을 물고 있다.(이미지 캡션 생성)”
    • many to one
      ◼️   여러 개의 입력에 대해 하나의 출력을 생성하는 모형
      ◼️   시퀀스 분류 문제에서 활용됨
      ◼️   예시: ‘오늘 날씨는 맑고 기온은 25도, 내일은 비가 올 확률이 높다.’ ”내일 우산을 챙겨야 한다.(날씨예측)”
    • many to many
      ◼️   여러 단어로 구성된 영어 문장을 한국어로 변환하는 번역기에 활용할 수 있음
      ◼️   기계 번역이나 음성 인식, 음성 합성에 주로 활용됨
      ◼️   예시: ’I am learning RNN.’ ”저는 RNN을 배우고 있습니다.(기계 번역)”

예시 코드

# RNN 모델의 구조 설정
model = Sequential()
model.add(Embedding(1000,100))   # Embedding('불러온 단어의 총수', '기사당 단어 수')
model.add(LSTM(100, activation='tanh'))   # LSTM('기사당 단어 수', '기타 옵션')
model.add(Dense(46, activation='softmax')
  • Embedding 층: 데이터 전처리 과정을 통해 입력된 값을 받아 다음 층이 알 수 있는 형태로 변환
  • LSTM(): RNN에서 기억 값에 대한 가중치를 제어(활성화 함수로는 tanh를 주로 사용)

적용 사례

  • 시계열 데이터 분석: 주가 예측, 날씨 예측 등
  • 자연어 처리: 텍스트 분류, 감정 분석, 기계 번역, 이미지 캡션 생성(RNN+CNN), 음성 인식(RNN+ASR)

 

GAN     Generative Adversarial  Network ; 생성적 적대 신경망

특징

  • 생성자(Generator)와 판별자(Discriminator)가 진짜같은 가짜를 만들기 위해 ‘적대적’ 경합을 진행하며 가상 이미지를 생성하는 알고리즘
  • 이미지 생성, 데이터 증강 등에 활용
  • 학습이 불안정할 수 있어 다양한 변형 모델이 존재함
    • DCGAN(Deep Convolutional GAN)
    • WGAN(Wasserstein GAN)
    • StyleGAN

예시 코드

# DCGAN 모델의 구조 설정
generator = Sequential()
generator.add(Dense(128*7*7, input_dim=100, activation=LeakyReLU(0.2))  # 입력층
generator.add(BatchNormalization())   # 배치 정규화
generator.add(Reshape((7,7,128)))   # 컨볼루션 층이 받아들일 수 있도록 데이터 구조 변경
generator.add(UpSampling2D())   # UpSampling2D
generator.add(Conv2D(64, kernel_size=5, padding='same')   # 컨볼루션 층
generator.add(BatchNormalization())   # 배치 정규화
generator.add(Activation(LeakyReLU(0.2)))
generator.add(UpSampling2D())   # UpSampling2D
generator.add(Conv2D(1, kernel_size=5, padding='same', activation='tanh')# 컨볼루션 층
  • 배치 정규화: 데이터의 배치를 정규분포로 만듦
  • UpSampling2D(): 이미지의 가로세로 크기를 두 배씩 늘려줌
    • 이미지의 최초 크기는 7*7이었으나, 두 번의 UpSampling2D을 거쳐 28*28이 됨
    • 작은 크기의 이미지를 점점 늘려가면서 컨볼루션 층을 지나치게 하는 것이 DCGAN의 특징
    • 케라스에서 제공하는 Conv2DTranspose() 함수: UpSampling + Conv2D

적용 사례

  • 딥페이크(Deepfake) 기술
  • 이미지 스타일 변환(예: 구글의 딥드림)
  • 데이터 증강(예: 의료 이미지 생성)

 

'AI' 카테고리의 다른 글

AWS AIF-C01 시험 정리(2)  (0) 2025.07.09
AWS AIF-C01 시험 정리(1)  (0) 2025.07.07
AICE Associate 시험 총정리  (0) 2025.06.30
딥러닝(1) - ANN, DNN, CNN  (0) 2025.03.23
Comments