'hihello'라는 문자열을 예측하는 모델을 만든다.
'h'가 들어오면 'i'를, 'i'가 들어오면 'h'를, ''h'가 들어오면 'e'를, 'e'가 들어오면 'l'을, 'l'이 들어오면 'l'을, 'l'이 들어오면 'o'를. 이렇게 문자가 들어오면 다음 문자를 예측하는 모델을 만들려고 한다.
'h'가 들어올 때 그 다음 문자가 'i'가 될 수 도 있고 'e'가 될 수 도 있다. 또한'l'이 들어올 때 그 다음이 'l'이 될수도 'o'가 될 수 있으므로 예측이 쉽지 않다.
따라서 모델이 어디까지 진행된 상태인지를 저장하는 RNN의 Hidden state가 중요하다.
character의 index를 표현한다. 즉 각각의 character들에 대해 번호를 매겨 주는 것이다.
one-hot encoding
방법을 쓴다.
one-hot encoding
방법은 벡터의 한 요소만 1로 표현
하고, 나머지 요소는 0으로 표현하는 방식
이다.
h = [1, 0, 0, 0, 0]
i = [0, 1, 0, 0, 0]
e = [0, 0, 1, 0, 0]
l = [0, 0, 0, 1, 0]
o = [0, 0, 0, 0, 1]
hello의 마지막 'o'를 제외하고 'h','i','h','e','l','l'이 input_data으로 사용되고,
hello의 처음 'h'를 제외한 'i','h','e','l','l','o'가 putput_data로 사용된다.
이번 hihello 예제에서는 Cross Entropy Loss
를 사용한다. 주로 categorical한 output을 예측하는 모델에서 주로 많이 쓰인다.
일반적으로 categoric한 output을 만드는 모델에서는 output값을 softmax등을 이용해서 확률 값을 해석하게 된다.
이때 정답 카테고리인 경우에는, 확률값을 정답 카테고리 내에서 최대한 올리게끔 하는 것이 Cross Entropy Loss의 역할이다.
hihello코드와 charseq코드는 data준비 과정만 아주 조금 차이가 잇고 나머지 부분은 거의 동일하다.
charseq 코드는 hihello의 data준비 과정을 조금더 일반화 한 것으로 보면 된다.