Patrick's 데이터 세상
RNN(Recurrent Neural Network) 본문
RNN
👉🏻 개요
RNN(Recurrent Neural Network) 순환 신경망 모델은 입력과 출력을 Sequence 단위로 처리하는 가장 기본적인 시퀀스 모델입니다.
기존의 신경망은 전부 은닉층에서 활성화 함수를 지닌 값이 오직 출력층 방향으로 가는 FFNN(Feed Forward Neural Network)였습니다.
RNN은 은닉층 노드에서 활성화 함수를 통해 나온 값을 출력층 방향으로 보내고, 다시 은닉층 노드의 다음 계산의 입력으로 보냅니다.
👉🏻 기본 구조
은닉층 메모리 셀은 각 시점(time step)에서 바로 이전 시점의 은닉층 메모리 셀에서 나온 값을 자신의 입력으로 사용하는 재귀적 활동을 합니다.
은닉층에서 활성화 함수를 통해 결과를 내보내는 노드 : cell
이전의 값을 기억하려고 하는 메모리 역할을 수행함 : memory cell, RNN cell
메모리 셀이 출력층 방향, 다음 시점 t+1의 자신에게 보내는 값 : hidden state
👉🏻 연산 형태
은닉층 메모리 셀은 입력층을 위한 가중치 Wx, 이전 시점 상태 값 ht-1을 위한 가중치 Wh 두 개의 가중치를 갖습니다.
batch_size : 1
d, Dh : 4
👉🏻 task
👉🏻 Vanilla RNN Code with Pytorch
import torch
import torch.nn as nn
input_size = 5 # 입력의 크기
hidden_size = 8 # 은닉 상태의 크기
# (batch_size, time_steps, input_size)
inputs = torch.Tensor(1, 10, 5)
cell = nn.RNN(input_size, hidden_size, batch_first=True)
torch.nn의 RNN으로 쉽게 RNN code를 구현할 수 있습니다.
input 값은 batch_size, time_steps, input_size 순서로 정의.
RNN 셀에서는 input_size : 입력 크기, hidden_size : 은닉 상태 크기를 정의, batch_size=True로 입력 텐서 첫 번째 차원이 batch_size임을 알림.
👉🏻 양방향 순환 신경망(Bidirectional Recurrent Neural Network)
시점 t에서의 출력값을 예측할 때 이전 시점 데이터뿐만 아니라, 이후 데이터로도 예측할 수 있다는 개념
ex) Exercise is very effective at [ ] belly fat.
운동은 복부 지방을 [] 매우 효과적이다.
빈칸에 들어갈 적당한 말은 [reducing 줄이는 것에]라고 볼 수 있는데 이전에 나온 Exercise isvery effective at 단어로는 유추가 어려워서 타겟의 다음 목적어인 belly fat도 참고합니다.
하나의 출력을 위해 두 개의 메모리 셀을 사용합니다.
첫 번째 메모리 셀은 앞 시점의 은닉상태(Forward Hidden States)를 전달 받아 현재의 은닉 상태를 계산합니다.
두 번째 메모리 셀은 뒤 시점의 은닉 상태(Backward Hidden States)를 전달 받아 현재의 은닉 상태를 계산합니다.
👉🏻 Bidirectional RNN
cell = nn.RNN(input_size = 5, hidden_size = 8, num_layers = 2, batch_first=True, bidirectional = True)
기존 코드에서 bidirectional 인자 True 추가
출처
https://arxiv.org/abs/1409.2329
PyTorch로 시작하는 딥 러닝 입문 - 유원준 외 1명 wikidocs
'Deep Learning > 이론' 카테고리의 다른 글
seq2seq(Sequence-to-Sequence) (0) | 2023.07.22 |
---|---|
LSTM(Long Short-Term Memory) (0) | 2022.08.22 |
Subword Tokenizer (0) | 2021.04.22 |
딥 러닝 학습 방법 (0) | 2021.04.11 |
Loss 함수 (0) | 2021.04.09 |