RNN-hihello_and_charseq [11-2]

Sung.K·2021년 8월 23일
0

모두를 위한 딥러닝2

목록 보기
21/25

RNN을 이용한 hihello 예제

'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로 사용된다.

Cross Entropy Loss


이번 hihello 예제에서는 Cross Entropy Loss를 사용한다. 주로 categorical한 output을 예측하는 모델에서 주로 많이 쓰인다.
일반적으로 categoric한 output을 만드는 모델에서는 output값을 softmax등을 이용해서 확률 값을 해석하게 된다.
이때 정답 카테고리인 경우에는, 확률값을 정답 카테고리 내에서 최대한 올리게끔 하는 것이 Cross Entropy Loss의 역할이다.

hihello 예제 코드

charseq 코드의 data준비 과정 코드

hihello코드와 charseq코드는 data준비 과정만 아주 조금 차이가 잇고 나머지 부분은 거의 동일하다.
charseq 코드는 hihello의 data준비 과정을 조금더 일반화 한 것으로 보면 된다.


profile
Towards the goal 👀

0개의 댓글