TIL
  • Main
  • TIL : ML
    • AI News
      • AI-powered coding, free of charge with Colab
    • Paper
      • Retrieval-augmented generation for knowledge-intensive nlp tasks
        • reference 정리
      • Sequence to Sequence
    • Generative AI
      • LLM
        • 기본 개념
    • Boostcamp
      • Daily Report
        • 2021
          • 09
            • week4
            • week5
          • 10
            • week1
            • week2
            • week3
            • week4
          • 11
            • week1
            • week2
            • week3
            • week4
            • week5
          • 12
            • week1
            • week2
            • week3
      • Final Project
        • 프로젝트 기획
          • 🌟최종 프로젝트 기획
          • 최종 프로젝트 Version
          • 아이디어 수집
          • 욕설, 혐오발언 감지
          • 라이브 커머스 레포팅 프로젝트
        • 프로젝트 진행
          • week1
          • week2
          • week3
      • Competition
        • 1. [NLP] 문장 내 개체간 관계 추출
          • Day1 (9.27, 월)
          • Day2-3 (9.28~29, 화~수)
          • Day4 (9.30, 목)
          • Day5 (10.1, 금)
          • Day6~7 (10.2~3, 토~일)
          • Day8 (10.4, 월)
          • Day9 (10.5, 화)
          • Day10 (10.6, 수)
          • Day 11 (10.7 목)
        • 2. [NLP] MRC 프로젝트
          • Day1 (10.25, 월)
          • Day2 (10.26, 화)
          • Day3 (10.27, 수)
          • Day4-5 (10.28-29, 목-금)
          • Day6 (11.1, 월)
          • Day7 (11.2, 화)
          • Day8 (11.3, 수)
          • Day9 (11.4, 목)
        • 🔨3. [NLP] 데이터 제작
          • Day1
        • 🔨4. [공통] 모델 경량화
      • [U Stage] - DL basic
        • (01강) 딥러닝 기본 용어 설명 - Historical Review
        • (02강) 뉴럴 네트워크 - MLP (Multi-Layer Perceptron)
        • (03강) Optimization
        • 🔨(04강) Convolution은 무엇인가?
        • 🔨(05강) Modern CNN - 1x1 convolution의 중요성
        • 🔨(06강) Computer Vision Applications
        • (07강) Sequential Models - RNN
        • (08강) Sequential Models - Transformer
        • Page 2
      • [U Stage] - PyTorch
        • (01강) Introduction to PyTorch
        • (02강) PyTorch Basics
        • (03강) PyTorch 프로젝트 구조 이해하기
        • (04강) AutoGrad & Optimizer
        • (05강) Dataset & Dataloader
        • (06강) 모델 불러오기
        • (07강) Monitoring tools for PyTorch
        • (08강) Multi-GPU 학습
        • (09강) Hyperparameter Tuning
        • (10강) PyTorch Troubleshooting
      • [U Stage] - NLP
        • (01강) Introduction to NLP, Bag-of-Words
        • (02강) Word Embedding
        • (03강) Recurrent Neural Network and Language Modeling
        • (04강) LSTM and GRU
        • (05강) Sequence to Sequence with Attention
        • (06강) Beam Search and BLEU score
        • (07-08강) Transformer
        • (09강) Self-supervised Pre-training Models
      • [P Stage] - KLUE
        • (1강) 인공지능과 자연어 처리
        • (2강) 자연어의 전처리
        • (3강) BERT 언어모델 소개
        • (4강) 한국어 BERT 언어 모델 학습
        • (5강) BERT 기반 단일 문장 분류 모델 학습
        • (6강) BERT 기반 두 문장 관계 분류 모델 학습
        • (7강) BERT 언어모델 기반의 문장 토큰 분류
        • 오피스아워 (9.30, 목)
        • (8강) GPT 언어 모델
        • (9강) GPT 언어모델 기반의 자연어 생성
        • (10강) 최신 자연어처리 연구
      • [P Stage] - MRC
        • Before Study
        • (1강) MRC Intro & Python Basics
        • (2강) Extraction-based MRC
        • (3강) Generation-based MRC
        • (4강) Passage Retrieval - Sparse Embedding
        • (5강) Passage Retrieval - Dense Embedding
        • 오피스아워
        • (6강) Scaling up with FAISS
        • (7강) Linking MRC and Retrieval
        • (8강) Reducing Training Bias
        • (9강) Closed-book QA with T5
        • (10강) QA with Phrase Retrieval
        • 마스터클래스
      • [P Stage] - 데이터제작(NLP)
        • (1강) 데이터 제작의 A to Z
        • (2강) 자연어처리 데이터 기초
        • (3강) 자연어처리 데이터 소개 1
        • (4강) 자연어처리 데이터 소개 2
        • (5강) 원시 데이터의 수집과 가공
        • 오피스아워 (11.10, 수)
        • (6강) 데이터 구축 작업 설계
        • (7강) 데이터 구축 가이드라인 작성 기초
        • (8강) 관계 추출 과제의 이해
        • (9강) 관계 추출 관련 논문 읽기
        • (10강) 관계 추출 데이터 구축 실습
      • [P Stage] - 모델 최적화
        • (1강) 최적화 소개 및 강의 개요
        • (2강) 대회 및 데이터셋 소개
        • (3강) 작은 모델, 좋은 파라미터 찾기: AutoML 이론
        • 🔨(4강) 작은 모델, 좋은 파라미터 찾기: AutoML 실습
        • (5강) 작은 모델, 좋은 파라미터 찾기: Data Augmentation & AutoML 결과 분석
        • 🔨오피스아워 -Baseline 코드에 모듈 작성하기(신종선 멘토님)
      • [P Stage] - Product Serving
        • Part 1: Product Serving 개론
          • 1.1 강의 진행 방식
          • 1.2 MLOps 개론
          • 1.3 Model Serving
          • 1.4 머신러닝 프로젝트 라이프 사이클
        • Part 2: 프로토타입부터 점진적으로 개선하기
          • 2.1 프로토타이핑 - Notebook 베이스(Voila)
          • 2.2 프로토타이핑 - 웹 서비스 형태(Streamlit)
          • 2.3 Linux & Shell Command
          • 2.4 Cloud
          • 2.5 Github Action을 활용한 CI/CD
        • Part 3: 더 완성화된 제품으로
          • 3.1.1 FastAPI
          • 3.1.2 Fast API
          • 3.1.3 Fast API
          • 3.2 Docker
          • 3.3 Logging
          • 3.4 MLFlow
        • Part 4: 심화 소재
          • 4.1 BentoML
          • 4.2 Airflow
          • 4.3 머신러닝 디자인 패턴
          • 4.4 앞으로 더 공부하면 좋을 내용
      • 특강
        • (특강) 김상훈 - 캐글 그랜드마스터의 노하우 대방출
        • (특강) 이활석 - 서비스 향 AI 모델 개발하기
        • (특강) 구종만 - AI + ML과 Quant Trading
        • (특강) 문지형 - 내가 만든 AI 모델은 합법일까, 불법일까
        • (특강) 이준엽 - Full Stack ML Engineer
        • (특강) 박은정 - AI 시대의 커리어 빌딩
        • (특강) 오혜연 - AI Ethics
    • Competition
      • (DACON)한국어 문장 관계 분류 경진대회
        • Day1(2.14, 월)
        • Day2(2.15, 화)
        • Day3(2.16, 수)
        • Day4(2.17, 목)
      • 2021 인공지능 데이터 활용 경진대회
        • 역량평가
          • Day1 (9.28, 화)
          • Day2 (9.29, 수)
          • Day3 (9.30, 목)
        • 예선
          • Data 분석
          • NSML
          • What We Have Done?
    • ETC
      • 인터뷰 대비
        • Computer Science
        • ML/DL
      • Poetry로 dependency 관리
        • window에서 설치하기
      • code block
      • 공부할 것 임시보관
      • Transformer to T5
      • Hugging Face Tutorial
        • Ch1. Transformer models
        • Ch2. Using Transformers
        • Ch3. Fine-tuning a model with the Trainer API
      • KLUE
      • Pandas
  • TIL : Ops
    • AWS
      • SageMaker
  • TIL : Computer (CS)
    • Error
      • TextEncodeInput must be Union[TextInputSequence, Tuple[InputSequence, InputSequence]]
    • Algorithm
      • Theory
      • Programmers
        • 기능개발
    • ETC
      • Github 커밋 히스토리 삭제
Powered by GitBook
On this page
  • 1. Transformer
  • 1.1. 소개
  • 1.2. Basic Structure
  • 1.2.3. 기타
  • 1.3. 정리
  • 관련코드 Link
  • Reference

Was this helpful?

  1. TIL : ML
  2. Boostcamp
  3. [U Stage] - NLP

(07-08강) Transformer

Previous(06강) Beam Search and BLEU scoreNext(09강) Self-supervised Pre-training Models

Last updated 3 years ago

Was this helpful?

Transformer(Self-Attention)에 대해 알아본다.

1. Transformer

1.1. 소개

  • Attention is all you need, NeurIPS'17

    입출력 처리에 사용되었던 RNN 모델 대신 Attention만을 사용하여 처리하게 되었다.

  • 순차적인 데이터가 항상 순서를 맞춰서 발생하지 않는 이슈를 해결하기 위한 방법론이다.

1.2. Basic Structure

  • 위의 기존 Seq2Seq와 달리 여러개의 Encoder와 Decoder를 층으로 쌓게 된다.

  • Input과 Output의 갯수와 도메인이 동일하지 않다.

  • Encoder는 N개의 단어에 대해 한번에 처리할 수 있는 구조로 되어있다.

1.2.1. 주요 하이퍼파라미터

  • 트랜스포머의 인코더와 디코더에서의 정해진 입력과 출력의 크기

  • num_layers = 6

    트랜스포머에서 하나의 인코더와 디코더를 층으로 생각하였을 때, 트랜스포머 모델에서 인코더와 디코더가 총 몇 층으로 구성되었는지를 의미한다. (논문에서는 각 6개 층으로 구성하였다.)

  • num_heads = 8

    트랜스포머에서는 어텐션을 사용할 떄, 1번 하는 것보다 여러개로 분할해서 병렬로 어텐션을 수행하고 결과값을 다시 하나로 합친다.

1.2.2. Encoder 구조

하나의 Encoder는 Self-Attention과 FFNN(Feed Forward Neural Network)으로 구성되어 있다.

  1. Input 문장에 대해 Embedding 백터를 구한다.

  2. Positional Encoding 과정을 거친다.

  3. Multi-Head Attention (Self Attention의 병렬처리)

  4. Add & Norm (Residual connection and Layer Normalization, 잔차연결과 층 정규화)

  5. Position-wise FFNN

  6. Decoder에 Key Vector, Value Vector 전달

위와 같은 순서로 Encoder의 구조를 뜯어보기로 한다.

1.2.2.1. Embedding

자연어를 기계가 이해할 수 있는 숫자형태인 Vector 형태로 변환한 값. (2강 참고)

1.2.2.2. Positional Encoding

트랜스포머는 단어 입력을 순차적으로 받는 방식이 아니어서 ABCD = ADCB 모두 같은 값이 나오게 된다. 하지만 문장에서의 단어는 위치에 따라 의미하는 바가 변하기 마련이다. Embedding된 Vector에 단어의 위치정보를 더하는 과정을 Positional Encoding이라고 한다.

1.2.2.3. Self Attention and Multi-head Attention

Attention : 전체 입력 문장을 동일 비율이 아닌 가중치를 줌으로서 연관이 있는 입력 단어부분을 더 집중(Attention) 한다.

    • V(Value) : encoder의 attention value 를 도출하기 전의 hidden state

  • 어텐션 함수는 주어진 쿼리(Q) 에 대해서 모든 키(K) 와의 유사도를 각각 구합니다.

  • 구해낸 유사도를 키와 매핑되어있는 각각의 값(V) 에 반영해줍니다.

  • 유사도가 반영된 값(V)를 모두 더해서 리턴하며 이를 'Attention Value' 라고 한다.

✔ Self Attention

  • 각 단어마다 Self Attention 구조는 3가지 Vector를 만든다 (Q, K, V)

  • => 두 Vector의 내적을 통해 i번째 단어가 나머지 단어와 얼마나 유사도를 가지는지 구한다.

  • softmax를 통해 확률로 나타내어 그 확률이 각각 얼마나 영향을 가지는지 볼 수 있도록 한다.

  • 각 단어에서 나오는 V(value) Vector와의 weighted sum(가중합)으로 encoding vector z를 구한다.

❓왜 Transformer가 추정이 잘 될까?

  • CNN, MLP를 할 경우 Input이 Fix되면 Output도 Fix 된다.

  • Transformer는 Input이 Fix되더라도 주위의 단어에 따라 Output이 달라진다.

    => Flexible 하여 더 많은걸 표현하게 된다.

❕ check

  • n개의 단어가 주어지면 nxn개의 Matrix가 필요하고 이를 한번에 처리할 수 있어야한다.

✔ Multi-headed Attention (MHA) 위 single-attention의 과정을 n번 진행하는 것이다. 하나의 encoding된 vector에 대해 n개의 query, key, value vector를 만드는 것. 이 논문에서는 8개의 attention head를 가진다.

  • 동일한 seq가 주어지더라도 다른 기준으로 여러 지표를 뽑아와야할 필요가 있을 수 있다. 예를 들어 "나는 학교에서 공부를 했다." "나는 집에 와서 휴식을 취했다." 라는 문장이 있을 때 "나"에 대해 위치정보(학교, 집)의 정보가 중점이 될 수 있고, 행동("공부", "휴식")의 정보가 중점이 될 수 있다.

1.2.2.4. 성능적인 측면

Maximum path lengths, per-layer complexity and minimum number of sequential operations for different layer types

  • Self Attention

    • Sequential Operations : PC의 성능이 좋다(GPU Core 수)는 가정하에 행렬곱 연산은 1의 시간복잡도를 가진다.

  • RNN

    • 순차적으로 진행하기 때문에 Sequential Operation이 n의 시간복잡도를 가지게 된다.

1.2.2.5. Add & Norm (Residual connection and Layer Normalization)

✔ Add(Residual connection)

서브 층의 입력과 출력을 더하는 것으로 위와 같이 볼 수 있다. 우리가 하고 있는 Encoder에서 보게 되면 (multi-head attenion의 input + multi-head attenion의 output) 이 되는 것이다.

❗ Residual Connection은 ResNet 모델에서 사용된 아이디어이다. 이는 기존에 학습한 정보를 보존하고, 거기에 새로운 정보를 학습하도록 하는 것, Gradient Vanishing 문제를 해소한다. (매회 학습해야하는 양을 축소할 수 있다.)

✔ Norm (Layer Normalization, 층정규화) 정규화는 gradient의 안정화가 주된 목표이다.

❗ 정규화 공식

  1. 평균 분산 정규화

1.2.2.6. Position-wise FFNN

단순히 선형 변환 해주는 것이라고 생각해도 된다.

  • 다음 인코더의 입력값으로 사용되기 때문에 출력값을 입력값과 같은 크기로 맞춰주어야한다.

1.2.3. Decoder의 구조

  1. Input 문장에 대해 Embedding 백터를 구한다.

  2. Positional Encoding 과정을 거친다.

  3. 🔅Masked Multi-head Self Attention

  4. Add & Norm (Residual connection and Layer Normalization, 잔차연결과 층 정규화)

  5. Position-wise FFNN

  6. 🔅Encoder에서 Decoder로 넘어가는 변수는 가장 상위 Layer의 Key와 Value 값이다.(Encoder-Decoder Attention)

    • Decoder의 Query와 Encoder에서 넘어온 K, V값으로 Attention을 진행한다.

1.2.3.1 Masked Multi-head Self Attention

Encoder에서의 Self Attention과 동일하다. 하지만 Decoder에서는 앞으로 나올 단어를 자기학습하는 것은 치팅이 된다. 그러므로 과거에 나온 단어들에 대해서만 자기학습을 진행하게 된다.

1.2.3.2. Encoder-Decoder Attention

Encoder의 최상위 Layer로 부터 넘어온 K(Key), V(Value) 값과 Decoder에서의 Q(Query)를 활용한 Attention 과정

1.2.3. 기타

1.2.3.1. Warm-up Learning rate Schedular

1.3. 정리

관련코드 Link

Reference

dmodeld_{model}dmodel​ = 512

dffd_{ff}dff​ = 2048

트랜스포머 내부에는 피드 포워드 신경망이 존재합니다. 이때 은닉층의 크기를 의미합니다. 피드 포워드 신경망의 입력층과 출력층의 크기는 dmodeld_{model}dmodel​입니다.

PE(pos,2i)=sin(pos/100002i/dmodel)PE_{(pos, 2i)} = sin(pos/10000^{2i/d_{model}})PE(pos,2i)​=sin(pos/100002i/dmodel​)

PE(pos,2i+1)=cos(pos/100002i/dmodel)PE_{(pos, 2i+1)} = cos(pos/10000^{2i/d_{model}})PE(pos,2i+1)​=cos(pos/100002i/dmodel​)

Attention(Q,K,V)=AttentionValueAttention(Q, K, V) = Attention ValueAttention(Q,K,V)=AttentionValue

Q(Query) : decoder의 t시점에서의 hidden state(sts_tst​)

K(Key) : encoder의 모든 hidden state(hhh)

Score = qt⋅kTq_t \cdot k^Tqt​⋅kT 스칼라 값 (Attention Function을 사용한 값, dot product가 아닐 수 있음)

Score Vector를 Normalize 해준다 (divide by 8, dkey\sqrt{d_{key}}dkey​​)

Attention(Q,K,V)=softmax(QKTdk)VAttention(Q, K, V) = softmax(\frac{QK^T}{\sqrt{d_k}})VAttention(Q,K,V)=softmax(dk​​QKT​)V

생성된 8개의 head-attention을 concat하여 합치고 이를 원하는 출력의 차원으로 선형변환하는 WOW^OWO를 행렬곱을 하여 Z를 구해낸다.

nnn is the sequence length

ddd is the dimension of representation (Query와 Key의 dim)

kkk is the kernel size of convolution

rrr is the size of the neighborhood in restricted self-attention

Complexity per Layer의 핵심 연산인 softmax(QKTdk)Vsoftmax(\frac{QK^T}{\sqrt{d_k}})Vsoftmax(dk​​QKT​)V 에서 QKTQK^TQKT의 연산의 크기로 보면 된다. (nxd) x (dxn) 으로 n2⋅dn^2\cdot dn2⋅d 번의 연산이 발생함을 알 수 있다. 이 부분에서 메모리에서 저장해야할 크기가 매우 크다는 것을 알 수 있다.

Self Attention에 비해 메모리 사용량이 적다. Whh×ht−1=>(d×d)×(d×1)W_{hh} \times h_{t-1} => (d\times d) \times (d \times 1)Whh​×ht−1​=>(d×d)×(d×1) 즉, d개 만큼의 곱이 d개 만큼 있는 d2d^2d2개를 가지게 되고 이런 연산이 문장의 길이 n번 발생하여 n⋅d2n \cdot d^2n⋅d2 의 시간복잡도를 가지게 된다.

LN=LayerNorm(x+Sublayer(x))LN = LayerNorm(x + Sublayer(x))LN=LayerNorm(x+Sublayer(x))

텐서의 마지막 차원(dmodeld_{model}dmodel​)에 대해서 평균과 분산을 구하고, 정한 정규화 함수를 통해 정규화를 진행하여 학습을 돕게 된다.

정규화를 수행한 후 벡터 xix_ixi​는 lniln_ilni​라는 벡터로 정규화 된다. lni=LayerNorm(xi)ln_i = LayerNorm(x_i)lni​=LayerNorm(xi​)

x^i,k=xi,k−μiσi2+ϵ\hat{x}_{i,k} = \frac{x_{i,k}-\mu_i}{\sqrt{\sigma_i^2}+\epsilon} x^i,k​=σi2​​+ϵxi,k​−μi​​, (kkk = 벡터 xix_ixi​의 각 차원)

감마 벡터 정규화 lni=γx^i+β=LayerNorm(xi)ln_i = \gamma \hat{x}_i + \beta = LayerNorm(x_i) lni​=γx^i​+β=LayerNorm(xi​), (γ\gammaγ의 초기값은 1, β\betaβ의 초기값은 0)

FFNN(x)=MAX(0,xW1+b1)W2+b2FFNN(x) = MAX(0, xW_1+b_1)W_2 + b_2FFNN(x)=MAX(0,xW1​+b1​)W2​+b2​

매개변수 W1,W2,b1,b2W_1, W_2, b_1, b_2W1​,W2​,b1​,b2​는 하나의 인코더 층내에서 모두 동일하게 사용된다. (인코더 층마다는 다른 값을 가짐)

xxx : Multi-head Attention에서 나온 (seq_len, dmodeld_{model}dmodel​)의 크기를 가지는 행렬

W1 W_1 W1​: (dmodel, dff d{model}, \ d_{ff} dmodel, dff​)의 크기

W2W_2W2​: (dff, dmodel d_{ff}, \ d_{model} dff​, dmodel​)의 크기

관련 논문
Logopositional encoding이란 무엇인가jeongstudy
Logo7_multi_head_attention.ipynbGoogle Docs
Logo8_masked_multi_head_attention.ipynbGoogle Docs
Logo9_transformers_1.ipynbGoogle Docs
Logo10_transformers_2.ipynbGoogle Docs
LogoAttention Is All You NeedarXiv.org
The Illustrated Transformer