시간적으로 연속성이 있는 데이터를 처리하기 위한 인공 신경망
기억(→ 현재까지의 입력 데이터를 요약한 정보)을 가짐

RNN
⇒ 외부 입력과 자신의 이전 상태를 입력받아 현재 상태를 갱신

일대일
일대다
다대일

입력이 다수이고 출력이 하나인 구조
ex) 감성 분석(= 문장을 입력해서 긍정/부정을 출력)이 대표적
구현
self.em = nn.Embedding(len(TEXT.vocab.stoi), embedding_dim) # 임베딩 처리
self.rnn = nn.RNNCell(input_dim, hidden_size) # RNN 적용
self.fc1 = nn.Linear(hidden_size, 256) # 완전연결층
self.fc2 = nn.Linear(256, 3) # 출력층
층을 쌓아 올려 적층된 구조로도 구현 가능

다대다

입력과 출력이 다수인 구조
ex) 자동 번역기 등
파이토치에서는 seq2seq 방식을 주로 활용
Seq2Seq(
(encoder) : Encoder(
(embedding) : Embedding(7855, 256)
(rnn) : LSTM(256, 512, num_layers = 2, dropout = 0.5)
(dropout) : Dropout(p = 0.5, inplace = False)
)
(decoder) : Decoder(
(embedding) : Embedding(5893, 256)
(rnn) : LSTM(256, 512, num_layers = 2, dropout = 0.5)
(fc_out) : Linear(in_features = 512, out_features = 5893, bias = True)
(dropout) : Dropout(p = 0.5, inplace = False)
)
)
동기화 다대다
RNN은 내장된 계층뿐만 아니라 셀 레벨의 API도 지원
RNN 셀은 오직 하나의 단계만 처리
RNN 계층은 셀을 래핑하여 동일한 셀을 여러 단계에 적용

셀: 실제 계산에 사용되는 RNN 계층의 구성 요소
⇒ 단일 입력과 과거 상태를 가져와 출력과 새로운 상태를 생성
유형
RNNCell: SimpleRNN 계층에 대응되는 RNN 셀GRUCell: GRU 계층에 대응되는 GRU 셀LSTMCell: LSTM 계층에 대응되는 LSTM 셀