본문 바로가기
모아 읽은 보따리/cs224n

L5: Language Modeling, RNN

by 동석2 2023. 2. 2.

Neural net +

지난 렉쳐에 이어 보충,

 

** regularization **

모든 neural network는 특정 training set에 대해 overfit될 위험을 가진다. 

여기서 overfit은 해당 training set에만 잘 작동하고, general한 feature학습을 하지못해 외부 다른 test set에는 작동이 잘 안되는 경우를 말한다. (쉽게 말해)

 

따라서 loss function에 regularization term을 넣는데, 이를 통해 general한 모델을 학습하도록 한다.

(조금 뜯어보면, 모든 parameter들의 제곱합을 loss에 넣기에 역전파시 모든 parameter는 그 절대적 값(2\lambda\theta)에 따라 조정되게 되어, 최종적으로 parameter들이 극단적이게 크거나 작지않고 적절한 값으로 학습되도록 하는 효과를 낸다.)

 

** dropout **

regulatization term외에도, 실제 신경망에 dropout 메커니즘을 적용함으로써 regularization효과를 얻을 수도있다.

dropout은 2014년에 제안되어, 이제까지도 많이 쓰이는 것으로 

training 시에 특정 neuron(parameter)들의 weight을 0으로 만들어 (이는 확률을 argument로 받아 확률적으로 고른다)

학습함으로써 특정 데이터가 특정 parameter에만 의존하지 않도록 만들어 general한 feature학습에 도움을 주도록 한다.

test 시에는 모든 parameter를 사용한다.

 

** initialization **

parameter들은 모두 학습 전에 초기화할때, 0이아닌 굉장히 작은 수로 initialize된다.

주로 uniform 분포로 부터 추출하거나, Xavier initialization을 사용한다. 

(* Xavier : 지난 layer/다음 layer의 크기에 맞게 variance를 맞추어 initialize함으로써 보다 학습의 안정성을 높임)

 

** optimizer **

주로 SGD 사용할 수 있으나, control이 어렵다.

보통은 adam이 가장 안전하고, 보통 좋은 수렴성을 가지기에 쓰나 상황에 맞게 adagrad, 혹은 adamW같은 word vector 학습 속도가 빠른 다른 optimizer를 사용하기도 한다.

 

 

Language Modeling

language modeling은 주어진 단어들(문장, sequence)에 대해 다음 단어로 알맞은 단어를 찾는 task를 말한다.

이는 다시 생각하면, 주어진 단어 벡터 시퀀스에 대해 다음 단어가 될 확률이 가장 높은 단어를 찾는 것과 같다.

이를 응용하면 특정 문장을 쪼개어, LM(Language model)에 의한 확률곱으로 문장을 표현할 수도 있다.

뭐 일상에서나 어디서든, LM은 쉽게 접할 수 있다 (자동완성 등등)

 

LM의 시작은 n-gram부터 시작된다.

n-gram은 문장을 n 단위로 끊어서 데이터화하여 LM을 학습하는 방법으로,

 

EX) I write letter.

예를들어 unigram은 'I', 'write', 'letter'

bigram은 'I write', 'write letter' 로 묶어 데이터화하는 것이다.

 

이는 기본적으로 Markov assumption에 의한 것으로,

Markov assumption은 특정 시간 t에 대해 t+1번째 사건은 오직 이전 n개의 사건들에만 의존한다는 가정이다.

(n+1개 이전의 사건들에는 무관)

즉 4-gram의 경우 앞의 3개 단어에만 의존하여 다음 단어를 예측한다고 생각하면 된다. 예시를 보면

여기서 count들은, 우리의 데이터셋 corput내에서 얼마나 많이 appear되었는지를 계산하여 확률을 도출할 수 있게 한다.

물론 이렇기에 corpus내에 아예 존재하지 않는 조합의 경우 최소 epsilon을 두거나, 두 단어의 appear count를 포함하는 등의 방법을 사용하기도 한다.

(그렇기에 n을 5이상으로 늘리는 것은 의미가 없다)

 

Neural Language Model

앞에서 보듯, n-gram의 경우 모든 조합의 count들을 기록해두어야 하기에 sparse vector data를 모두 저장하기에 공간 소모가 심하다. 

이전 lecture에서 항상 나온 flow처럼, dense vector학습을 위한 neural language model은 어떻게 할 수 있을까?

 

먼저 생각해볼 수 있는 것은 L2에서 잠깐 나왔던 NER(Named Entity Recognition) task처럼 만드는 것으로, 여기서도 특정 window size만큼의 word vector들을 input으로 받아 해당 word가 entity인지 아닌지 classify하도록 network를 구성했다.

 

LM도 비슷하게, 시퀀스에서 window size만큼의 앞 단어들을 input으로 받아 다음 단어 확률을 계산하도록 network를 구성하면 되지 않을까? 마치 아래처럼,, (2002년)

확실히 n-gram과 대비하여는 좋아보이지만, (dense로 인한 공간 창출) 여전히 고정된 window size에 의존한다는 점 및 긴 문장의 경우 window size가 일정 이상 커질 수 없다는 점에서 한계가 많다.

 

RNN : Recurrent Neural Network

그래서 나온 network가 RNN이다.

아마 RNN은 유명한 모델이기에 설명은 최소로 하고, 특징적인 점은 이제 고정된 window size에 의존하지 않고, 어떤 긴 문장이든 한번에 input으로 넣어서 학습할 수 있다는 점이다.

또한 지난 단어들의 hidden state를 이어받아 사용하기에 정보 손실이 줄어들었다.

하지만 이역시 알려진대로, 이러한 방식은 문장이 길어질수록 너무나 많은 training time을 필요로 하며,

여전히 첫 단어와 마지막 단어처럼 거리가 멀수록 정보 손실이 크다.

 

학습은 각 hidden으로 부터 다음 단어 (EX : h(1)에서 예측한 단어가 'students' 인지.)

를 잘 예측하였는지 CE Loss의 합으로 학습한다.

데이터는 corpus내 문장들로 부터 SGD (Stochastic Gradient Descent)로 학습하게 된다.

 

LM의 평가는 perplexity를 이용하게 된다. perplexity는 corpus에서 모든 길이의 문장에서 찾은 정답단어 확률의 역수의 곱으로, CE Loss의 Exponential 값과 같다.

즉, 이 값이 작을수록 corpus내의 알맞은 단어들에 대한 확률이 크다(*역수이므로)는 것이므로 해당 corpus를 LM이 잘 파악했다고 할 수 있는 것이다.

RNN's problem

앞에서 언급했듯이, RNN은 input의 길이에 대한 제한을 없애긴 하였으나 여전히 거리에 따른 정보 손실이 크다.

이는 RNN의 구조 상 생기는 문제로, 아래 그림을 보면

J(4)로부터 역전파를 할때, h(4)의 경우 곧바로 gradient에 대한 학습이 되겠지만 h(1)의 경우 가는 와중에 h(4)/h(3) gradient, h(3)/h(2) gradient, h(2)/h(1) gradient들을 모두 곱하기 때문에, 해당 gradient들 값에 따라 J(4)의 영향이 많이 달라지게 된다.

특히, 만약 해당 gradient들이 매우 작을 경우 h(1)에 끼치는 J(4)의 영향이 굉장히 작아지고, 거의 없는 수준이 될 수 있다.

이경우 h(1)은 차후 J(4)를 예측하는데 아무 도움을 줄 수가 없게 될 것이다. 

 

이를 vanishing gradient 문제라 하며, 거리가 멀어질수록 output에 대한 역전파(학습)이 잘 되지 않는 현상을 의미한다.

이는 곧 현실의 예시로 긴 문장의 경우 앞의 정보를 알 수가 없어 뒤의 정보를 알기 어려운 현상으로 이어지며 큰 성능 하락으로 이어진다.

(*영어 빈칸채우기 문제같은 경우도, 앞 맥락을 모르면 뒤의 빈칸에 뭐가 나올지 맞출 수 없을 것이다.)

 

반대로 해당 gradient들 (앞에서 이야기한, h(1)로 가는 과정에서 곱해지는 3가지 gradient들)이 굉장히 크면, exploding gradient 문제가 발생하며 optimizer에 따라 최악의 경우 inf값으로 발산하게 되는 문제가 나타난다.

물론 exploding gradient는 gradient clipping이라는, 특정 threshold보다 gradient가 크면 scale down하는 방법, 을 통해 어느정도 쉽게 극복이 가능하긴 하다.

 

반면 RNN 구조에선 vanishing gradient를 해결하기 어렵고, 이후 LSTM, attention등의 구조로 넘어가는데 이는 다음 lecture의 이야기이다.

 

 

'모아 읽은 보따리 > cs224n' 카테고리의 다른 글

L7: Attention  (0) 2023.02.04
L6: LSTMs, NMT  (0) 2023.02.03
L4: Dependency Parsing  (0) 2023.02.01
L3: Neural Nets  (0) 2023.01.31
L2: Word Vectors / Word Senses / NER  (0) 2023.01.18