9주차(2) - Ask Me Anything: Dynamic Memory Networks for Natural Language Processing

2019. 3. 14. 13:55풀잎스쿨 NLP Bootcamp

논문링크: https://arxiv.org/abs/1506.07285

참고자료: (조용래님 발표자료) Ask Me Anything_ Dynamic Memory Networks for Natural Language Processing.pdf

Abstract

이번주 첫번째 논문인 End-to-End Memory Network를 통해서 Memory NN의 구조가 제시되었다. 해당 논문에서는 Supporting Fact없이 Input과 Question의 Encoding들을 직접적인 Dot Product를 통해 Attention을 구하고자 했다.

하지만 여기서도 문제점은 발생한다. 바로 Attention이 처음부터 잘 잡는가?에 대한 의문이다. 사람의 경우 현재 주어진 일이 비슷한 경험을 했다면 이전 경험에 비추어 완전 처음하는 것보다 잘 할수 있다. 하지만 NN의 경우 같은 도메인의 Input을 많이 제공해줌으로써 이러한 점을 감안하고 있는데, 사실 우리가 곰곰히 생각해보면 같은 일을 하더라도 축적된 경험은 조금 더 나은 숙련도에 기반해서 더 나아진 결과를 보이곤 한다.

이 논문에서는 이러한 NeuroScience적 아이디어에 기반하여 Episodic Memory Module이라는 방식을 통해 기존의 Memory NN이 아닌 Dynamic Memory Network를 제시한다.

Contribution

이 논문에서는 Dynamic Memory Network 모델을 제시함으로써 Question Answering에 대한 Task를 풀고자 했다. 또한 Introduction에서도 언급하지만, 모든 문제를 Question Answering의 형태로 바꿀 수 있다고 주장한다.

예를 들면, Machine Translation은 '(A언어에서의) 문장을 B언어로 번역하면 어떻게 바뀌는가?'로 설명할 수 있다. Text Classification의 경우 Sentiment Analysis를 예로 들면, 'Input Sequence는 (얼마나) 감정이 긍정/부정적일까?'정도로 해석할 수 있겠다. 이처럼 모든 NLP의 Task는 사실 Question Answering으로 설명할 수 있다는 주장이다.

사실 이 논문의 주요 Contribution은 아래 그림 한장으로 요약할 수 있다. 그리고 논문 내에서 사용되는 Notation이 매우 난잡한 경향이 있으므로, 아래의 그림 내의 수식을 하나씩 설명하는 것으로 이 논문의 Contribution을 설명하도록 하겠다.

Model Architecture

Question Module

Question Module부터 순서대로 살펴보도록 하겠다. Question Module에서는 질문 Sequence를 GRU를 통해 단어 하나씩(w_t)를 넣어 Encoding을 한다. 이렇게 각 time step(t)마다 생성되는 결과물은 q_t이며, 질문 Sequence를 모두 거친 마지막 Encoding 결과물은 T_Q의 길이를 가진 q = q_T_Q로 내타내고 있다.

(GRU를 통해서 질문 Sequence를 Encoding한다)


Input Module

Input Module에서는 RNN모듈을 이용하여 순차적으로 Encoding을 해주고있다. Input Sequence를 받을때, 문장이 한개가 아닌 여러개로 구성될 가능성이 있는데, 이때는 각 문장마다 Encode된 결과인 c_t(t에서의 Encoding)을 Output으로 가진다. Output은 s1, s2, ..., s_n까지 구성되는데, 각 문장마다 c_t를 가진다고 이해할 수 있다. 이때 각 s_n시점에서의 c_t는 w_t단위의 단어를 Input으로 받는다. 즉, w_t와 이전 State인 h_t-1을 받아 현재의 h_t를 계산하는 것으로 이해할 수 있고, 시점이 sentence가 끝나는 지점이라면 c_t가 된다고 이해할 수 있다.

(h_t도 계산하는 방식은 Question Module과 크게 다르지 않다)


Episodic Memory Module

Episodic Memory Module은 이 논문에서의 주요 Contribution이라고 할 수 있겠다. 잠시 예시를 들어보겠다. 만약 당신이 'All You Need is Attention'과 같은 어려운 논문을 읽는다고 가정해보자. 당신이 논문을 집중하면서 읽었다고 가정하면, 처음 이 논문을 읽은 것과 동일 논문을 3~4번 읽은 것의 이해도는 분명 다를 것이다. 해당 논문은 이러한 부분에서 Neuroscience에서의 개념을 차용했다는 것을 Related Works를 통해서 밝히고 있다.


다시 Episodic Memory Module로 돌아와보자. 해당 구조는 여러번의 Episode(m1, m2, ...)을 거치면 각 Episode에서 나오는 Attention이 달라진다고 주장하고 있다. 즉, 같은 Input Sequence에 대해 여러번의 Process를 거치면 Attention이 달라지는 것이다. 수식을 잠깐 살펴보면 c_t와 g_t, 그리고 h_t가 있다. c_t는 Input Module에서 Encoding된 Output이며, h_t는 현재의 State를 말한다. g_t는 1) GRU에서 c_t와 h_t-1을 Input으로 받은 GRU의 Output과 2) h_t와의 비율을 결정짓는데 사용되는 variable이다. 이러한 방식으로 각 Sentence에서의 Attention을 얼마나 줄까에 대해 결정하게 된다.

(c_t, m_(i-1), q를 통해서 비율에 대한 factor인 g_t를 결정한다)


여기서 g_t를 계산하는 공식은 g_t = G(c_t, m_(i-1), q)로 표기하고 있다. 여기서 c_t와 q는 우리가 앞에서 언급했지만 m_(i-1)에 대해서는 아직 언급하지 않았다. 여기서 m변수는 Encoding된 각 Episode인데, Episode는 Hidden State인 e_t와 이전 Episode를 Input으로 받은 GRU에서의 Output을 나타낸다. 즉, 현재 Episode는 이전 Episode와 현재의 Hidden State에 영향을 받는다. 한가지 유의할 점은, 만약 이전 Episode가 존재하지 않는다면, 즉 처음으로 Episode가 계산되는 경우라면 m = q로 설정한다.


G는 Feature를 선택하는데 사용된다. G에서는 앞서 언급했던대로 c_t, m_(i-1), q를 입력으로 받는데, 이렇게 받은 입력들을 기반으로 위 사진과 같은 방식으로 Feature를 생산해낸다. 엄밀히 말하면 이 수식은 G가 아닌 z(c, m q)인데, 실제로 G(c, m, q가 계산되는 방식은 아래 수식을 따른다.

(각 Feature를 기반으로 tanh와 Sigmoid를 이용하여 입력에서의 가중치를 결정한다)


Answer Module

Answer Module에서는 Sequence의 형태로 문장의 정답에 해당하는 Output을 만드는 역할을 한다. 이러한 Output을 만들기 위해 y_t-1에 해당하는 Output과 a_t-1에 해당하는 Hidden State를 GRU의 Input으로 받는다. 실제 Prediction을 할때는 일반적인 Sequence Model과 동일하게 Softmax를 Activation으로 둔다. 한가지 유의할 점은 t=0 시점인데, a0은 마지막 Episode인 m_TQ를 사용한다.

(a_t는 Prediction을 하기 위한 Input으로 쓰인다)


Result & Conclusion

Result

일단 기존 Memory NN과의 성능비교 결과이다. 2,3번의 Task는 Supporting Fact인데, 여기서 DMN(Dynamic Memory Network)는 기존 Memory NN에 비해 성능이 약간 떨어지는 것으로 나타난다. 여기서, 매우 긴 Input Sequence를 처리하는데에 DMN이 좋은 모델이 아니라는 사실이라는 추측 할 수 있다. 하지만 7,8번과 같은 Task인 무언가를 세는 주제에 대해서는 기존 Memory NN에 비해 상당한 수준으로 더 나은 결과를 보여준다. 이는 Episodic Memory Module이 얼마나 잘 작동하는가에 대한 간접적인 증거로 볼 수 있을 것이다. 17,19번의 경우 Memory NN보다 더 떨어지는 성능을 보이지만 애초에 둘다 좋은 성능을 내지 못한다.


위 결과는 Episodic Memory의 Iteration이 많이 돌수록 좋은가에 대한 결과이다. Three-facts, Count, List/Sets와 같은 Task에 대해서는 Iteration이 돌수록 좋은 결과를 보여주는 데에 비해 Fine Grain(정도, 등급)기반의 Sentiment Analysis의 경우에는 무조건 Iteration 횟수가 많다고 좋은 결과를 내지 않는다는 것을 보여주고 있다. 이는 


Conclusion

Episodic Memory Module을 이용한 Dynamic Memory Network구조를 통해 반복적인 학습을 통해 어느정도의 성능 상승을 꾀하는 구조를 이 논문에서는 제시한다. 그럼에도 불구하고 현재는 Transformer를 이용한 BERT와 같은 Pretrained Model을 통한 방식의 등장때문에 쓰이지 않는 방식이기도 하다.


그렇다면 현재는 정말 Transformer와 같은 방식 외에 다른 방식은 전혀 쓸수가 없는걸까? 정말 Self-Attention은 Memory Module의 필요성을 없앴을까? 이러한 부분에서 발표자 분이 가지는 궁금증에 동의하지 않을 수 없다.