4. 다대다: 입력과 출력이 다수인 구조로, 언어를 번역하는 자동 번역기 등이 대표적인 사례입니다.
예를 들어 다대다에 대한 모델은 파이토치에서 다음과 같이 구현합니다. 엄밀히 말해서 파이토치는 텐서플로처럼 구현이 간단하지 않습니다. 텐서플로에서는 keras.layers.SimpleRNN (100, return_sequences=True, name='RNN')처럼 return_sequences=True 옵션으로 시퀀스를 리턴하도록 쉽게 구현할 수 있습니다. 반면에 파이토치에서는 다음과 같이 문장 번역에서 많이 사용되는 시퀀스-투-시퀀스(seq 2 seq)를 이용하는 방식으로 사용됩니다.
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) ) )
코드를 구조화하면 다음 그림과 같습니다.
▲ 그림 7-7 다대다 모델