LSTM(Long Short-Term Memory)

이상우·2022년 1월 13일
0

장단기 메모리(Long Short-Term Memory)인 LSTM은 RNN의 특별한 한 종류로, RNN이 가지고 있는 장기 의존성 문제를 해결할 수 있는 방법론이다. 일단 우선 긴 의존 기간문제에 대해서 설명부터 하겠다.

기존 RNN이 가진 한계점


출처:https://wikidocs.net/22888
위의 그림과 같이 뒤로 갈 수록 첫번째 입력값인 x1의 영향력이 점점 희미해진다.

아래 참고 사이트에서 예시가 좋아서 들고와보겠다. "모스크바에 여행을 왔는데 건물도 예쁘고 먹을 것도 맛있었어. 그런데 글쎄 직장 상사한테 전화가 왔어. 어디냐고 묻더라구 그래서 나는 말했지. 저 여행왔는데요. 여기 __" 다음 단어를 예측하기 위해서는 장소 정보가 필요한데 RNN이 충분한 기억력을 가지고 있지 못한다면 다음 단어를 엉뚱하게 예측한다.

이게 위에서 말한 장기 의존성 문제이다. 이 문제를 해결하기 위해서 이전의 입력값에 대한 가중치를 조절해주기 위한 LSTM을 사용한다.

LSTM


위의 그림은 LSTM의 전체적인 내부의 모습이다.
LSTM은 은닉층의 메모리 셀에 입력 게이트, 망각 게이트, 출력 게이트를 추가하여 불필요한 기억을 지우고, 기억해야할 것들을 정한다. LSTM은 기존의 RNN보다 은닉층의 계산이 조금 더 복잡해지고 셀 상태(cell state)라는 개념이 추가 되었다. (위의 그림에서는 t시점의 셀 상태를 Ct로 표현하고 있다.)

  • σ는 시그모이드 함수를 의미
  • Wxi, Wxg, Wxf, Wxo는 xt와 함께 각 게이트에서 사용되는 4개의 가중치이다.
  • Whi,Whg,Whf,Who는 ht−1와 함께 각 게이트에서 사용되는 4개의 가중치이다.
  • bi,bg,bf,bo는 각 게이트에서 사용되는 4개의 편향이다.

1.입력 게이트(it, gt)



입력 게이트는 현재 정보를 기억하기 위한 게이트이다.
현재 시점(t)의 x값과 이전 시점(t-1)의 은닉상태(ht-1)에 각각의 가중치를 곱하여 더한값을 시그모이드 함수에 넣은 값이 it, 탄젠트 함수에 넣은 값이 gt(시그모이드 함수를 지나 0과 1 사이의 값과 하이퍼볼릭탄젠트 함수를 지나 -1과 1사이의 값 두 개가 나오게 됨)
이 두 개의 값을 가지고 이번에 선택된 기억할 정보의 양을 정하게 된다.

2.삭제 게이트(ft)



삭제 게이트는 기억을 삭제하기 위한 게이트이다.
현재 시점(t)의 x값과 이전 시점(t-1)의 은닉상태가 시그모이드 함수를 지난다.
이 값이 0에 가까울수록 정보가 많이 삭제된 것이고 1에 가까울수록 정보를 온전히 기억한 것이다. 이를 가지고 셀 상태를 구하게 된다.

3.셀 상태(장기 상태)



셀 상태 Ct를 LSTM에서는 장기 상태라고도 한다.
입력 게이트에서 구한 it, gt이 두 개의 값에 대해서 원소별 곱(entrywise product)을 진행한다. 입력 게이트에서 선택된 기억을 삭제 게이트의 결과값과 더한다. 이 값을 현재 시점 t의 셀 상태라고 하며, 이 값은 다음 t+1 시점의 LSTM 셀로 넘겨진다.
삭제 게이트와 입력 게이트의 영향력을 이해해보기 : 만약 삭제 게이트의 출력값인 ft가 0이 된다면, 이전 시점의 셀 상태값인 Ct−1은 현재 시점의 셀 상태값을 결정하기 위한 영향력이 0이 되면서, 오직 입력 게이트의 결과만이 현재 시점의 셀 상태값 Ct을 결정할 수 있다. 반대로 입력 게이트의 it값을 0이라고 한다면, 현재 시점의 셀 상태값 Ct는 오직 이전 시점의 셀 상태값 Ct−1의 값에만 의존한다.

결과적으로 삭제 게이트는 이전 시점의 입력을 얼마나 반영할지를 의미하고, 입력 게이트는 현재 시점의 입력을 얼마나 반영할지를 결정한다.

4.출력 게이트와 은닉 상태(단기 상태)


  • 출력 게이트는 현재 시점 t의 x값과 이전 시점 t-1의 은닉 상태가 시그모이드 함수를 지난 값(해당 값은 현재 시점 t의 은닉 상태를 결정하는 일에 쓰이게 된다.)
  • 은닉 상태를 단기 상태라고도 함.
  • 은닉 상태는 장기 상태의 값이 하이퍼볼릭탄젠트 함수를 지나 -1과 1사이의 값
  • 해당 값은 출력 게이트의 값과 연산되면서, 값이 걸러지는 효과가 발생한다. 단기 상태의 값은 또한 출력층으로도 향한다.

참고 사이트

profile
구상한것을 구현할 수 있는 개발자가 되고 싶습니다.

0개의 댓글