LSTM 기본 개념

Gongsam·2023년 10월 19일
0

딥러닝

목록 보기
2/4
post-thumbnail

LSTM

Long Short Time Memory

RNN의 단점을 보완하기 위한 모델

RNN의 경우 입력 데이터의 길이가 길어지면 역전파 과정에서 입력층으로 갈 수록 가중치가 제대로 업데이트 되지 않는 기울기 소실 문제가 일어난다. 이는 이전의 정보를 제대로 기억하지 못하는 문제를 수반한다.

  • 이러한 문제를 해결하기 위해 고안된 모델이 LSTM
  • 이전 정보를 오랜 시간 기억 할 수 있는 메모리 셀을 가지고 있음 => 긴 시퀀스 데이터도 처리 가능

구조

  • 입력값, 이전 상태에 따라 값을 업데이트, 새로운 상태 출력
  • 게이트의 존재: 셀의 값을 얼마나 기억할지 제어 가능. = 필요한 정보만 저장할 수 있다.
    • 망각 게이트 (forget gate)
    • 입력 게이트 (input gate)
    • 출력 게이트 (output gate)

이미지 출처

구분단계설명
Cell StateCt-1 -> CtCt-1에서 Ct로 변화하는 상태를 나타냄이전 상태에서 현재 상태까지 유지되는 정보의 흐름 / 오래된 정보를 기억하고 새로운 정보를 적절히 갱신하게 하는 역할
Forget GateLSTM의 forget gate. 입력값을 받아 시그모이드 함수로 계산한다. 첫 번째 시그모이드 함수 부분셀의 정보를 지울지 말지 결정. 계산 식이 0이면 지우고 1이면 기억
Input GateLSTM의 input gate. 입력값을 각각 시그모이드 함수와 탄젠트 함수로 계산한다. 두 번째 시그모이드 함수와 탄젠트 함수로 계산된 부분새로운 정보를 반영하는 방법을 결정 -> 기존 정보와 새로운 정보를 적절히 조합, 예측 결과가 더 좋아짐
시그모이드는 어떤 값을 업데이트 할지 결정, 탄젠트는 새로운 후보값을 만듦. 둘을 곱해서 사용한다.
Cell State 업데이트이전 상태인 Ct-1에 forget gate의 결과 값을 곱해 잊어버리기로 했던 정보를 진짜 잊는다. 그리고 input gate의 결과 값을 더한다.
Output Gate마지막 시그모이드와 탄젠트 부분시그모이드: input 데이터를 받아 cell state의 어느 부분을 output으로 보낼지 결정
cell state를 탄젠트에 넘겨주어 -1과 1 사이의 값으로 계산한 뒤 시그모이드의 결과값과 곱해줌 => 원하는 값만 output으로 보낼 수 있다.

시그모이드는 출력 여부를 결정하는 함수

keras.Sequential()

class TextGenerator(tf.keras.Model):
    def __init__(self, vocab_size, embedding_size, hidden_size):
        super().__init__()
        
        self.embedding = tf.keras.layers.Embedding(vocab_size, embedding_size)
        self.rnn_1 = tf.keras.layers.LSTM(hidden_size, return_sequences=True)
        self.rnn_2 = tf.keras.layers.LSTM(hidden_size, return_sequences=True)
        self.linear = tf.keras.layers.Dense(vocab_size)
        
    def call(self, x):
        out = self.embedding(x)
        out = self.rnn_1(out)
        out = self.rnn_2(out)
        out = self.linear(out)
        
        return out
  • Embedding Layer:

    단어를 벡터로 표현하는 것
  • LSTM
    • unit: 데이터의 차원 => 늘린다 = 데이터의 차원을 늘린다 = 모델이 데이터를 더 잘 설명할 수 있게 된다 = 오버 피팅의 가능성이 늘어난다.
    • 하지만 unit보다는 hidden layer를 쌓는 것이 성능 향상에는 더 효과적
    • 첫 번째만 input_size를 넣어줘야하고 두 번째부터는 첫 레이어의 output size가 input size가 된다.

참고 및 출처

LSTM: 기초 이해
LSTM 이해하기
[LSTM] LSTM unit, cell, layer에 대한 이해

profile
🐬 파이썬 / 인공지능 / 머신러닝

0개의 댓글