본문 바로가기

RNN4

# 6. Long Short-Term Memory (LSTM) - Code 지난 포스트에서는 LSTM의 이론에 대해 다루었다. 이번 포스트에서는 LSTM을 코드로 구현해보는데 주의해야할 점이 있다. 기존의 RNN을 구현할 때에는 은닉 상태에 해당하는 변수 hidden 하나만 다음 시퀀스의 메모리 셀로 전달하는 구조였다. 하지만, LSTM은 은닉 상태 이외에도 셀의 상태에 해당하는 변수인 cell도 같이 고려해야 한다. Pytorch를 통한 구현 """ 두 번째 단어를 입력으로 세 번째 단어가 무엇이 나올지 예측 """ import numpy as np import torch import torch.nn as nn import torch.optim as optim sentences = ['i like dog', 'i love coffee', 'i hate milk', 'you l.. 2022. 1. 3.
# 5. Long Short-Term Memory (LSTM) - Theory 지난 포스트에서는 순환 신경망 (RNN)에 대해 다루었다. RNN은 시퀀스 데이터를 처리하기에 적합하지만, Gradient vanishing 현상이 존재한다. Gradient vanishing은 신경망에서 은닉층을 거칠수록 (역전파를 통해 가중치를 편미분한) 기울기가 소실되어 학습이 느려지는 현상을 말한다. RNN에서 Gradient vanishing을 직관적으로 설명하면 문장이 길어질수록 앞의 내용을 잊어버리고 뒤에서 엉뚱한 추론을 한다는 의미이다. (역전파와 Gradient vanishing에 관련된 내용은 추후에 포스트에서 자세하게 다루겠다.) RNN의 Gradient vanishing 문제를 보완하기 위해 메모리 셀에 단순히 은닉 상태(hidden state)뿐만이 아닌 셀 상태(cell stat.. 2021. 12. 9.
# 4. Recurrent Neural Network (RNN) - Code 이번 포스트에서는 지난 포스트에서 다루었던 RNN의 이론을 바탕으로 코드로 직접 구현해본다. RNN의 은닉층 연산에 대해 간단히 복습을 해보자. $h_{t} = tanh(W_{x}x_{t} + W_{h}h_{t-1} + b)$ 위 식은 이전 메모리 셀의 은닉 상태($h_{t-1}$)와 현재 시퀀스의 입력 데이터($x_{t}$)를 바탕으로 현재 메모리 셀의 은닉 상태를 연산하는 식을 의미한다. $D_{h}$ : 은닉층의 크기 $d$ : 입력 벡터의 크기 (피처 수, 단어의 종류 수) Numpy를 통한 구현 import numpy as np # sequence data : N x T x D (샘플 수 x 시퀀스 수 x 차원 수) time_steps = 10 # T (시퀀스 수) input_dim = 4 # .. 2021. 12. 7.
# 3. Recurrent Neural Network (RNN) - Theory Sequence Data (시퀀스 데이터) 이번 포스트에서는 순환 신경망(Recurrent Nerual Network, RNN)에 대해 다룬다. RNN은 입출력을 시퀀스(=시간) 단위로 처리하는 모델이다. 고로, 시계열 데이터를 처리하는데에 적합하다. RNN을 다루기 이전에 시퀀스에 대해 간략하게 짚고 넘어가자. 이전에 다루던 데이터는 시간을 고려하지 않은 데이터들이었다. Tabular 데이터는 $N \times D$의 모양을 가지고 있다. 이때, $N$은 데이터 샘플의 수, $D$는 피처의 수다. 여기에 시간을 고려한 데이터를 하나의 배열에 표현하려면 $N \times T \times D$로 표현할 수 있다. 그리고 RNN의 각 시퀀스의 입력에 대입되는 모양은 $N \times 1 \times D$가 .. 2021. 12. 7.