본문 바로가기
Data Science/NLP with Deep Learning

NTN으로 시작하는 자연어처리와 딥러닝 (3) - NTN 신경망 구조 파악 및 이론적 배경 탐색

by 싸코 2018. 2. 14.


『NTN으로 시작하는 자연어처리와 딥러닝』



이번 포스팅에서는 Neural Tensor Network를 좀 더 세부적으로 가능하면 심도있게 다루어보려고 합니다. NTN을 모델로서 표현하여 설명하고 가능한한 시각적으로 이를 다루도록 하겠습니다. 더불어 Network의 Layer로 사용한 function 들에 대한 설명과 그 이론적 배경 등을 소개하면서 NLP와 Deep Learning 내용을 다루려고 합니다.


핵심 개념에 대한 사전을 이전 포스트에 정의하였으니 참조하면 좋습니다.

 

NTN은 Neural Tensor Network의 약자로 스탠포드 대학교 교수인 Richard Socher (2013)가 "Reasoning With Neural Tensor Networks for Knowledge Base Completion"에서 지식을 넘어선 추론(Reasoning Over Knowledge)을 위해 제시한 딥러닝 모델입니다.



NTN 모델의 신경망 구조 파악 및 이론적 배경 탐색

Neural Models for Reasoning over Relations



1. 이론적 배경

 1-1 Distance Model

 1-2. Single Layer Model

 1-3. Hadamard Model

 1-4. Bilinear Model

 1-5. 요약


2. NTN Model : Neural Tensor Layer

 2-1. Bilinear Form

 2-2. Tensor

 2-3. Standard Neural Network

 2-4. Score Function

 2-5. 요약




1. 이론적 배경 : Related Models

앞에서 score function이라는 것을 다루었는데 이는 간단하게 말하면 score 점수를 매기는 것이라고 할 수 있습니다. 여기서 score라는 것은 triplet (e1, R, e2)이 얼마나 참인지(how likely correct)를 나타내는 지표입니다.


Neural Tensor Network는 score를 계산하기 위해서 4가지 모델에서 이론적인 배경을 가져왔습니다. 논문에서 소개한 것처럼 모델의 표현력(expressiveness)과 복잡도(complexity)가 증가하는 순서대로 4가지 모델을 정리하도록 하겠습니다.



1-1. Distance Model 거리 모델

한 좌표 평면 공간 안에서 위치한 두 점 간의 거리를 구하는 방법에 대해서 익숙하다면 Distance Model의 이해에도 도움이 됩니다. 어떤 개체 간의 유사성(similarity)을 파악하기 위하여 distance를 구하는 방식으로 유사성을 분석하는 것입니다.


주요 개념: 유사도 기반 거리 계산

유클리디안 거리, 맨하튼 거리, 자카드 거리 등은 이를 구하기 위해서 사용하는 방법입니다. 논문에서 소개한 Distance Model은 아래와 같이 절대값으로 거리를 구하는 방식입니다. 어떤 Relation이라는 공간 안에서 두 개체(entity)간의 L1 거리를 score로 계산합니다. W는 relation R을 분류하기 위한 parameter 입니다.



이제 score가 의미하는 바가 더욱 분명해졌습니다. score는 유사도를 기반으로(similarity-based) 하는 모델의 결과로 score 값이 낮을수록 거리가 가까운 것으로 해당 relation 안에서 두 개체 간의 관계가 있음을 나타냅니다. 다른 거리 계산 방식에서는 score 값이 높을수록 참(correct)에 가깝습니다. (word vector space에서는 거리가 가까울수록 거리계산에 대한 score 값이 높게 나옵니다)


word vector space


한계: entity vector 간의 상호작용을 고려하지 못함

어떤 relation 안에서 entity들은 vector의 형태로 서로 연관성이 있을 것입니다. 특히 어떤 relation이냐에 따라서 같은 entity들이더라도 연결되는 방식이 다를 것입니다. 내가 누군가와 주고받는 커뮤니케이션 방식이 또다른 누군가에게 똑같이 했을 때 그 의미가 다른 것처럼 말입니다. 미운 놈을 떡 하나 더 준다는 것과 사랑하는 내 새끼에게 떡 하나 더 준다는 것은 동일한 relation(떡 하나 더 준다) 일지라도 다른 의미를 가지며 긍정적으로 더 준다는 것을 기준으로 봤을 때는 나와 미운 놈의 거리는 멀리 떨어져 있을 것이고 떡을 준다(긍정)는 것은 거짓(uncorrect)이 될 것입니다.

위의 score function은 각 개체가 독립적으로 표현되어 relation 안에서의 entity의 관계는 나타나지만 entity 간의 관계는 고려되지 못하는 한계가 있습니다.



1-2. Single Layer Model : 퍼셉트론 모델

Single Layer는 Multi Layer Perceptron에서 하나의 계층(layer)을 말합니다. 퍼셉트론으로 퍼셉트론 포스트를 참조하면 이해에 도움이 됩니다.

주요 개념: single layer에서 사용되는 가중치 매개변수와 입력 변수의 계산(W*X), 비선형 활성화 함수(f) 사용 


거리 모델이 entity 간의 상호작용을 고려하지 못한다는 한계점이 있기 때문에 이를 해결하기 위해서 일반적인 neural network에 사용하는  single layer를 사용하는 모델이 고려되었습니다. 퍼셉트론은 활성화 함수(activation function)이 있는데 이 때 비선형 함수(nonlinearity function)가 사용됩니다. uf(We1 + We2)는 일반적인 퍼셉트론(single layer)의 계산식과 동일합니다.


f는 비선형을 위한 hyper tangent 함수이고, W, u는 relation R에 대한 score를 계산하기 위한 파라미터(매개변수) 입니다. 두 entity vector가 결합된(+) 형태이고 이에 non-linearity가 추가된 형태입니다. +를 통해 결합을 하면서 어느정도의 entity vector 간의 상관을 고려할 수 있게 되었습니다.


*Neural Tensor Network에서 k(slice) 개수가 0일 때 똑같은 모델입니다. slice에 대해서는 NTN 모델을 다룰 때 이야기하도록 하겠습니다.


한계: 최적화에 드는 비용의 문제로 인한 약한 상호작용 (weak interaction)

entity vector 간의 (+) 결합과 non-linearity 만으로는 entity vector 간의 상호작용을 고려하기가 용이하지 않습니다. single layer일지라도 학습해야 하는 파라미터가 많고, optimize 하기 위해 필요한 expense(비용)가 크다는 한계점이 있습니다.



1-3. Hadamard Model

Bordes et al.은 weak entity vector interaction을 해결하기 위한 방법으로 Hadamard Model을 제시했다. 간단하게는 multiple matrix에 대한 product를 하는 것인데 단순 결합(+) 형태로 발생하기 때문에 conjecture 결합(×) 형태로 interaction의 강도를 높이는 방법입니다. vector는 행렬로 결과가 나오기 때문에 행렬의 내적을 위해서 Hadamard Product 방식을 가져옵니다.


주요 개념: Hadamard product를 사용하여 entity, relation간 interaction 강도를 높임


하다마드 행렬(Hadamard Matrix)와 내적(Product)에 대해서 조금만 더 살펴보겠습니다. 

하다마드 행렬은 역행렬이 있는(invertible) n x n 차원의 정방행렬입니다. 그리고 모든 값이 +1과 -1로 구성되어 있습니다. 이 때 n의 크기는 1, 2, 4, ..., 4n 4의 배수 4n이어야 합니다.  (*NTN이 tanh 비선형 함수를 사용하여 score 결과를 1과 -1로 내고, Weight vector의 차원을 100으로 하여 4의 배수 등으로 맞춘 이유는 하다마드 행렬의 특징과 연관이 있어 보입니다)


[1 1; -1 1] 하다마드 행렬 예시


하다마드 내적(Hadamard Product)의 가장 큰 특징은 element-wise product라는 점입니다. 아래 그림을 보면 각 위치끼리의 element들끼리만 곱셉을 하는 것을 보실 수 있습니다. 일반적인 행렬의 dot product와는 다릅니다.


{\displaystyle \left({\begin{array}{ccc}\mathrm {a} _{11}&\mathrm {a} _{12}&\mathrm {a} _{13}\\\mathrm {a} _{21}&\mathrm {a} _{22}&\mathrm {a} _{23}\\\mathrm {a} _{31}&\mathrm {a} _{32}&\mathrm {a} _{33}\end{array}}\right)\circ \left({\begin{array}{ccc}\mathrm {b} _{11}&\mathrm {b} _{12}&\mathrm {b} _{13}\\\mathrm {b} _{21}&\mathrm {b} _{22}&\mathrm {b} _{23}\\\mathrm {b} _{31}&\mathrm {b} _{32}&\mathrm {b} _{33}\end{array}}\right)=\left({\begin{array}{ccc}\mathrm {a} _{11}\,\mathrm {b} _{11}&\mathrm {a} _{12}\,\mathrm {b} _{12}&\mathrm {a} _{13}\,\mathrm {b} _{13}\\\mathrm {a} _{21}\,\mathrm {b} _{21}&\mathrm {a} _{22}\,\mathrm {b} _{22}&\mathrm {a} _{23}\,\mathrm {b} _{23}\\\mathrm {a} _{31}\,\mathrm {b} _{31}&\mathrm {a} _{32}\,\mathrm {b} _{32}&\mathrm {a} _{33}\,\mathrm {b} _{33}\end{array}}\right)}


이는 두 변수간의 상호관계(interaction)를 보기 위해서 f(x) = a + b 라는 함수가 있을 때 상호작용 변수(두 변수를 곱하여 만든다) ab를 추가하여 f(x) = a + b + ab를 이용하는 것과 비슷한 이치라고 볼 수 있습니다.


entity와 relation의 interaction을 보기 위해서 각 element들끼리로 봐야 하기 때문에 hadamard product를 사용한 것입니다. Hadamard model의 formula는 다음과 같습니다.



크게 보면, g(e1, R, e2)는 A * B의 형태입니다. entity1과 entity2의 관계에 대한 score를 계산하기 이전에 각 entity 별로 Hadamard product를 통해서 relation과의 상호작용도 계산하는 방식으로 보입니다. 이는 앞선 다른 모델들이 relation을 간단하게 하나의 개별 single vector로 표현하여 entity vector와의 상호작용을 계산하기 위해 여러번의 linear product로 사용한 것과는 다릅니다. "모든" relation이 W1, W2, Wrel 라는 파라미터(매개변수)를 통해서 특징을 공유합니다. 이는 entity 간의 연관성을 고려한 것처럼 relation도 동일한 방식으로 다루었음(연관성을 고려하기 위해 relation 별 vectorization)을 의미합니다.




1-4. Bilinear Model

Bilinear Model은 두 개의 Vector Space를 연결하기 하나의 Vector 공간으로 표현(Representaion) 방법입니다. 단순히 두 개의 vector input을 하나의 vector output으로 결합하는 것을 의미합니다. 이는 행렬 곱(Matrix multiplication)으로 간단하게 할 수 있습니다. 만약 V1과 V2를 하나의 Vector 공간으로 만들고자 한다면 다음과 같습니다.



위를 Bilinear form이라고도 부르며, 이는 두 개의 독립적인 linear를 단순 결합(combination)한 것에 지나지 않습니다. 하지만 앞에서 말한 것처럼 서로 다른 두 변인 a와 b를 곱함으로써 상호작용을 보는 변인을 만드는 것으로 볼 수도 있고, 거리 score를 계산하기 위해서 vector 공간끼리 연결하는 의미로 볼 수도 있습니다. 


주요 개념: relation specific bilinear form으로 각 relation 별로 entity 간의 interaction을 표현 가능


조금더 정확하게 말하자면. Neural Layer에서 Bilinear Tensor Layer를 만드는 목적은 두 개의 서로 다른 독립된 정보(partial information)들을 하나의 정보로 모아서(aggregate) 보고자 할 때 사용합니다. PCA를 떠올리시면 이해가 되실 수 있습니다. 결국 Bilinear form으로 만든다는 것은 일종의 Representation 작업을 한다는 의미입니다.



NTN에서 이 모델을 사용하므로 2개의 entity가 relation과 가지는 관계에 대해서 다시 한번 결합을 함으로써 relation 안에서의 두 entity 간의 관계(상호작용)을 좀 더 강하게(strong) 표현(representation)할 수 있게 되었습니다. 그리고 각 relation별로 entity들 간의 관계가 다를 수 있는데 relation 별로 W를 가짐으로써 동일한 두 entity라고 할지라도 다른 relation에서는 다른 관계를 맺을 수 있음을 표현할 수 있게 되었습니다. 중간의 W 파라미터가 가지는 의미가 이와 같습니다.


한계: 하나의 relation 안에서도 다양한 의미로 사용될 수 있는 것을 반영하지 못함

하지만 각 relation을 '동사'라고 했을 때, 동일한 동사라고 해도 어떤 문장에서 어떤 단어와 문맥에서 사용되었느냐에 따라서 그 의미가 달라집니다. relation은 이런한 의미에서 하나 layer로만 표현이 된다면 그 다양성을 나타내기 어렵기 때문에 NTN에서는 bilinear model을 neural tensor model로 발전시킵니다. 동일한 eWe를 eW1e, eW2e, eW3e, ... 의 식으로 여러 개를 둠으로써 relation의 variation을 고려할 수 있도록 하였습니다.

따라서 relation이 많고 데이터 셋 자체가 큰 경우에는 이 variation을 얼마만큼 주는가가 모델의 성능에도 영향을 미칠 것입니다.



요약

1. Distance Model : 유사도 기반 거리 계산

2. Single Layer Model : entity 간 상호작용 고려, 비선형함수 및 퍼셉트론 layer 사용

3. Hadamard Model : entity와 relation의 상호작용 고려

4. Bilinear Model : 각 relation 별로 entity 간 상호작용 고려 (relation specific)


Neural Tensor Network는 앞에서 소개한 4가지 모델의 idea와 장점(strength)을 참조, 발전시킨 모델입니다.


5. NTN Model : tensor를 추가하여 각 relation 별로 의미적 다양성을 고려







2. NTN Model : Neural Tensor Layer


지금까지 NTN의 이론적인 배경을 소개하였습니다. 어떤 이론적인 배경이 NTN 모델에 영향을 주었고, 이들 모델로부터 NTN 모델이 가지는 차이점이 무엇인지 알아보았습니다.


Layer 파헤치기



기본적으로 위의 모델들이 score function으로 triplet (e1, R, e2)이 얼마나 참인지(how likely correct)를 score 값으로 계산한다는 것을 말했습니다. Neural Tensor Network를 구성하는 하나의 Neural Tensor Layer도 이러한 score function으로 되어 있습니다.


위의 그림은 NTN 모델의 score function을 표현한 것입니다. 식은 다음과 같습니다.



2-1. Bilinear Form

NTN 모델은 기본적인(standard) linear neural network layer (X'*W 식의 퍼셉트론 형태)를 두 개의 entity를 연결한 ,  bilinear tensor layer의 형태로 대체하였습니다. (X'*W*X의 형태)
위의 그림에서는 "Slice of Tensor Layer" 부분을 말합니다.

Bilinear Model 파트에서도 확인하셨듯이 Slice of Tensor Layer 부분은 하나의 relation 안에서 entity 간의 interaction 또는 연관성 정도를 나타내기 위한(representation) 것으로 보시면 됩니다. 벡터의 내적에 따른 거리 및 방향을 계산하는 방식입니다.


따라서 k개의 slice에 있는 각 W parameter는 두 entity간의 관계를 중간에서 각각 다르게 매개합니다. 따라서 k의 개수와 W의 차원크기는 모델의 복잡도(complexity)를 조절하는 역할도 하게 됩니다.


  • W: 차원의 크기가 (d, d, k) 이며 d는 entity vector의 차원의 크기와 동일해야 합니다. 3차원 이상의 vector를 tensor라고 부르는데 그러한 의미에서의 텐서라고 생각하면 편합니다.
  • k: slice의 개수. k가 추가됨으로써 tensor가 됩니다. V, b, U 모두 k만큼 vector 차원의 크기가 커집니다.



2-2. Tensor

그와 동시에 NTN에서 새롭게 추가된 tensor 개념이 하나의 relation이 가질 수 있는 다양한 의미적 해석(variation)을 고려할 수 있도록 했습니다.
이는 에서 k의 개수를 늘림으로써 (본문에서는 slice라고 하는데) 이를 반영하도록 하는 것입니다. 위의 그림에서는 k=2인 slice가 2개인 tensor로 표현되어 있습니다.


2-3. Standard Neural Network (Perceptron)

나머지   부분은 다른 포스트에서 다루었던 초기 일반적인 신경망인 Perceptron의 B형태입니다. W'*X + b의 형태와 동일합니다. 여기서 V는 신경망의 weight parameter를, b는 bias를 의미합니다.


결과적으로 Bilinear의 값이 모여 Tensor가 되고 Tensor와 Perceptron이 모여 하나의 score를 이룹니다.


신경망의 마지막에는 활성화 함수(activation function)가 있는 것처럼 최종 출력을 위한  부분이 있습니다. 여기서 u와 f 모두 일반적인 형태의 신경망에서 사용되는 것과 동일합니다.

f는 hyper tangent함수를 의미합니다. 출력값이 1과 -1 사이가 반환됩니다. 위에서 다루었던 Hadamard Model에서 1과 -1로 이루어진 행렬에 대한 product를 언급하였는데 tanh 함수를 사용한 것은 비슷한 이유가 있지 않을까 생각이 들었습니다.


Image result for hyperbolic tangent activation function


tanh 활성화함수를 통해서 score의 값이 비선형(nonlinearity)으로 반환됩니다. 스탠포드 대학교 딥러닝 NLP Socher 교수의 강의를 참고해서 말씀드리면 tanh 함수가 많은 모델에서 성능이 좋다고 합니다. 그리고 loss에 대한 convergence가 sigmoid보다 비교적 빠르고 합니다. hyper tangent를 위해서는 사실 standard initialization 방법보다는 normalized initialization방법이 좋다고 합니다. 이에 대한 자세한 내용은 신경망 학습 부분을 다룰 때 설명하도록 하겠습니다.


  • V : 차원의 크기가 (k, 2d)인 슬라이스 개수와 entity vector 2개의 차원 만큼의 크기를 가진 weight parameter입니다.
  • b : 차원의 크기가 k인 bias parameter입니다.
  • f : hyperbolic tangent 함수 (실제 Socher의 구현 코드에서는 sigmoid와 같은 다른 activation 함수에 대한 설정도 고려되어 있습니다)
  • U : 차원의 크기가 k인 parameter입니다. k개의 element를 가진 vector차원의 값들을 하나의 score 값으로 계산해주는 weight parameter 입니다. 



2-4. Score Function

최종적으로 반환되는 score function , 은 로 k 개만큼의 실수 값을 가지는 차원의 크기가 (1, k)인 벡터로 반환됩니다. 각 k의 값은 각 slice tensor layer에서 나온 값입니다. 이를 하나의 단일한 score 값으로 계산하기 위하여 U가 추가되었습니다. U가 transposed되어 계산된 것을 알 수 있습니다.


U의 처음 초기화 값은 1로 k개의 score를 하나의 score로 합산하지만 학습이 진행될수록 하나의 relation에서도 가지는 의미의 정도에 따라 달라지고 이것이 반영되어 score 값이 결정될 것입니다.





< NTN 구성도 >





요약

하나의 score function 은 하나의 relation에 대한 semantic word vector space를 의미하고,

relation 별로 tensor layer를 가져 의미적 다양성을 포함하여 해당 relation 안에서 entity들이 가지는 연관성에 대한 추론을 가능하게 해줍니다.

하나의 relation의 score function은 일반적으로 말하는 신경망의 작은 Perceptron의 모양을 가집니다.


그리고

전체 Relation에 대해서는 Relation 별로 score function이 있기 때문에 하나의 score function 자체가 Perceptron이면서도 하나의 노드로서 앙상블(Ensemble) 모델의 일부이기도 합니다.


실제 예측을 할 때 어떤 relation인지 확인하고 해당 relation의 score function으로만 계산한다는 점에서 다소 차이는 있으나 크게 봤을 때는 다수의 Perceptron 모형이 있는것과 같습니다. 아래 그림은 NTN의 구성도입니다.


*앙상블(Ensemble)은 랜덤포레스트와 같이 다수의 예측 모형을 만들어서 모형의 예측 결과를 종합해 하나의 최종 결과를 도출해내는 방법을 말합니다.










지금까지

  1. Neural Tensor Network 모델의 이론적인 배경과 이전 모델에서 어떤 아이디어를 가져왔고 변화, 발전시켰는지
  2. Neural Tensor Network를 구성하는 Layer가 어떻게 구성되었는지

를 알아보았습니다. 



요약하면 이제 NTN 모델이 거리 기반(distance based)이며, projection을 통한 개체간 연관관계를 보는 모델이라는 것을 알았습니다. NTN 모델의 신경망 아키텍쳐(Neural Network Architecture)에 대해서 알아보았고 다음 포스트에서는 구축한 신경망을 어떻게 학습하는지 Learning을 중심으로 내용으로 다루어보도록 하겠습니다.






참고자료

1. Hadamard Matrix,  https://en.wikipedia.org/wiki/Hadamard_matrix
2. Bilinear Form,  http://www.math.toronto.edu/jkamnitz/courses/mat247/bilinearforms1.pdf


댓글