강의 소개
이번 강의에서는 지난 강의에서 배운 Sequential model의 한계점과 이를 해결 하기 위해 등장한 Transformer에 대해 배웁니다.
Transformer는 Encoder와 Decoder로 구성되어있지만 강의에서는 Encoder와 Multi Head Attention 에 대해 좀 더 집중적으로 배웁니다.
* 강의에서 Multi-head attention과 Multi-headed attention 은 동일한 의미입니다!
#########
본 강의 사이트에는 강의를 듣기에 앞서 어렵다고 경고가 적혀있다. 조금 긴장되지만 주된 자연어 처리의 모델인 만큼 한번 빡세게 보도록 하겠다!!
#########
Transformer는
이전 강의에서 배운 RNN 과 다른 개념의 방법론입니다.
왜 등장하였을까?
> 특정 시퀀스 자료가 들어올때
문장에 단어가 빠지거나
막 말이 밀리거나 그런경우도 있고 해서.
RNN같이 하나의 입력이 들어가고 다음 입력이 들어가고.. 이런 시퀀스하게 입력이 들어가면
순서가 변경되거나 빠지거나 뒤바뀌거나 하는경우 해결하고자 나오게됨
> Transformer
Transformer is the first sequence transduction model based entirely on attention.
트랜스포머는 전적으로 attention에 기반한 첫 번째 시퀀스 변환 모델이다.
어텐션 이라는 구조를 도입하였음.
입력 시퀀스와 출력 시퀀스는 숫자가 다를 수 있음.
보통 RNN은 3개의 단어가 들어가면 3번 뉴럴 네트워크가 돌아감.
하지만 Transformer는 적어도 인코더 부분, self attention 의 구조에서는 100개가 들어가던 재귀적으로 돌지 않고 1번만 돌음.
중요 포인트
1. n개의 단어가 어떻게 인코더에서 한번에 처리 되는지.
2. 디코더와 인코더 사이에 어떤 정보를 주고받는지.
3. 디코더가 어떻게 제너레이션 할 수 있는지.
3개의 단어가 들어온다고 가정, 그러면 각 단어를 벡터로 변역하여 3개의 벡터로 받아들임.
그런 다음 Transformer는 각 단를 SelfAttention으로 특징 벡터로 인코딩합니다.
(이 3개의 벡터로 인해 새로운 z 백터를 찾는데, 각각의 모든 벡터를 함께 고려해서 찾아냄.)
SelfAttention은 각 단어마다 3개의 벡터를 만들어 내게 됨 = Key, Queries, values
이 3개의 벡터를 통해 단어 변환을 함.
Score 벡터를 통해 i번째 단어가 나머지 n개의 단어와 얼마나 유사도가있는지 정하게 됨.
# 13분 # 다시 필요
스코어 벡터를 만듭니다.
쿼리벡터와 나머지 키 벡터랑 내적을 하여 만듬 (유사도 판별)
스코어벡터 나오면 그걸 노말라이션 하고 소프트맥스 넣음
그러면 어텐션 웨이트가 나오게됩니다.
#정리#
임베딩 벡터가 주어지면 각각의 임베딩 벡터마다 쿼리 키 벨류 벡터를 만들고 ( 각각 뉴럴 네트워크를 통해 )
키 벡터 쿼리 벡터와 내적해서 스코어 벡터 만들고
그걸 소프트맥스 취해서 웨이트
#16분#
벨류 백터들의 웨이트를 구하는 과정이
각 단어들 마다 키 쿼리 내적 그걸 노말라이즈, 소프트맥스 해서 나오는
어텐션을 밸류벡터와 웨이티드 섬 한게
최종적으로 나오는 특정 단어의 임베딩백터의 인코딩된 벡터
# 19분
이미지 하나가 주어졌다고 생각을 해보면 인풋이 고정되어있으면 출력이 고정이 된다.
그러나 트랜스포머는 하나의 인풋이 고정되어 있다고 하더라도, 네트워크가 고정되어있다 하더라도 내가 인코딩하려는 단어와 그 옆의 단어에 따라서 내가 인코딩된 값이 달라진다.
입력이 고정된다고 출력이 고정되는것이 아니라 입력이 고정되더라도 옆에 주어진 다른 입력들이 달라짐에 따라 출력이 달라질 수 있는 여지가 있음. 훨씬 더 많은 것을 표현 할 수있는게 트랜스포머이다.
바꿔 말하면 이렇게 많은 것을 표현하기 때문에 더 많은 컴퓨테이션이 필요함.
내가 N개의 단어가 주어지면 기본적으로 N x N 짜리 어떤 어텐션 맵을 만들어야 한다.
바꿔말하면 내가 한번에 처리하고자 하는 단어가 1000개면 1000x1000 입력을 처리해야함.
RNN의 경우 1000개의 단어가 들어오면 그저 1000번 돌리면 된다. 그래서 그냥 돌릴수만 있으면 된다.
1만개가 들어와도 오래 걸리겠지만 1만번 돌리기만 하면됨
하지만 트랜스포머는 n개의 단어를 한번에 처리해야함. 그리고 n제곱에 비례해서 계산이 필요하기에 들어오는 데이터가 길이 한계가 있음. 메모리를 많이 먹기도하고
하지만 그만큼 더욱 많은걸 표현할 수있는 네트워크가 형성됨.
하나의 입력에 대해서 ( 하나의 인코딩된 벡터에 대해서 ) n개의 쿼리티 백터를 만듬. 멀티 헤드
n개의 어텐션을 반복하게 되면 n개의 인코딩된 벡터가 나오게 되겠죠
positional encoding으로 단어의 위치에있는지 정하게됨.
n개의 단어가 주어지면 n개의 인코딩된 백터가 나오게되고 i번째 단어를 인코딩 할때는 나머지 n개의 모든 입력의 정보를 활용해서 i번째 단어 인코딩 벡터를 찾는다.
2. 디코더와 인코더 사이에 어떤 정보를 주고받는지.
인코더는 주어진 단어를 표현하는 거였고 디코더는 그걸로 생성하는것.
키와 벨류를 보내게 됩니다.
(디코더에서, 자기 주의 계층은 소프트맥스 단계 이전의 미래 위치를 마스킹함으로써 수행되는 출력 시퀀스의 이전 위치에만 주의를 기울일 수 있다.)
학습할때 모두 알고있으면 학습이 잘안되므로 가리고 학습하는거
("인코더-디코더 주의" 계층은 아래 계층에서 쿼리 행렬을 만들고 인코더 스택에서 키와 값을 가져온다는 점을 제외하면 다중 헤드 셀프 주의와 동일하게 작동합니다.)
(마지막 계층은 디코더 출력의 스택을 워드에 대한 분포로 변환한다.)
키쿼리밸류가 어텐션을 만들어내는 과정.
'공부 정리 ( 강의 ) > 딥러닝 기초 다지기' 카테고리의 다른 글
4.1. Sequential Models - RNN (1) | 2023.01.07 |
---|---|
3.3. Computer Vision Applications (1) | 2023.01.07 |
3.2. Modern CNN - 1x1 convolution의 중요성 (0) | 2023.01.07 |
3.1. CNN - Convolution은 무엇인가? (0) | 2023.01.07 |
2.3. Regularization - 오버피팅 막기 # 나중필요 (0) | 2023.01.07 |