LSTM 기초 구조

Jayce_97·2024년 5월 13일
0

스터디

목록 보기
2/10

Long Short-Term Memory (LSTM) 네트워크

소개

  • LSTM(Long Short-Term Memory)은 RNN(Recurrent Neural Network)의 한 종류로, 시퀀스 데이터를 처리하고 예측하는 데 특화된 딥러닝 모델
  • LSTM은 기본 RNN의 단점인 장기 의존성 문제를 해결하기 위해 고안되었다.
  • 기본적으로 LSTM은 RNN의 한 종류다.(중요한 상식)

LSTM의 특징

  • 장기 의존성 학습: LSTM은 정보를 장기간 저장하고, 필요에 따라 이를 활용할 수 있다.
  • 게이트 메커니즘: 입력, 출력, 그리고 삭제(잊기) 게이트를 통해 정보 흐름을 세밀하게 제어
  • 다양한 응용: 자연어 처리(NLP), 시계열 분석, 음성 인식 등 다양한 분야에서 활용
    • 라고 하는데 솔직하게 LSTM을 써본결과 그렇게 좋지가 않다. 특히 장기 의존성 학습이 보장된다고 하지만 기본적인 RNN에 비해 보장되는것이지 기울기 소멸 현상은 데이터가 너무 길어지면 여전히 맥락을 읽지 못하는 경향이 생긴다.

LSTM 네트워크 구조

LSTM 셀은 여러 구성 요소로 이루어져 있습니다:

  1. 입력 게이트: 새로운 정보를 셀 상태에 추가하기 위한 게이트
  2. 잊기 게이트: 셀 상태에서 불필요한 정보를 제거
  3. 출력 게이트: 셀 상태에 기반하여 다음 층 또는 다음 시간 단계로 출력할 정보를 결정
  4. 셀 상태: LSTM의 핵심 부분으로, 네트워크를 통해 정보가 전달되는 경로

  • 네트워크 구조는 만약 LSTM에 대해서 깊게 공부하고 싶다면 추천하지만 그 외에 경우에는 추천하지 않는다 특히 한물간 방식이기 때문에 내부에서 LSTM이 어떻게 동작하는지 이해하는 것보단. 트랜스포머와 같은 구조를 이해하는게 더욱 도움이 된다.
  • LSTM을 따로 공부하면서 느낀점이지만 결국 이거 파이토치에서 사용할 때 인풋과 아웃풋 차원만 알면 된다 내부에서 어떻게 동작하는지는 중요하지 않다. 뭘 넣었을때 뭐가 나오느냐, 그리고 그게 무엇을 의미하느냐가 핵심인듯하다.
  • 물론 공부하는 입장에서는 구조와 원리를 파악하는게 도움이 된다.

LSTM의 작동 방식

  1. 잊기 단계: 먼저, 이전 시간 단계의 정보 중 무엇을 잊을지 결정
  2. 입력 단계: 새로운 정보를 얻고, 이를 현재 셀 상태에 저장
  3. 출력 단계: 입력된 정보와 기존 셀 상태에 기반하여 최종 출력을 결정

LSTM의 응용

LSTM은 다음과 같은 다양한 분야에 응용

  • 자연어 처리: 문장 생성, 기계 번역, 감정 분석 등
  • 음성 인식: 음성 데이터의 시퀀스를 처리하여 텍스트로 변환
  • 시계열 예측: 주식 시장, 기후 변화 등 시계열 데이터의 미래 예측
    • 시계열 예측에서 사용하는 방식은 크게 두가지 방식이다.
      • stateful
      • stateless
      • 첫번째 방식은 cell state를 처음 시계열 시작지점부터 끝지점까지 계속해서 이어서 넘겨주는 방식이고
      • 두번째 방식은 cell state를 타임스탭(윈도우 사이즈)만큼만 유지하고 다음 윈도우 사이즈에서는 초기화 하는 방식이다
    • 사용해본 결과 둘 다 성능이 구리다.

위에는 기본 개념이고 우리가 쓰고 싶은건 파이토치니 파이토치 코드를 보자

  • RNN, LSTM, GRU에서 시계열을 다룬다고 하면 위에 그림만 떠올리자.
  • 피쳐가 여러개 들어갈 수 있고 1,2,3,4,5,6,7이 타임스텝(시퀀스길이)이다.
  • 결국 ANN처럼 생각해보자면 저기 시퀀스 길이에다가 어떤 데이터를 시간 순서대로 다 넣으면 8이라는 미래의 예측값 1개를 받는 구조다.
  • 이것만 알면 그냥 다이나믹하게 8번값을 다시 마지막에 값으로 넣고 예측값 다시 9번 받고 이방식으로 장기예측이 가능하다.

그렇다면 핵심은 인풋으로 데이터가 어떻게 들어가는지 구조를 아는것이다

공식 문서를 보면 이렇게 써져 있는데 batch=True 값이면 batch가 먼저 나온다는 정도만 알고 있다면 구조를 만질 수 있을 것이다.

그래서 nn.LSTM()에다가 인풋값을 넣고 나오는 아웃풋 값이 뭔지만 알면 거기서 [ : , : , :] 이렇게 슬라이싱 방식으로 해당하는 부분만 가져와서 MLP층에다가 넘겨주면 된다.

결론

LSTM은 복잡한 시퀀스 데이터를 처리하는 데 매우 효과적인 모델로, 다양한 분야에서 그 유용성이 입증되었다고 하지만 일반 RNN이 가진 한계를 극복한 것 외에는 현재에서는 특출난 성능을 보이지 않는다.

공부하기에는 좋다.


스터디 목록에 있는 내용은 스터디에서 학습한 내용입니다.

profile
AI (ML/DL) 학습

0개의 댓글