RNN(Recurrent Neural Network)
- 시계열 데이터 처리에 특화된 아키텍처
- 이전 단계의 정보를 기억하고 활용할 수 있는 능
Sequence(시퀀스 데이터)
- 문장을 구성하는 단어들의 순서
- 시간에 따른 주식 가격의 변화
- 음성 신호의 연속된 파형
순환신경망 구조
입력층 → 반복(hidden) 층 → 출력층
- 입력층 (Input Layer)
- 시퀀스 데이터 (예: 문장, 주식 가격, 음성 신호)
- 시점(t)에 따라 나눠진 입력 벡터 ( x_t )
- 예: 자연어 처리라면 단어 임베딩 벡터, 시계열 데이터라면 숫자 값
- 반복(hidden)층 (Recurrent Hidden Layer)
- 현재 시점(t)의 입력 ( x_t )과 이전 시점(t-1)의 hidden state ( h_{t-1} )를 사용하여 새로운 hidden state ( h_t )를 계산
- 출력층 (Output Layer)
- 최종 출력 ( y_t )을 생성
- 예측 결과를 Softmax, Sigmoid 등을 사용해 출력
반복층(hidden layer)
- 현재 입력 을 받음
- 이전 히든 상태와 결합
- 가중치 연산 후 새로운 히든 상태 생성
- 출력층에 전달하거나 다음 시점으로 전달
예제 코드
import torch
import math
import matplotlib.pyplot as plt
from torch.utils.data import TensorDataset, DataLoader
import torch.nn as nn
class DataCollector:
def __init__(self):
self.sin_x = torch.linspace(-2*math.pi, 2*math.pi, 100)
self.sin_y = torch.sin(self.sin_x) + 0.1*torch.randn(len(self.sin_x))
def show_data(self):
plt.plot(self.sin_x, self.sin_y)
plt.show()
class myDataLoader:
def __init__(self, data_collector, n_time=10):
self.n_time = n_time
self.sin_x = data_collector.sin_x
self.sin_y = data_collector.sin_y
self.n_sample = len(self.sin_x) - n_time
def get_dataloader(self):
self.input_data = torch.zeros((self.n_sample, self.n_time, 1))
self.correct_data = torch.zeros((self.n_sample, 1))
for i in range(self.n_sample):
self.input_data[i] = self.sin_y[i:i+self.n_time].view(-1,1) # (시각 수 , 입력 수)
self.correct_data[i] = self.sin_y[i+self.n_time:i+self.n_time+1]
dataset = TensorDataset(self.input_data, self.correct_data)
train_loader = DataLoader(dataset, batch_size= 8, shuffle = True)
return train_loader
class Net(nn.Module):
def __init__(self):
super().__init__()
self.rnn = nn.RNN(input_size = 1, hidden_size = 64, num_layers= 2, batch_first=True)
self.fc = nn.Linear(64,1)
def forward(self, x):
y_rnn, h = self.rnn(x, None)
y = self.fc(y_rnn[:,-1,:])
return y
RNN 이용 분야(with GPT)
1. 자연어 처리 (NLP, Natural Language Processing)
- 텍스트 생성: 챗봇, 자동 번역, 감성 분석
- 음성 인식: 음성-텍스트 변환(STT), 가상 비서(AI Assistant)
- 문장 요약: 긴 문장을 요약하는 기술
2. 시계열 데이터 분석
- 주식 예측: 과거 가격 데이터를 바탕으로 미래 가격 예측
- 날씨 예측: 기상 데이터 분석 및 예측 모델
- 센서 데이터 처리: IoT 기기에서 수집된 데이터를 활용한 이상 탐지
3. 음성 및 영상 처리
- 음성 합성 (TTS): 텍스트를 음성으로 변환
- 영상 캡션 생성: 영상 내용을 분석하여 자막 자동 생성
- 행동 예측: 스포츠 분석, 보안 시스템에서 행동 패턴 분석
RNN 한계
- 기울기 소실(Vanishing Gradient) 문제
- 시간이 길어질수록, 과거의 정보가 현재에 영향을 미치기 어려움
- 원인은 backpropagation 과정에서 기울기(gradient)가 0에 가까워지면서 학습이 잘 안 되기 때문
- 장기 의존성(Long-term dependency) 문제
- 문장이 길어지면 문맥을 유지하기 어려움
- 오래된 정보가 사라지고 최근 정보만 반영되는 경향이 있음
이런 문제를 해결하기 위해 LSTM, GRU 같은 개선된 구조가 등장함.
참고
https://stanford.edu/~shervine/teaching/cs-230/cheatsheet-recurrent-neural-networks
https://www.geeksforgeeks.org/introduction-to-recurrent-neural-network/
https://www.pycodemates.com/2023/08/recurrent-neural-networks-explained.html
'AI > DeepLearning' 카테고리의 다른 글
[DL] CNN(합성곱신경망) 맛보기 (0) | 2025.02.12 |
---|---|
[DL] 딥러닝 훓어보기 (0) | 2025.02.10 |