Pytorch_RNN_intro

RNN Intro

모두를 위한 딥러닝 - 파이토치 강의 참고

  • 이미지 데이터가 아니라 순서 정보가 중요한 sequential data를 처리하기 위한 모델

  • RNN

  • 위 그림에서 왼쪽 그림과 같이 RNN 모델을 나타내며 이를 펼치면 오른쪽과 같다.

  • F 라는 하나의 셀에 입력값 X 가 처리되어 h를 출력하고 다음 셀에 hidden state를 유통한다.

  • 이렇게 하나의 셀에서 hidden state를 다음 셀에 넘겨주고 다음 셀이 입력값 X와 함께 계산해 h를 출력한다면, 해당 출력값 h는 이전 셀의 영향을 이어받을 것이다. 따라서 연속적인 데이터의 정보를 기억하는 효과를 나타낼 수 있게된다.

  • RNN은 모든 셀이 parameter를 공유한다. 다시 말해, 위의 그림처럼 셀 F 하나를 공유해서 사용하게 된다.

  • pytorch에서 RNN은 input_sizehidden_size를 입력받아 정의하고 input_data(batch_size, sequential_length, input_size) 형태의 data를 입력한다.

1
2
rnn = torch.nn.RNN(input_size, hidden_size)
outputs, _status = rnn(input_data)
  • 이때, RNN셀이 batch_size와 sequential_length는 자동으로 파악해준다.

  • 위처럼 RNN을 정의하게 되면 input_data로 (batch_size, sequential_length, input_size)형태를 입력해 (batch_size, sequential_length, hidden_size)형태의 출력값이 나오게 된다.

  • hello 라는 단어를 통한 예제를 살펴보자.

  • hello의 각 알파벳을 4차원의 one hot encoding을 해주고 각 알파벳의 조합으로 만들 수 있는 단어 3개를 하나의 배치로 묶어서 사용해본다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
input_size = 4
hidden_size = 2

# 4차원의 one hot 벡터로 표현
h = [1,0,0,0]
e = [0,1,0,0]
l = [0,0,1,0]
o = [0,0,0,1]

# input size는 (3,5,4) 가 된다
# 3 --> batch_size
# 5 --> sequence length : 문자열의 길이 = RNN sequence의 길이
# 4 --> input_size : one hot 벡터의 길이 --> embedding 을 한다면 embedding 크기가 될것
input_data_np = np.array([[h,e,l,l,o],
[e,o,l,l,l],
[l,l,e,e,l]], dtype=np.float32)

# numpy 데이터 텐서로 변환
input_data = torch.Tensor(input_data_np)

# RNN셀 정의
rnn = torch.nn.RNN(input_size, hidden_size)

# input_data rnn셀 통과
# output size는 2이므로 rnn셀을 통과한 output은 (3,5,2) shape을 가질것이고 이를 확인해본다.
output, _status = rnn(input_data)

print(output)
print(output.shape)
  • 위와같이 RNN 모델을 정의하고 간단한 데이터를 통해 output을 확인할 수 있었다. hidden_state의 size를 RNN에서 정의하면 이것이 output_data의 크기와 동일하다.

  • 예제를 통해 RNN을 정의할때의 값이 의미하는 바를 파악할 수 있었고 그에 따라 input_data의 shape을 맞춰서 사용하는 방법을 파악할 수 있었다.

Comments

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×