사용자:Regpath/연습장/초안/주의 기제

위키백과, 우리 모두의 백과사전.

본문[편집]

신경망에서 주의 기제는 인지심리학에서의 주의를 모방하여 고안된 기술이다. 주의기제는 네트워크가 데이터 중에 비중이 적지만 중요한 데이터에 더 집중하기 위하여, 입력 데이터 중 일부의 효과를 증강시키며, 다른 일부를 감소시킨다. 데이터 중 어느 부분을 학습하는 것이 다른 부분을 학습하는 것보다 더 중요한지는 문맥에 따라 결정되며, 이는 경사하강법으로 학습된다.

어텐션과 같은 메커니즘은 1990년대에 곱셈 모듈, 시그마 파이 단위, 또는 하이퍼네트워크와 같은 이름으로 도입되었다. 주의 기제의 유연성은 런타임 도중에 변경될 수 있는 '소프트 가중치'로서의 역할에서 온다. 런타임 동안 고정되어 있는 표준 가중치와는 달리.

주의 기제는 뉴럴 튜링 머신의 기억, 미분가능 뉴럴 컴퓨터의 추론 작업, 트랜스포머 계열 모델의 언어 처리, 지각자(perceiver)의 다중 감각 데이터 처리 (소리, 이미지, 영상, 텍스트) 등에 활용된다.

개요[편집]

인덱스 가 붙은 일련의 토큰이 주어졌을 때, 신경망은 각 토큰에 대하여 음수가 아니며 인 소프트 가중치 를 계산한다.각 토큰에는 번째 토큰의 단어 임베딩으로부터 계산된 값 벡터가 할당된다. 가중 평균 이 주의 기제의 출력이다.

쿼리-키 메커니즘은 소프트 가중치를 계산한다. 각 토큰의 단어 임베딩으로부터 쿼리 벡터 와 키 벡터 가 계산된다. 가중치는 내적 소프트맥스 함수를 취하여 얻는다. 여기서 는 현 토큰, 는 주의가 기울여지는 토큰을 나타낸다.

일부 아키텍처에는, 각각의 고유한 쿼리, 키, 값으로 독립적으로 작동하는 여러 개의 주의 헤드(attention head)가 있다.

언어 번역 예[편집]

영어를 프랑스어로 번역하는 기계를 만들려면 기본 Encoder-Decoder를 사용하고 여기에 주의 단위를 접목한다 (아래 다이어그램). 가장 간단한 경우 주의 단위는 반복 인코더 상태의 내적으로 구성되며 훈련이 필요하지 않다. 실제로, 어텐션 유닛은 훈련이 필요한 쿼리-키-값(query-key-value)이라고 하는 3개의 완전히 연결된 신경망 레이어로 구성된다. 아래의 변형 섹션을 참조하라.

 

Click here for the static image: File:Attention-1-sn.png

Legend
Label Description
100 문장 최대 길이
300 Embedding size (word dimension)
500 은닉 벡터 크기
9k, 10k Dictionary size of input & output languages respectively.
x, Y 9k and 10k 1-hot dictionary vectors. x → x implemented as a lookup table rather than vector multiplication. Y is the 1-hot maximizer of the linear Decoder layer D; that is, it takes the argmax of D's linear layer output.
x 300-long 단어 임베딩 벡터. The vectors are usually pre-calculated from other projects such as GloVe or Word2Vec.
h 500-long 인코더 은닉 벡터. At each point in time, this vector summarizes all the preceding words before it. The final h can be viewed as a "sentence" vector, or a thought vector as Hinton calls it.
s 500-long 디코더 은닉 상태 벡터.
E 500 neuron RNN encoder. 500 outputs. Input count is 800–300 from source embedding + 500 from recurrent connections. The encoder feeds directly into the decoder only to initialize it, but not thereafter; hence, that direct connection is shown very faintly.
D 2-layer 디코더. decoder. The recurrent layer has 500 neurons and the fully connected linear layer has 10k neurons (the size of the target vocabulary). The linear layer alone has 5 million (500 × 10k) weights -- ~10 times more weights than the recurrent layer.
score 100-long alignment score
w 100-long vector attention weight. These are "soft" weights which changes during the forward pass, in contrast to "hard" neuronal weights that change during the learning phase.
A Attention module — this can be a dot product of recurrent states, or the Query-Key-Value fully connected layers. The output is a 100-long vector w.
H 500×100. 100 hidden vectors h concatenated into a matrix
c 500-long context vector = H * w. c is a linear combination of h vectors weighted by w.

행렬로 볼 때 주의 가중치는 네트워크가 컨텍스트에 따라 초점을 조정하는 방법을 보여ㅜㄴ다.


I love you
je 0.94 0.02 0.04
t' 0.11 0.01 0.88
aime 0.03 0.95 0.02

주의 가중치에 대한 이러한 관점은 신경망이 비판받는 "설명 가능성" 문제를 해결한다. 단어 순서에 관계 없이 축어 번역을 수행하는 네트워크는 이러한 용어로 분석할 수 있는 경우 대각선으로 지배적인 행렬을 갖게 된다. 비대각선 우성은 주의 메커니즘이 더 미묘하다는 것을 보여준다. 디코더를 통한 첫 번째 통과에서 주의 가중치의 94%는 첫 번째 영어 단어 "I"에 있으므로 네트워크는 단어 "je"를 제공한다. 디코더의 두 번째 패스에서 주의 가중치의 88%는 세 번째 영어 단어 "you"에 있으므로 "t'"를 제공한다. 마지막 패스에서는 주의 가중치의 95%가 두 번째 영어 단어 "love"에 있으므로 "aime"을 제공한다.

변형[편집]

주의에는 내적, 쿼리 키-값, hard, soft, self, cross, Luong, 및 Bahdanau 와 같이 많은 변형이 있다. 이러한 변형은 인코더 측 입력을 재결합하여 해당 효과를 각 대상 출력에 재분배한다. 종종 상관 스타일의 내적 행렬은 다시 가중치를 부여하는 계수를 제공한다(범례 참조).

1. 인코더-디코더 내적 2. 인코더-디코더 QKV 3. 인코더 전용 내적 4. 인코더 전용 QKV 5. 파이토치 튜토리얼
주의를 계산하려면 인코더와 디코더가 모두 필요합니다.
주의를 계산하려면 인코더와 디코더가 모두 필요합니다.
디코더는 주의를 계산하는 데 사용 되지 않습니다 . corr에 1개의 입력만 있으면 W는 내적의 자동 상관입니다. w ij = x i x j
디코더는 주의를 계산하는 데 사용 되지 않습니다 .
FC 레이어는 내적 상관 관계 대신 주의를 계산하는 데 사용됩니다.
전설
상표 설명
변수 X, H, S, T 대문자 변수는 현재 단어뿐만 아니라 전체 문장을 나타낸다. 예를 들어, H는 인코더 은닉 상태의 행렬(열당 하나의 단어)이다.
S, 디코더 은닉 상태; T, 대상 단어 임베딩. Pytorch Tutorial 변형 교육 단계에서 T는 사용된 교사 강제 수준에 따라 2개의 소스를 번갈아 사용한다. T는 네트워크의 출력 단어의 임베딩일 수 있다. 즉, embedding(argmax(FC output))이다. 또는 교사 강제를 사용하여 T는 1/2과 같이 일정한 강제 확률로 발생할 수 있는 알려진 올바른 단어의 포함일 수 있다.
X, H H, 인코더 숨겨진 상태; X, 입력 단어 임베딩.
주의 계수
Qw, Kw, Vw, FC 쿼리, 키, 벡터 각각에 대한 가중치 행렬이다. FC는 완전히 연결된 가중치 행렬이다.
동그라미 친 +, 동그라미 x 원으로 표시된 +, 벡터 연결; 동그라미 x, 행렬 곱셈.
코르 열별 softmax(내적의 모든 조합의 행렬). 내적은 변형 #3의 x i * x j, 변형 1 의 h i * s j, 변형 2의 i 열( Kw* H )* j 열( Qw* S ) 및 i 열(Kw* X)입니다. )* 변형 4의 열 j (Qw* X). 변형 5는 완전 연결 계층을 사용하여 계수를 결정한다. 변형이 QKV인 경우 내적은 sqrt(d)에 의해 정규화되며 여기서 d는 QKV 행렬의 높이이다.

같이 보기[편집]

References[편집]

인용 오류: <references> 안에 정의된 "pytorch_s2s"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "Lecun2020"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "Graves2016"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "allyouneed"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "Ramachandran2019"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "jaegle2021"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "tiernan2021"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "xy-dot"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "xy-qkv"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "xx-dot"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "xx-qkv"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "pytorch-tutorial"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.

인용 오류: <references> 안에 정의된 "Bahdanau"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.

참고문헌[편집]

인용 오류: <references> 안에 정의된 "pytorch_s2s"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "Lecun2020"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "Graves2016"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "allyouneed"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "Ramachandran2019"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "jaegle2021"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "tiernan2021"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "xy-dot"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "xy-qkv"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "xx-dot"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "xx-qkv"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.
인용 오류: <references> 안에 정의된 "pytorch-tutorial"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.

인용 오류: <references> 안에 정의된 "Bahdanau"이라는 이름을 가진 <ref> 태그가 위에서 사용되고 있지 않습니다.

외부 링크[편집]

틀:Differentiable computing [[분류:기계 학습]]