RNN(Recurrent neural network)

RNN 기반 언어모델

왕눈임 2024. 12. 8. 18:42

RNN이란?

2024.12.05 - [RNN(Recurrent neural network)] - RNN(Recurrent neural network)이란?

 

RNN(Recurrent neural network)이란?

일반적으로는 모델에 데이터 1개가 들어오면 그에 대응하는 output이 하나 출력됩니다.가령 class 분류 문제에서 입력 데이터를 넣으면대응되는 class 예측 값이 output으로 출력됐었는데. 입력 데이

tmddn0512.tistory.com

 

RNN을 언어 모델로 사용하려면

어떤 구조로 어떤 학습과정을 거치게 되며

최종적으로 어떤 값을 예측하고자 하는 모델인지 하나씩 살펴봅시다.

 

예시 문장 what will the fat cat sit on이라는 문장이 있다고 해봅시다.

 

이때 what will the fat __ 까지 문장이 주어졌을 때

다음 단어인 cat을 맞추는 모델을 Rnn으로 구현할 수 있습니다.

 

아래의 many to many RNN에서 cat을 예측하는 구조를 살펴봅시다

  1.  첫 번째 cell에 what을 입력 데이터로 넣습니다.
  2.  will이 출력값으로 나오고 이 will을 다음 cell에 입력 데이터로 넣습니다.
  3.  the가 출력값으로 나오고 이 the를 다음 cell에 입력 데이터로 넣습니다.

 

이와 같은 과정을 계속해서 반복하여

마지막 출력값으로 cat을 도출하도록 모델을 학습하는 것이 목적입니다.

 

이렇게 주어진 문장들을 보고 다음 단어를 예측하는 모델은

언어의 문법을 학습한 것이라 볼 수 있습니다.

 

이 모델에 적절한 fine tuning 과정을 거친다면

다양한 언어 모델로써 사용할 수 있게 됩니다.


구체적으로 cat을 출력하도록 학습하는 과정을 살펴봅시다.

이 문제는 분류 문제를 푸는 것이라 할 수 있습니다.

 

왜냐하면 마지막 cell까지 전달받은 정보들이 

어떤 분류에 속하는지를 결정하는 문제로 볼 수 있기 때문입니다.

 

즉 지금까지 전달받은 정보는 cat이라는 class에 속한다

class 분류를 해내야 하는 모델로 볼 수 있는 거죠 

 

이러한 분류 모델의 학습 방식이 어떻게 이루어졌었나요

이런 다중 class 분류 문제는 정답 class를 one-hot-encoding 하여 

weight를 거쳐 softmax를 거친 출력값이 one-hot-encoding 된 정답과 가깝게 되도록

weight를 update 했었습니다.

 

이 정답과 가깝게 되도록 학습하는 과정은 muti-class 분류 문제와 정확하게 같습니다.

 

multi-class 학습 과정을 간단하게 정리하자면..

class 문제에서는 0 또는 1로 class자체를 one-hot-encoding으로 표현합니다.

따라서 정답을 맞히는 과정 역시 0 또는 1에 가까워지도록 학습합니다.

 

이때 예측값 역시 0과 1만을 갖는다면, 한 번만 틀려도 오차가 과장됩니다.

(1인 class를 0으로 예측하면 오차가 1-0으로 커집니다.)

 

즉 예측값은 확률로 매핑하여 학습하는 과정이 필수적이며 

이 확률로 매핑한다는 것은 결국 주어진 데이터 기반하여

파라미터화 된 확률분포로 표현하겠다는 거와 같습니다.

 

이렇게 표현한 분포는 입력으로 들어온 x의 출현 확률을 의미하여

가능도 함수와 그 의미가 같아,

결국 가능도 함수를 최대화하는 것이 목적이 됩니다.

 

이 연산을 간단하게 하기 위해 

log를 씌워 최소화 문제로 바꾸게 되면

결국 cross entropy를 최소화하는 문제로 바뀝니다.

 

다시 RNN으로 돌아와서,

 

즉 위와 같이 최종 output의 weight(Why)를 걸어

softmax를 통과한 값이 정답 class에 가까워지도록 

weight를 학습하면 된다는 것입니다.

 

그런데 여기서 문제는 one-hot-encoding 

 

예측하고자 하는 대상인 단어는 

전부 one-hot-encoding으로 표현할 수 없습니다.

이 세상에 존재하는 단어가 매우 많기 때문에 예측하고자 하는 단어를 

이런 방식으로 encoding 하게 되면 차원이 매우 커져 연산이 불가능합니다.

 

그래서 차원을 좀 축소하면서 labeling 하는 방식으로 embedding 방식을 사용합니다.


embedding 이란?

가까운 유사한 단어들끼리는 공간상에 가깝게 배치하도록 labeling을 하자는 것

 

이를 통해 차원을 적당히 키우고 단어를 labeling 할 수 있게 됩니다.

가령 아래와 같이 의미가 비슷한 두 단어는 공간상에서 그리 멀리 떨어지지 않게 

좌표로 표현할 수 있습니다.

 

 

그래서 이 embedding을 사용하여 최종 output으로

cat을 어떻게 예측하게 되는지 전체 구조를 살펴봅시다.

 

 

단어가 one-hot-encoding 되어있는 상태로 input으로 들어옵니다 

이제 앞서본 embedding을 거쳐 차원을 축소시켜 입력 데이터의 차원을 줄입니다.

 

RNN 모델에서는

앞서 본 방식대로 이전 cell에서의 출력값을 다음 cell의 입력값으로 전달받고 

hidden 값과 함께 처리되는 연산이 반복적으로 이루어집니다.

 

해서 나온 최종 출력 결과Weight(Why) 연산을 해준 결과에

softmax 활성화함수를 거쳐 0과1 사이값에 매핑 후

 

이 매핑 된 값이 정답 class와 가까워지도록 weight를 update 합니다.


이때 update도 기존의 RNN에서의 역전파 방식인 

Throught time gradient 방식을 사용합니다.

 

- Throught time gradient 참조

2024.12.05 - [RNN(Recurrent neural network)] - RNN(Recurrent neural network)이란?