10.케창딥 - 트랜스포머
트랜스포머, 시퀀스 투 시퀀스
트랜스포머 아키텍쳐
어텐션
![[Pasted image 20240929192128.png]]
Attention이란 문맥에 따라 집중할 단어를 결정하는 방식을 의미
영어 ‘cafe’와 한국어 ‘카페’가 강한 Attention 상관관계, 다른 단어들과는 Attention이 약함
어텐션의 구조: 인코더 디코더
![[Pasted image 20240929192501.png]]
- Encoder는 입력으로 input data를 받아 압축 데이터(context vector)로 변환 및 출력해주는 역할
- Decoder는 반대로 압축 데이터(context vector)를 입력 받아 output data를 출력
왜 이런 구조로 하는지? ⇒ 정보를 압축하므로써 연산량을 최소화하기 위해
RNN에 어텐션 개념 도입
![[Pasted image 20240929192520.png]]
유의할 점은 Encoder의 경우 모든 RNN 셀의 hidden states들을 사용하는 반면
Decoder의 경우 현재 RNN셀의 hidden state만을 사용
- Decoder hidden state: Target seqence의 문맥
- Encoder hidden states: Source seqence의 문맥(모든 문맥을 활용하겠다.)
셀프 어텐션
목적:
자기 주의 메커니즘은 입력 시퀀스의 각 요소(보통은 단어의 임베딩)가 다른 요소와 어떻게 상호 작용하는지를 모델링
한다. 이는 Query
, Key
, Value
라는 세가지 다른 표현으로 분해된다.
- Query는 현재 단어가 어떤 정보에 주의를 기울여야 하는지를 나타내고
- Key는 각 단어가 어떤 정보를 가지고 있는지를 나타내며,
- Value는 실제로 그 정보를 어떻게 활용할지를 나타냄.
방법:
세가지 주요 단계로 이루어진다. 각 단계에서는 입력 문장 내의 단어들 간의 상대적인 중요도를 계산하여 가중치를 부여한다.
어텐션 스코어 계산
첫번째 단계에서는 쿼리(Query), 키(key), 벨류(value)라는 세 가지 vector를 생성한다. 이때, query는 현재 단어에 대한 정보를 담고 있고, key와 value는 입력 문장의 다른 단어들에 대한 정보를 담고 있다.
- query와 key vector간의 유사도를 측정하여 attention score를 계산
우선 Query와 key의 내적(dot product)를 계산하여 attention score를 얻는다.
이 score는 query와 key 사이의 유사도를 나타내며 높을수록 더 많은 주의를 기울여야 한다.
![[Pasted image 20240929192732.png]] ![[Pasted image 20240929200612.png]]
소프트 맥스(softmax) 함수를 통한 가중치 계산
두 번째 단계에서는 attention score를 확률 분포로 변환하기 위해 소프트맥스 함수를 적용한다.
이렇게 하면 각 단어의 중요도에 대한 가중치를 얻을 수 있다.
이 가중치는 Query와 Key사이의 상대적인 중요도를 나타낸다.
즉 가중치가 높을수록 해당 단어는 문장의 의미를 이해하는 데에 더 큰 영향을 미친다.
가중치를 적용한 밸류 계산
세 번째 단계에서는 소프트맥스 함수를 통해 얻은 가중치를 Value vector에 곱샘 적용하여 최종적인 단어 표현을 계산한다.
즉 각 단어의 value vector를 가중치와 곱한 뒤 합산하여 Self Attention의 결과를 얻게 된다. 이를 통해 문맥을 고려한 표현
![[Pasted image 20240929235556.png]]
장점:
-
병렬 계산 가능(elf Attention은 모든 요소를 동시에 처리할 수 있다. 이로 인해 병렬 계산이 가능하며, 연산 속도가 빠르다.)
-
문장 길이에 영향 받지 않음 모든 단어 간의 관계를 한 번에 계산하기 때문에 문장의 길이에 상관 없이 일정한 계산 시간을 유지
-
문맥 파악 능력 강화 문장 내의 각 단어가 다른 단어와 어떻게 상호 작용하는지를 정밀하게 파악한다. 이로 인해 문맥을 더 잘 이해할 수 있으며, 이는 특히 고정된 윈도우 크기의 CNN이나 단기 메모리의 RNN보다 뛰어나다. ![[Pasted image 20240929235734.png]]
어텐션 메커니즘
![[Pasted image 20240929235750.png]]
멀티 헤드 어텐션
멀티헤드 어텐션은 셀프 어텐션을 확장한 개념으로, 여러 개의 어텐션 헤드를 사용해 서로 다른 차원에서 다양한 패턴을 학습
이 기법은 트랜스포머 모델의 성능을 높이는 데 중요한 역할을 담당
주요 특징:
- 여러 개의 어텐션을 동시에 수행합니다. 각 어텐션 헤드는 쿼리, 키, 값 벡터를 다르게 학습하여, 서로 다른 관계를 포착
- 이로 인해, 모델은 다양한 문맥 정보를 더 풍부하게 학습할 수 있음
동작 방식:
- 입력 시퀀스에 대해 여러 개의 어텐션 헤드를 병렬로 수행하여, 서로 다른 쿼리, 키, 값 벡터를 사용
- 각 헤드는 독립적으로 어텐션을 계산하며, 최종적으로 헤드들의 결과를 결합하여 최종 출력을 만듬
⇒ 멀티헤드 어텐션은 하나의 어텐션 메커니즘만 사용했을 때 놓칠 수 있는 다양한 관계를 학습할 수 있는 장점
[4x4]
크기의 문장 임베딩 벡터와 [4x8]
의 Query, Key, Value
가 있을 때, 일반적인 한 번에 계산하는 Attention 메커니즘은 [4x4]*[4x8]=[4x8]
의 Attention Value가 한 번에 도출
-
일반적인 어텐션 메커니즘 ![[Pasted image 20240929235919.png]]
-
멀티 헤드 어텐션 메커니즘 ![[Pasted image 20240929235904.png]]
트랜스포머 인코더(Transformer Encoder)
트랜스포머 인코더는 트랜스포머 모델에서 입력 시퀀스를 처리하여 고차원 벡터로 변환하는 역할
인코더는 트랜스포머의 N개의 블록으로 구성되며, 각각의 블록은 멀티헤드 어텐션과 피드포워드 신경망 구성
주요 구성 요소:
- 멀티헤드 어텐션: 입력 시퀀스의 각 단어가 다른 단어들과의 관계를 학습
- 피드포워드 네트워크(Feedforward Network): 어텐션을 통해 학습된 정보를 비선형 변환을 통해 추가적으로 처리
- 잔차 연결(Skip Connection): 각 레이어는 이전 레이어의 출력을 직접 연결하여 정보 손실을 방지하고 학습을 안정화
인코더는 입력 시퀀스의 모든 단어가 서로의 관계를 학습하여 고차원 벡터 표현을 생성하며, 이는 디코더로 전달됩니다.
![[Pasted image 20240930000014.png]]
텍스트 분류를 넘어: 시퀀스-투-시퀀스 학습
시퀀스 투 시퀀스(Seq2Seq) 모델
- 시퀀스 투 시퀀스 모델은 입력 시퀀스를 다른 시퀀스로 변환하는 모델
- 입력으로 문장이나 문단을 받아 이를 다른 시퀀스로 바꾼다는 의미
- 예를 들어, 기계 번역, 텍스트 요약, 대화 생성과 같은 작업에서 사용
주요 개념:
- 인코더-디코더 구조: 입력 시퀀스를 인코더가 처리하여 고차원 벡터로 변환한 후, 이를 디코더가 받아 출력 시퀀스를 생성
동작 방식:
- 인코더는 입력 시퀀스를 처리하여 하나의 고차원 벡터로 변환
- 디코더는 이 벡터를 받아, 순차적으로 단어를 생성하여 출력 시퀀스를 만듦
![[Pasted image 20240930000119.png]]
RNN을 사용한 시퀀스 투 시퀀스 모델
- RNN 기반 Seq2Seq 모델은 RNN 구조를 사용하여 입력 시퀀스를 출력 시퀀스로 변환하는 모델
- RNN은 순차적 데이터를 처리하는 데 강력한 성능을 보이며, 시간적 의존성을 학습
주요 구성 요소:
- RNN 인코더: 입력 시퀀스를 처리하여 마지막 은닉 상태를 추출
- RNN 디코더: 인코더의 마지막 은닉 상태를 받아, 순차적으로 출력 시퀀스를 생성
동작 방식:
- 입력 시퀀스를 한 번에 하나씩 처리하면서 은닉 상태를 업데이트하며, 인코더의 마지막 은닉 상태가 디코더에 전달되어 출력 시퀀스를 생성하는 데 사용
![[Pasted image 20240930000147.png]]
트랜스포머 Seq2Seq 모델
- 전통적인 RNN 기반 모델과 달리 트랜스포머 구조를 사용하여 입력 시퀀스를 출력 시퀀스로 변환
- RNN과 달리 트랜스포머는 병렬 처리가 가능하여 학습 속도가 빠르고, 더 긴 시퀀스를 효과적으로 처리
주요 구성 요소:
- 인코더: 입력 시퀀스를 **멀티헤드
어텐션**과 **피드포워드 네트워크**
를 통해 처리하여 고차원 벡터로 변환어텐션**과 **피드포워드 네트워크
란?- 트랜스포머 블록 내에서 순차적으로 사용되며, 이 두 가지가 결합되어 트랜스포머가 문맥을 더 깊이 이해하고, 시퀀스를 더 효과적으로 처리할 수 있게 함
- 디코더: 인코더의 출력을 바탕으로 출력 시퀀스를 생성하며, 멀티헤드 어텐션을 통해 인코더에서 전달된 정보를 활용
댓글남기기