AI/Pytorch

[Pytorch] torch.nn.RNN() _ RNN API

밍츠 2022. 10. 20. 15:08

torch.nn.RNN()

  • Pytorch RNN API 제공 
  • 입력 시퀀스의 각 요소에 대해 각 계층은 아래의 함수를 꼐산한다.

 

Parameters

  • input_size: Input의 사이즈에 해당 하는 수를 입력하면 됩니다.
  • hidden_size: 은닉층의 사이즈에 해당 하는 수를 입력하면 됩니다.
  • num_layers: RNN의 은닉층 레이어 개수를 나타냅니다. 기본 값은 1입니다.
  • nonlinearity: 비선형 활성화 함수를 선택합니다. tanh, relu중 하나를 선택 가능하며, 기본 값은 tanh입니다.
  • bias: 바이어스 값 활성화 여부를 선택합니다. 기본 값은 True 입니다.
  • batch_first: True일 시, Output 값의 사이즈는 (batch, seq, feature) 가 됩니다. 기본 값은 False 입니다.
  • dropout: 드롭아웃 비율을 설정 합니다. 기본 값은 0입니다.
  • bidirectional: True일 시, 양방향 RNN이 됩니다. 기본 값은 False 입니다.

 

num_layers가 2이면? 아래와 같다.

Inputs : (input, h_0)

  • input:
    • (seqlen, batch, inputsize)
  • h_0: (numlayers * numdirections, batch, hidden*size) 여기서 bidirectional이 True라면, num*directions는 2,False 라면 1이 된다.

Outputs : (output, h_n)

  • output:
    • (seqlen, batch, numdirections * hidden*size) 여기서 bidirectional이 True라면, num*directions는 2,False 라면 1이 된다.
    • 각 time step에 해당하는 hidden state들의 묶음
  • h_n:
    • (numlayers * numdirections, batch, hidden*size) 여기서 bidirectional이 True라면, num*directions는 2,False 라면 1이 된다.
    • 모든 sequence를 거치고 나온 마지막 hidden state

 

마지막 hidden state를 활용하여 원하는 task에 맞게 적용할 수 있다.

  • text classification
  • token-level
  • nn.Linear(hidden_size, num_classes)에서 task에 맞게 num_classes를 설정한다.

 

(추가) PackedSequence

  • pack_padded_sequence를 활용하여 가변 길이의 패딩 시퀀스를 포함하는 Tensor를 압축한다.
  • pad_packed_sequence를 활용하여 가변 길이 시퀀스의 묶음 배치를 채운다. (pack_padded_sequence()에 대한 역연산)