Pytorch로 시작하는 딥러닝 입문(07-01. 순환 신경망, 깊은 순환 신경망(Deep Recurrent Neural Network))

2024. 6. 23. 12:31딥러닝 모델: 파이토치

RNN도 다수의 은닉층을 가질 수 있다. 아래 그림은 순환 신경망에서 은닉층이 1개 더 추가되어 은닉층이 2개인 깊은 순환 신경망의 모습을 보여준다. 첫 번째 은닉층은 다음 은닉층에 모든 시점에 대해서 은닉 상태값을 보내주고 있다. 

 

깊은 순환 신경망을 파이토치로 구현할 때는 nn.RNN( )의 인자인 num_layers에 값을 전달하여 층을 쌓는다. 아래는 층이 2개인 깊은 순환 신경망의 예시이다. 

 

첫 번째 리턴값인 outputs의 크기는 층이 한 개였던 RNN 셀 때와 달라지지 않았다. 이는 마지막 층의 모든 시점의 은닉 상태들을 보여준다. 

위의 형태를 보면 첫 번째 행은 첫 번째 input이 두 번째 layer까지를 통과하면서 얻은 은닉 상태이다. 이 시점에서는 아직 다른 input들은 layer를 통과하지 않았다. 0번째 시점에서 두 번째 layer가 가지고 있는 은닉 상태인 것이다. 두 번째 행은 두 번째 input이 두 번째 layer까지 통과하면서 얻은 은닉 상태이다. 1번째 시점에서 두 번째 layer가 가지고 있는 은닉 상태이다. 이렇게 마지막 10번째 input까지 layer들을 통과하면서 은닉 상태를 얻는다. 

 

 

두 번째 리턴값인 _status는 층이 1개였던 RNN cell 때와 달라졌다. 이 크기는(층의 개수, 배치 크기, 은닉 상태의 크기)에 해당한다. _status는 각 레이어의 마지막 시점에서의 은닉 상태이다. 그렇기 때문에 outputs의 마지막 값과 _status의 마지막 값이 두 번째 레이어의 마지막 시점에서의 은닉 상태로, 값이 같다. 

[ 0.0877, -0.6409, 0.1051, -0.5363, -0.0255, 0.7257, 0.0419, 0.4349]