검색 여닫기
검색
메뉴 여닫기
515
223
4
2천
noriwiki
둘러보기
대문
최근 바뀜
임의의 문서로
미디어위키 도움말
특수 문서 목록
파일 올리기
환경 설정 메뉴 여닫기
notifications
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
user-interface-preferences
한국어
개인 도구
로그인
Attention 문서 원본 보기
noriwiki
문서 공유하기
다른 명령
←
Attention
문서 편집 권한이 없습니다. 다음 이유를 확인해주세요:
요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다:
사용자
.
문서의 원본을 보거나 복사할 수 있습니다.
[[분류: Transformer model]] == 개요 == Attention은 기계학습에서 Sequence의 각각의 부분이 얼마나 중요한지를(즉, 얼만큼 관심있게 처리해야 할지를) 결정하는 매커니즘이다. Attention is all you need논문이 나오기 전에는 [[RNN]]에 의한 방법들이 많이 사용되었으나, 그후에는 [[Transformer]]모델이 주축이 되어서 Attention을 처리하고 있다. Attention매커니즘은 RNN의 단점인, Vanishing gradient문제를 효과적으로 해결하여, 현재 사용하는 LLM기술의 근간이 되고 있다. Attention은 단어(즉 토큰)을 생성해내는 모든 시점마다, 인코더로 들어간 전체 문장을 다시한번 중요도에 따라서 참고한다. 따라서, Input에 있어서 들어간 문장이 오래되어서 사라지는 것을 예방할 수 있다. == Overview of Attention == [[파일:Attention-1-sn.png|프레임없음|가운데|500픽셀]] 예를 들어서 "I love you"라는 단어를 한글로 번역한다고 하자. Attention을 구하는 과정은, I love you라는 문장에서, 현재 토큰을 만들어 내는 과정에서 얼마나 어떤 단어에 집중해야 할지를 결정한다. 우선 Encode의 모든 Hidden state(<math>H</math>)들을 기억하는 H(<math>C</math>)행렬을 생성한다. 행렬의 각각의 Column들은 Encoder의 각 출력층의 Hidden state(<math>h_i</math>)를 포함하고 있다. 예를 들어서 H행렬의 빨간색행은 I, 녹색은 I love, 파란색은 I love you에 해당하는 Hidden state값이다. 그후 Decoder에는 Context와 문장의 시작을 의미하는 <sos>가 전달된다. Decoder은 전달받은 Context를 기반으로 "나는"이라는 토큰을 생성해 낸다. 그후 Decoder의 첫번째 Hidden state(<math>s_i</math>)가 다시 Attention측정기로 넘어가고, Attention측정기는 미리 구해져 있는 H와 <math>s_i</math>를 통해서 새로운 Attention weight값을 계산해 낸다. 이 Attention weight값은 Hidden state를 계산하기 위해서 새로운 Context를 생성해 내고, 이 Context값이 다시 Decoder의 Input으로 들어간다. 이때, Decoder는 Attention layer의 값을 이용하기 때문에, I love you에서 어떤 단어에 집중하여서 Output을 생성해 내야 하는지를 계산할 수 있다. 따라서 매 번역 과정마다, Input query의 모든 문맥을 다시 사용하기 때문에 Vanishing Gradient문제에서 자유롭다. == 직관적인 Attention의 이해 == 본질적으로 LLM의 목적은 다음 단어를 예측 하는 것이다. 예측 하기 위해서는 '''문장의 각 단어가 다른 단어들과 어떤 관계에 있는지'''를 계산해야 한다. 우선 Attention의 수식을 보자. 예를 들어서 "The cat sat on the mat"이라는 문장을 보자. :<math>\text{attention}(Q, K, V) = \text{softmax}(\frac{QK^T}{\sqrt{d_k}})V</math> Attention은 다른 수식을 가질수 있지만, 이러한 scaled dot product가 제일 기본이 되는 Attention식이다. Key-value store란 Key-value쌍이 있고, 주어진 Key에 대해서 Value를 가져오는 데이터 구조를 의미한다. 그렇다면 Attention과 QKV를 무슨 관계에 있는가? 우선 Key-value의 의미먼저 생각해보자. 우리가 사용하는 언어를 크게 보자면, 단어가 있고, 그에 해당하는 의미가 있다. 이 단어에 해당하는 것이 Key, 의미에 해당하는 것이 Value이다. 하지만, 우리가 Key-value store에서 원하는 다음 단어의 Value에 해당하는 값을 가져올려면, Key값을 먼저 가져와야 한다. 이 Key값을 가져오기 위한 것이 바로 Attention score이다. Attention score는 우리가 어떤 Key에 보다 집중해야 하는지를 결정한다. :<math>\sum_{i} \alpha_iv_i</math> 여기서 <math>a_i</math>에 해당하는 것이 바로 Attention score이며, 모든 Attention score의 합은 1이다. 즉 이 값이 내가 원하는 다음 단어의 의미가 될것이다. 직관적으로는 사람인 나는 Cat에 대한 Attention score를 위의 예시에 "The: 0.0 Sat: 0.7 on: 0.1 the:0.0 mat:0.2"를 줄것 같다. 그러나 어떻게 하면 기계가 이를 자동으로 매기게 할것인가? 이를 위해서 내적을 사용한다. Dot product는 내적으로 방향이 같은 벡터가 있을 경우에는 1, 다른 경우에는 -1을 출력한다. 다시 말하자면, 두 벡터가 유사하면 1, 어긋나면 -1의 값을 내보낸다. 그렇다면 우리는 Dot product를 사용해서 Q와 K의 유사도를 검사할 수 있다. Q와 K가 비슷하면 Attention score가 높아지도록 유도할 수 있다. 그러면, 혹자는 어떻게 Q와 K가 비슷할 경우에 Attention score가 높아지도록 하는 K벡터를 만들어 내는냐 라고 의문을 가질 수 있는데, 이는 머신러닝으로 학습한 결과로써, 학습과정에서 모델은 처음 임의의 값으로부터, Q와 K가 의미적으로 연관있을 경우에만 높은 유사도를 가질수 있게 하는 Weight들을 계산해 낸다. :<math>\alpha_i = \text{softmax}(\boldsymbol{x})_i = \text{softmax}(\boldsymbol{q}K^T)_i</math> 여기서 softmax를 통해서 Attention score의 합이 1이되도록 한다. 최종적으로 Index즉, 우리가 주어진 단어에 대해서 어떤 Value를 가져오고 싶은지에 해당하는 값을 구했으니, 의미정보를 가져올 차례이다. :<math>\begin{align} \sum_{i}\alpha_iv_i = & \sum_i \text{softmax}(\boldsymbol{x})_iv_i\\ = & \sum_i \text{softmax}(\boldsymbol{q}K^T)_iv_i\\ = &\ \text{softmax}(\boldsymbol{q}K^T)\boldsymbol{v} \end{align}</math> 이를 통해서, 우리는 최종적으로 우리가 얻고 싶은 값인 각 단어들 사이의 유사도를 계산하였다. 이 유사도를 '''Attention'''이라고 하는 것이다. 그러나, 위의 수식은 Q와 K의 Dimension이 커지면 커질수록 너무 작은 값들의 Softmax를 계산하는 꼴이 되어버려, 의미있는 결과를 내놓기 힘들어진다. 이를 위해서 Dimension으로 한번 나누어준다. :<math>\text{attention}(\boldsymbol{q}, K, V) = \text{softmax}(\frac{\boldsymbol{q}K^T}{\sqrt{d_k}})V</math> 최종적으로 이 값이 [[Attention is all you need]]논문에 나오는 수식인 Attention값을 계산하는 방법이된다. 보통은 이 Query를 계산하기 위해서, 각 단어를 하나씩 계산하는 것이 아니라, 문장의 각 토큰을 위치정보와 함께 Embedding하여서 하나의 행렬 Q를 만들어, 병렬적으로 처리한다. 결국 최종적으로 Attention은 다음과 같이 계산된다. :<math>\text{attention}(Q, K, V) = \text{softmax}(\frac{QK^T}{\sqrt{d_k}})V</math> {| class="wikitable" |+ QKV의 의미적 해석 ! 요소 !! 역할 !! 비유 !! 수학적 해석 |- | '''Query (Q)''' || 찾고 싶은 정보, 주어진 입력이 어떤 정보를 가져올지를 결정 || 질문하는 사람, 검색어 || 입력 벡터를 변환하여 Attention을 수행하는 기준 |- | '''Key (K)''' || Query와 비교하여 연관성을 판단하는 기준 || 책의 제목, 데이터베이스의 인덱스 || Query와 내적(dot product)을 수행하여 Attention Score 계산 |- | '''Value (V)''' || Query가 관련이 높은 Key를 찾았을 때 최종적으로 가져오는 정보 || 책의 실제 내용, 검색 결과 || Attention Score를 기반으로 가중합하여 최종 출력 생성 |} == 참고 == # https://jaykmody.com/blog/attention-intuition/
Attention
문서로 돌아갑니다.