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. 주요 하이퍼파라미터

  • dmodeld_{model}dmodel​ = 512

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

  • num_layers = 6

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

  • num_heads = 8

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

  • dffd_{ff}dff​ = 2048

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

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이라고 한다.

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​)

1.2.2.3. Self Attention and Multi-head Attention

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

  • 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)

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

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

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

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

✔ Self Attention

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

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

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

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

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

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

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

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

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

1.2.2.4. 성능적인 측면

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

  • 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

  • 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 번의 연산이 발생함을 알 수 있다. 이 부분에서 메모리에서 저장해야할 크기가 매우 크다는 것을 알 수 있다.

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

  • RNN

    • 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 의 시간복잡도를 가지게 된다.

    • 순차적으로 진행하기 때문에 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의 안정화가 주된 목표이다.

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​)

❗ 정규화 공식

  1. 평균 분산 정규화

    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​의 각 차원)

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

1.2.2.6. Position-wise FFNN

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

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​)의 크기

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

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

Attention Is All You NeedarXiv.org
Logo
7_multi_head_attention.ipynbGoogle Docs
9_transformers_1.ipynbGoogle Docs
positional encoding이란 무엇인가jeongstudy
The Illustrated Transformer
Logo
8_masked_multi_head_attention.ipynbGoogle Docs
10_transformers_2.ipynbGoogle Docs
Logo
Logo
Logo
Logo