본문 바로가기

Data Science/4. 딥러닝

[n423]Language Modeling with RNN

■ Key words

  ㆍ언어모델(Language Model)

     - 통계 기반 언어모델(Stastical Language Model, SLM)

  ㆍ순환신경망(Recurrent Neural Network, RNN)

     - Sequence

     - LTDP(Long Term Dependency Problem)

     - back propagation through time(bptt)

  ㆍLSTM(Long Short-Term Memory) & GRU(Gated Recurrent Unit)

  ㆍAttention

 

■ 주요내용

  ㆍ언어모델(Language Model) : 문장과 같은 sequence에서 각 단어의 확률을 계산하는 모델(Word2Vec 등)

     * Word2Vec이 나오기 전 target 단어 왼쪽만 고려하여 조건부 확률을 계산함(0번째 ~ t-1번째)

     - 통계 기반 언어모델(Statistical Language Model, SLM) : 단어의 등장 횟수를 바탕으로 조건부 확률 계산

       · 한계 : 희소성(sparsity) - 희소하거나 corpus에 없는 단어는 예측/출력 불가

         ⇒ 희소성을 보완하기 위해 N-gram, smoothing, back-off 등의 방법들이 개발됨

     - 신경망 언어 모델(Neural Language Model) : Word2Vec 혹은 fastText 등의 출력값인 embedding vector 사용

       · 말뭉치(corpus)에 등장하지 않더라도 의미적/문법적으로 유사한 단어 선택 가능

  ㆍ순환신경망(Recurrent Neural Network, RNN) : 연속형(sequential) 데이터 처리를 위해 고안된 신경망 /

     입력과 출력을 시퀀스 단위로 처리하는 모델 / 각 layer의 prameter를 공유(weight과 bias가 동일함)

     * Vanilla RNN이라고도 지칭함

     - Sequence : 연관된 연속의 데이터

     - Sequential Data : 어떤 순서로 오느냐에 따라서 단위의 의미가 달라지는 데이터 / 글, 주가 변동 데이터 등

       ↔ Non-sequential Data : 표와 같은 structured data, image 등 

     - RNN의 구조

       · 입력 벡터가 은닉층에 들어가는 것을 나타내는 화살표

       · 은닉층으로부터 출력 벡터가 생성되는 것을 나타내는 화살표

       · 은닉층에서 나와 다시 은닉층으로 입력되는 것을 나타내는 화살표(기존 신경망에 없었음; 순환 recurrent)

     - time-step별로 펼쳐서 RNN 알아보기 : ht = tanh(ht-1·Wh + xt·Wx + b)

       · ht(hidden-state vector)는 해당 시점까지 입력된 벡터(x1 ~ xt)의 정보를 모두 가지고 있음

     - 다양한 형태의 RNN 

       · one to one : 순환이 적용되지 않음

       · one to many : 1개의 벡터를 받아 sequential한 벡터 반환 / image captioning(이미지 설명 문장 생성)에 사용

       · many to one : sequential vector를 받아 1개의 벡터 반환 / 감성분석(sentiment analysis)에 사용

       · many to many(1) : sequential 벡터를 모두 입력 받은 후 sequential 벡터 출력(seq2seq 구조) /

                                 번역할 문장을 받아 번역된 문장을 출력하는 기계번역(machine translation)에 활용

       · many to many(2) : sequentila 벡터를 입력받는 즉시 sequential 벡터 출력 /

                                  비디오 프레임 분류(video classification per frame)에 사용

     - RNN의 장점과 단점

       · 장점 : 모델이 간단하고, (이론적으로)어떤 길이의 sequential 데이터라도 처리 가능

       · 단점 : 병렬화(parallelization) 불가능 - 벡터가 순차적으로 입력되므로, GPU 연산 이점이 없음

                 기울기 폭발/소실(Exploding/Vanishing Gradient) - 역전파 과정 중 반복해서 가중치를 곱하므로

                                 기울기가 1 초과/미만 시 hidden-state 벡터에 역전파 정보가 과도/과소하게 전달됨

     - LTDP(Long Term Dependency Problem) : 관련 정보와 그 정보를 사용하는 지점의 거리가 멀면 성능이 떨어짐

      ⇒ 1보다 작은 가중치를 곱해나가면서 기울기가 사라지는 기울기 소실 문제(Vanishing Gradient Problem) 발생

      ⇒ 기울기가 사라지면 과거의 정보가 현재의 학습에 영향을 못 미치게 됨

     - back propagation through time(bptt)

  ㆍLSTM(Long Short-Term Memory / 장단기 기억망) : RNN에 기울기 정보 크기 조절을 위한 gate를 추가한 모델

     - 최근에는 RNN이 대부분 LSTM을 의미

     - LSTM의 gate 구조

       · forget gate(ft) : 과거 정보를 얼마나 유지할 것인가

       · input gate(it) : 새로 입력된 정보는 얼마만큼 활용할 것인가

       · output gate(ot) 두 정보를 계산하여 나온 출력 정보를 얼마만큼 넘겨줄 것인가

     - LSTM의 state 구조

       · hidden-state : 연산이 이뤄지는 state

       · cell-state : 역전파 과정에서 활성화 함수를 거치지 않아 정보 손실이 없는 state

         ⇒ 뒤쪽 sequence 정보의 비중을 결정할 수 있고, 동시에 앞쪽 sequence 정보 보존이 가능

     - LSTM의 사용 : 언어모델과 신경망을 활용한 시계열 알고리즘에 대부분 LSTM 활용

       * vanilla RNN은 gate가 없어 10~20개 이상의 단어로 이뤄진 문장 분류/생성/번역에 취약

  ㆍGRU(Gated Recurrent Unit) : LSTM이 너무 복잡하여 연산이 오래 걸리므로 간소화된 모델 개발

     * 최근 컴퓨팅 능력의 발전으로 GRU와 LSTM의 연산 속도와 성능에 큰 차이가 없어짐

     - GRU cell의 특징

       · LSTM에 있던 cell-state가 사라짐; cell-state 벡터 ct와 hidden-state 벡터 ht가 ht로 통일됨

       · 하나의 gate zt가 forget gate와 input gate모두 제어; 0/1에 따라 forget/input gate 중 하나만 엶

       · output gate가 없어짐; 전체 상태 벡터 ht가 각 time-step에서 출력 / ht-1의 출력을 제어하는 rt gate 추가

  ㆍAttention : 각 인코더의 Time-step마다 생성되는 hidden-state 벡터를 간직하여 모든 단어가 입력되면

                    디코더에 넘겨주는 모델

     * LSTM/GRU의 단점 : hidden-state vector에 모든 단어의 의미를 담아야 하기 때문에 문장이 길어지면(3~50개 

                                 이상의 단어 등) 모든 단어 정보를 고정길이의 hidden-state 벡터에 담기 어려움

     - decoder에서 Attention이 동작하는 방법

       · 디코더의 각 time-step마다 hidden-state 벡터는 쿼리(query)로 작용

       · 인코더에서 넘어온 N개의 hidden-state 벡터를 key로 여기고 이들과의 연관성 계산(내적, dot-product)

       · 내적의 결과를 Attention 가중치로 사용

       ① 쿼리(Query)인 디코더의 hidden-state 벡터, 키(Key)인 인코더에서 넘어온 hidden-state 벡터 준비
       ② 각각의 벡터를 내적한 값 구하기
       ③ 이 값에 소프트맥스(softmax) 함수 적용
       ④ softmax를 취하여 나온 값에 밸류(Value)에 해당하는 인코더에서 넘어온 hidden-state 벡터를 곱하기
       ⑤ 이 벡터의 합 구하기. 이 벡터의 성분 중에는 쿼리-키 연관성이 높은 밸류 벡터의 성분이 더 많이 들어있음.
       ⑥ 최종적으로 ⑤에서 생성된 벡터와 디코더의 hidden-state 벡터를 사용하여 출력 단어 결정

       ⑦ 디코더는 인코더에서 넘어온 모든 hidden-state 벡터에 대해 위와 같은 계산 실시

       ⇒ Time-step마다 출력할 단어가 어떤 인코더의 어떤 단어 정보와 연관되어 있는지,

          즉 어떤 단어에 집중(attention)할지 알 수 있음.

       ⇒ 디코더가 인코더에 입력되는 모든 단어의 정보를 활용할 수 있기 때문에 장기 의존성 문제 해결 가능

 

■ Session note

ㅁ 오전 session
  ㆍvocab_size = len(tokenizer.word_index) + 1  : padding이 0으로 들어가기 때문에 vocab이 1부터 시작하여 1을 더해줌
  ㆍ언어모델(Language Model) : 단어 시퀀스에서 각 단어의 확률을 계산하는 모델
  ㆍ통계적 언어 모델(SLM) :  통계에서 시작하여 조건부 확률로 나올 단어를 예측 / corpus에 없거나 희소한(sparsity)는 단어는 예측을 못함
  ㆍ신경망 언어 모델(Neural Language Model) : OOV 문제 해결
  ㆍsequential / non-sequential : 순서가 바껴도 나오는지 / 안 나오는지
  ㆍ순환신경망(RNN) : 연속형 데이터(sequential) 데이터를 잘 처리하기 위해 고안된 신경망; 자기자신 참조
     - 전 단계의 hidden state와 현 단계의 input state를 가지고 연산
     - 장점 : 시간 순서대로 저장하여 보존 가능
     - 단점
        · 단어가 순서대로 들어가서 병렬화 불가능(동시에 연산;GPU 활용 merit이 없어
        · 역전파를 계속하다 보면 앞에서 학습한 것이 사라짐(1보다 작은 값을 계속 곱함)
  ㆍLSTM(state 2, gate 3) : RNN의 단점을 보완하기 위해 개발
     - 장기(Cell states)/단기(Hidden states) 기억을 나눠서 연산하기 위해 적용
     - 전 단계의 hidden state(forget gate; 단기 기억, 과거 기억을 얼마나 까먹을 것인가)와 현 단계의 cell state(input gate; 장기 기억, 새로 입력된 것을 얼마나 기억할 것인가)를 얼마만큼 반영할 것인지 정함(output gate; 다음 단계로 얼마만큼 넘겨줄 것인가)
     - 문제 : 3개의 gate, 각각의 가중치; parameter가 너무 많아서 연산이 오래 걸림
  ㆍGRU(state 1, gate 2) : LSTM의 연산을 줄이기 위해 개발 / 요즘은 컴퓨팅 능력이 증가되어 LSTM과 GRU의 속도와 성능에 큰 차이가 없음
     - LSTM의 cell-state가 사라지고 cell-state와 hidden-state가 하나로 통일됨; forget gate와 input gate를 한 단계에서 control
     - reset gate가 신설되어 기억정도를 통제 가능
  ㆍAttention
      - sequence2sequence : encoder에서 입력을 다 받아서 하나의 context vector로 압축하여 decoder에 전달, decoder는 압축한 것을 풀어서 번역코자 하는 언어로 바꿔줌
         ⇒ 최근에 담은 것이 더 많은 영향을 가짐
      - attention : context vector에 압축하여 담지 않고, 모든 단계에서 각각의 hidden state vector를 decoder에 넘겨주어 decoder가 연산을 하면서 query를 통해 필요한 것에 집중하여 출력값을 내놓는 모델
  ㆍAttention 시각화 중 <start> : translate을 시작하라는 신호
  ㆍ일반적으로 LSTM, GRU, Attention은 지도학습이므로, tokeninze와 embedding 후 연산에 들어감
  ㆍcontext vector는 문장 전체를 넘겨주는 것이 아니라 단어별 중요도를 넘겨줌
  ㆍ각각의 context vector를 살리기 위해 attention에서 모두 조금씩 다 넘겨줌
  ㆍLSTM의 구조에서 "뒷쪽 시퀀스의 정보에 비중을 결정할 수 있으면서 동시에 앞쪽 시퀀스의 정보를 완전히 잃지 않을 수 있습니다."는 설명은 기울기 손실로 인해 앞쪽 시퀀스의 정보가 점점 손실되고 뒤쪽 시퀀스의 정보가 비교적 많이 전달되는데 LSTM으로 이 문제를 조정(해결)할 수 있다는 의미입니다
    - cell state는 sigmoid 등 활성화 함수가 적용되지 않기 때문에 손실 없이 장기적으로 그대로 전달됨
  ㆍ통계적 언어 모델은 표본에서 학습 후 추출하므로, 표본(corpus)에 따라 모델의 성능이 달라질 수 있음

ㅁ 오후 session
  ㆍ자연어 처리는 요약도 가능함; 원문과 요약문 모두 넣어 학습시켜야 함
  ㆍRNN의 입력시퀀스와 출력시퀀스의 길이가 다름
  ㆍ언어모델 : 시퀀스에서 단어가 나오는 확률을 계산하는 모델
  ㆍ통계적 언어모델 : 조건부 확률을 활용하여 시퀀스에서 단어가 나오는 확률을 계산하는 모델
     - corpus에 없는 문장은 분석 불가
  ㆍ신경망 모델 : Word2Vec, fastText
  ㆍRNN : 자기 자신으로 돌아오는 node가 있음
     - 장점 : 시계열 데이터 처리 가능 
     - 단점 : 병렬 처리 불가, 기울기 손실/발산; 손실 시 앞쪽에 학습한 데이터 사라짐
  ㆍLSTM : 
     - state 2개 : 장기/단기
     - gate 3개
       · input; 새로 입력된 정보를 얼마나 받아들일지 결정
       · forget; 과거 정보를 얼마나 가지고 갈 것인가, 까먹을 것인가 정함
       · output; 과거 정보와 현재 정보를 얼마나 밖으로 표출할 지 정함)
     - output gate는 cell state에 영향을 주지 않고, 외부에 표출하는 데만 영향을 줌
     - 단점 : 너무 복잡해서 업데이트 해야 할 parameter가 너무 많음
  ㆍGRU : LSTM의 복잡한 단점을 해소하기 위해 개발; cell state와 hidden state를 통합
     - gate 2개(Zt; input + forget / rt; h(t-1)의 어느 부분이 출력될 지 제어)
     * 컴퓨터의 발달로 LSTM과 GRU의 성능 차이는 크게 없음. 요즘은 LSTM을 많이 씀.
  ㆍseq2seq(sequence to sequence) model : encoder + decoder로 구성; 문장으로 받아서 문장으로 출력
     - context vector의 길이가 고정되어 있어, 문장이 길어지게 되면 내용을 온전히 전달하기 어려움
  ㆍAttention : 고정된 context vector를 개선하기 위해 
    - attention rate : 연관된 정도를 숫자로 나타냄 → softmax로 확률과 같이 치환 → 가중합으로 context vector를 만듦
  ㆍencoding vector와 decoding vector의 길이(차원)가 같을 필요는 없음
  ㆍGPU 연산에서 불리하다; 해결 안 됨 → 트랜스포머
  * Attention is all you need
  * TTS : 타코트론 - 연구한 8명이 투표해서 이름 지정 / Elmo, Bert

 

■ 주요함수

  ㆍ

 

■ Reference

  ㆍRNN(순환신경망) : https://youtu.be/PahF2hZM6cs

  ㆍLSTM(순환신경망 응용) : https://youtu.be/bX6GLbpw-A4

  ㆍAttention : https://youtu.be/WsQLdu2JMgI

  ㆍRNN, LSTM, GRU : https://needjarvis.tistory.com/684

 

[딥러닝] 순환신경망(RNN)과 LSTM, GRU

순환신경망(RNN)의 개념 순환신경망(Recurrent Neural Network, RNN)은 입력과 출력을 시퀀스(Sequence) 단위로 처리하는 모델이다. 여기서 시퀀스란 연관된 연속의 데이터를 의미하며, 시계열 데이터에 적

needjarvis.tistory.com