공부노트

1/17, 마흔 번째 날의 TIL(Attention is All You Need)

MimAI 2025. 1. 17. 20:37

어제에 이어, Attention에 대해서 더욱 알아보았다. 기존의 RNN은 내용이 길어지다보면 앞의 내용이 소실되기도 하고 중요한 부분을 참고하지 못하는 경우가 있었는데, Attention으로 이를 해결하였고 이는 2017년 발표된 Attention is All You Need라는 논문에서 등장했다. 


어텐션 메커니즘(Attention Mechanism)

  • RNN 기반 seq2seq모델의 두가지 큰 문제
    • 하나의 고정된 크기의 벡터에 모든 정보를 압축하려고 하니 정보 손실 발생
    • RNN의 고질적인 문제인 기울기 소실(vanishing gradient) 문제가 존재
  • 어텐션의 아이디어
    • 디코더 출력 단어를 예측하는 매 시점마다 인코더에서 전체 입력 문장 다시 한번 참고
    • 입력 문장을 전부 동일한 비율이 아닌, 해당 시점에서 예측해야 할 단어와 연관 있는 부분 좀 더 집중
  • 어텐션 함수
    • Attention(Q, K, V) = Attention Value
    • 주어진 쿼리에 대해서 모든 키와의 유사도를 각각 구함
    • 구해낸 유사도를 키와 맵핑되어있는 각각의 값에 반영
    • 유사도가 반영된 값을 모두 더해서 리턴
    • Q = Query : t 시점의 디코더 셀에서의 은닉 상태
    • K = Keys : 모든 시점의 인코더 셀의 은닉 상태들
    • V = Values : 모든 시점의 인코더 셀의 은닉 상태들
  • 닷-프로덕트 어텐션(Dot-Product Attention)
    • 인코더 소프트맥스의 결과 : 각 단어가 출력 단어를 예측할 때 얼마나 도움이 되는지의 수치
    • 각 입력 단어가 디코더의 예측에 도움이 되는 정도가 수치화하여 측정도미ㅕㄴ 이를 하나의 정보로 담아서 디코더로 전송 → 디코더는 출력 단어를 더 정확하게 예측할 확률 상승
  • 어텐션 스코어
    • 디코더의 셀 필요 입력값 : t-1의 은닉 상태, t-1에 나온 출력 단어
    • 어텐션에서는 어텐션 값이라는 새로운 값도 필요
    • 현재 디코더 시점 t에서의 단어를 예측하기 위해 인코더의 모든 은닉 상태 각각이 디코더의 현 시점 은닉상태 st와 얼마나 유사한지 판단하는 스코어값
    • st의 전치값 * 각 은닉 상태
  • 소프트맥스 함수를 통해 어텐션 분포 구하기
    • et에 소프트맥스 함수 적용하여 모든 값 합하면 1되는 어텐션 분포 생성, 각 값은 어텐션 가중치
    • at = softmax(et)
  • 각 인코더의 어텐션 가중치와 은닉 상태를 가중합하여 어텐션 값 구하기
    • 어텐션 최종 결과값을 얻기 위해서 각 인코더의 은닉 상태와 어텐션 가중치값들 곱하고 최종적으로 모두 더하기(가중합)
    • 어텐션 값은 종종 인코더의 문맥을 포함하고 있다고 하여 컨텍스트 벡터라고 부름
  • 어텐션 값과 디코더의 t 시점의 은닉 상태 연결(concatenate)
    • 어텐션 함수의 최종값과 st를 결합하여 하나의 벡터로 만든다
  • 출력층 연산의 입력이 되는 값 계산
    • vt를 바로 출력층으로 보내기 전에 신경망 연산 한 번 더 추가
    • 가중치 행렬과 곱한 후에 하이퍼볼릭탄젠트 함수를 지나도록 하여 출력층 연산을 위한 새로운 벡터 ~st
    • 어텐션 사용 안했을때 출력층의 입력이 t시점의 은닉 상태인 st인 반면 어텐션 메커니즘에서는 ~st
  • 마지막으로 ~st를 출력층의 입력으로 사용
  • 어텐션 스코어 구하는 여러 방법
    • dot
    • scaled dot
    • general
    • concat
    • location -base

바다나우 어텐션 함수(Bahdanau Attention Function)

  • 바다나우 어텐션 함수
    • Attention(Q, K, V)에서 Q : t 가 아닌, t-1 시점의 디코더 셀에서의 은닉 상태
  • 순서
    • 루옹 어텐션에서는 t시점의 은닉 상태 사용한 것과 달리 t-1시점의 은닉상태 사용
    • 가중치 행렬과 비선형 활성화 함수 를 사용해 계산:어텐션 스코어 구하기
  • 소프트맥스 함수를 통해 어텐션 분포 구하기
    • 소프트맥스 함수를 적용하여 어텐션 분포, 각 값은 어텐션 가중치(얼마나 중요한지)
  • 어텐션 값(컨텍스트 벡터) 계산
    • 어텐션 가중치를 인코더의 은닉 상태에 곱하고 이를 합산(가중합) →컨텍스트 벡터
    • 입력 시퀀스에서 디코더가 현재 시점 t에 가장 중요하게 생각하는 정보의 요약
  • 어텐션 값과 디코더 은닉 상태 연결
    • 컨텍스트 벡터, 디코더의 은닉 상태 연결
    • 연결된 결과는 다음 단계에서 디코더 출력값 계산에 사용
  • 출력층 연산을 위한 새로운 값 계산
    • vt를 바로 출력층으로 보내기 전에 추가적인 신경망 연산 수행
    • 새로운 벡터 ~st는 tanh와 가중치 행렬 연산 거쳐 계산
  • 출력층 연산
    • 최종적으로 계산된 ~st를 출력층에 전달하여 다음 단어 예측
    • 어텐션은 ~st사용해서 더 풍부한 정보 제공

양방향 LSTM과 어텐션 메커니즘(BiLSTM with Attention mechanism)

  • 단방향보다 양방향 LSTM사용이 더욱 강력함
  • 양방향 LSTM은 입력 시퀀스를 정방향, 역방향으로 처리함
  • 각 단어의 최종 은닉 상태는 정방향과 역방향 은닉 상태를 연결하여 생성
  • 인코더 출력 H는 양방향 정보 포함
  • 그 뒤는 동일
  • 장점
    • 양방향 정보 활용
      • 정방향과 역방향 모두 사용하여 더 풍부한 문맥 제공
      • 특히 긴 문장에서 앞뒤 문맥을 모두 고려한 어텐션 계산 가능
    • 어텐션으로 중요한 정보 선택
      • 디코더가 현재 시점에서 필요하지 않은 정보 무시하고 필요한 정보에 집중

이번주는 Django를 이용한 게시판 만들기와 NLP, 쿠버네티스 공부를 하고있는데 NLP에 대한 내용은 e-북만 볼게 아니라 논문도 여럿 찾아봐야겠다고 생각했다. 논문을 완전히 이해하지는 못해도 계속 보는 연습을 하고 있으며 새로운 내용이 계속 나오기 때문에 지속적으로 새로운 것들을 배우려고 노력중이다. 다른 내용도 더 찾아서 정리해봐야겠다. 다음주도 화이팅