본문 바로가기
Artificial Intelligence/Deep Learning

[딥러닝] LSTM(Long Short Term Memory)

by EunjiBest 2022. 2. 25.

[딥러닝] LSTM(Long Short Term Memory) 

 

 

 

 

좌 : LSTM, 우 : RNN

LSTM의 구조도 이다.

앞선 RNN의 구조와 크게 별 다를게 없어 보이지만

자세히 보면 무언가가 추가 됐다.

RNN은 A로 넘어가는 선? (화살표)이 하나지만

LSTM은 한 줄이 더 생겼다.

 

윗쪽 선은 Long Term Memory(장기기억)

아랫쪽 선은 Short Term Memory(단기기억)

이다.

 

 

잠시 Vanilla RNN의 문제점을 생각해보자면

첫 인풋 데이터의 A(weight)가 마지막까지 못간다는 것이였다.

 

하지만, LSTM에서는

중요도가 높은 인풋데이터를 Long Term Memory에 넣어줌으로써

weight의 값이 마지막까지 유지될 수 있게 해준다.

 

A안에는 복잡한 게이트들이 다양하게 있다.

만약 Long Term Memory 데이터가 중요하지 않다고 생각하는 경우에는

게이트 안에서 지워주기도 하고, 중요하다고 생각할 경우 살려주기도 한다.

 

내부 구조는 나중에 시간나면 각잡고 포스팅 해보도록 하겠다.

 

 

LSTM은 다양하게 모델링 활용이 가능하다.

 

그림을 대충 보면 뭐가 들어가고 뭐가 나오는지 알 수 있다.

간단히 몇개만 설명해 보도록 하겠다.

 

1. Many to one

문장을 통해서 단일 결과를 예측할 때 쓰인다.

예를 들면 리뷰를 통해서 평점이나 감정을 예측하는 것에 속한다.

 

tf.keras.layers.LSTM(64)

64는 필터의 개수라고 생각하면 편하다.

특성을 몇개를 추출 할 것이냐,

 

 

2. Many to many

문장을 통해서 시퀀스를 예측한다.

즉, 문장이 들어가서 문장이 나오는 형태.

예를 들면 문장을 보고 다음 문장을 예측하기,

검색엔진의 자동완성,

과거 20일간의 주가 데이터를 보고 향후 20일의 주가 예측하기가 속한다.

 

tf.keras.layers.LSTM(64, return_sequences = True)

Many to one과 다른 점은 return_sequences인데

이는 각각의 인풋에 대한 값을 아웃풋으로 리턴해라 이런 옵션이라고 한다.

 

 

tf.keras.layers.LSTM(64, return_sequences = True)
tf.keras.layers.LSTM(64, return_sequences = True)
tf.keras.layers.LSTM(64, return_sequences = True)
tf.keras.layers.LSTM(64, return_sequences = True)
tf.keras.layers.LSTM(64)

 

many to many로 레이어를 여러개 쌓을 때에는

가장 마지막 레이어 제외하고 모든 레이어에 return_sequences를 True로 줘야한다.

 

첫번째 레이어의 아웃풋 값이 단일값으로 나오면

두번째 레이어의 인풋값이 여러개로 들어갈 수 없기 때문에 에러가 난다.

 

반응형

댓글