ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • NLP Transformer에 XL 끼얹기 : Transformer-XL(2019) 논문 리뷰
    Tech 2021. 8. 6. 17:24

    안녕하세요, 알고리마에서 머신러닝 엔지니어로 일하는 조건우입니다. 
    오늘 리뷰할 논문은 Transformer-XL : Attentive Language Models Beyond a Fixed-Length Context(링크)입니다. relative positional encoding에 집중해 모델을 뜯어보겠습니다.

     


     

    들어가며

     

    한동안 프론트엔드 엔지니어링 업무에 집중하다 오랜만에 다시 머신러닝 엔지니어링 일을 맡았다. 

     

    뿌슝빠슝! 머신러닝과 프론트엔드를 다 해내는 엔지니어가 있다?

    나에게 주어진 임무는...! 임의의 문장이 주어졌을 때 이와 가장 잘 어울릴 이모티콘을 추천하는 '자연어 처리(NLP, Natural Language Processing) 모델 개발하기'다. 

    우선 미리 구축된 baseline을 들여다봤다. 문장 샘플 500개를 대상으로 KoBERT에 압축 기법인 distillation을 적용한 distilKobert 모델이 쓰였다. 매일 CSS 레이아웃만 고민하다가 KoBERT 모델을 처음부터 뜯어보려고 하니 어질...(여긴 누구 나는 어디?)  찬찬히 기본부터 살피기로 했다.

    우선 BERT의 근간인 Transformer 모델부터 시작해봤다. 이래저래 살피다보니 Transformer 모델을 변형한 Transformer-XL이 눈에 들어왔다. 논문이 나온 당시(2019년 1월), SOTA(State-of-the-art, 현재 최고 수준)를 갱신한 모델이다. 호기심이 동했다. KoBERT 적용에 앞서 모델을 구체적으로 뜯어볼 겸 논문 리뷰를 마음 먹었다.

     

    가즈아!

     

    Introduction

     

    아주 먼 옛날, 고오오대부터 이어진 NLP의 역사를 살짝 되짚어보자. NLP task에 자주 쓰이던 seq2seq(sequence-to-sequence) 모델 RNN의 가장 큰 문제는 gradient vanishing & explosion이었다. 이를 해결하고자 고안된 것이 LSTM. 이 모델은 attention 기법으로 단어와 단어 사이 상관관계를 직접 연결해 gradient vanishing & explosion 문제를 풀어냈다. 나아가 Transformer 모델은 아예 attention 매커니즘으로 인코더-디코더를 구현했다. 다만 여기도 문제점이 있었다. 

    길이를 고정한 문장 데이터만 학습・예측해 긴 문장을 학습할 장기 의존성을 가지지 못한다는 점. 이른바 fixed-length segments 문제다. 구체적으로 보자. 당시 NLP 모델들은 평가 단계에서 이전 문장들의 문맥을 고려하지 않고 연속적인 기호 덩어리를 선택해 생성했다. 그러다보니 처음 몇 개의 기호는 잘 예측하지만, 갈수록 필요한 상황 정보가 부족해졌다. 이는 결국 최적화 실패, 성능 저하로 이어졌다. 

    Transformer-XL 네트워크 모델은 이 문제를 해결하기 위해 나타났다. 논문 저자들은 모델이 segment를 학습할 때, 이전 segment에서 얻은 학습 정보를 가져와 새로운 학습에 쓰는 방식을 채택했다. segment끼리 연결고리를 만들어 준 거다. 앞으로 자세히 설명하겠지만, 이렇게 새로운 학습 방식을 도입하기 위해 이들은 Transformer Network에서 쓴 절대적 인코딩(absolute positional encoding)을 상대적 인코딩(relative positional encoding)으로 대체했다. 절대적 인코딩을 쓰면 가변적인 모델에서는 단어들의 자리 정보를 유지할 수 없다는 점을 뚫기 위해서다.

     

    Model

     

    기존 Transformer 모델에서는 여러 segment로 나뉜 문장을 학습할 때 위 그림의 방식을 썼다. 학습 단계(a)에서 고정 크기를 가진 모델에 학습시킨 후 평가 단계(b)에서도 이 고정 크기를 사용한 것이다. 그림처럼 앞, 뒤 정보를 무시하는 상황이 나온 이유다.

    이런 모델은 semantic boundary를 구분할 수 없다. 이를 억지로 구분하려면 문장 뒤에 끝을 알리는 padding을 채워 쓸 수도 있겠다. 하지만 실제로는 학습의 효율을 위해 여러 문장을 잇거나 해서 꼭 정해진 길이의 segment를 채우는 관행이 있었다. 그러다보니 fixed-length segments 문제가 불거졌다. 아울러 평가 단계에서 segment를 옮길 때마다 매번 처음부터 다시 계산하는 탓에 높은 계산 비용이 드는 것도 문제였다.

     

    그럼, 이제 Transformer-XL 모델의 구조를 보자. 여기서는 이 문제를 해결하고자 위와 같은 방식의 segment-level recurrence를 쓴다. 학습 과정(a)을 보면 모델은 fixed와 new segment를 나눠 학습한다. fixed 부분은 forward를 위해 쓰이지만, gradient를 업데이트하지 않는다. 자, 이제 네트워크가 학습을 이어갈 때 과거의 기록을 이용할 수 있게 된다. 모델이 장기 의존성을 획득함과 동시에 fixed-length segments 문제가 일부 풀린다는 이야기다!

     

    이처럼 state를 다시 쓰는 건 매우 효율적인 구조다. 다만 역시 문제가 있다. state를 재사용할 때 positional information coherent를 어떻게 유지하느냐, 에 관한 부분이다. 기존 Transformer Network는 absolute positional encoding 기법을 쓰므로 고정적인 positional encoding 값을 유지했다. 즉, 문장이 달라진다 해도 단어가 같은 위치에 있다면, 이 녀석들은 같은 positional encoding 값을 얻었다. 하지만 새 모델은 가변적이다. 그렇다고 때마다 다른 positional encoding 값을 적용할 수는 없다. 이를 해결하는 방법. 논문에서 제안하는 상대적 인코딩(relative positional encoding) 기법이다.

     

    Relative positional encoding

     

    기존 absolute positional encoding 기법의 수식을 살펴보면 segment의 시작에 독립적으로 인코딩 값을 줬다. 그러다보니 문장이 바뀌어도 데이터는 절대적인 인코딩 값을 유지했다. 여기서 attention score를 구하는 수식을 살펴보자. 

     

    수식을 짧게 풀어 말하자면, Query Vector i 와 Key Vector j 사이 attention score를 계산했다는 소리. 기존의 위치 인코딩 값을 넣어 self attention만 적용한 아주 간단한 구조다. (5252... 이게 어렵게 느껴지면 안 된다구...)

     

    반면 relative positional encoding의 attention score를 구하는 수식은 다르다. 위 수식에서 쓰인 positional encoding 정보 U가 모두 i-j에 기반한 값으로 바뀌었다. 또, content based key vector와 location basesd key vector를 독립적으로 만들고자 W_(k,E)와 W_(k,R)을 분리했다. u와 v를 통해 query vector는 모든 query 위치에서 동일하도록 고정시켜 다른 단어들에 대한 attentive bias가 query 위치와 상관없이 같아야 한다는 조건도 만족시켜버렸다. (예를 들자면, 어떤 단어의 절대적 위치가 바뀌었다고 델타 값을 유지한 다른 단어들과 맺은 상관관계 정보가 깨지지 않는다는 말이다.)

     

    Experiment Result

     

    물론 믿고 보는 SOTA 논문이지만! 실험 결과를 소개해주지 않으면 논문 저자가 꿈속에까지 그래프를 들고 찾아올 것이라서! 분명 나는 실험 결과도 전부 첨부하고자 했다! 하지만, 블로그 관리하는 에디터 님이 저작권이랑 디자인 어쩌고 협박해서 결국 포기했다...(저자님들...졔..졔셩합니다..)

    실제 experiment text를 보고 싶은 분들은 링크를 타고 들어가 논문을 보기 바란다. 논문의 저자들이 text generation을 위해 쓴 주 데이터는 WikiText-103이고, 생성한 sample text는 Appendix E에 올랐다. 모델이 만든 text와 실제 reference를 비교볼수도 있다.

     

    그래도 Transformer-XL Large가 얼마나 context를 잘 만들었는지 볼 수 있는 수치표는 얻어 왔다. 

     

    Perplexity를 이용해 언어 모델들을 비교한 수치로 Transformer-XL의 성능이 얼마나 좋은지 한눈에 확인할 수 있다.

    parameter가 가장 많아서 그런 것 아니냐고? Transformer-XL small 모델(Parameter=88M) 역시 enwiki8 dataset으로 진행한 context 실험에서 다른 모델에 비해 가장 좋은 성능을 보여줬다고 한다. (우...우와앙) 

     

    마무리!

    오늘은 이렇게 짧게나마 시대를 풍미했던 NLP 모델인 Transformer-XL 네트워크를 알아봤다. 아주 재미있는! relative positinal encoding 개념이 처음 등장한 논문인 만큼, 너무 흥미롭게 읽었다. 그럼 나는 다시 NLP 모델을 만들러... 🥳

    다음에도 더 재미있는 기술 이야기로 찾아오겠다! 모두 안녕!

     

     


    알고리마에서는 '건우'님과 함께 성장하며 AI 에듀테크 시장을 이끌어갈 개발자를 기다립니다. 

     

    (이미지를 클릭해보세요!)

    댓글

Designed by Tistory.