본문 바로가기

머신러닝/[딥러닝을 이용한 자연어 처리]

Meta-Learning of Low-Resource Neural Machine Translation

학습목표

메타학습을 활용한 멀티 태스킹 학습을 공부합니다.

핵심 키워드

  • 멀티 태스킹 학습(MultiTask Learning)
  • 다중언어 기계번역(Multilingual Translation)
  • 메타학습(Meta-Learning)
  • 전이학습(Transfer Learning)

학습하기

 다중언어 기계번역을 만든 이유중 하나가 리소스가 별로 없는 언어에 대해 좋은 모델을 만들기 위함이었는데요. 그리고 실제로도 아래 그림처럼, Fi-En의 정확도가 상승했어요. 그런데 생각해보면 Fi-En이 다른 데이터에 비해 작은 것이지, 따로 떼놓고 보면, 절대 작은 데이터가 아니란 말이죠. 그래서 극단적으로, 800개 정도의 리소스만으로도 충분한 정확도를 얻어내고자 하는 시도가 있었습니다.

 결과는 좋지 않았습니다. 왜그러냐면, 데이터 사이즈가 Task마다 과하게 다르면, 리소스가 별로 없는 언어에 대해서는 모델이 순식간에 오버피팅되기 시작하는데, 리소스가 많은 언어에 대해서는 아직 추상적인 학습밖에는 못하고 있고, 이런 상황이니 얼리 스탑을 할 수도 없고, 언제 끊느냐에 따라 어떤 언어는 잘하고 어떤 언어는 못하고 이런 문제가 생기죠. 물론 어떻게든 타이밍 잘 잡고, 웨이트 잘 맞추면 되긴 합니다. 그런데 이건 과학이라기보다는 예술의 영역이고. 이런 행위는 결코 아름답지 않죠.

 그리고 또 한 가지 단점은, 모든 언어에 대한 데이터가 존재한다는 가정이 필요한데, 그럼 새로운 언어가 들어왔을 때는 어떻게 해야하나. 라는 문제가 있겠죠. 일반적으로 할 수 있는게 처음부터 학습을 다시 하는건데, 아까 말한 세부 조정이 굉장히 피곤하죠. 다른 방법은 Transfer learning을 하겠다는 아이디어인데. 생각은 좋은데, 이 Fine tunning을 어디에 어떻게 하느냐에 따라 성능이 굉장히 급변하고, 어떤게 최적인지가 매번 달라집니다.

 마지막으로, 새로운 언어가 들어와서 Fine tunning을 거쳤을 때 계산된 파라미터가, 어째서 좋냐-라는 것에 대한 이론적 증명이 없습니다. 그래서 애매한거죠. 그리고 어느 수준까지의 정확도를 보장할 수 있냐-라는 등의 문제가 있죠.

 그럼 어떻게 해야 더 개선을 할 수 있을까요. 좋은 아이디어가 MAML이라고 부르는 Meta-Learning 입니다. 핵심인즉, 우리가 집중해야할 것은, 현재의 Task를 잘 해결하는 모델을 만드는 것이 아니라, 새로운 Task가 들어왔을 때, 기존의 정보를 활용해 어떻게 더 잘 처리할 것인가-라는 거죠. 이걸 2단계로 나눠서 합니다. Simulated learning과 Meta-learning. 똑같이 SGD, DAG 쓰는데, 다만 매 미니배치를 잡아 그라디언트를 계산하는 로스 함수가 좀 복잡해지죠.

 그런 손실 함수를 계산하기 위해 첫번째 Simulated learning을 합니다. 말 그대로 시뮬레이션을 하는거에요. 일단 Multi-task data 중 하나를 선택합니다. Multilingual translation의 경우에는 한 언어의 데이터셋이겠죠. 그리고 이것들 중 샘플, 그러니까 미니배치 데이터를 선택 한 후, 현재 매개변수에서 SGD를 시물레이션합니다. 실제 적용하지는 않구요. 그리고 두번째 Meta learning을 합니다. 검증셋의 Loss값이 가장 낮아질 수 있도록 앞에서 구했던 파라미터를 업데이트하는거죠. 즉 그라디언트의 그라디언트(=Hessian)를 구해야합니다. 그런 다음, 새로운 데이터셋이 들어왔다면, 기존의 메타 파라미터를 기준으로 SGD를 적용하여, 기존의 파라미터에서 과하게 벗어나지 않는 새로운 파라미터를 구하겠다는 생각인거죠. 

 이런 Meta learning은 아래 그림처럼, 지금의 데이터셋에 피팅시켰던 Transfer learning과는 다르게, 다음의 Task를 푸는 것에 집중한 지점을 생성하는데에서, 큰 장점이 있겠죠.

  결과적으로 Meta learning이 항상 잘 되었습니다. 물론 실제 적용을 하려면 input - output miss match문제, 그러니까 각각의 언어마다 Vocabulary가 다르다는 것. 그래서 Universial lexical reprresentation을 사용해야한다는 해결할 수 있는 몇가지 귀찮은 과정이 필요합니다. 아쉬운건 한국어의 경우 쉽게 개선되지 않았습니다.

 이렇게 Meta learning을 살펴봤는데요. 결국 머신 러닝 자체가 이런 High order learning의 방향으로 가고 있는 것 같습니다. 모델이 알아서 최적화하는 것을 배우고, 어떤 모델이 다른 모델이 변화하는 것을 참조해서 배우고(Multi-agent), 아키텍쳐 자체를 유동적으로 학습하고, 하이퍼 파라미터를 알아서 찾아나가고 등등... 이상입니다.

'머신러닝 > [딥러닝을 이용한 자연어 처리]' 카테고리의 다른 글

Questions  (0) 2020.04.26
Real-Time Translation Learning to Decode  (0) 2020.04.25
Fully Character-Level Machine Translation  (0) 2020.04.23
Questions  (0) 2020.04.22
Learning to Describe Multimedia  (0) 2020.04.22