Sequence
는 뒤에가 잘리는 경우, 중간에 생략되는 경우, 어순이 바뀌는 경우 등이 존재DALL·E
- 참고: https://openai.com/blog/dall-e/)크기(단어의 수)
가 다를 수 있음.Domain
도 다를 수 있다. (예: 기계번역 Task에서 입력은 한국어, 출력은 영어)인코딩
시, RNN 처럼 단어의 수만큼 재귀적으로 돌지 않고, 한 번에 해당 단어의 수만큼 시퀀스가 딱 생성된다.Encoder
/Attention
구조에서는 n(해당 단어의 수, 가변적인 단어 수..!!)
만큼 한 번에 처리된다.Generator(생성자)
단계에서는, 1개
단어씩 생성한다..! 따라서, 이때는 Auto-Regressive
)동일한 내부 구조를 갖지만 parameters
가 다르게 학습되는 Encoder
와 Decoder
가 여러 개 stack되어 있는 구조.
Self-Attention
이 핵심 (Transformer에서 인코딩
단계에 해당됨)
입력으로 주어진 n개의 단어가 들어갈 때, x_i에서 z_i으로 n개의 벡터(=Feature Vectors
)를 변환하는 구조.
이때 해당 1개
단어 외, 나머지 (n-1)개
의 단어의 정보를 함께 활용한다..!!!
쿼리를 날리는
과정i
번째 단어 1개에 해당하는 Query 벡터
와 나머지 (n-1)
개에 해당하는 Key 벡터
및 Value 벡터
의 내적 값
을 구하여 => Score
값(유사도, 상호관계성 관련 지표 / type: 스칼라
값)을 구함.자기할당(self-aligned)
과정Score
값을 계산할 때는, 정규화(Normalization)
개념으로 전체 벡터의 차원(=Query 벡터
의 차원 = Key 벡터
의 차원)의 루트 값으로 나누어줌. (분모 값)softmax()
함수를 취해줌.Value 벡터
와의 weighted sum(가중치 합)
이 최종 인코딩 벡터의 결과..!!n차원
의 인코딩된 벡터..!Query 벡터
의 차원 = Key 벡터
의 차원..!Value 벡터
의 차원은 이 둘과 다를 수 있다..!MLP(다층 퍼셉트론 구조)
나 CNN
에서는 인풋이 고정되어 있으면, 출력도 고정되어 있다. (연산에 쓰이는 필터/가중치 등 파라미터가 고정되어 있기 때문에)Transformer
에서는 인풋/네트워크 구조가 고정되어 있더라도, 현재 인코딩하는 단어와 근처에 주어진 다른 단어들과의 관계성에 따라 출력이 달라질 수 있다..!표현성
이 높은 flexible
한 모델 ➕ 하지만, 그만큼 연산량
이 증가한 모델Transformer
의 한계가 됨.여러 개(m개)
만드는 접근법.linear map
을 활용해 차원을 축소시켜줌)Self-Attention
만 가지고는 순서 정보를 알 수 없음. (order-independent)dependent
하고 이후 단어들에 대해서는 independent
하지 않게 만드는 방법론train
뿐만 아니라 inference
에서도 사용됨입력 시퀀스(문장)
uto-regressive
방식으로 생성된다.Encoder-Decoder Attention
layer : 생성 시, 내가 이전까지만 generate된 데이터만 가지고 Query를 만들고, Key+Value 벡터는 원래 raw 인풋 시퀀스(문장)
서 나오는 임베딩 벡터를 활용한다..!nn.Transformer
문서 : nn.Transformer
모듈 공식 문서 : positional encoding
에 대한 고찰 :