기초 자연어처리- 16. 어텐션

WooSeongkyun·2023년 3월 19일
0

자연어처리기초

목록 보기
16/16

Seq2Seq 의 문제점

  • Seq2Seq모델은 인코더로부터 입력 시퀀스를 컨텍스트 벡터라는 하나의 고정된 크기의 벡터로 압축하고, 디코더는 컨텍스트 벡터를 입력받아 출력 시퀀스를 출력한다
  • RNN은 다음과 같은 문제를 갖는다
    1. 하나의 고정된 크기 벡터에 모든 정보를 압축하려 하니 정보 손실이 발생한다
    2. RNN의 고질적인 문제, 기울기 소실 vanishing gradient가 발생한다

어텐션의 아이디어

  • 디코더가 출력 단어를 예측하는 매 시점time step마다 인코더의 전체 입력문장을 다시 한번 참고하는것에 있다
  • ![[attention_process.mp4]]
    - 단 전체 입력을 모두 동일한 비율로 참고하는 것이 아닌, 해당 시점에서 예측해야 할 단어와 연관이 있는 단어부분을 좀 더 집중attention 한다

dot-product 어텐션

  1. 인코더의 은닉상태 h1,h2,,hNh _{1}, h _{2}, \cdots, h _{N} 을 구한다
  2. 디코더의 현재시점tt에서의 은닉상태 sts _{t} 를 구한다
    • 인코더의 은닉상태와 디코더의 은닉상태가 같다고 가정하자
  3. 어텐션 스코어를 계산한다
    • dot-product attention에선  scorei=st,hi\text{ score}_{i}=\langle {s _{t}},{h _{i}} \rangle 로 계산된다
    • 즉 어텐션 스코어 벡터 et=[st,h1,st,h2,,st,hN]\boldsymbol{e}_{t}=[\langle {s _{t}},{h _{1}} \rangle,\langle { s _{t}},{h _{2}} \rangle,\cdots, \langle {s _{t}},{h _{N}} \rangle] 으로 계산되는 것이다
  4. 소프트맥스 함수에 어텐션 스코어 벡터 et\boldsymbol{e}_{t} 를 입력한다. 출력한 결과는 어텐션의 가중치attention weightα\boldsymbol{\alpha}로 해석한다
  5. 어텐션 값을 최종적으로 계산한다. 어텐션 값at\boldsymbol{a}_{t}은 인코더의 문맥을 포함한다 하여 컨텍스트 벡터라고 불리기도 한다(이는 인코더의 마지막 은닉 상태만을 컨텍스트 벡터라 불리는 seq2seq와 대조 됨)
    • at=i=1Nαihi\boldsymbol{a}_{t}=\displaystyle\sum\limits_{i=1}^{N}{\alpha _{i}\boldsymbol{h}_{i}}
  6. 어텐션 값at\boldsymbol{a}_{t}과 디코더 tt 시점의 은닉상태 sts _{t} 를 연결한다
  7. 가중치 행렬과 행렬곱을 지난다
    • s~t=tanh(W[at;st])\tilde{s}_{t}=tanh(\boldsymbol{W}[a _{t};s _{t}])
  8. 최종적으로 소프트맥스 함수에 입력하여, 분류 확률을 계산한다
    • y~t=softmax(Wys~t)\tilde{y}_{t}=softmax(W _{y}\tilde{s}_{t})

스코어 함수에 따른 어텐션 종류의 차이

  • dot-product
    - score(si,hi)=st,hi\text{score}(s _{i},h _{i})=\langle {s _{t}},{h _{i}} \rangle
  • scaled-product
    - score(si,hi)=si,hin\text{score}(s _{i},h _{i})=\displaystyle\frac{\langle {s _{i}},{h _{i}} \rangle}{\sqrt{n}}
  • general
    - score(st,hi)=sitWhi\text{score}(s _{t},h _{i})=s _{i} ^{t}Wh _{i}

바다나우 어텐션 Bahdanau Attention

  • 어텐션 스코어 계산방법
    1. 은코더의 은닉상태 h1,h2,,hNh _{1},h _{2},\cdots, h _{N} 을 계산한다
    2. 디코더의 은닉상태 sts _{t} 를 계산한다
    3. 스코어를 다음과 같이 계산한다
    - score(st1,hi)=Wattanh(Wbst1+Wchi)\text{score}(s _{t-1},h _{i})=W _{a} ^{t}tanh(W _{b}s _{t-1}+W _{c}h _{i})
    - 여기서 Wa,Wb,WcW _{a},W _{b},W _{c} 는 학습 가능한 가중치 행렬
    - 은닉상태 h1,h2,,hNh _{1}, h _{2},\cdots,h _{N} 을 쌓은 행렬 HH 가 있다하자
    - et=Wattanh(Wbst1+WcH)\boldsymbol{e} _{t}=W _{a} ^{t}tanh(W _{b}s _{t-1}+W _{c}H)
    4. 소프트맥스 함수에 어텐션 스코어 벡터 et\boldsymbol{e}_{t} 를 입력한다. 출력한 결과는 어텐션의 가중치attention weightα\boldsymbol{\alpha}로 해석한다
    5. 어텐션 값을 최종적으로 계산한다.
    - at=i=1Nαihi\boldsymbol{a}_{t}=\displaystyle\sum\limits_{i=1}^{N}{\alpha _{i}\boldsymbol{h}_{i}}
    6. sts _{t} 를 계산한다
    7. 어텐션 값at\boldsymbol{a}_{t}과 디코더 tt 시점의 은닉상태 sts _{t} 를 연결한다
    8. 가중치 행렬과 행렬곱을 지난다
    - s~t=tanh(W[at;st])\tilde{s}_{t}=tanh(\boldsymbol{W}[a _{t};s _{t}])
    9. 최종적으로 소프트맥스 함수에 입력하여, 분류 확률을 계산한다
    - y~t=softmax(Wys~t)\tilde{y}_{t}=softmax(W _{y}\tilde{s}_{t})
profile
안녕하세요!

0개의 댓글