MetaCode(Deep Learning) - NLP (RNN)

cjun·2023년 1월 3일
0

RNN

  • 시계열 데이터를 처리하기에 좋은 뉴럴 네트워크 구조
  • ex)
    • 음성인식 (speech recognition)
    • 음악 생성기 (music generation)
    • DNA 염기서열 분석
    • 번역기 (machine translation)
    • 감정분석 (sentiment classification)
  • CNN이 이미지 구역별로 같은 weight을 공유한다면,
  • RNN은 시간 별로 같은 weight을 공유
    • 즉, 과거와 현재는 같은 weight을 공유

First Order System

  • 현재 시간의 상태가 이전 시간의 상태와 관련이 있다고 가정:
    • First-order system
      xt=f(xt1)x_t = f(x_{t-1})
      x0x_0 \rightarrowx1x_1 \rightarrowx2x_2 \rightarrowx3x4x_3 \rightarrow x_4
    • 이 시스템은 외부 입력 없이 자기 혼자서 돌아간다.
      • autonomous system
  • 현재 시간의 상태가 이전 시간의 상태와, 현재의 입력에 관계가 있는 경우
    • 상태:x, 입력:u
    • 식으로 표현하면:
      xt=f(xt1,ut)x_t = f(x_{t-1},u_t)

State-Space Model

  • 어떤 시스템을 해석하기 위한 3요소 : 입력(u), 상태(x), 출력(y)

  • 1차원 시스템의 모형:
    xt=f(xt1,ut)x_t = f(x_{t-1},u_t)

  • 각 시간에서 관측 가능한 상태의 모음: 출력 yty_t
    yt=h(xt)y_t = h(x_t)

  • 상태 xtx_t가 의미하는 것은? hidden layer의 state

  • 앞의 그림에서 상태 xtx_t는 이전까지의 상태와, 이전까지의 입력을 대표할 수 있는 압축본

  • 상태 xtx_t는 시계열로 들어오는 입력들을 최대한 상세히 표현

  • 원래 풀고 싶었던 문제:

    • xt=f(ut,ut1,ut2,...,u0)x_t = f(u_t,u_{t-1}, u_{t-2},...,u_0)
  • 대신해서 풀 문제:

    • xt=f(xt1,ut)x_t = f(x_{t-1},u_t)
  • First-order Markov Model

  • State-Space Model에서 근사하는 함수는 2개:

    • xt=f(xt1,ut)x_t = f(x_{t-1},u_t)
    • yt=h(xt)y_t=h(x_t)
  • 우리는 함수 f와 h를 근사하기 위해서 뉴럴 네트워크를 사용

    • xt=σ(Wxxxt1+Wxuut+bx)x_t = \sigma(W_{xx}x_{t-1}+W_{xu}u_t+b_x)
    • yt=σ(Wyyxxt+by)y_t = \sigma(W_{yyx}x_t+b_y)
  • 사용하는 parameter matrix는 총 5개

RNN : Basic Structure

RNN : Training

  • ANN, CNN에서처럼 back-propagation을 이용한다.
  • Back-propagation through time(BPTT)

RNN : Problem Types

  • Many-to-many : 번역
  • Many-to-one : 예측
  • one-to-many : 생성
  • Sequence-to-sequence(seq2seq)
    • many-to-one + one-to-many

GRU/LSTM

  • RNN이 갖고 있는 한계점:
    • exploding gradient
    • vanishing gradient
  • RNN 구조에서 state xtx_t에는 WxxW_{xx}가 계속 곱해지게 된다.
    • 곱해지는 값이 1보다 크다면? --> \infin
    • 곱해지는 값이 1보다 작다면? --> 0

RNN:Exploding Gradient

  • 학습 도중 loss가 inf이 뜰 경우
    • 학습이 더 이상 진행이 불가능
  • 해결책?
    • Gradient clipping

Vanishing Gradient

  • 학습 도중 파악이 어ㅂ다
  • 초기화를 간결하게 해주는 방법이 존재하지만..
    • 다른 네트워크 구조를 제안하는 것이 훨씬 편함
      • Gated RNNs:LSTM/GRU

LSTM : Long shrot-term memory

  • Gradient flow를 제어할 수 있는 "밸브" 역할
  • State space의 입력, 상태, 출력 구조는 동일
    • Gate 구조의 추가
    • 4개의 MLP 구조

LSTM : Four Regulations

  • Step 1: 새로운 입력과 이전 상태를 참조해서
    • 이 정보를 얼마의 비율로 사용할 것인지를 결정
    • (또는) 얼마나 잊어버릴 것인가?
  • Step 2: 새로운 입려고가 이전 상태를 참조해서
    • 이 정보를 얼마나 활용할 것인가?
    • (+) 어떤 정보를 활용할 것인가도 결정
  • Step 3:
    • Step 1에서는 얼마나 잊어버릴까? Forget Gate
    • Step 2에서는 얼마나 이용할까? Input Gate
    • 이 둘을 적절히 섞기 --> Cell State
  • Step4: 일련의 정보들을 모두 종합해서 다음 상태를 결정

GRU: Simplification of LSTM

  • 방금까지 본 LSTM 모델: 너무 복잡함. Input, Forget, cell, Output
    • GRU는 LSTM의 간소화 버전
    • Cell State가 없음

RNN Structures

Seq2seq

  • Machine Translation

  • 문장 전체를 Feature로 해석하고 문장 전체를 생성

  • Decoder과정에서 학습시 초기 값이 이상하므로 연쇄적으로 이상한 값 도출

  • 이러한 문제점을 해결하기 위해 Attention 도입

  • 그럼에도 불구하고 rnn이나 lstm에 비하여 좋은 성능

  • Full Process
    (1) Word Tokenization & Encoding : word --> [ 1 0 0 0 ].
    (2) Training [ ] --> [ ] teacher-force
    (3) Validation & Testing

1D-CNN

  • CNN을 이용하여 Vector들을 통해 Feature를 뽑고, ANN(FCL)을 사용해 학습 가능
  • 자연어 처리용 CNN

Bi-LSTM

  • 주로 casualty를 무시해도 될 때 사용그리고 직접 본인이 커스텀하게 구성한 외부 데이터로의 사전학습 후 사용하는 등의 행위를 방지하기 위해서 입니다.
  • 과거에서만 정보를 가져오던 LSTM과 다르게 미래의 정보도 사용 가능
profile
Sometimes You gotta run before you can walk.

0개의 댓글