ANN에서 sequence data는 어떻게 다룰 것인가?
• We don’t understand one word only
• We understand based on the previous words + this word. (time series)
• NN/CNN cannot do this
RNN
위를 cell이라고 표현하는데, cell의 아웃풋이 다시 cell에 영향을 주게 된다. 이것은 기존의 Neural Network과 다른점이다.
바닐라 (Vanilla) RNN은 가장 기본적인 RNN이다. 이전에 사용하던 NN와는 다르게 tanh를 사용한다.
new state 값은, old state 값과 입력값을 처리하는 함수를 통해 출력된다.
Ht는 state 값을 나타낸다. 현재 state 값에 대한 함수의 구성은 이전값과 입력값의 합에 tanh을 처리한 것이다.
현재 state 값에 W를 곱해 결과값인 Yt가 나온다.
cell = tf.contrib.rnn.BasicLSTMCell(num_units=hidden_size, state_is_tuple=True)
cell을 만들때 중요한 것은 cell의 출력 (output)의 크기를 정하는 것이다. 이것은 위 코드에서 num_units라고 하기도 하며 hidden_size라고도 한다.
outputs, _states = tf.nn.dynamic_rnn(cell, X, initial_state=initial_state, dtype=tf.float32)
만든 cell을 실제로 구동하여 입력에 대한 출력값을 뽑아내기 위해 일반적으로 dynamic_rnn을 사용한다. 이 함수를 이용하여 만든 cell과 입력데이터를 넘겨준다. 이 함수는 두 개의 출력을 반환하는데, 하나는 결과값인 outputs이며 하나는 해당 states 값이다. states 값은 직접적으로 사용하지 않으며 일반적으로 outputs을 이용하게 된다.
두 단계로 나뉘게 된 이유는 중 하나는 cell을 만드는 단계와 cell을 이용하여 구동하는 단계를 나눠줌으로써 원하는 cell의 형태를 자유롭게 바꾸어가면서 모델을 구동할 수 있는 것이다.
Input / Output Data
문자열 데이터인 sequence를 벡터로 다루기 가장 좋은 방법 중 하나가 one-hot encoding이다.
cell을 만들때 hidden size를 정하는데 output data의 dimension은 hidden size에 따라 결정됩니다. 즉, input data의 dimension이 어떻든 간에 상관없이 output data의 dimension은 hidden size로 결정된다.
cell shape에서 첫 번째 숫자가 의미하는 것은 한 번에 몇개의 문자열을 학습시킬 것인지 정하는 batch size이다.
다음으로, RNN을 사용하는 이유는 시리즈 데이터를 받을 수 있는 것이다. 즉, 시리즈 데이터가 몇 개인지 나타내는 것이 sequence length이고 cell shape의 두번째에 위치하는 값이다. 이는 입력 데이터를 설정할 때 주는 값으로 설정된다. 이것으로 출력 데이터도 동일하게 설정된다.
https://datascience.eu/machine-learning/an-introduction-to-recurrent-neural-networks/
'AI-driven Methodology > ANN' 카테고리의 다른 글
[ANN] RNN many to many (0) | 2022.01.05 |
---|---|
[ANN] RNN many to one (0) | 2022.01.05 |
[ANN] CNN in the image area (0) | 2021.12.29 |
[ANN] 순환 신경망 (Recurrent Neural Network, RNN) (2) (0) | 2021.12.14 |
[ANN] 순환 신경망 (Recurrent Neural Network, RNN) (1) (0) | 2021.12.14 |