RNN (Recurrent Neural Network)

  • 입력하는 데이터의 순서에 영향을 받는다.
  • 음성, 텍스트 등 데이터의 크기가 가변적이다.
  • data shape = ( batch size, sequence length, input data dimension)
  • hidden state : 같은 값이 둘로 나뉘기 때문에 hidden size와 output size는 같다.
  • pytorch에서는 batch size와 sequence length를 자동으로 파악할 수 있다.

Seq2Seq

  • encoder : 입력된 seqeunce를 vector로 변환한다.
  • decoder : vector를 hidden state로 하여 output을 생성한다.
  • SOS_token : decoder의 시작 / EOS_token : 각 sequence의 끝
class Encoder(nn.Module):
    def __init__(self, input_size, hidden_size):
        super(Encoder, self).__init__()
        self.hidden_size = hidden_size
        self.embedding = nn.Embedding(input_size, hidden_size) 
        self.gru = nn.GRU(hidden_size, hidden_size)

    def forward(self, x, hidden):
        x = self.embedding(x).view(1,1,-1)
        x, hidden = self.gru(x, hidden)
        return x, hidden
class Decoder(nn.Module):
    def __init__(self, input_size, hidden_size):
        super(Decoder, self).__init__()
        self.hidden_size = hidden_size
        self.embedding = nn.Embedding(input_size, hidden_size) 
        self.gru = nn.GRU(hidden_size, hidden_size)
        self.out = nn.Linear(hidden_size, output_size)
        self.softmax = nn.LogSoftmax(dim=1)

    def forward(self, x, hidden):
        x = self.embedding(x).view(1,1,-1)
        x, hidden = self.gru(x, hidden)
        x = self.softmax(self.out(x[0]))
        return x, hidden

Padding & Packing

  • sequence의 길이가 일정하지 않은 경우가 대부분이다.
  • padding : 가장 긴 sequence를 기준으로 다른 sequence의 비어있는 부분을 token으로 채운다.
  • packing : 각 sequence의 길이를 데이터에 포함한다. (단, 길이가 긴 순으로 정렬해야 한다.)

+ Recent posts