BRNN ( Bidirectional Recurrent Neural Networks )은 반대 방향의 숨겨진 두 레이어를 동일한 출력에 연결합니다. 이러한 형태의 생성 딥 러닝 을 통해 출력 레이어는 과거 (뒤로) 및 미래 (앞으로) 상태에서 동시에 정보를 얻을 수 있습니다. 1997 년 Schuster와 Paliwal이 발명 한 [1] BRNN은 네트워크에서 사용 가능한 입력 정보의 양을 늘리기 위해 도입되었습니다. 예를 들어, MLP ( Multilayer Perceptron ) 및 TDNN ( Time Delay Neural Network )은 입력 데이터를 고정해야하기 때문에 입력 데이터 유연성에 제한이 있습니다. 표준 반복 신경망현재 상태에서 미래의 입력 정보에 도달 할 수 없으므로 (RNN)에도 제한이 있습니다. 반대로 BRNN은 입력 데이터를 수정하지 않아도됩니다. 또한 현재 상태에서 미래의 입력 정보에 도달 할 수 있습니다. [2]
BRNN은 입력 컨텍스트가 필요할 때 특히 유용합니다. 예를 들어, 필기 인식에서 현재 문자 앞뒤에있는 문자에 대한 지식을 통해 성능을 향상시킬 수 있습니다.
https://en.wikipedia.org/wiki/Bidirectional_recurrent_neural_networks
요약하자면, 후방부터 전방까지의 정보를 학습할수 있게 만든 모델이 양방향 순환 신경망입니다.
우리들은 개발하는 사람이기 때문에 사용하는 방법만 알아도 충분히 코딩할 수 있습니다.
import torch
import torch.nn as nn
input = torch.randn(4, 7, 5)
print(input.size())
rnn_layer = nn.RNN(input_size=5, hidden_size=4, num_layers=3, batch_first=True, bidirectional=True)
print(rnn_layer)
(output, hidden) = rnn_layer(input)
print("Output size : {}".format(output.size()))
print("Hidden size : {}".format(hidden.size()))
# 결과
# torch.Size([4, 7, 5])
# RNN(5, 4, num_layers=3, batch_first=True, bidirectional=True)
# Output size : torch.Size([4, 7, 8])
# Hidden size : torch.Size([6, 4, 4])
input : [batch_size, sequence, input_size]
output : [batch_size, sequence, hidden_size * 2]
hidden : [num_layers * 2, batch_size, hidden_size]