RNN, LSTM

이지민·2024년 3월 26일

파이토치에서 사용법과 내부 알고리즘이 어떠한지에 대해 알아보았다.

RNN

sequence를 입력받아 매 time step마다 output을 반환하며
hidden state가 조정된다.

input과 hidden state를 입력받아 output과 조정된 hidden state를 반환하는 RnnCell은 (batch,raw)의 shape을 입력받을 것이다.

이를 매 timestep마다 자동으로 반복해주는 Rnn은 위를 계승하여
input.shape가 (timestep,batch,raw)이다.

batch_first=True를 해주면 input.shape와 output.shape의 timestep과 batch의 차원의 위치가 변경해서 넣어도 알아서 조정해주고 output의 차원도 변경해서 return 해준다.

최종적으로 rnn계층은 매 output들을 모은 sequence와
마지막 timestep의 hidden state를 반환해준다.

LSTM

매 timestep마다 input를 입력받아 hidden state와 cell state를 조정한 뒤 hidden state를 반환하고 다음 timestep에 hidden state와 cell state를 넘겨준다.

LSTM은 매 hidden state를 모은 sequence와 마지막 timestep의 hidden state와 cell state를 반환해 준다.

두 계층 모두

num_layers의 수에 따라 이전 layer의 rnn의 경우에는 output을, lstm의 경우에는 hidden state의 sequence를 input으로 하는 layer를 쌓을수 있다.
이 경우에 반환되는 마지막 hidden, cell state의 개수가 num_layers의 수가 된다.

bidirectional=True를 설정할 시 양방향으로 위 과정을 반복하며 두 결과를 concat하여 output의 길이(timestep 마다의 output 차원)가 2배가 되고, 반환되는 마지막 hidden state의 개수도 2배로 늘어난다.

0개의 댓글