❔ RNN(순환신경망)
RNN(Recurrent Neural Network)의 'Recurrent'는 라틴어에서 온 말로,
몇 번이나 반복해서 일어나는 일
을 뜻한다. 우리말로는재발하다
,주기적으로 일어난다
,순환한다
등으로 번역된다.
그래서 RNN을 직역할 때순환하는 신경망
이 되는 것이다.
rnn = torch.nn.RNN(input_size, hidden_size)
outputs, _status = rnn(input_data)
rnn = torch.nn.RNN(input_size, hidden_size) : 셀 A를 선언하는 과정이다.
outputs, _status = rnn(input_data) : Xt를 A에 집어넣고, ht를 반환받는 과정이다.
hello 단어를 구성하는 문자를 모델이 알아들을 수 있도록 벡터로 치환해서 RNN에 전달해준다.
위의 경우는 1-hot encoding
방식을 사용했다.
단어를 구성하는 문자들을 사전식으로 나열
하여,
사전의 개수만큼 벡터
를 만들어 놓고, 각각의 문자의 index에 해당하는 그 자리를 1
로 켜고 나머지는 0
으로 끄는 방식이다.
4개의 차원을 input으로 받으므로 input_size=4가 된다.
input_data.shape = (-,-,input_size=4)가 된다.
Hidden State는 output_data쪽에 관련된 내용이다. output_data를 몇개의 차원을 가진 벡터를 출력받을지 결정해주는 과정이다.
어떤 vector_size의 출력을 원하는지에 따라서 hidden_size를 정해주면 된다.
만약 hidden_size=2이라면, outputs.shape = (-,-,hidden_size=2)가 된다.
셀 A의 입장에서 output은 외부로 노출되는 값이다. 하지만 바깥에서 보이지 않는 상태로 다음 Sequence input에 전달되는 값이 있는데, 이를Hidden State
라고 한다.
출력 직전에 똑같은 값이 2개의 가지로 갈라진다.
하나는 output으로 나가게 되고, 하나는 hidden_state로 나가게 된다.
따라서 이런 설계이기 때문에 hidden state와 output의 사이즈는 같다. 애초에 같은 값이었다.(같은 값이 갈라지는 것이기 때문에)
'hello'는 5개의 문자로 구성되어 있으므로, Sequence length는 5가 되는 것이다.
파이토치에서는 사용자가 Sequence length를 모델에게 알려주지 않아도 Sequence length를 자동으로 파악한다.
들어온 Sequence length가 5개이면, input_data의 shape으로 5를 자동으로 인식한다. input, output shape = (-, senquence length=5, input or output size)가 된다.
Batch Size도 사용자가 직접 모델에 알려주지 않아도 자동으로 모델에서 batch_size를 파악하게 된다. 직접 입력해서 모델에게 알 수 있도록 입력해줄 필요가 없다.
input_data만 잘 구성해주면 된다.