ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • LSTM(Long short term memory)
    개발 이야기/TIL 2023. 8. 7. 16:00

    LSTM이 나오게 된 배경

    RNN의 경우 상태와 현재 상태의 거리가 멀어질 경우 vanishing(exploding) gradient problem(거리가 멀 수록 gradient가 크게 줄어(증가) 학습에 영향을 주지 못하는 상태), 장기 의존성 문제(the problem of Long-Term Dependencies)가 발생하는데 이를 극복하기 위해 hidden state에 cell state를 추가한 구조이다.

    LSTM 

    Long short term memory, LSTM은 이런 문제를 해결하기 위해  gate 구조를 추가하였다. 

    LSTM 셀에서는 상태(state)가 크게 두 개의 벡터로 나누어집니다. $h_t$를 단기 상태(short-term state),  $c_t$를 장기 상태(long-term state)라고 볼 수 있습니다.

    LSTM의 전체적인 구조

     

    각 state에 관한 설명은 아래와 같다. 

    0. Cell state

    Cell state는 정보(상태)를 output과 별개로  흐르도록 하는 역할이다. 이제 이 cell state에 추가적인 조작을 가해서(gate를 통해) 정보를 추가할 것이다.

    LSTM의 cell state

    1. Forget gate 

    Forget gate는 cell state에서 sigmoid layer를 거쳐 어떤 정보를 버릴 것인지 정합니다.

    $h_(t-1)$은 이전 hidden state 정보, $ x_t $는 현재 input을 의미한다. sigmoid를 통과한 값과 $c_(t-1)$을 곱한다는 것은 sigmoid값이 0에 가까울 수록 해당 정보를 덜 활용하고, 1에 가까울 수록 더 사용하다는 것을 의미한다.  즉, 이전 cell의 정보를 얼마나 사용할지 정한다. 

    LSTM의 forget gate layer

    2. Input gate 

    Input gate는 앞으로 들어오는 새로운 정보 중 어떤 것을 cell state에 저장할 것인지를 정합니다. 먼저 sigmoid layer를 거처 어떤 값을 업데이트할 것인지를 정한 후 tanh layer에서 새로운 후보 Vector($ \tide{C}_t $)를 만듭니다. 

    4. Cell state update

    이전 gate에서 버릴 정보들과 업데이트할 정보들을 정했다면, Cell state update 과정에서 업데이트를 진행합니다.

    를 곱해서 버리기로 한 정보를 버린다. $를 더해서 업데이트 하기로 한 정보를 얼마나 업데이트 할 지 반영한다.

    전 단계에서 무엇을 할지(어떤것을 잊을지, 어떤것을 새롭게 업데이트할지)는 이미 결정하였으니 이제 실제로 그것을 하기만 하면 된다.

    5. Output gate 

    Output gate는 어떤 정보를 output으로 내보낼지 정하게 됩니다. 이 출력은 현재 cell state인 C(t)를 가지고 정하지만, 모든 C(t)를 사용하지 않고, 일부만 필터링하여 출력할 것입니다.

    (1) O(t): 첫째로, 시그모이드를 써서 현재 cell state 중에서 어떤 부분만 출력을 할지를 정합니다

    (2) 둘째로, 우리는 cell state를 tanh 함수(-1과 1사이의 값을 출력)를 사용하고 위에서 구한 O(t)와 곱하여 최종적으로 출력할 부분을 결정합니다.

     

    햇갈리는 것들: g(Gate gate)와 i(Input Gate)의 차이

    처음 볼때, cell state와 hidden state의 차이에 관해 이해가 잘 되지 않았다. 둘다, 이전 정보를 담고 있는 것이 아닌가?

    정리하면 $C_t$는 우리가 최종적으로 LSTM 연산에 활용할 Cell state이고, 틸다  $C_t$는 오로지 이전 Hidden state와 input으로 구해진 RNN에서의 $h_t$와 동일한 관점이다. 

    단, LSTM의 hidden state는 최종 $C_t$로 구해지기에 hidden state 대신 별다른 용어를 사용하는 것이다.

     

    그럼 Cell state와 hidden state는 뭐가 다를까? 

    Cell State는 과거 정보를 담는 State, Hidden State는 Cell State를 활용하여 도출한 Hidden State Vector라고 생각하면 된다.

     

    출처: https://velog.io/@idj7183/LSTM-sz375pgx#:~:text=Cell%20State%EB%8A%94%20%EA%B3%BC%EA%B1%B0%20%EC%A0%95%EB%B3%B4,LSTM%20Model%EC%97%90%20%EC%A0%84%EB%8B%AC%EB%90%9C%EB%8B%A4.

    https://datascience.stackexchange.com/questions/82808/whats-the-difference-between-the-cell-and-hidden-state-in-lstm

    LSTM vs RNN 요약

    - 기존 RNN에서 있었던 Gradinet vanishing & exploding을 해결하고, 장기 의존성을 해결하기 위해 나온 방법이 LSTM이다

     

    - 이를 위해 cell의 state를 저장하고, 이전의 cell의 값을 얼마나 반영하고, 새로운 정보를 얼마나 반영할지 정해져야한다(변하는 hidden state와 다른게 장거리 기억전달에 용이하다??)

     

    - 기존 RNN과 비교하면, RNN에서는 cell state에 해당하는 C(t)가 없었고, h(t)만이 존재했다. 이는 hidden state로 이전까지 계산한 결과를 전달해주는 역할을 하였다. RNN에서의 h(t)가 LSTM에서는 g(t) 즉, 틸다C(t)에 해당한다(tanh의 output에 해당하기에)

     

     

    - g(t)만 필요했던 RNN에 비해서 LSTM은 input 양을 조절하는 i(t), foget 양을 조절하는 f(t), output 양을 조절하는 o(t)까지 총 3개의 파라미터가 더 필요하기에 정리하면, LSTM RNN에 비하여 파라미터가 1개에서 4개로 늘어나 4배가 더 필요하다. 

     

    참고자료

    https://hyen4110.tistory.com/25

    https://www.youtube.com/watch?v=Hn3GHHOXKCE 

    https://ratsgo.github.io/natural%20language%20processing/2017/03/09/rnnlstm/

    https://wikidocs.net/22886

    http://www.incodom.kr/LSTM

    https://www.youtube.com/watch?v=bX6GLbpw-A4

Designed by Tistory.