티스토리 뷰

RNN을 사용한 Seq2Seq 모델링의 특징과 문제점

  • 인풋 문장의 정보를 잘 인코딩(단어 하나하나 누적해 압축한 벡터 생성)하여 디코더가 그에 부합하는 토큰을 하나씩 꺼내는 구조입니다.
  • 디코더가 참고하는 문맥입력문이 전부 압축된 하나의 벡터로, 이 벡터는 입력문을 모두 누적하고 있지만, 문장 앞부분의 내용은 너무 압축된 나머지 정보를 거의 잊어버리게 됩니다.

  ▶▶▶ 인풋/아웃풋 문장의 길이가 길어지면 Seq2Seq의 성능 저하 (Gradient Foregetting, Long term dependency)

 

 

Attention의 등장배경

(예시)  " 지하철 가는 법은 노란색 간판에서 좌회전에서 300미터 정도 간 후에 초록색 표지판이 보이면 우회전을 합니다. 그리고 200미터 정도 직진하면 보입니다"란 한국어 문장을 영어로 번역하려고 합니다.
'Yellow' 란 단어를 생성할 때, 인공신경망은 전체 한국어 입력 문장을 되짚어 보며 현재 단어를 디코딩하기 위해 중요한 부분이 어디일까 생각하게 됩니다. 그 결과 입력 단어 중 "건물"에 해당하는 단어에 조금 더 주의를 기울일 필요가 있다고 판단하게 됩니다.

  • 사람은 문장을 이해할 때, 문장 중에서 중요한 단어들을 좀 더 강조하여 이해합니다.
  • 문장의 앞 부분 번역 시 원본 문장의 앞부분을, 문장의 뒷 부분 번역 시 원본 문장의 뒷부분을 좀 더 중요하게 봅니다.
  • 이를 딥러닝에도 적용하여,
    인공신경망이 입력 데이터의 전체 또는 일부를 되짚어 살펴보면서 어떤 부분이 의사결정에 중요한지, 판단하고 중요한 부분에 "집중" 하는 방식인 어텐션 메커니즘을 도입하게 됩니다.
  • 그렇게 되면, 번역 시에 원문을 다시 재참조하여 현재 디코딩할 단어와 연관된 중요 부분에 집중하게 되고,
    입력 문장이 매우 길어진다 해도 전체 문맥을 골고루 참고할 수 있게 되므로 더 좋은 번역을 할 수 있습니다.

 

Attention

  • 토큰에 대해 관심 있는 문맥 정보를 끌어오는 알고리즘
  • 디코딩 타임스텝에서 필요한 정보를 인코터 hidden state에서 가져오게 됩니다.
  • 원본 문장의 hidden vector들을 이용context vector(*아래 설명) 를 생성하여 활용하여 번역합니다.
  • 해당 단어에 조금 더 집중하여 전체 입력을 다시 한번 재조정한 입력 데이터 인코딩 벡터를 만듭니다.

 

Attention Step

 

Step1) 디코더 hidden vector와 인풋 hidden vector 사이의 attention score(*아래 설명)를 구합니다.

  • 현재 디코딩 스텝에서 중요한 히든에 높은 score를 부여합니다.

Attention Score

Step2) Attention score에 softmax를 취해 각각의 점수를 확률 분포로 변화(Normalize)시킵니다.

  • (예) 원본 문장 중 첫 번째 단어인 "I'm'에 가중치를 많이 부여합니다.

Step3) 확률값으로 나타낸 Attention distribution을 이용해 인코더의 hidden state들의 가중합 벡터 생성합니다.

  • Attention Output에는 높은 attention 점수를 받은 단어들에 대한 정보가 더 많이 포함됩니다.

Step4) Attention Output인 인코더 가중합된 정보와 디코더의 hidden state을 이용
            이번 단계의 결과를 예측하는데 사용합니다.

Step5) 디코더 타임스텝을 진행함에 따라 이러한 방식 계속 진행합니다.

  •  인풋 히든들의 중요도 계산(attention score)
  •  점수에 따라 가중합한 attention output 생성
  •  이번 스텝의 output 생성

 

어텐션 스코어(Attention score)

  • '중요한 단어에 집중한다'는 의미는 어텐션 스코를 계산한다는 것을 의미합니다.
  • 인공신경망 모델이 각 인코딩 타임스텝마다 계산된 feature를 가지고 자동으로 계산하는 0~1 사이의 값
  • 1에 가까울수록 더 집중해서 봐야 하는 스텝, 0에 가까울수록 지금은 중요하지 않아 대충 봐도 되는 스텝을 의미합니다.
  • 간단히 말해, 각 단어에 대한 주의 집중 가중치를 의미합니다.
    • (방법1) Dot Product : 디코더 hidden과 인코더 hidden을내적해 scalar 구하기
    • (방법2) Attention weight 학습
  • 장점) 완전히 동일한 어순을 가지며 단어간 1:1 매칭이 되는 언어끼리의 번역이 아니라면
             단어 집중 시 유연하게 대처해야하는데 어텐션 메커니즘이 그역할을 훌륭히 해냅니다.
    서로 다른 언어별 특징을 잘 이해하고 집중할 부분을 선택

(번역 태스크에서 어텐션 스코어 시각화 그림)

Attention Score Example

 

 

 

 

컨텍스트 벡터(Context vector)

  • 현재 디코딩할 단어와의 관련성을 반영하여 다시 입력 문장을 인코딩
  • 중요도에 따라 전체 문맥의 정보를 잘 반영하고 있다고 하여 컨텍스트 벡터라고 부릅니다.
  • 매번 디코딩마다 직전 단계의 벡터과거의 모든 데이터의 특징(feature)들을 고려할 뿐만 아니라,
    딥러닝 모델이 스스로 집중할 영역을 파악합니다.
  • 해당 타임스텝의 토큰을 추출할 때 원본 문장의 필요한 부분을 표현한 컨텍스트 벡터를 활용하여 더 적절한 ouput을 생성합니다.
  • 인코더 히든의 가중합(가중치 = attention score, 인코더 히든에 대한 중요도)