2024. 6. 23. 13:31ㆍ딥러닝 모델: 파이토치
양방향 순환 신경망은 시점 t에서의 출력값을 예측할 때 이전 시점의 데이터뿐만 아니라 이후 데이터로도 예측할 수 있다는 아이디어에 기반한다.
영어 빈칸 채우기 문제에 비유하면 빈칸의 앞부분과 뒷부분이 모두 있어야 답을 풀 수 있는 것과 비슷하다.
양방향 RNN은 하나의 출력값을 예측하기 위해 기본적으로 두 개의 메모리 셀을 사용한다. 첫 번째 메모리 셀은 앞에서 배운 것처럼 앞 시점의 은닉 상태(forward states)를 전달받아 현재의 은닉 상태를 계산한다. 주황색이 앞 시점의 은닉 상태를 전달받은 셀이다. 두 번째 메모리 셀은 뒤 시점의 은닉 상태를 전달 받아 현재의 은닉 상태를 계산한다. 초록색 메모리 셀에 해당한다. 두 개의 값이 모두 출력값을 예측하기 위해 사용된다.
양방향 RNN도 다수의 은닉층을 가질 수 있다.
양방향 순환 신경망을 파이토치로 구현할 때는 nn.RNN( )의 인자인 bidirectional에 값을 True로 전달하면 된다. 층이 2개인 깊은 순환 신경망이면서 양방향인 경우, 앞서 실습했던 임의의 입력에 대해 출력이 어떻게 달라지는지 확인해보자.
첫 번째 리턴값의 크기가 단방향 RNN을 셀 때보다 은닉 상태가 두 배가 되었다. 양방향의 은닉 상태값들이 연결되었기 때문이다.
두번째 리턴값의 크기는 (층의 개수 x 방향의 , 배치 크기, 은닉 상태의 크기)를 가진다. 이는 정방향 기준으로는 마지막 시점에 해당되면서, 역방향 기준에서는 첫번째 시점에 해당되는 시점의 출력값을 층의 개수만큼 쌓아 올린 결과값이다.
첫 번째 레이어의 은닉 상태들은 outputs에서 확인할 수 없지만, 두 번째 레이어의 정방향 마지막 은닉 상태들은 outputs의 마지막 시점에서 나온 값의 앞부분에 해당한다.
반대로 역방향 마지막 은닉 상태들은 outputs의 첫 번째 시점에서 나온 값의 뒷부분에 해당한다.
♣ RNN 예시 코드
https://colab.research.google.com/drive/1BYK9cj5IuqtUpAIX-FT5h-H2t7rpwhEG#scrollTo=aT7_nUIdSkbd
'딥러닝 모델: 파이토치' 카테고리의 다른 글
Pytorch로 시작하는 딥러닝 입문(07-03. 게이트 순환 유닛(Gated Recurrent Unit: GRU)) (0) | 2024.06.23 |
---|---|
Pytorch로 시작하는 딥러닝 입문(07-02. 장단기 메모리(Long Short-Term Memory: LSTM)) (0) | 2024.06.23 |
Pytorch로 시작하는 딥러닝 입문(07-01. 순환 신경망, 깊은 순환 신경망(Deep Recurrent Neural Network)) (0) | 2024.06.23 |
언어 처리 패키지(NLTK, KoNLPy) (0) | 2024.06.06 |
전이학습(Transfer Learning) (0) | 2024.06.06 |