Patrick's 데이터 세상

RNN(Recurrent Neural Network) 본문

Deep Learning/NLP 이론

RNN(Recurrent Neural Network)

patrick610 2022. 8. 21. 17:37
반응형
SMALL

 

 

 

RNN

 

👉🏻 개요

RNN(Recurrent Neural Network) 순환 신경망 모델은 입력과 출력을 Sequence 단위로 처리하는 가장 기본적인 시퀀스 모델입니다.

 

기존의 신경망은 전부 은닉층에서 활성화 함수를 지닌 값이 오직 출력층 방향으로 가는 FFNN(Feed Forward Neural Network)였습니다.

RNN은닉층 노드에서 활성화 함수를 통해 나온 값을 출력층 방향으로 보내고, 다시 은닉층 노드의 다음 계산의 입력으로 보냅니다.

 

 

 

👉🏻 기본 구조

RNN 기본 구조
RNN의 재귀적 형태

은닉층 메모리 셀은 각 시점(time step)에서 바로 이전 시점의 은닉층 메모리 셀에서 나온 값을 자신의 입력으로 사용하는 재귀적 활동을 합니다.

은닉층에서 활성화 함수를 통해 결과를 내보내는 노드 : cell

이전의 값을 기억하려고 하는 메모리 역할을 수행함 : memory cell, RNN cell

 

메모리 셀이 출력층 방향, 다음 시점 t+1의 자신에게 보내는 값 : hidden state

 

 

 

👉🏻 연산 형태

은닉층 메모리 셀은 입력층을 위한 가중치 Wx, 이전 시점 상태 값 ht-1을 위한 가중치 Wh 두 개의 가중치를 갖습니다.

 

 

RNN 은닉층 연산

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

 

Recurrent Neural Network Regularization

We present a simple regularization technique for Recurrent Neural Networks (RNNs) with Long Short-Term Memory (LSTM) units. Dropout, the most successful technique for regularizing neural networks, does not work well with RNNs and LSTMs. In this paper, we s

arxiv.org

 

PyTorch로 시작하는 딥 러닝 입문 -  유원준 외 1명 wikidocs

 

10-01 순환 신경망(Recurrent Neural Network, RNN)

RNN(Recurrent Neural Network)은 시퀀스(Sequence) 모델입니다. 입력과 출력을 시퀀스 단위로 처리하는 모델입니다. 번역기를 생각해보면 입력은 번역하고…

wikidocs.net

 

 

 

반응형
LIST

'Deep Learning > NLP 이론' 카테고리의 다른 글

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
Comments