본문 바로가기

명사 美 비격식 (무리 중에서) 아주 뛰어난[눈에 띄는] 사람[것]

이론

RNN 순환신경망의 한 종류, LSTM이란?: 장기 의존성 문제를 해결하기 위해 개발된 딥러닝 모델 (feat.GRU)

LSTM(Long Short-Term Memory)
RNN(Recurrent Neural Network, 순환 신경망)의 한 종류

장기 의존성(Long-Term Dependency) 문제를 해결하기 위해 개발된 딥러닝 모델

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense

# 모델 생성
model = Sequential()

# LSTM 층
model.add(LSTM(64, input_shape=(10, 20)))

# 출력층
model.add(Dense(1))

# 모델 정보 출력
model.summary()
import torch
import torch.nn as nn

# LSTM 생성
lstm = nn.LSTM(
    input_size=20,
    hidden_size=64,
    num_layers=1,
    batch_first=True
)

# 예제 입력 (배치 크기=32, 시퀀스 길이=10, 특성 수=20)
x = torch.randn(32, 10, 20)

# 순전파
output, (hidden, cell) = lstm(x)

print(output.shape)
print(hidden.shape)
print(cell.shape)


기존 RNN은 시퀀스(Sequence) 데이터를 처리할 수 있지만, 문장이 길어질수록 이전 정보를 잊어버리는 기울기 소실(Vanishing Gradient) 문제가 발생한다.

LSTM은 이러한 문제를 해결하기 위해 셀 상태(Cell State)와 게이트(Gate) 구조를 도입하여 중요한 정보는 오래 기억하고, 불필요한 정보는 잊도록 설계되었다.

https://standout.tistory.com/1537

 

딥러닝: Deep Neural Network (DNN), Convolutional Neural Network (CNN), Recurrent Neural Network (RNN)

딥러닝 (Deep Learning)이미지 인식, 자연어 처리, 음성 인식 등인공 신경망을 여러 층(layer)으로 쌓아서 구성한 모델다층 구조로 인해 복잡한 데이터 패턴을 자동으로 학습특성 추출 

standout.tistory.com

 

대표적으로 자연어 처리(NLP), 음성 인식, 시계열 예측 등 순서가 중요한 데이터 처리에 널리 사용된다.
Forget Gate (망각 게이트),  Input Gate (입력 게이트), Output Gate (출력 게이트)
이 과정을 모든 시점에 반복하여 긴 문맥도 효과적으로 처리한다.
1. Forget Gate: 이전 정보 중 불필요한 내용을 제거한다.
2. Input Gate: 현재 입력에서 중요한 정보를 Cell State에 저장한다.
3. Cell State 업데이트: 기존 기억과 새로운 기억을 결합한다.
4. Output Gate: 현재 시점에 필요한 정보를 Hidden State로 출력한다.

 


긴 문맥의 정보를 기억할 수 있고, RNN의 기울기 소실 문제를 크게 완화한다.
자연어 처리, 음성 인식, 시계열 예측 등 다양한 순차 데이터에 적용 가능하며 게이트 구조를 통해 중요한 정보와 불필요한 정보를 효과적으로 구분한다.
단, 구조가 복잡하여 학습 시간이 길고 계산량이 많고, 파라미터 수가 많아 메모리 사용량이 증가한다.
병렬 처리가 어려워 학습 속도가 제한될 수 있어 최근 NLP에서는 Transformer 계열 모델이 긴 문맥 처리와 병렬 연산 측면에서 더 뛰어난 성능을 보여, BERT나 GPT 같은 모델이 LSTM을 대체하는 경우가 많다.

 

 

 

위 LSTM을 간단하게 만든 모델이 있다 .


GRU (Gated Recurrent Unit)

Cell State를 제거해 Gate를 2개만 사용한다. Reset Gate, Update Gate

LSTM 보다 빠르고 성능도 거의 비슷하다.

import torch
import torch.nn as nn

gru = nn.GRU(
    input_size=100,
    hidden_size=128,
    batch_first=True
)

x = torch.randn(32,20,100)

output,h=gru(x)

print(output.shape)