본문 바로가기
  • 우당탕탕속의 잔잔함
Programming/Deep Learning Network

[Model] About Attention Mechanism

by zpstls 2023. 10. 31.
반응형

이번 포스트는 Transformer의 시초가 되는 Attention에 대해 간단하게 작성해 보도록 하겠습니다.

 

 

최근 AI와 관련된 논문들은 Transformer를 기반으로 한 경우가 꽤 많습니다. 그리고 이 Transformer는 Attention이라는 개념을 사용합니다.

이 Attemtion Mechanism은 NLP 분야에서 활용되는 seq2seq Model(≒ Encoder-Decoder Model)의 Sequence의 길이가 길어질수록 정보의 손실이 발생한다는 문제점을 개선하기 위해 제안된 방식입니다.

(seq2seq에 대한 자세한 내용은 현재 페이지에서는 생략하도록 하겠습니다. Encoder-Decoder Model에 대한 자세한 내용은 다음 링크를 참조해 주세요.)

 

[Model] About seq2seq (Sequence-To-Sequence)

이번 포스트는 seq2seq Model에 대해 다뤄보고자 합니다. 내용 중에 Encoder-Decoder의 개념도 포함되어 있으니 정리해 나가면서 진행해 보도록 하겠습니다. Sequence-To-Sequence Model은 한 Sequence를 다른 Sequen

mj-thump-thump-story.tistory.com

 

 

그럼 이제 본격적으로 Attention Mechanism을 다뤄보도록 하겠습니다.

 

보통 인간이 어떠한 글을 읽을 때, 어떠한 사진을 볼 때, 모든 것들을 집중해서 읽거나 보지 않습니다. 중요할 것 같은 것들을 중점적으로 보고 나머지는 흘리게 됩니다. Attention Mechanism은 이러한 특징을 Deep Learning에 적용한 방식입니다. Attention Mechanism을 간단하게 요약하면, 입력 값들을 모두 동일한 가중치로 취급하지 않고 출력 값에서 특정 위치에 대응하는 입력 값들에 더 많은 가중치를 부여하는 방식입니다. 즉, 문맥적인 정보를 잘 처리하겠다는 것이죠.

 

한 가지 예를 들어보겠습니다. "나는 내일 거기 맛집에 갈 거야"라는 문장을 입력하면 이를 영어로 번역해 주는 번역기를 사용했다고 가정하겠습니다.

문장을 입력하면 Source Sequence가 번역기 프로그램으로 입력됩니다. 그리고 이 입력 값들은 출력 값이 될 영어 단어들과의 연관성에 따라 가중치가 부여될 것입니다.

계산되는 가중치를 보면 "맛집"과 "Restaurant"이라는 단어가 Weight가 가장 높습니다. 이는 두 단어가 강한 상관관계를 가진다는 것을 의미하며, 이는 Attention이 강하다고 표현할 수 있을 것입니다.

 

이러한 개념을 가진 Attention Model의 구조에 대해 알아보도록 하겠습니다. Attention Model은 기본적으로 대부분 Encoder-Decoder 구조를 따릅니다.

Encoder는 Input으로 Input Data를 받아 압축 데이터(= Contect Vector)로 변환해 줍니다. Decoder는 압축 데이터(= Context Vector)를 입력받아 Output Data를 출력합니다. Encoder와 Decoder를 구성하고 있는 RNN에서는 Output으로 Hidden State(= $h_{k}$)를 출력합니다. 따라서 Encoder, Decoder에서의 각각의 out이 hidden state(= 압축된 문맥 데이터)의 형태로 출력됩니다. 참고로 Encoder의 경우는 모든 RNN Cell의 Hidden States을 사용하지만, Decoder는 현재 RNN Cell의 Hidden State만을 사용합니다. 이는 Target Sequence의 하나의 Data를 Source Sequence의 모든 Data와 비교하는 것과 연관이 있습니다. 즉, Decoder Hidden State는 Target Sequence의 문맥을 의미하고 Encoder Hidden States는 Source Sequence의 모든 문맥을 의미한다고 생각하시면 될 것 같습니다.

 

위 과정까지는 일반적인 Encoder-Decoder 구조입니다. 여기에 Attention Mechanism을 적용해야 합니다.

Encoder-Decoder에서 구한 Encoder Hidden States와 Decoder Hidden State을 이용하여 Attention Score를 구합니다.

Encoder Hidden States들과 전치한 Decoder Hidden Stae를 내적(= Dot Product)하면 Score값(= 상수 값)이 나옵니다. 이 값은 Encoder의 RNN Cell의 수만큼 나오게 되며, 이 Score들을 Attention Score라고 합니다.

 

이제 각 Score들의 중요도를 상대적으로 보기 쉽게 하기 위해, 즉 0 ~ 1 사이의 값으로 확률화(= 확률 분포)해주기 위해 Attention Distribution을 만듭니다. Attention Distrubution은 다음과 같이, 앞에서 구한 Attention Score들을 Softmax Activation Function에 대입하여 구할 수 있습니다.

이후, Attention Distribution에 Encoder Hidden States들을 곱한 후, 합하여 Attention Value 행렬을 생성해 줍니다. 이는 각 문맥들(= Hidden States)의 중요도(= Attention Score)를 반영하여 최종 문맥(= Attention Value)을 구하는 것을 의미합니다.

 

여기까지는 Encoder의 문맥만 반영이 되었습니다.

이제, Decoder의 문맥을 추가해 주기 위해 Decoder Hidden State를 Attention Value 아래에 쌓아(= Concatenate) 줍니다.

추가적으로 성능을 향상하기 위해 tanh, softmax 활성 함수를 통해 학습을 시키면 최종적인 출력 y가 나오게 됩니다.

 

여기까지가 Attention Mechanism의 내용입니다. 

 

추가적으로 같은 내용을 다음과 같이 조금 다르게 표현할 수도 있습니다. 바로, 다음과 같이 Attention Fuction을 Query와 Key, Value로 표현하는 방법입니다.

Query는 현재 출력 Data를 나타나는 벡터, 즉 t시점의 Decoder Cell에서의 Hidden State를 의미하고 Key Value는 입력 Sequence의 각 Data에 대응하는 벡터, 즉 모든 시점의 Encoder Cell의 Hidden State를 의미합니다.

Attention Function은 Query Vector와 Key Vector 간의 유사도를 측정하고 이후 유사도를 정규화하여 각 Data의 가중치를 계산합니다. 이때, 앞서 예시에서는 내적을 계산하여 가중치를 구하였는데, 여러 가지 다른 유사도 측정 방법, 가중치 측정 방법에 따라 다양한 Attention으로 나뉩니다.

 

다양한 Attention의 종류에 대해 짧게 알아보도록 하겠습니다.

 

  • Dot-Product Attention

앞서 계속 설명한 방식입니다. 그래서 따로 또 설명하지는 않겠습니다. ㅎㅎ

 

 

  • Scaled Dot-Product Attention

전반적인 Flow는 Dot-Product Attention과 동일합니다. 다만, 내적 값을 Key Vector의 차원 수의 제곱근으로 나누어 Scaling을 수행하는 과정이 변형되었습니다.

이는 각 차원에 대한 영향력이 과도하게 커지는 것을 방지하고 학습의 안정성을 향상시킨다고 합니다. 이 방식의 특징을 정리하면 다음과 같습니다.

  • 연산 속도가 빠르다 : 내적 연산은 고속으로 처리할 수 있으며, Input Sequence의 각 Data 간에 독립적인 연산으로 Attention Mechanism을 처리할 수 있기 때문에 병렬 처리가 가능합니다.
  • 정규화를 위해 Scaling이 사용된다 : 내적 연산을 통해 계산된 유사도를 정규화할 때 내적 연산 결과의 차원 수를 나누어 스케일링을 수행합니다. 이러한 과정을 통해 Weight의 분산을 조절하여 학습을 안정화시키고 Attention Mechanism의 성능을 향상시킬 수 있습니다.
  • 다양한 입력 시퀀스 길이를 처리할 수 있다 : 입력 시퀀스의 길이에 대한 제한이 없어 다양한 길이의 입력 시퀀스를 처리할 수 있습니다.

Scaled Dot-Product Attention에 대한 구체적인 내용은 다음 링크를 참조해 주세요.

(해당 링크는 Scaled Dot-Product Attention을 Self Attention과 연관 지어 설명하였습니다.)

 

[Model] About Self-Attention

이번 포스트는 Transformer의 근간이 되는 Self-Attention에 대해 다뤄볼 예정입니다. Transformer Model은 RNN 계열의 Model 없이 Attention만을 이용해 언어 모델을 만들고자 제안된 구조입니다. 이러한 Transformer

mj-thump-thump-story.tistory.com

 

 

  • Addtive Attention

Query와 Key를 결합한 후, 학습 가능한 가중치 행렬을 적용하여 Attention Score를 계산하는 방식입니다.

활성화 함수를 적용한 결과를 통해 Attention Score를 구합니다.

 

 

  • Multi-Head Attention

여러 개의 독립적인 Attention을 병렬로 수행한 후, 결과를 결합하는 방식입니다.

각 Attention Head는 서로 다른 가중치를 사용하여 Input에 대한 다양한 관점을 학습할 수 있습니다. 이러한 Head들은 Scaled Dot-Product Attention을 기반으로 합쳐집니다.

 

Multi-Head Attention에 대한 자세한 내용은 다음 링크를 참조해 주세요.

 

[Model] About Multi-Head Attention

이번 포스트는 여러 가지 Attention이 종류 중 하나인, Multi-Head Attention에 대해 다뤄볼 예정입니다. Multi-Attention은 다음과 같이 Head의 수만큼 Attention을 각각 병렬로 나누어 계산을 한 후, 생성된 Attent

mj-thump-thump-story.tistory.com

 

 

이러한 Attention Function은 Softmax, Sigmoid, ReLU 등과 같은 Activation 함수와 함께 사용되어 Input Sequence의 각 Data들에 대한 Weight를 계산하고 Model의 성능을 향상시키는데 활용됩니다.

 

 

이렇게 Attention Mechanism에 대해 알아보았습니다.

다음 포스트는 이를 활용한 Transformer에 대해 본격적으로 다뤄볼 수 있을 것 같습니다.

 

이번 포스트는 여기서 마무리하도록 하겠습니다.

반응형

댓글