')">

인공지능 모형 만들기 2

Encoder & Decoder II

Posted by Jong-June Jeon on July 03, 2024

RNN Decoder

디코더를 만들어봅시다. 우리가 만들 디코더는 입력계열1이 rnn을 거쳐 변환된 결과물인 맥락벡터를 받아서 재귀적으로 예측결과를 만드는 함수입니다. 우리는 미래 세 개의 시점을 예측하기로 했습니다. 디코더를 구성하는 rnn cell에서 이루어져야하는필요한 작업을 설명하겠습니다. 여기서는 RNN cell 의 레이어가 2개인 경우이므로 맥락벡터 $h_t$ 는 사실 $(h_t^{(1)},h_t^{(2)})$ 입니다.

  1. rnn으로 부터 맥락벡터 $h_t$를 받아 디코더에 사용할 잠재변수의 초기값으로 준비합니다.
  2. 현재 시점의 관측치 $x_t$ 를 받아 디코더의 입력변수로 사용합니다.
  3. 디코더의 첫 번째 rnn cell 에 $h_t$를 잠재변수 초기값으로 $x_t$를 입력값으로 하여 $h_{t+1}$ 을 만듭니다.
  4. $h_{t+1}^{(2)}$를 이용하여 $x_{t+1}$에 대한 예측값 $\widehat x_{t+1}$을 만듭니다. (linear model, FFN 등을 사용할 수 있습니다)

디코더의 첫 번째 RNN cell에서 일어나는 일을 코드로 써 보겠습니다. 먼저 우리가 사용할 Decoder의 RNN cell 을 rnn_d 라고 하겠습니다. 그리고 rnn_d 의 출력값 1 (output)을 이용해서 $\widehat x_{t+1}$ 을 만들어줄 선형사상 fc를 정의하겠습니다.

rnn_d = nn.RNN(input_size, hidden_size, num_layers,
    batch_first=True)
fnn = nn.Linear(hidden_size,1)

다음으로 앞서 만들어 놓은 train_data[0][0] 를 입력형식에 맞게 변환하여 맥락백터를 만듭니다.


x = torch.tensor(train_data[0][0]).unsqueeze(0).to(device)
ht = rnn(x)
xt = x[0:1,5:6,:]
out, ht = rnn_d(xt, ht)

디코더를 구성하는 방식은 두가지입니다.
- teacher forcing 방식: decoder의 훈련에 사용하는 방법으로 예측대상을 훈련에 사용합니다.
- inference 방식: decorder의 모형으로 예측대상을 훈련에 사용하지 않습니다.