조지아텍 OMSA 과정 중 CS7643 ‘딥 러닝’ 수업을 수강하며 필기한 내용을 일부 남긴다. 아래는 14강 ‘어텐션’의 필기 내용이다.
Lesson 14. 신경망 어텐션 모델 (Neural Attention Models)
관련 자료
The Illustrated Transformer (블로그 글)
1. 소프트맥스 / 어텐션 미리보기
- 어텐션!
- “어텐션” : 컴퓨테이션 상태와 인풋에 따라 인풋에 가중치 혹은 확률분포를 부여하는 것
- 어텐션은 최소한의 구조적 전제하에 원거리의 컴퓨테이션 노드 간에 직접적으로 정보가 전파되도록 해준다
- 현재(2020년?) 신경망에서 가장 널리 사용되는 어텐션의 형태는 소프트맥스와 함께 시행된다.
- 소프트맥스 리뷰
- 모든 x_j ∈R 인 {x_1 … x_n} 가 있을 때
- 소프트맥스 ({x_1 — x_n}) = {(e^x_1)/Z … (e^x_n)/Z} (* Z = Σ^n (e^x_j)
- 모든 인풋에 대해 소프트맥스는 확률분포를 반환한다
- 소프트맥스는 순열변경(permutation)에 대해 equivariant하다. 즉 인풋의 순열을 변경해 소프트맥스돌리면 아웃풋도 원 아웃풋의 순열을 변경한 값이 나온다.
- 소프트맥스는 선형함수가 아니다 : 인풋을 전부 x2하면 아웃풋에서 max값의 비중이 높아진다. (아래 그림 참고)
- ‘소프트맥스’ 는 사실 ArgSoftmax라고 불러야 한다. 2개의 분포를 합친 것이라서.
- 인덱스를 균등하게 랜덤으로 선택하는 분포
- Argmax 인덱스를 1의 확률로 선택하는 분포
- 소프트맥스는 미분가능하다
- 인덱스 선택이란?
- 소프트맥스 분포 (0~1)에서 랜덤 샘플링을 하면 각 항목의 원래 값의 크기에 따라 샘플링 확률이 정해지는 샘플링을 할 수 있다.
- 어텐션에서의 활용
- 세트에서 벡터 선택하기
- {u_1 … u_n} 벡터와 “쿼리” 벡터 q 가 있다.
- 어텐션 레이어에 대한 인풋은 벡터 세트로 주어지며 이 중 벡터 하나를 선택하게 된다. 이 때 역전파가 가능하도록 미분가능한 방식으로 골라야 한다.
- 미분 불가한 방법 :
- q와 가장 비슷한 벡터는 j_hat = argmax(j) u_j · q 와 같이 선택할 수 있다.
- 이는 p = p_hard 분포로서 j_hat 을 제외한 모든 인덱스에서 mass가 0이다.
- 미분 가능한 방법 :
- q와 가장 비슷한 벡터는 p = Softmax(Uq)로 구할 수 있다.
- U 는 벡터들을 행렬의 행들로 배열한 것이다.
- 이게 “소프트맥스 어텐션”이다!
- 소프트맥스 어텐션과 MLP 아웃풋
- 소프트맥스가 MLP의 마지막 레이어에 적용될 때
- q : 마지막 hidden state. {u_1 … u_n} : 클래스 라벨의 임베딩
- 확률분포로부터의 샘플링은 라벨링(아웃풋)에 상응함
- 소프트맥스 어텐션:
- q = 내부적 hidden state. {u_1 … u_n} : ‘인풋’ (즉 이전 레이어)의 임베딩.
- 확률분포는 {u_1 … u_n} 를 요약한 것에 상응함.
2. 어텐션
- 어텐션이란?
- 머신비전 문제에서 시작하자.
‘왼쪽에 텐트가, 오른쪽에 식탁이 있는 사진’을 두고, ‘테이블의 왼쪽에 무엇이 있지?’ 라고 물었다. 이 때 시스템은 우선 질문에 언급된 유일한 객체인 ‘테이블’에 집중한다. 그리고 나서 그 왼쪽에 있는 물건인 ‘텐트’에 집중하고, 이를 정답으로 대답할 것이다.
- 하드 어텐션 : 인풋에 대한 확률분포로부터 샘플링
- 소프트 어텐션 : 확률분포에 따른 가중평균값이 직접 사용됨.
- 머신비전(Machine Vision)에서의 어텐션
- 컴퓨터 비전 분야에서 긴 역사가 있다. 원래 도약안구운동(saccade)에서 영감을 받았다. (96년 Rajesh et al 등등)
- 이 연구들에서, 어텐션은 한 이미지 안의 공간적 장소들의 세트에 대한 것이다.
- 현재 상황과 glimpse의 역사를 볼때, 향후 어떤 곳에 대해 어떤 scale로 살펴보아야 할까?
- MLP와 어텐션
- 기계번역에서의 정렬 (alignment) : 타겟언어의 각 단어에 대해, 소스언어의 단어 확률분포를 구한다. (93년 Brown et al 등등)
- 예시: 독어 -> 영어 번역. 각 영단어에 대해 매핑되는 독단어들 찾기
- input은 소스 문장이고 computational state는 문장에서 번역중인 부분
- 신경망 계층으로서의 어텐션
- (2020경 기준) 상대적으로 ‘최근’ 개발되기 시작. 아마 하드웨어 등의 이유로?
- 위치 기반, 손글씨 생성 : [Graves 2013]
- 콘텐츠 기반, 기계번역 : [Bahdanau et al 2014]
- (소프트)어텐션에 대한 일반적 접근방식 :
- 다른 레이어와의 차이점
- 완전연결계층 (FCL) : 고정된 인풋, 고정된 아웃풋
- RNN : 비고정된 인풋, 고정된 아웃풋
- 소프트맥스 : 인풋에 따라 hidden state가 커짐. 이것이 소프트맥스의 특장점 중 하나임.
- 다층 소프트 어텐션 (Multi-Layer Soft Attention)
- 예시: hidden state 가 controller 인 q임. q를 업데이트할때 softmax를 사용.
- 모델을 사용한 추론의 예시
- 인풋의 기저에 깔린 기하학적 구조가 있다면, 이에 대한 정보를 가중치 ‘bag’에 포함시킬 수 있음. (예: 문장의 어디에 위치한 단어이냐 등)
- 중요 예시 : 포지션 임베딩 (position embedding). 순서가 있는 데이터 (sequential data)의 경우, 위치 인코딩 (position encoding)을 사용. 해당 인풋 시퀀스에서의 위치를 알려줌.
- 각 인풋 m_j에 대해, 이를 벡터 l(j)에 추가함.
- l(j)는 훈련중에 수정될수도 있고 학습될수도 있음
- 예시: 각 지점마다 frequency가 다른 사인곡선 (sinusoid)
3. 트랜스포머 (Transformers)
- 트랜스포머란?
- 다층 어텐션 모델. 현재 (2020경) 대부분의 자연어 관련 과업에서 실제 사용되는 기술
- 기존의 어텐션 기반 아키텍쳐들보다 유능함. 비결은 :
- Multi-query hidden-state propagation (“self-attention”)
- Multi-head attention
- Residual connections, LayerNorm
- 대부분의 아키텍쳐가 이를 활용하지만 트랜스포머가 특히 도움받음
- 키와 값 “Keys” and “Values”
- 아래에 각각 u와 v로 표기함. 요새 대부분 어텐션 소프트맥스를 표현할때 인풋 표현을 이와 같이 둘로 나누어 함.
- 키는 소프트맥스 가중치를 찾는데 사용. 값은 아웃풋 계산에 사용.
- 셀프 어텐션 (Multi-query hidden-state propagation (“self-attention”))
- 앞서 다층 어텐션이 어떻게 작동하는지 살펴봤음. 셀프어텐션은 인풋의 크기가 커짐에 따라 Controller state의 크기가 커짐.
- 각 인풋에는 controller state가 있음. (u_j) 각 controller state는 소프트맥스 어텐션으로 업데이트됨.
- 멀티-헤드 어텐션 (Multi-head attention)
- 각기 다른 가중치 행렬을 갖고 같은 데이터에서 같은 방식으로 훈련된 여럿의 어텐션 ‘헤드’를 합침.
- 총 L개의 어텐션 헤드는 모두 각 토큰에 대해 값을 내놓음. 이 값은 훈련된 파라미터에 곱해진 뒤 서로 더해짐.
- 아래 그림에서 G는 투영(projection), F는 완전연결. 각 점들은 feature dimension임.
- Residual connections, LayerNorm : 앞서 논의되었으므로 자세한 설명은 생략하나, 이 기법이 고안됨으로서 트랜스포머 모델의 훈련이 가능해졌음.
- 트랜스포머와 텍스트
- 트랜스포머는 벡터(혹은 그래프)의 세트에 대해 작동하나, 처음 소개될땐 텍스트 관련으로 소개됨.
- 텍스트에 대한 트랜스포머의 특기 일부
- 텍스트에서 토큰의 위치(location)에 따라 위치(position) 인코딩
- 언어 모델 관련 : “causal attention”
- 훈련 코드가 각 토큰에 대해 동시에 예측을 출력함 (그리고 동시에 각 토큰에 대해 그래디언트를 계산) => 훈련 속도가 전체 문맥량만큼 빨라짐