Data Analysis/NLP

[NLP] 어텐션 메커니즘 (Attention Mechanism)

PTJ 2023. 10. 20. 15:24

     

    이번 글에서는 NLP 분야에서 대세 모듈로서 사용되고 있는 트랜스포머의 기반이 되는 어텐션 메커니즘에 대해 알아보겠습니다.

     

     

    1. 어텐션 메커니즘이란?

    어텐션 매커니즘은 주로 시퀀스 데이터를 처리하고 가중치를 할당하여 어떤 부분에 주목할지 결정하는 데 사용됩니다. 어텐션 메커니즘은 주로 기계 번역, 텍스트 요약, 이미지 캡션 생성 및 음성 처리 등의 작업에서 활용됩니다.

     

    어텐션 메커니즘의 핵심 아이디어는 입력 시퀀스의 각 요소에 대한 "주의(attention)"또는 "중요도"를 할당하여 출력을 생성하는동안 특정 부분에 다른 정도의 주의를 기울일 수 있다는 것입니다. 이것은 특히 장거리 종속성 및 문맥 정보를 포착하는 데 유용합니다.

     

    여기서는 어텐션 메커니즘의 큰 그림만 알아두시고 아래에서 더 자세히 설명하겠습니다.

     

     

    2. 어텐션 메커니즘의 등장 배경

    어텐션 메커니즘이 나오기 전 기계 번역 분야에서는 seq2seq모델을 주로 사용하고 있었습니다. seq2seq모델은 인코더에서 입력 시퀀스를 컨텍스트 벡터라는 하나의 고정된 크기의 벡터 표현으로 압축하고, 디코더는 이 컨텍스트 벡터를 통해서 출력 시퀀스를 만들어냈습니다.

     

    하지만 이러한 RNN에 기반한 seq2seq모델에는 크게 두 가지 문제가 있습니다.

    • 첫째, 하나의 고정된 크기의 벡터에 모든 정보를 압축하려고 하니까 정보 손실이 발생합니다.
    • 둘째, RNN의 고질적인 문제인 기울기 소실(vanishing gradient) 문제가 존재합니다.

    결국 이는 기계 번역 분야에서 입력 문장이 길면 번역 품질이 떨어지는 현상으로 나타났습니다. 이를 위한 대안으로 입력 시퀀스가 길어지면 출력 시퀀스의 정확도가 떨어지는 것을 보정해주기 위해 어텐션이 등장했습니다.

     

     

    3. 어텐션의 아이디어

    어텐션의 기본 아이디어는 디코더에서 출력 단어를 예측하는 매 시점(time step)마다, 인코더에서의 전체 입력 문장을 다시 한 번 참고한다는 점입니다.

     

    단, 전체 입력 문장을 전부 다 동일한 비율로 참고하는 것이 아니라, 해당 시점에서 예측해야할 단어와 연관이 있는 단어 부분을 좀 더 집중(attention)해서 보게 됩니다.

     

     

    4. 어텐션 함수(Attention Function)

    어텐션을 함수로 표현하면 주로 다음과 같이 표현됩니다.

    Attention(Q, K, V) = Attention Value

    어텐션 함수는 주어진 '쿼리(Query)'에 대해서 모든 '키(Key)'와의 유사도를 각각 구합니다. 그리고 구해낸 이 유사도를 키와 맵핑되어있는 각각의 '값(Value)'에 반영해줍니다. 그리고 유사도가 반영된 '값(Value)'을 모두 더해서 리턴합니다. 여기서는 이를 어텐션 값(Attention Value)라고 하겠습니다.

     

    지금부터 설명드릴 seq2seq + 어텐션 모델에서 Q, K, V에 해당되는 내용은 다음과 같습니다.

    Q = Query 	# t 시점의 디코더 셀에서의 은닉 상태
    K = Keys 	# 모든 시점의 인코더 셀의 은닉 상태들
    V = values	# 모든 시점의 인코더 셀의 은닉 상태들

     

     

    5. 닷-프로덕트 어텐션(Dot-Product Attention)

    간단한 어텐션 예제를 통해 어텐션을 이해해보겠습니다.

     

    어텐션은 다양한 종류가 있는데 그 중에서도 가장 수식적으로 이해하기 쉽게 적용한 닷-프로덕트 어텐션(Dot-Product Attention_을 통해 어텐션을 이해해봅시다. seq2seq에서 사용되는 어텐션 중에서 닷-프로덕트 어텐션과 다른 어텐션의 차이는 주로 중간 수식의 차이로 메커니즘 자체는 거의 유사합니다.

    위 그림의 오른쪽에서 디코더 첫번째와 두번째 LSTM는 이미 어텐션 메커니즘을 통해 je와 suis를 예측하는 과정을 거치고 세번째 LSTM 셀에서 출력 단어를 예측해야하는 상황을 가정합니다. 디코더 세번째 LSTM셀은 출력 단어를 예측하기 위해서 그림의 왼쪽 인코더의 모든 입력 단어들의 정보를 다시 한번 참고하고자 합니다. 중간 과정에 대한 설명은 현재는 생략하고 여기서 주목할 것은 인코더의 *소프트맥스 함수입니다.

     

    소프트맥스 함수를 통해 나온 결과값은 I, am, a, student단어 각각이 출력 단어를 예측할 때 얼마나 도움이 되는지의 정도를 수치화한 값입니다. 위의 그림에서는 빨간 직사각형의 크기로 소프트맥스 함수의 결과값의 크기를 표현했습니다. 직사각형의 크기가 클 수록 도움이 되는 정도의 크기가 큽니다. 각 입력 단어가 디코더의 예측에 도움이 되는 정도가 수치화하여 측정되면 이를 하나의 정보로 담아서 디코더로 전송됩니다. 위의 그림에서는 초록색 삼각형이 이에 해당됩니다. 결과적으로, 디코더는 출력 단어를 더 정확하게 예측할 확률이 높아집니다.

     

    *소프트맥스 함수: 주로 다중 클래스 분류 문제에서 출력값을 확률 분포로 변환하는 데 사용되는 함수. 이 함수는 입력 벡터의 각 요소를 0과 1사이의 확률 값으로 변환하며, 이들 확률 값의 합은 항상 1이 됩니다. 

     

     

    상세한 동작 내용은 아래 링크에 들어가셔서 확인해 보시기 바랍니다.

    딥 러닝을 이용한 자연어 처리 입문 Wikidocs

    https://wikidocs.net/22893

     

    15-01 어텐션 메커니즘 (Attention Mechanism)

    앞서 배운 seq2seq 모델은 **인코더**에서 입력 시퀀스를 컨텍스트 벡터라는 하나의 고정된 크기의 벡터 표현으로 압축하고, **디코더**는 이 컨텍스트 벡터를 통해서 출력 …

    wikidocs.net

     

    지금까지 seq2seq에서 성능을 향상시켜주기 위한 기법인 어텐션에 대해 알아봤습니다.

     

    어텐션은 처음에는 RNN기반의 seq2seq의 성능 보정하기 위한 목적으로 소개되었지만, 현재에 이르러서는 어텐션 스스로가 기존의 seq2seq를 대체하는 방법이 되어가고 있습니다.

     

    그러한 방법을 이용한 모델 트랜스포머(Transformer)를 다른 게시물에서 다뤄보겠습니다.