본문 바로가기
Machine Learning/Paper

Extensions of RNN LM (Recurrent Neural Network)

by 대소니 2017. 3. 24.

EXTENSIONS OF RECURRENT NEURAL NETWORK LANGUAGE MODEL,2011


Abstract
오리지널 RNN에서 몇가지 수정을 해서 더 좋은 성능을 냈다
이러한 개선으로 15배의 학습 속도 증가를 보였고, BPTT의 중요성을 보여줄것이다, 
마지막에 파라미터의 양을 줄이는 가능성을 논의한다
이로인해 강력한 RNN 모델이 되었다


Introduction
기존의 언어학적인 통계학적인 모델이 주축을 이루고 있었는데 NN이 나오면서 이러한 모델들의 성과를 초과했다
NN 모델은 언어만이 아니라 다른 정보들도 학습을 한기에 저차원에서 단어 벡터를 클러스트링 해준다
RNN 입력의 뉴론들은 short term memory를 표현하는 것으로 추정된다, 
이 모델은 데이터로 부터 메모리를 표현하는 방법을 배운다
feedforward NN은 cluster similar words가 가능하다
RNN도 비슷한 히스토리들을 클러스터링 할 수 있다 이것은 가변길이의 패턴을 표현하는데 유용하다
여기서는 BPTT와 복잡한 연산을 감소하는것과 결과모델의 사이즈를 줄이는 가능성을 토론해보련다


Model description
기본 RNN 모델(Elman network)을 다시 설명한다
그런데, 만약에 현재 시점에서 다음 단어를 예측하는데 이전에 몇번의 스탭전에 나타난 정보에 영향을 미친다면
이런 정보를 재사용할 수 있는 NN이라면 더 좋은 결과를 낼 수 있을 거 같다


Backpropagation through time
기본적인 BP에 확장판 같은거고 지정된 수 만큼의 타임 스탭동안 에러를 전파할 수 있다
기존 모델과 비교를 위해서 같은 데이터를 사용했다
하나의 큰 모델보다 몇개의 모델로 구성하는게 더 좋은 결과를 보인다
각 모델에는 같은 weights를 linear interpolation 하게 주었다
(note similarity to random forests that are composed of different decision trees)

figure3에서 perplexity는 4개 모델의 평균으로 산정하였고 4개 모델은 히든레이어의 뉴론수를 250,300,350,400으로 했다
error time step 을 늘려가면서 했다 (4~5가 좋은거 같다) 더 커지면 vanishing 문제가 발생할 것으로 추정된다
test phase의 복잡도는 고정으로 유지했다

table2는 일반 NN과 BP와 BPTT를 비교한것이다. RNN의 BP도 좋은데 더 성능향상이 뚜렷하게 보인다



Speedup techniques
한번 학습할때의 시간 복잡도는 O와 같다
H 는 히든 레이어의 사이즈이다. V는 보케블러리의 사이즈이다. r은 타임스탭이고
보통 H << V 이므로 연산 버틀랙은 hidden과 output layer사이에서 발생한다
많은 연구자들이 여기서의 거대한 weight 매크릭스를 줄여보려 했다
벤지오 교수님이 빈도수가 낮은 단어들을 하나의 특별한 토큰으로 묶어서 처리했는데 성능 감소없이 2~3배 빠른것으로 나타났다
이 개념이 확장되어 특별한 토큰이 되는 단어들에 unigram distribution을 사용하는 대신에 레어 단어들을 위한 back off 모델에서 가능성을 사용했다
그런데 좀더 좋은 접근은 단어들을 classes로 매핑하는 것이다
하나의 class에 포함되는 단어들이 있다면, RNN을 사용해서 classes간에 확률분포(probability distribution)를 어림잡을수 있다
그리고 그 다음 추정되는 class로 부터 특별한 단어의 확률을 연산한다, class내의 단어는 unigram distribution으로 추정한다
Classical Brown clustering은 보통 유용하지 않다 연산 복잡도가 너무 크다, 그리고 종종 full NN 모델에서나 빠르다


Factorization of the output layer
우리는 하나의 class에 속할 확률을 가지고 하는거 말고 실제 class에 속하는 단어의 학률을 추정하고 싶었고
그것은 hidden layer s(t)다 그에 따라 RNN 모델의 아키텍처도 조금 바꿨어

이 아이디어는 이미 Morin[13]이 발표한것이야 (내부 context는 Maximum Entropy models by Goodman[14])
그리고 이 아이디어는 더 확장해서 vocabulary를 hierarchical binary tree로 표현할 수 있다고 가정한다
그런데 이 Morin 접근의 잘못된 점은 단어의 유사성 정보를 획득하기 위해서 WordNet에 의존적이라는 거다
그래서 보편적인 도메인이나 언어에서 사용할 수 없어

우리는 classes를 사용해서 output layer를 조금 factorization 해서 구현했다
단어는 비례적으로 classes에 할당이 되었다, 단어의 빈도수에 따라서 할당하는데 이를 때로는 frequency binning 라고도 한다
classes의 수는 파라미터다
만약 classes 수를 20으로 하면 처음 unigram probability distribution의 5%가 class 1에 매핑된다
Penn Corpus에서는 ‘the’ 관사 토큰의 확률분포가 5%쯤 된다
그 다음의 5%가 class 2가 되겠지
그러므로 classes는 싱글 단어들로 구성이 되고 마지막 classes는 thousands of low-frequency words를 커버한다

전체 단어장에 대해서 연산을 하지 않고 먼저 classes에 대한 확률분포를 구하고 하나의 class에 word에 대해서 분포를 연산 한다
g 함수는 그대로 softmax 이다
error vector 는 두가지 분포에 모두 BP 알고리즘으로 연산을 한다 

class에 대해서 에러를 연산하고 word에 대해서 에러를 연산해서 hidden layer에서 합쳐서 계산한다
이것은 전체망의 hidden layer를 사용해서 전체 vocabulary에 대해서 종합적인 확률분포를 추정하게 되는 이점이 있다
training 하고 test phase 하는 동안에 output layer의 subset 을 evaluate 하는게 가능하게 된다

Table 3의 결과에서 처럼, 전체 vocabulary(10K)를 사용하는 모델에 대해서 약 15배의 속도 향상을 볼 수 있었다
작은 비용의 accuracy가 발생하지만. 그리고 time complexity 보고에서 비선형적인 형태를 보이는 것은 앞에 term [ (1+H) * H * r ] 때문이고 또한 큰 매트릭스를 사용하는 차선책 때문이다
C = 1 이거나 C = V 인 모델은 그냥 full RNN 모델과 동일하다


Compression layer
오리지널 RNN을 두가지 파트로 분리해서 생각을 해봤다
하나는 matrix U 가 input을 책임지고 있고 또 short term memory를 유지하는 recurrent connections을 위함이다
그리고 matrix V 는 output layer에서 probability distribution(확률분포)를 얻기 위해서 사용된다
둘다 weight matrices가 같은 hidden layer에서 공유되고 있다

그런데,
U 가 여러 time steps동안 정보를 저장하기 위해서 모든 short term memory를 관리하는 vector를 필요하고
V 가 다음 단어를 확률분포를 연산하기 위해서 필요한 hidden layer에 포함되어진 정보만을 필요하다

weight matrix V의 사이즈를 줄이기 위해서 추가적으로 compression layer를 hidden layer와 output layer 사이에 두었다
이 레이어에서는 sigmoid만 사용했다, 고로 이 투영은 비선형(non-iinear)이다

이 압축 레이어는 연산 복잡도를 줄여주는 것 뿐만 아니라 파라미터의 총 수도 줄여준다
그래서 결과적으로 보다 더 컴팩트한 모델이 된다
이 압축 레이어는 또 비슷하게 input과 hidden 레이어 사이에도 사용할 수 있다, 모델 사이즈를 더 줄이기 위해서. (이런 레이어를 projection layer와 비슷해)

경험적으로 학습 데이터는 많아지고 그에 따라 히든 레이어 유닛도 많아지고 더 많은 정보를 저장해야 하는데,
이런 압축 레이어의 아이디어는 상당히 많은 학습 데이터를 사용하는데 유용할거다
나중에 이와 관련된 논문을 발표할 계획이다


Conclusion and Future work
통계적인 언어모델의 컨텍스트에 RNN과 BPTT를 사용했다
기존 모델들 뿐만 아니라 RNN & BP보다도 좋은 성능을 냈다
그리고 RNN 모델들을 선형적으로 결합해서 더 좋은 정확도를 나타내는 것도 보였다
Penn corpus에서 perplexity가 96까지 나왔다

앞으로는 statically and dynamically RNN 모델을 결합해서 정확도를 더 높이는 것을 보여줄 계획이다
추가적인 언어모델의 테크닉들을 추가해서 더 낮은 perplexity를 만들어낼꺼야
ASR에 적용해서 PPL 개선과 WER 감소 사이의 상관관계를 관찰했다

다음으로 class를 이용해서, output layer를 조정해서 compression layers를 사용해서, 연산과 공간의 복잡도를 어떻게 줄이는지 보여줬다
이러한 아이디어는 아주 큰 corpora에서 유용하게 사용될거다
우리는 100M이상의 크기를 갖는 vocabulary에 적용해볼 계획이다

마지막으로 최종 모델이 얼마나 효과적으로 사용되는지 보여줄 계획이고
RNN 모델을 사용한 추가적인 프로세싱의 cost가 비현실적으로 높지 않다는 것도 보여줄꺼야
그러한 목적으로 우리가 만든 툴킷을 무료로 공개한다


댓글