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. Seq2Seq (Sequence to Sequence)
  • 1.1. Basic Structure
  • 1.2. Teacher Forcing (교사강요)
  • 1.3. 한계점
  • 2. Attention (어텐션 메커니즘)
  • 2.1. Basic Structure
  • 2.2. 요약
  • 2.3. 장점
  • 관련코드 Link
  • Reference

Was this helpful?

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

(05강) Sequence to Sequence with Attention

Previous(04강) LSTM and GRUNext(06강) Beam Search and BLEU score

Last updated 3 years ago

Was this helpful?

  • Sequence를 Encoding, Decoding 할 수 있는 sequence to sequence(Seq2Seq)

  • Seq2Seq에 Attention 로직을 추가한 모델

Further Reading

1. Seq2Seq (Sequence to Sequence)

Many to Many에 속하는 모델로 아래와 같은 Task에서 활용된다.

  • 기계 번역 (Machine Translation)

  • 챗봇 (Chatbot)

  • 내용요약 (Text Summarization)

  • STT (Speech to Text)

1.1. Basic Structure

  • Encoder와 Decoder 영역으로 나뉘며 각각이 RNN모델로 구성되어 있다.

  • 인코더에서 입력 문장의 모든 단어들을 순차적으로 입력 받은 뒤 이를 Context Vector로 만들고, Decoder는 이 Context Vector를 받아 번역된 단어를 순차적으로 출력하게 된다.

  • 위의 내용을 다시 정리해보면 문장의 단어(토큰) 단위를 순차적 인코더에 입력하게 되고 인코더 RNN의 마지막 셀에서 Hidden State (은닉상태)를 디코더 RNN에게 넘겨주게 되는데 이를 Context Vector라고 한다.

  • 디코더는 초기 입력으로 <sos>(start of sentence)로 시작하게 되고, 마지막은 <eos> (end of sentence)로 마침으로써 문장의 시작과 끝에 대해 알 수 있도록 하였다.

  • 디코더 과정은 <sos>를 디코더 RNN에 입력하여 다음에 올 단어를 예측하고 -> 예측한 단어를 그 다음 RNN 셀에 입력하는 식으로 <eos>가 예측값으로 나올때까지 반복된다.

  • 출력 단어로 나올 수 있는 단어들은 다양한 단어들이 있다. 여기서 한 단어를 선택하기 위해 Softmax 함수를 사용하게 된다.

  • 디코더는 각 시점(time step)의 RNN 셀에서 출력 벡터가 나오면, 해당 벡터는 softmax 함수를 통해 출력 시퀸스의 각 단어별 확률값을 반환하고, 디코더는 출력 단어를 결정한다.

1.2. Teacher Forcing (교사강요)

Seq to Seq 모델에서 Train에 사용하는 기법이다. 만약 초기에 예측한 값이 틀린 값이라면 그 이후로도 계속 잘못된 정보를 가지고 예측하게 될 가능성이 높고 연쇄작용으로 디코더 전체의 예측을 어렵게 한다. 이를 방지하기 위해 모든 시점에 대해서 예측값이 아닌 실제값을 입력해 주는 방법이다.

1.3. 한계점

  • 하나의 고정된 크기의 벡터(Context Vector)에 모든 정보를 압축하다보니 정보손실이 발생한다.

  • RNN의 고질적인 문제인 기울기 소실(Vanishing Gradient) 문제가 발생한다.

위와 같은 문제를 보완하기 위해 Attention이란 기법이 등장하였다.

2. Attention (어텐션 메커니즘)

어텐션의 기본 아이디어는 디코더에서 출력단어를 예측하는 매 시점마다, 인코더에서의 전체 입력 문장을 다시 한 번 참고 한다는 점이다. 단, 전체 입력문장을 동일 비율이 아닌 가중치를 줌으로서 연관이 있는 입력 단어부분을 좀 더 집중(Attention) 한다.

  • $Attention(Q, K, V) = Attention Value$

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

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

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

2.1. Basic Structure

  • 어텐션 분포의 각각의 값을 어텐션 가중치 (Attention Weight)라고 한다.

  • 어텐션의 최종 결과값을 구하기 위해 각 인코더의 hidden state와 어텐션 가중치값을 곱하고, 최종적으로 모두 더합니다.

2.2. 요약

  1. 인코더의 hidden state(h)와 디코더의 hidden state(s)를 활용하여 score를 구한다.(다양한 기법의 score함수 존재)

  2. 위에서 구한 score 집합 $e^t$를 소프트맥스 함수를 적용하여 attention 분포와 가중치값을 구한다.

  3. 각 인코더의 hidden state(h)와 어텐션 가중치를 각각 곱하고, 이를 모두 더해 어텐션 값($a_t$)을 구한다.

  4. 어텐션 값과 디코더의 hidden state(s)를 결합(Concat)하여 하나의 벡터로 생성한다,

  5. 위 concat값을 output layer의 입력값으로 입력되어 결과를 얻게 된다.

2.3. 장점

  • Attention significantly improves NMT performance

    • It is useful to allow the decoder to focus on particular parts of the source

  • Attention solves the bottleneck problem

    • Attention allows the decoder to look directly at source; bypass the bottleneck

  • Attention helps with vanishing gradient problem

    • Provides a shortcut to far-away states

  • Attention provides some interpretability

    • By inspecting attention distribution, we can see what the decoder was focusing on

    • The network just learned alignment by itself

관련코드 Link

Reference

h1,h2,...,hNh_1, h_2, ..., h_Nh1​,h2​,...,hN​ : 인코더의 hidden state

sts_tst​ : t에서의 디코더의 hidden state

score(st,hi)=stThiscore(s_t, h_i) = s_t^T h_iscore(st​,hi​)=stT​hi​ : hNh_NhN​과 sts_tst​ Transpose 의 내적 값을 score로 정한다.(score 함수는 다양한 기법으로 사용가능, 여기서는 dot-product)

et=[stTh1,...,stThN]e^t = [s_t^Th_1, ..., s_t^Th_N]et=[stT​h1​,...,stT​hN​] : sts_tst​의 모든 hhh와의 scorescorescore의 모음

ete^tet에 소프트맥스 함수를 적용하여 확률분포를 얻어낸다. 이를 어텐션 분포(Attention Distribution)라고 한다.

αt=softmax(et)\alpha^t = softmax(e^t)αt=softmax(et)

at=∑i=1Nαithiat = \sum_{i=1}^{N}{\alpha_i^th_i}at=∑i=1N​αit​hi​

이러한 어텐션 값 ata_tat​를 Context Vector 라고도 불립니다. (seq2seq와 같은 개념은 아님.)

어텐션 값(ata_tat​)과 디코더의 hidden state (sts_tst​)의 결합(Concatenate)하여 하나의 벡터로 생성한다.

vt=concat(st,at)v_t = concat(s_t, a_t)vt​=concat(st​,at​)

논문에서는 vtv_tvt​를 바로 출력층으로 보내기 전에 신경망 연산을 한번 더 추가하였습니다.

가중치 행렬과 곱한후 tanh함수를 씌워 새로운 벡터 st~\widetilde{s_t}st​​를 얻습니다.

seq2seq에서는 출력층의 입력이 sts_tst​였다면, 여기서는 st~\widetilde{s_t}st​​이 되는 것이다.

즉, st~=tanh(Wc[at;st]+bc)\widetilde{s_t} = tanh(W_c[a_t;s_t] +b_c)st​​=tanh(Wc​[at​;st​]+bc​)로 볼 수 있다.(위 그림)

출력 : yt^=Softmax(Wyst~+by)\hat{y_t} = Softmax(W_y\widetilde{s_t} + b_y)yt​^​=Softmax(Wy​st​​+by​)

Sequence to Sequence
시퀀스 투 시퀸스
어텐션 메커니즘
딥러닝을 이용한 자연어 처리 입문
Sequence to sequence learning with neural networks, ICML’14
Effective Approaches to Attention-based Neural Machine Translation, EMNLP 2015
CS224n(2019)_Lecture8_NMT
Logo6_seq2seq_attn.ipynbGoogle Docs
Logo5_seq2seq.ipynbGoogle Docs