0. Reference
https://arxiv.org/abs/1410.3916
Memory Networks
We describe a new class of learning models called memory networks. Memory networks reason with inference components combined with a long-term memory component; they learn how to use these jointly. The long-term memory can be read and written to, with the g
arxiv.org
1. Introduction
- 대부분의 머신러닝 모델들은 long-term component를 읽고 잘 사용하지 못한다고 한다.
- 예를 들면, 수능 국어 지문을 읽고, 수능 문제를 푸는데 한계가 있다는 것을 의미한다.
- long-term component를 이해하기 위해 RNN을 도입하더라도 가변적인 데이터에 대해서 학습이 어렵다는 단점이 있다.
- 이러한 단점을 memory Networks를 이용하여 본 논문에선 해결하고자 한다.
- memory networks가 무엇인지 알아보자.
2. Memory Networks
- Memory Networks는 메모리와 네 가지 구성 요소 I,G,O,R로 구성 된다.
- I (Input feature map) : 들어오는 입력을 internal feature representation으로 변환한다.
- G (Generalization) : 새로운 입력을 바탕으로 기존 메모리를 업데이트한다. 이 단게에선 네트워크는 메모리를 압축하고, 일반화할 수 있는 기회를 갖는다.
- O (Output feature map) : 새로운 입력과 현재 메모리 상태를 바탕으로 새로운 출력을 생성한다.
- R (Response) : 출력을 원하는 응답 형식으로 변환한다. 예를 들어, 텍스트 응답이나 동작을 의미한다.
- 데이터 x가 들어올 때 모델은 다음과 같이 동작한다.
i) x를 internal feature representation으로 변환한다. (x -> I(X))
ii) 새로운 입력을 바탕으로 메모리를 업데이트 한다. : i = G(i,I(x))
iii) 새로운 입력과 메모리를 바탕으로 output feature o를 계산한다 : o = O(I(x),memory)
iv) 마지막으로, output feature o를 decoding하여 최종 response를 생성한다. r = R(o)
- 이 과정은 train,test 모두 적용되며, test시간에는 메모리는 저장이 되지만,
- I,G,O,R의 모델 parameter는 update되지 않는다고 한다.
- memory network는 다양한 구현을 포괄하는 넓은 클래스이다.
- I,G,O,R은 어떤 머신러닝 모델을 사용해도 상관없다고 한다. ex) SVM, decision tree,...
I component :
- I는 standard pre-procession을 사용할 수 있다.
- input을 internal feature representation으로 encoding가능하다.
G component:
- G의 가장 간단한 형태는 I(x)를 memory의 'slot'에 저장하는 것이다.
- 여기서 H는 slot을 선택하는 함수이다.
- G는 메모리의 인덱스 H(x)를 업데이트하지만, 메모리의 다른 부분은 변경되지 않는다.
- 만일 메모리가 가득 차면, H(x)는 각 메모리의 유용성을 점수화하고 가장 유용하지 않은 메모리르 덮어쓸 수 있다고 한다.
O and R components:
- O의 구성요소는 일반적으로 메모리에서 읽고 추론하는 역할을 한다.
- 예를 들어, 좋은 응답을 수행하기위해 관련된 메모리가 무엇인지 계산하게 된다.
- R의 구성요소는 O의 출력을 바탕으로 최종 응답을 생성한다.
- 예를 들어, 질문 응답에서 O는 관련 메모리를 찾고, R은 답변의 실제 문구를 생성한다.
3. A MemNN implementation for text
- Memory Neural Network를 줄여서 MemNN이라고 부른다.
- MemNN에 대해서 알아보자.
3.1. Basic model
- 기본 architecture에서 I module은 input text를 받는다.
- 여기서 text가 sentence라고 생각해보자. 이는 질문이 될 수도 있고, 사실들이 적혀있을 수 도 있다.
- 이러한 text는 원래 형태로 사용가능한 memory slot에 저장된다.
- S(x)는 다음 빈 memory slot N을 return한다.
- G module은 이 새로운 메모리를 저장하는 데만 사용되므로 기존 메모리는 업데이트 되지 않는다.
- 더 정교한 모델은 후속 섹션에서 설명한다.
- inference의 핵심은 O module과 R module이다.
- O module은 주어진 x에 대해 k개의 support memory를 찾아 output feature를 생성한다.
- 본 논문에선 k를 최대 2까지 사용하지만, 더 큰 k로 일반화 가능하다.
- k = 1 인경우, 가장 높은 점수를 받은 support memory는 다음과 같이 검색된다.
- k = 2인 경우, 이전 반복에서 찾은 첫 번째 support memory를 바탕으로 두 번째 support memory를 찾는다.
- 최종 output o는 [x,m_o1,m_o2]이 되며, R module에 입력된다.
- R Module은 텍스트 reponse r을 생성해야 한다. 가장 간단한 응답은 m_ok를 반환하는것이다.
- 즉, 검색된 이전 문장을 출력하는 것이다.
- 좀 더 향상된 답변을 생성하려면 RNN을 사용할 수 있다.
- 이를 위해 return되는 response를 scoring하게 된다.
- 이해를 위해서 예시를 들어보자.
- x = "Where is the milk now?"에 답하기 위해 O module은
- 먼저 모든 memory(이전에 본 모든 문장)을 x에 대해 scoring하여 가장 관련성 높은 m_o1을 검색한다.
- 그 후, memory를 다시 검색하여 [x,m_o1]에 대한 두 번째 관련 사실 m_02를 검색한다.
- 마지막으로 R module은 다음 식을 사용하여 [x1,m_o1,m_o2]에 대해 단어를 scoring하여 r = "office"를 출력한다.
- scoring function에 대해서 알아보자.
- scoring function은 다음과 같이 정의된다.
- scoring function은 두 텍스트 x,y의 유사성을 계산해준다.
- O module에서는 입력 x와 메모리 i의 관련성을 평가한다.
- R modele에서는 메모리와 입력을 기반으로 특정 단어 w의 적합성을 평가한다.
- 각각의 구성 요소에 대해서 한번 알아보자.
(1) Embbeding function phi_x , phi_y
- 역할은 텍스트를 D차원의 feature vector로 변환한다.
- 여기서 Bag-of-Words(BoW) 방식을 사용하여 3|W|(|W| : 사전의 크기) 차원의 feature space를 사용한다.
- 즉 각 문장을 3개의 표현방식을 사용해 vector화 한것이다.
- 두개는 phi_x를 위한 representation이고, 또 다른 하나는 phi_y를 위한 representation이다.
- BoW를 간단히 예시를 들어 설명하면 다음과 같다.
- 다음과 같은 3개의 Document가 있다고 가정해보자.
i) "I love data science"
ii) "Data Science is amazing"
iii) "I love machine learning"
- 모든 문서에 등장한 단어를 정리하면 다음과 같은 단어장이 생성된다.
['I', 'love', 'data', 'science', 'is', 'amazing', 'machine', 'learning']
- 이를 BoW를 적용하여 벡터화하면 다음과 같다.
(2) U matrix
- 크기 : n x D (n : embedding dimension, D : feature dimension)
- U는 linear transformation을 수행하여 고차원 feature vector를 저차원 embbeding space로 mapping한다.
- score가 높으면 높을수록 연관성이 높다고 판단이 가능하다.
- MemNN의 학습은 fully supervised setting을 통해 진행되었다고 한다.
- input과 response가 주어지고 전부 라벨링이 되어있는 상태이다.
- 그렇기 때문에 scoring function의 best choice를 알 수 있게 된다.
- loss function은 margin ranking loss를 사용하고 Optimizer는 SGD를 사용하였다고한다.
- loss function은 다음과 같다.
- 즉, 정답 샘플의 점수가 오답 샘플보다 최소한 margin(gamma)이상 더 높아야 한다는 조건을 학습시키는 loss function이다.
- 만약 이 조건이 충족되지 않으면 그 차이만큼의 손실이 발생하여 모델이 더 잘 구별하도록 강제시킨다.
3.2. Word sequence as input
- 입력이 문장이 아닌 단어 단위로 들어오는 경우, 기존 방식에서 일부 조정이 필요하다.
- 새로운 단어 sequence가 들어올 때 적절한 분할 지점을 찾는 segmentation function을 학습하도록 추가한다.
- segmenter가 작동하려면 해당 sequence를 memory에 저장하고, 이후 기존 방식대로 처리할 수 있다.
- segmenter는 다음과 같이 embedding model로 정의된다.
3.3. Efficient Memory via hashing
- 메모리에 저장된 데이터가 방대해지면, 일일이 scoring하는 것이 계산적으로 비효율적일것이다.
- 따라서 hashing을 활용하여 search 속도를 높이게 되었다고 한다.
- 본 논문에선 두 가지 hashing 방식을 실험하였다고 한다.
1) word hashing
- 사전에 있는 단어 개수만큼 bukkit을 만들고, 문장이 포함하는 단어를 기준으로 버킷에 할당한다.
- 이 방식은 input과 저장된 메모리 항목 m_i가 최소한 하나의 단어를 공유하고 있지 않으면 검색에서 제외된다.
2) embedding clustering
- 학습된 embedding matrix U을 활용하여 단어 벡터를 K-menas clustring한 후, 클러스터 수만큼 bukkit을 만든다.
- 문장을 구성하는 단어들이 속한 클러스터를 기반으로 문장을 hashing한다.
- word vector가 의미적으로 유사한 단어끼리 묶이므로,
- 단어의 정확한 일치가 없어도 의미적으로 유사한 문장을 검색할 가능성이 높아진다.
3.4. Modeling Previously unseen words
- Language Model이 학습 데이터에서 보지 못한 새로운 단어를 만났을 때, 이를 처리하는 것은 매우 중요한 문제이다.
- 예를 들어 우리가 소설을 읽을 때, "송장짐"이란 단어가 등장하면 우리는 문맥을 통해 정체를 유추할 수 있다.
- 모델도 이와 유사한 방식으로 새로운 단어를 처리해야 한다.
- 이를 위해 새로운 단어를 주변 Context로 표현하는 방식을 도입하였다
- 새로운 단어가 등장할 때, 해당 단어의 왼쪽/오른쪽 문맥을 BoW방식으로 저장한다.
- 기존 embedding vector대신, 해당 단어의 문맥 정보를 포함한 feature vector로 새로운 단어를 표현한다.
- 훈련 과정에서 dropout 방식으로 특정 단어를 "모른다고 가정"하여 모델이 문맥 기반으로 추론으로 학습하도록 유도한다.