본문 바로가기

머신러닝 읽어주는 남자

[오직 컨셉]RNN, LSTM, GRU, Seq2Seq

반응형

RNN


기본 용어

hidden state = 출력, 매시간 마다 출력되는 값


기본개념

연속적인 시간으로 고려하기 위해 만든 모델

현재의 hidden state( = output)를 출력하기 전에 현재의 입력만 보는게  아니라 직전(t-1)의 hidden state도 고려함.

직전의 hidden state와 현재의 입력값을 잘 버무려서 hidden state로 넘겨줌.

그 잘 버무려주는 웨이트를 학습하면 된다. 


쉬운 수식

(현재 입력) * w1+ (직전 hidden) * w2+ bias  ==> activation func  ==> 현재  hidden state


특이점

웨이트는 기본적으로 타임 step 별로 달라지는게 아니라 늘 동일하다.  타임 step별로 weight를 따로 학습을 할 경우 순서에 빈감해질수도 있다. 

시작점은 이전의 hidden state가 존재하지 않는데 그래서 그냥 0으로 넣어줄 수도 있고 이것도 학습할 수가 있다.




LSTM


기본 용어

hidden state = 출력, 매시간 마다 출력되는 값(rnn과 동일)

Cell state: 기억 혹은 컨베이어 벨트 , 여기에 기억을 추가 또는 빼버린다.


기본 개념

RNN이 좀 더 장기 기억을 갖게 하기 위해 만든 걸로, 

hidden state 뿐만 아니라 CELL state라는 기억의 컨베이어 벨트를 만들었다. 

시간이 진행되면 이 기억의 컨베이어 벨트라는 Cell state에 원하는 정보를 빼든, 원하는 정보를 넣어서 다음에 전달한다. 


쉬운 수식

(현재 cell state) = w1 * (직전 cell state) + w2 * (직전 hidden state와 입력값을 버무린 값)

의미 ==> w1만큼 과거 기억(cell state)를 까먹고, w2 만큼 현재 입력 및 직전 출력 정보를 추가해준다. 

(현재 hidden state) = w3 *tanh(현재 cell state)

의미 ==> 현재의 출력은 새로 만들어진 cell state를 조절해서 내보낸다.


특이점

총 3개의 gate

forget gate: 직전 Cell 정보에 웨이트를 곱해서 전달된 정보를 얼마나 전달할지 결정. 웨이트는 현재 입력과 직전 hidden에 의해 결정됨. weight * (과거 Cell), 여기서 weight는 

input gate: Cell에 현재 정보를 얼마나 실을지 결정함. 현재 정보에 웨이트를 곱해서 더해줌.

output gate: 위에서 업뎃된 cell 정보를 기준으로 출력 즉, hidden state를 내보내줌



GRU

hidden state 와 Cell를 합쳐버림

현재 입력정보 + 이전 hidden state 정보를 이용하여 임시 현재 hidden state를 만든다.

이전 hidden state와 임시 현재 hidden state를 잘 버무려(weighted sum) 새로운 hidden state를 완성한다. 

 


Seq2Seq

기본 개념

RNN, LSTM, GRU 등을 2개 이상을 붙여놓은 것

기존의 애들은 time step 마다 펼쳐서 마치 여러 개 인것 처럼보이지만 실제로 RNN는 한개이다.

하지만 얘는 실제로 2개의 2개의 다른 RNN이다.


기존 

RNN1 - RNN1 - RNN1 - RNN1 - RNN1 - RNN1 


Seq2Seq

RNN1 - RNN1 - RNN1 - RNN2 - RNN2 - RNN2

        인코딩 부분       |      디코딩 부분


쉬운 수식


특이점


반응형