딥러닝(2) - RNN, GAN 본문
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을 배우고 있습니다.(기계 번역)”
- one to one
예시 코드
# 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