본문 바로가기
인공지능과정 이론 수업

Day17_생성형AI I (+Attention is All You Need)

by eun5098 2024. 7. 25.
728x90
<목차>
1. 생성형 AI - Generative AI
2. Transformer
3. Attention is All you need

1. 생성형 AI - Generative AI

 

생성형 AI?

: 기존 데이터 학습하여 새로운 데이터 생성하는 인공지능 기술

- Diffusion, GAN, VAE, Transformer, …

 활용분야

1) 이미지 생성: 예술 작품, 얼굴 이미지, 자연 경관 등

2) 텍스트 생성: 소설, 시, 뉴스 기사 등

3) 음악 생성: 새로운 음악 작곡, 편곡 등

4) 비디오 생성: 새로운 영상, 애니메이션 등

##생성형 AI가 주목받는 이유?

1) 창의성 증대에 대한 기대 (디자인 및 예술 분야, 엔터테인먼트 산업)

2) 데이터 증강 및 확장 (의료분야, 자율주행 등)

3) 효율성 및 비용 절감 (데이터 수집 의존 하락 등)

 

최근 생성형 AI

 

 

 대규모 언어 모델 (Large Language Model, LLM)?

: 방대한 양의 텍스트 데이터 학습하여 자연어 이해 및 생성할 수 있는 인공지능 모델

ex. OpenAI의 GPT-3, GPT-4

 응용분야

1) 자연어 생성(NLG)

2) 질의응답(Q&A)

3) 언어 번역

4) 텍스트 요약

5) 그외의 자연어와 관련된 작업


2. Transformer

 

 Transformer 모델

: 2017년 Vaswani et al.에 의해 제안된 모델

- Attention is All You Need

- RNN이나 LSTM과 달리, 순차적인 데이터 처리 없이 병렬로 처리 가능

 기본 개념

1) Self-Attention Mechanism

: 입력 데이터의 각 요소가 다른 모든 요소와의 관계 고려하여 중요한 정보 선택해 집중

2) Encoder-Decoder 구조

: 두 개의 주요 구성 요소로 이루어져 있으며, 인코더는 입력 처리. 디코더는 출력 생성


3. Attention is All You Need

 

◆ Introduction

RNN과 LSTM

- 모델링 및 기계 번역 같은 시퀀스 처리 문제에서 매우 효과적

- 입력 및 출력 시퀀스의 각 위치 순차적으로 처리하여 hidden states 생성

- 이러한 순차적 특성 때문에 병렬화 어렵고, 긴 시퀀스 처리할 때 메모리 제약 발생

어텐션 메커니즘 (Attention Mechanism)

- 모델이 입력 데이터의 어느 부분에 주목해야 하는지 결정

- 입력 및 출력 시퀀스 내의 요소 간의 의존성 거리와 상관없이 모델링 가능

- 대부분의 경우 어텐션 메커니즘은 순환 네트워크와 결합하여 사용되기 때문에 여전히 순차적 계산의 제약 가지고 있음

Transformer의 제안

- 본 논문에서는 순환 구조를 완전히 배제하고 어텐션 메커니즘에만 의존하는 Transformer 모델 제안

- Transformer는 병렬화를 훨씬 더 많이 허용하여, 짧은 시간 내에 고품질의 출력물 획득 가능

 

Model Architecture

- 대부분의 신경 시퀀스 변환 모델과 마찬가지로, 인코더-디코더 구조

- 인코더 -> 입력 시퀀스를 연속적인 표현 시퀀스로 매핑, 디코더 -> 이를 바

탕으로 출력 시퀀스 생성

- 디코더는 이전에 생성된 기호를 추가 입력으로 사용하여 다음 기호 생성

 

[인코더 스택]

- 6개의 동일한 레이어로 구성 (N=6이라는 의미)

- 각 레이어는 multi-head self-attention 메커니즘과 위치별 fully-connected feed-forward 네트워크의 두 서브 레이어로 구성

- 각 서브 레이어는 residual connection 통해 연결되며, 그 후 레이어 정규화 수행

- 모든 서브 레이어와 임베딩 레이어는 512차원의 출력 생성

[디코더 스택]

- 6개의 동일한 레이어로 구성

- 인코더 레이어의 두 서브 레이어 외에도, 인코더 스택의 출력을 대상으로

하는 세 번째 서브 레이어 추가

- 디코더 스택의 self-attention 서브 레이어는 이후 위치를 참조하지 못

하도록 마스킹되며, 출력 임베딩이 한 위치씩 오프셋되어 예측이 이전

위치의 출력에만 의존할 수 있도록 보장

(=출력 시퀀스 생성할 때 오직 이전의 정보만 사용하도록!)

오프셋?
: 실제 출력을 생성하기 위해 입력되는 데이터가 현재 예측해야 할 단어보다 한 단계 앞서 있다는 의미
ex. "안녕하세요, 오늘은 좋은 날입니다"를 번역하거나 생성할 때, 모델이 "좋은"을 예측하기 위해선 "안녕하세요, 오늘은"까지만 입력으로 받아야 함.

ex. "안녕하세요, 오늘은 좋은 날입니다" 번역
1. 첫 단어 생성: 입력으로 시작 토큰, 에를 들어 ""만 받음. 모델은 첫 번째 단어 "안녕하세요" 예측
2. 두 번째 단어 생성: 이제 입력으로 "안녕하세요" 받음. 이 입력은 두 번째 단어 "오늘은" 예측하는 데 사용됨. 이 시점에서 셀프 어텐션은 "오늘은"이후의 어떠한 단어도 참조할 수 없도록 마스킹되어 있음.
3. 1,2번 과정처럼 이후 단어 "좋은" 예측 ...(반복)

 

어텐션 메커니즘

- 어텐션 함수는 쿼리, 키, 값 벡터(Q, K, V) 사용하여 쿼리와 키의 호환성 함수에 의해 계산된 가중치로 값들의 가중 합 출력으로 매핑

##Q, K, V가 뭔가요?

Q(쿼리): 현재 분석하고자 하는 대상. 다른 요소와의 관계를 파악하기 위한 참조점 역할

K(키): 비교 대상의 요소. 쿼리와 키 간 관계를 통해 어떤 정보에 주목할 지 결정

V(값): 실제 정보 담고 있음. 키와의 관계에 따라 이 정보의 가중치가 결정됨. 가중치가 적용된 값들이 합쳐져 최종적으로 중요한 정보 출력

ex. 문장에서 중요 단어 찾기

"저는 오늘 아침에 커피를 마셨습니다"에서 "커피"와 가장 관련이 깊은 단어를 찾고 싶다고 가정.

1. K, V
: 각 단어는 K로 변환된다.
"저는", "오늘", "아침에", "커피를" "마셨습니다" 각각 K로 변환
2. Q
: "커피를"이라는 단어를 중심으로 주변 단어와의 관계를 파악하고자 할 때 "커피를"이 Q로 변환
3. attention score 계산
: Q("커피를")와 모든 키("저는", "오늘", "아침에", "커피를", "마셨습니다") 간 호환성 계산(= dot product)
계산된 score는 softmax 함수 통해 정규화, 각 K의 중요도(attention weight) 결정
4. 가중합
: 정규화된 score(attention weight)를 각 V에 곱하고, 이를 모두 더해 최종 출력 생성
이 값은 "커피를"과 관련된 문맥 정보 반영

 

Scaled Dot-Product Attention

: Q와 K의 내적 계산, 이를 root(dk)로 나누어 스케일링한 후, 소프트맥스 함수 적용하여 값에 대한 가중치 얻는 메커니즘

- 디코더 스택의 self-attention 서브 레이어는 이후 위치 참조하지 못하도록 마스킹되며, 출력 임베

딩이 한 위치씩 오프셋되어 예측이 이전 위치의 출력에만 의존할 수 있도록 보장

- 쿼리 집합 Q, 키 집합 K, 값 집합 V를 행렬로 묶어 동시 처리

- 값이 클수록 내적의 크기 커져서 소프트맥스 함수가 매우 작은 기울기를 가지는 영역으로 밀려나

게 되는데 이 문제를 해결하기 위해 내적을 root(dk)로 스케일링하여 안정적인 학습 보장

Additive Attention vs. Dot-Product Attention

· Additive Attention

   - Feed-forward 네트워크와 단일 은닉층 사용하여 호환성 함수 계산

   - 이론적으로는 DPA와 복잡도가 비슷하지만, 실제로는 느리고 공간 효율 떨어짐

[Additive Attention 과정]
1. 키, 쿼리, 값 설정
2. 어텐션 스코어 계산 (위의 첨부한 공식)
    ki = i번째 키, q= 쿼리 벡터, W1과 W2=학습 가능한 가중치 행렬, v=학습 가능한 가중치 벡터, tanh=비선형 활성화 함수, ei=각 키가 쿼리와 얼마나 관련성이 있는지 나타내는 스코어
3. softmax를 통한 정규화 (각 단어의 중요도 표시)
4. 가중합을 통한 최종 출력 (최종 출력 = 각 단어의 중요도를 반영한 문맥 벡터)

 

· ‘Dot-Product Attention'

   - Q와 K의 내적 계산하여 가중치 계산

   - 고도로 최적화된 행렬 곱셈 코드 사용하여 빠르고 공간 효율적

 

멀티-헤드 어텐션(Multi-Head Attention)

: Q, K, V 벡터 여러 번 선형 투영 후 병렬로 어텐션 함수 수행하여 다양한 표현 하위 공간의 정보 통합 메커니즘

##이름이 왜 멀티 헤드인가요? 여기서 말하는 헤드는 무엇인가요?

멀티 헤드 = 셀프 어텐션 메커니즘을 병렬적으로 수행한다는 의미

헤드 = 입력 데이터에서 다른 부분에 주목하여 다양한 관점에서 정보를 추출하고 결합하는 역할
        = 여러 개의 독립적인 어텐션 연산

[작동 방식]
ex. "The quick brown fox jumps over the lazy dog"
1. 분할 
: 입력 벡터(쿼리, 키, 값)을 여러 헤드 수 만큼 분할. 분할된 각각 벡터는 동일 길이, 원래 벡터 차원을 헤드 수로 나눈 것과 동일
ex. 문장의 각 단어를 d차원의 벡터로 임베딩 (d=300 가정)
      5개의 헤드 사용 가정, 각 헤드는 300/5=60차원의 벡터를 다루게 됨
  = 원본 300차원 벡터는 각각 60차원의 5개 부분 벡터로 "분할"
2. 병렬 어텐션
: 각 헤드는 분할된 쿼리, 키, 값 벡터를 사용해 독립적으로 어텐션 계산 수행 = 각 헤드가 독립적으로 서로 다른 정보 포착
ex. 각 헤드는 이 60차원 벡터를 독립적으로 처리. 각 헤드는 자신의 쿼리, 키, 값 벡터를 가지고 어텐션 계산 수행
      한 헤드는 문법적 관계에, 다른 헤드는 의미적 연관성에 주목 (이런식으로 각 헤드는 문장 내 패턴, 관계 주목)
3. 결과의 결합
: 각 헤드에서 계산된 결과를 하나의 큰 벡터로 결합 = 각 헤드가 포착한 정보의 다양성 하나로 통합해 더 풍부한 표현 생성
ex. 각 헤드에서 도출된 어텐션 결과(60차원 벡터)들은 다시 하나의 300차원 벡터로 결합. (다른 관점에서 얻은 정보 통합)
4. 최종 선형 변환
: 결합된 벡터는 추가적인 선형 변환 거쳐 최종 출력 벡터 생성 = 다음 레이어나 다음 과정에 적합한 형태로 조정

 

- 셀프 어텐션을 여러번 병렬로 수행, 각각 다른 방식으로 정보 추출 후 결합

- 여러 어텐션 헤드 사용하여 모델이 서로 다른 위치에서 다양한 정보 볼 수 있게함

- 단일 어텐션 헤드에서는 평균화가 이를 방해함

[구성]

투영과 병렬 처리: Q, K, V을 각각 차원으로 투영, 병렬로 어텐션 함수 수행

출력 결합: 각 헤드의 출력 연결하고 다시 투영한 값 최종 출력 삼음

 

Transformer에서의 멀티-헤드 어텐션 응용

1) 인코더-디코더 어텐션

역할: 디코더의 각 위치가 인코더의 전체 출력 참조할 수 있게 함.

작동 방식: 디코더의 쿼리는 이전 디코더 레이어에서 나오며, 인코더의 출력에서 생성된 메모리 키와 값에 대해 어텐션 수행

=> 이를 통해 디코더는 인코더가 처리한 전체 입력 문맥을 고려하여 적절한 출력 생성 가능

기능: 기존의 시퀀스-투-시퀀스 모델에서 볼 수 있는 인코더-디코더 구조와 유사하게, 디코더는 인코더의 모든 정보에 접근할 수 있어 전체 문맥을 이해하는 데 도움 받음

2) 인코더의 Self-Attention

역할: 인코더의 각 위치가 같은 레이어의 모든 위치 참조할 수 있도록 함

작동 방식: 인코더의 각 위치에서 생성된 쿼리(Query), 키(Key), 값(Value)는 모두 같은 인코더 레이어의 출력에서 비롯됨

=> 이를 통해 각 단어는 문장 내 다른 모든 단어와의 관계 파악 가능

3) 디코더의 Self-Attention

역할: 디코더에서 생성되는 각 출력이 그 이전의 모든 출력에만 의존하도록 함

특징: 디코더의 어텐션 메커니즘은 마스킹 통해 이후 위치의 정보를 참조하는 것 방지

=> 모델이 현재 위치에서 앞서 나온 정보만 사용하여 다음 단어 예측하도록 보장

마스킹: Scaled Dot-Product Attention 과정에서 적용되며, 이후 위치의 키와의 내적에 매우 낮은 스코어(거의 -∞에 해당하는 값)를 부여하여, 소프트맥스 함수가 이를 무시하게 함.

 

Position-wise Feed-Forward Networks:

- 인코더와 디코더의 각 레이어에는 각 위치에 대해 동일하게 적용되는 fully-connected Feed-Forward Networks가 포함

- 두 개의 선형 변환과 ReLU 활성화 함수로 구성, 입력과 출력의 차원은 dmodel = 512, 내부 레이어의 차원은 dff = 2048

 

Learned Embedding:

- 입력 토큰과 출력 토큰을 dmodel차원의 벡터로 변환

- 디코더 출력을 예측된 다음 토큰 확률로 변환하기 위해 선형 변환과 소프트맥스 함수 사용

 

- 두 임베딩 레이어와 사전 소프트맥스 선형 변환 사이에 동일한 가중치 행렬 공유하며, 임

베딩 레이어에서는 이 가중치를 root(dmodel)로 곱합니다.

 

Positional Encoding

: transformer는 기본적으로 시퀀스의 순서 정보를 사용하지 않기 때문에 입력 데이터의 각 요소에 위치 정보 추가해줌으로써 모델이 단어의 순서 인식 가능하게  해줌

- 인코더와 디코더의 입력 임베딩에 추가

- 위치 인코딩은 임베딩과 동일한 차원

[사인 및 코사인 함수 사용]

- 위치 인코딩은 사인함수와 코사인함수로 계산

- 파장은 2π에서 100002π까지 기하급수적으로 증가

- 상대적 위치에 따라 주목(attend)하는 것을 쉽게 학습할 수 있도록 설계됨

##왜 사인 및 코사인 함수를 사용하는가?

주기성: 사인 및 코사인 함수는 주기적인 패턴을 가지고 있어서, 모델이 위치 정보를 보다 일관되게 해석 가능

스케일 불변성: 다른 위치 값 사용할 때, 사인 및 코사인 함수의 출력은 균일하게 분포되며, 모델이 위치에 따른 변화 더 잘 이해 가능

긴 시퀀스에 대한 외삽: 사인 및 코사인 함수는 정의된 범위 밖의 값(즉, 훈련 데이터에서 보지 못한 긴 시퀀스 위치)에 대해서도 일관된 값제공 가능

[학습된 위치 임베딩과 비교(learned positional embeddings)]

- 사인함수 위치 인코딩과 학습된 위치 임베딩이 거의 동일한 결과를 나타냄

- 사인함수 위치 인코딩이 더 긴 시퀀스 길이에 대해 외삽할 수 있음 (= 모델이 훈련 중 접하지 못한 더 긴 시퀀스 처리할 경우에도 일관된 방식으로 위치 정보 제공 가능하다는 의미)

 

 Why Self-Attention

[Self-Attention vs. 순환 및 합성곱 레이어 비교]

- 레이어당 계산 복잡성에 이점 (왜? 각 입력 위치에서 모든 다른 위치로의 관계를 동시에 계산 가능하므로)

- 최소한의 순차적 연산 수로 계산 과정 병렬화 가능

- 장거리 의존성 경로 길이에 큰 이점

[Self-Attention의 장점]

- Self-Attention 레이어는 모든 위치를 일정한 수의 순차적 연산으로 연결, 순환 레이어는 O(n) 순차적 연산 필요

- 시퀀스 길이 n이 표현 차원 d보다 작을 때 Self-Attention 레이어의 계산 속도가 순환 레이어보다 빠름

- 매우 긴 시퀀스에서 Self-Attention은 크기 r의 이웃만을 고려하도록 제한 하는 것이 가능 -> future work

[합성곱 레이어의 한계]

- 커널 폭이 작은 단일 합성곱 레이어는 모든 입력 및 출력 위치 쌍을 연결하지 않기 때문에 O(n/k) 합성곱 레이어 스택 필요

- 일반적으로 합성곱 레이어는 순환 레이어보다 커널만큼 더 비쌈

[Self-Attention의 추가 이점]

- 더 해석 가능한 모델 제공할 수 있어보임

- 모델의 어텐션 분포 검사하여 문장의 구문 및 의미 구조 파악

 

◆ Training

[학습 데이터 및 배치]

- WMT 2014 영어-독일어 및 영어-프랑스어 데이터셋 사용

- byte-pair encoding 및 word-piece 어휘 사용

- 각 배치당 25000개의 소스 및 타겟 토큰 포함

[하드웨어 및 일정]

- 8개의 NVIDIA P100 GPU에서 학습

- 기본 모델: 총 100,000steps 또는 12시간 학습

- 큰 모델: 총 300,000steps 또는 3.5일 학습

[최적화]

- Adam optimizer 사용

- 첫 warmup_steps 동안 학습률 선형 증가, 이후 역제곱근에 비례하여 감소

[정규화]

- Residual Dropout: 0.1 사용

- Label Smoothing: 0.1 사용

 

◆ Results

[기계 번역]

- 영어-독일어 번역: BLEU 점수 28.4 달성

- 영어-프랑스어 번역: BLEU 점수 41.0 기록하여 이전의 모든 단일 모델 능가, 학습 비용은 이전 모델의 1/4에 불과

[모델 변형(Model Variations)]

- 구성 요소 평가: 어텐션 헤드 수와 어텐션 키 및 값의 차원 변경하여 성능 변화 관찰

-

단일 헤드 어텐션은 최상의 설정보다 0.9 BLEU 낮았으며, 너무 많은 헤드가 있는 경우 오히려 품질 저하

- 어텐션 키 크기: 어텐션 키 크기 dk 줄이면 모델 품질 저하

- 모델 크기: 큰 모델이 더 좋은 성능, 드롭아웃이 과적합 피하는 데 매우 유용

 

- 위치 인코딩: 사인파 위치 인코딩을 학습된 위치 임베딩으로 교체했을 때 기본 모델과 거의 동일한 결과

[영어 구문 분석]

- Penn Treebank의 WSJ 부분에서 4-layer 트랜스포머 학습, 약 4만 개의 학습 문장 사용

- 작업별 튜닝 없이도 놀라운 성능, RNN Grammar 제외한 모든 이전 모델보다 더 나은 결과

 

Conclusion

트랜스포머 모델 소개:

- 완전한(순수) 어텐션 기반 모델: 트랜스포머는 인코더-디코더 아키텍처에서 일반적으로 사용되는 순환 레이어를 다중 헤드 self-

attention으로 대체한 최초의 시퀀스 변환 모델

[번역 작업에서의 성능]

- 더 빠른 학습: 트랜스포머는 순환 또는 합성곱 레이어 기반 아키텍처보다 훨씬 빠르게 학습 가능

- 최첨단 성능: WMT 2014 영어-독일어 및 WMT 2014 영어-프랑스어 번역 작업 모두에서 새로운 최고 성능 달성

- 최고 모델 성능: 최고 성능의 Transformer모델은 이전에 보고된 모든 앙상블보다도 뛰어난 성능을 보임

[Future work]

- 다양한 작업에 적용: 어텐션 기반 모델을 다른 작업에도 적용할 계획

- 다양한 모달리티 처리: 텍스트 외의 입력 및 출력 모달리티 포함 문제로 트랜스포머 확장할 계획

- 지역적으로 제한된 어텐션: 이미지, 오디오 및 비디오와 같은 대형 입력 및 출력 효율적으로 처리하기 위해 지역적으로 제

한된 어텐션 메커니즘 조사할 계획

- 덜 순차적인 생성: 생성 과정을 덜 순차적으로 만드는 것도 우리의 연구 목표 중 하나

 

 

attention is all you need.pdf
2.11MB