일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Stanford
- error
- natural_language_processing
- Statistics
- install
- nlp
- github
- seq2seq
- language_model
- terminal
- computer_setting
- git
- code
- review
- json
- cs231n
- linux
- Ai
- gensim
- Standford
- computer
- paper_review
- Vim
- text
- machinelearning
- pip
- tab
- slideshare
- deeplearning
- cs224n
- Today
- Total
NLP/AI/Statistics
Attention Mechanism 본문
앞서 Seq2Seq에 대하여 설명했다.
Seq2Seq는 encoder, decoder 개념을 사용하여 입력 시퀀스를 압축하고 출력 시퀀스를 생성하는 모델이다.
이는 기계번역 task에서 주로 사용되지만,
encoder에서 일정 크기로 모든 시퀀스 정보를 압축하여 표현하려고 하기 때문에 정보손실이 발생하는 문제가 있다.
이러한 문제를 보완하고자 Attention 모델이 제안되었다.
Attention 모델은 decoder가 단순히 encoder의 압축된 정보만을 받아 예측 시퀀스를 출력하는 것이 아니라,
decoder가 출력되는 시점마다 encoder에서의 전체 입력 문장을 한번더 검토하도록 한다.
이 때 decoder는 encoder의 모든 입력 시퀀스를 동일한 가중치로 받아들이지 않고,
중요한 단어에 대하여 더 큰 가중치를 주어 중요성을 나타내도록 한다.
즉, encoder에서 중요한 단어에 집중하여 이를 decoder에 바로 전달하도록 한다.
Attention mechanism에 대한 이해를 위해 "Key-Value"에 대한 이해가 필요하다.
이는 기본적인 사전(dictionary)의 개념이라고 생각하면 된다.
예를 들어, (사과 : apple)에서 "사과"라는 key의 value값을 "apple"이 된다.
이제 attention에 대하여 설명하고자 한다.
Attention(Q, K, V) = attention value
위의 함수는 attention의 기본적인 구조이다.
Qeury에 대하여 모든 Key와의 유사도를 구하고, 해당 유사도를 Key에 매핑된 Value에 반영한다.
모든 Value 값들을 더하여 attention value값을 얻게 된다.
이러한 식을 아래와 같이 다시 정의해보았다.
Value += similarity(Q, K) = Attention value
(한번에 받아들이기 쉽게 작성한 함수 식이기 때문에 위의 식은 고려하지 않아도 된다.)
이제 seq2seq에 attention 모델을 합한 모델에 대하여 설명한다.
이 때, 위에서 언급한 Qeury, Key, Value는 각각 다음의 값들을 의미한다.
Q (Query): decoder에서 t 시점의 은닉 벡터 ($s_{t}$)
K (Key): encoder에서 모든 시점에 대한 은닉 벡터 ($h_{i}$)
V (Value): encoder에서 모든 시점의 은닉 벡터 값
#. seq2seq + attention 모델에 사용되는 attention 기법은 다양하게 있다.
가장 기본적인 attention 개념을 이해하기 위해 본 글에서는 dot-product attention에 대하여 설명한다.
우선, seq2seq + attention 모델을 간단하게 아래와 같이 도식화하였다.
앞으로 위의 mechanism을 5단계로 설명한다.
Step1) Attention score
첫 번째로 Attention Score를 구하는 단계이다.
위의 그림에서 왼쪽 encoder 부분에서 $h_{1}, h_{2}, h_{3}$은 각 t 시점의 은닉 벡터를 의미하며,
해당 그림에서는 입력 시퀀스의 길이 $n$이 3이기 때문에 $h_{3}$까지 표기하였다.
(즉, 시퀀스의 길이의 각 시점을 1, 2, ..., n이라고 할 때 은닉 벡터는 $h_{1}, h_{2}, ..., h_{n}$이다.)
그리고 오른쪽 decoder 부분에서 $s_{t}^{T}$는 decoder에서 현재 시점 t의 은닉 벡터를 전치시킨 것이다.
위의 그림에서 decoder는 현재 시점을 <SOS> 토큰 위치인 첫번째 시점 (t=1)으로 예를 들고 있기 때문에
현재 시점 t의 은닉 벡터는 $s_{1}$와 같다고 할 수 있다.
이 때, encoder의 은닉 벡터 $h$와 decoder의 은닉 벡터 $s$의 차원 수는 동일하다고 가정한다.
Attention mechanism은 총 3개의 입력 값을 필요로 한다.
(1) 이전 시점 t-1의 은닉 벡터
(2) 이전 시점 t-1로부터 출력된 예측 단어
(3) attention value
위의 세 가지 중 (1), (2)는 seq2seq의 decoder에서 현재 시점 t의 입력 두 가지와 동일하다.
(참고: Sequence to Sequence)
그리고 새롭게 추가되는 attention value를 이제 설명하고자 한다.
이 글에서 t 시점의 attention value는 $a_{t}$라고 표기하며,
attention mechanism에서의 새로운 입력 값인 attention value를 구하기 위해 attention score가 필요하다.
Attention score는 decoder의 t 시점 은닉 벡터 $s_{t}$와 encoder의 모든 은닉 벡터 $h_{1}, h_{2}, ..., h_{n}$ 간의 유사성으로 나타낸다.
(해당 글에서는 앞서 언급했듯이 많은 attention mechanism 중에 dot-product attention에 대하여 설명하기 때문에
dot-product attention에서의 계산 과정을 설명한다.)
Dot-product attention은 위의 그림과 같이 decoder의 t시점 은닉 벡터 $s_{t}$를 $s_{t}^{T}$와 같이 전치하고 encoder의 모든 은닉 벡터 $h_{1}, h_{2}, ..., h_{n}$와 dot-product를 시행한다.
즉, encoder의 각 시점에 대하여 attention score가 다음과 같이 생성된다.
$$score(s_{t}, h_{i}) = s_{t}^{T}h_{i}$$
#. 해당 글에서 제시한 그림으로 예를 들자면,
decoder의 현시점 t는 1, encoder의 길이 n은 3이기 때문에
총 3개의 score를 갖게 된다. $(s_{1}^{T}h_{1}, s_{1}^{T}h_{2}, s_{1}^{T}h_{3})$
이처럼 decoder의 현시점 t에 대한 은닉 벡터를 encoder의 모든 시점의 은닉 벡터와 내적한 리스트를 $e^{t}$라고 할 때,
$$e^{t} = [s_{t}^{T}h_{1}, s_{t}^{T}h_{2}, ..., s_{t}^{T}h_{n}]$$
과 같다.
Step2) Attention Distribution
앞에서 encoder의 모든 시점에 대한 attention score를 softmax에 적용하여 확률 분포를 구할 수 있다.
softmax는 0과 1 사이의 확률값을 출력하게 되며, 이를 통해 각 시점에 대한 확률분포를 얻게 된다.
#. 모든 attention score를 softmax에 취한 출력값의 합은 1이다.
예를 들어, 위의 그림에서 softmax의 확률값이 가장 클수록 bar plot의 길이를 길게 나타내었으며,
3개의 출력 값의 합은 1이 된다.
decoder의 현재시점 t에 대하여 나타나는 attention score 리스트인 $e^{t}$를 softmax에 적용하여 출력되는 attention distribution는 다음과 같다.
#. 해당 글에서는 attention distribution을 $d$라고 표기하였다.
$$d^{t} = softmax(e^{t})$$
Step3) Attention Value
위에서 구한 값들을 통해 최종적인 attention value $a_{t}$를 구하게 된다.
step 1에서 구한 encoder의 은닉 벡터 $h_{1}, h_{2}, ..., h_{n}$과 decoder의 현시점 t에 대한 attention distribution인 $d^{t}$를 곱하고 최종적으로 더하면 attention value가 된다.
즉, 아래와 같은 가중합으로 계산된다.
$$a_{t} = \sum_{i=1}^{n} d_{i}^{t}h_{i}$$
Step4) Concatenate
Step3에서 attention value $a_{t}$을 구하였다.
이제 Attention mechanism은 attention value와 decoder의 은닉 벡터 $s_{t}$를 결합하여 결합벡터를 구성하게 된다.
현재시점 t에 대한 결합벡터 $v_{t}$는 attention value $a_{t}$와 $s_{t}$를 $concatenate$하여 생성된다.
즉, 아래와 같다.
$$v_{t} = [a_{t};s_{t}]$$
step1에서 언급한 attention mechanism의 입력 값 (3)은 이처럼 attention value와 decoder의 은닉 벡터를 결합한 결합벡터 $v_{t}$로 활용된다.
이러한 $v_{t}$는 encoder에서의 정보를 활용하여 decoder에 전달해주는 역할을 한다.
Step5) output layer
마지막으로 출력층에서의 과정을 설명한다.
decoder의 현재 시점 t에서 출력된 결합 벡터 $v_{t}$는 다음 단어를 예측하기 위해 출력된다.
하지만 이 $v_{t}$가 출력층에 직접적으로 입력되지 않고
결합 벡터를 가중치 행렬과 연산하여 계산되는 $\tilde{s_{t}}$를 출력층의 입력 벡터로 사용한다.
즉, $\tilde{s_{t}}$는 다음과 같이 표현된다.
$$\tilde{s_{t}} = tanh(W[a_{t};s_{t}] + b) = tanh(Wv_{t} + b)$$
#. $W$는 신경망 연산을 위한 가중치 벡터이고 $b$는 편향 값이다.
이렇게 생성되는 $\tilde{s_{t}}$를 출력층에 입력벡터로 사용하여 softmax를 취해 decoder에서 다음 단어를 예측하게 된다.
$$\hat{y_{t}} = softmax(W_{o}\tilde{s_{t}} + b{o})$$
#. $W_{o}$와 $b_{o}$는 각각 출력층의 가중치 벡터와 편향 값이다.
seq2seq 모델의 성능을 향상시켜주기 위해 attention mechanism이 연구되었으며,
이를 더 활용한 transformer 개념이 소개되었다.
'NLP' 카테고리의 다른 글
AI model test case (0) | 2023.07.29 |
---|---|
Sequence to Sequence (0) | 2020.12.08 |
순환신경망: LSTM(Long Short Term Memory) (0) | 2020.11.25 |
순환신경망: RNN(Recurrent Neural Network) (0) | 2020.11.16 |
문서 유사도: 코사인 유사도, 자카드 유사도, 유클리드 거리 (0) | 2020.10.19 |