실용자연어처리 Ch.12

송종빈·2023년 6월 18일
0

23-1

목록 보기
29/31

텍스트를 위한 시퀀스 모델 RNN, LSTM

순환 신경망 (RNN)

시계열

  • 시간의 순서로 된 data point의 나열
  • 시간에 따라 변하는 데이터를 사용하여 추이 분석

시퀀스 데이터

  • 문장: 연속적인 단어의 나열
  • 문서: 연속적인 문장의 나열
  • 오디오 샘플: 연속적인 (시간에 따른) 소리 신호의 나열

순환 뉴런과 순환 층

순환 신경망

  • 시간적으로 연속성이 있는 시퀀스 데이터를 처리하기 위해 고안된 신경망
    • 시간의 순서를 딥러닝으로 학습할 수 있는 모델
  • 이전 은닉층이 현재 은닉층의 입력이 되면서 반복되는 순환구조
  • 기존 네트워크와의 차이점
    • 현재까지 입력 데이터를 요약한 정보(메모리)를 갖는다
      • 타임 스텝에 걸쳐서 상태를 보존하는 인공신경망 구성 요소를 메모리 셀(memory cell)이라고 함
    • 마지막 최종 메모리는 모든 입력의 요약한 정보가 된다

입력과 출력 시퀀스

시퀀스-투-시퀀스 (many-to-many)

  • 입력시퀀스를 받아 출력 시퀀스를 만듦
    ex) 날짜에 따른 주식 가격 예측

시퀀스-투-벡터 (many-to-one)

  • 입력시퀀스를 네트워크에 주입하고 모든 출력을 무시하여 마지막 값만 출력
    ex) 연속된 단어 → 감정 분석

벡터-투-시퀀스 (one-to-many)

  • 각 타임 스텝에서 하나의 입력 벡터를 반복해서 네트워크에 주입 → 하나의 시퀀스를 출력
    ex) 이미지 입력 → 이미지에 대한 캡션 출력

인코더-디코더 (many-to-many)

  • 시퀀스-투-벡터 + 벡터-투-시퀀스
    ex) 한국어 문장 → 벡터 → 영어 문장

RNN의 구조 - Vanilla RNN

RNN의 학습

RNN의 가중치


순전파: 은닉층에서의 계산


순전파: 출력층에서의 계산


오차 계산
RNN의 오차(E)는 심층 신경망에서 forward feeding 학습과 달리 각 단계(t)마다 오차를 측정 (MSE)

역전파
RNN에서의 역전파는 BPTT를 이용하여 모든 단계마다 처음부터 끝까지 역전파
BPTT: 각 단계(t)마다 오차를 측정하고 이전 단계로 전달하는 것


역전파: 기울기 소실 문제
오차가 멀리 전파될때 계산량이 많아지고 전파되는 기울기의 양이 점차 적어지는 문제점
역전파: 기울기 폭주 문제
큰 기울기가 계속 곱해지면 기울기가 너무 커지는 문제점

RNN의 문제점

단기 기억 문제

  • 현상
    • 짧은 문장은 잘 학습
    • 긴 문장에 대해 학습이 잘 안됨
  • 원인
    • 기울기 소실
    • 기울기 폭주
  • 해결 방안
    • 장단기 기억 메모리를 추가 → LSTM

순환 신경망 (LSTM)

LSTM의 개념

(기본 RNN이 갖는 단기 기억 메모리) + (장기 기억 메모리)를 추가한 신경망 구조

  • ht1h_{t-1}: 현재로 입력되는 단기 기억 정보, hidden state
  • ct1c_{t-1}: 현재로 입력되는 장기 기억 정보, cell state

은닉층의 각 뉴런에 게이트를 추가해서 장기 기억이 가능하게 함

  • 망각 게이트
  • 입력 게이트
  • 출력 게이트

LSTM의 구조: 망각 게이트

목적: 과거의 정보를 얼마나 기억할지 (or 얼마나 잊을지) 결정

방법:
1. 과저 정보와 현재 데이터에 가중치를 곱함
2. 1의 값에 sigmoid 활성화 함수를 취함 (ftf_{t})
3. 2의 값을 과거 정보(cell state)에 곱해줌

  • 수식
    ft=σ(wf[ht1,xt])f_{t} = \sigma (w_{f} [h_{t-1}, x_{t}])
    ct=ftct1c_{t} = f_{t} * c_{t-1}

결과: sigmoid의 출력이 0이면 과거 정보는 무시 / 1이면 과거 정보는 온전히 보존

LSTM의 구조: 입력 게이트

목적: 현재의 정보를 얼마나 기억할 지 (장기기억을 갖는 셀로 얼마만큼 보낼지) 결정

방법:
1. 과거 정보와 현재 데이터에 가중치를 곱
2. 1의 값에 sigmoid 활성화 함수를 취함 (iti_{t})
3. 새로운 가중합 값에 tanh 활성화 함수를 취함 (c~t\widetilde{c}_{t})
4. 3을 현재 데이터 보존량에 곱해서 보존량을 결정
5. 결과를 다시 과거의 정보(cell state)와 더함

  • 수식
    it=σ(wi[ht1,xt])i_{t} = \sigma (w_{i}[h_{t-1}, x_{t}])
    c~t=tanh(wc[ht1,xt])\widetilde{c}_{t} = tanh(w_{c}[h_{t-1}, x_{t}])
    ct=ct1+itc~tc_{t} = c_{t-1} + i_{t} * \widetilde{c}_{t}

결과: 현재 메모리에 새로운 정보를 반영할지 결정하는 역할을 함
계산한 값이 1이면 입력 𝑥𝑡 가 들어올 수 있도록 허용(open), 계산한 값이 0이면 차단

LSTM의 구조: 출력 게이트

목적: 과거의 정보와 현재 데이터를 사용해서 뉴런의 출력을 결정

방법:
1. 과거 정보와 현재 데이터에 가중치를 곱
2. 1의 값에 sigmoid 활성화 함수를 취함 (oto_{t})
3. 2의 값을 과거 정보(cell state)에 tanh 활성화 함수를 적용한 후 곱해서 hidden state 값 결정(hth_{t})

  • 수식
    ot=σ(wo[ht1,xt])o_{t} = \sigma (w_{o}[h_{t-1}, x_{t}])
    ht=ottanh(ct1)h_{t} = o_{t} * tanh(c_{t-1})

결과: 갱신된 메모리의 출력 값을 제어하는 역할을 함

  • 계산한 값이 1이면 의미있는 결과로 최종 출력
  • 계산한 값이 0이면 해당 연산 출력 X

자연어처리를 위한 LSTM

게이트 순환 신경망 (GRU)

  • LSTM보다 간단한 구조의 RNN 프레임워크
  • 특징
    • LSTM에서 사용하는 망각 게이트 & 입력 게이트를 하나로 합친 구조
    • 하나의 게이트 컨트롤러가 망각 게이트 & 입력 게이트를 모두 제어
      • if 게이트 컨트롤러 return 1 → 망각 게이트 open / 입력 게이트 close
      • elif 게이트 컨트롤러 return 0 → 망각 게이트 close / 입력 게이트 open
    • GRU는 출력 게이트가 없어 전체 상태 벡터가 매 단계마다 출력됨
    • 이전 상태의 어느 부분이 출력될지 제어하는 새로운 게이트 컨트롤러가 별도로 존재

양방향 RNN

  • 필요성

    • RNN은 이전 시점의 data들을 참고해서 정답을 예측 but 실제 문제에서는 미래 시점의 data에 힌트가 있는 경우도 많음
  • 양방향 RNN 구조

    • 양방향 RNN은 하나의 출력 값을 예측하는데 메모리 셀 2개 사용
    • 메모리 셀 h는 이전 시점의 은닉상태를 전달받아 현재의 은닉 상태를 계산
    • 메모리 셀 g는 다음 시점의 은닉상태를 전달받아 현재의 은닉 상태를 계산
    • 이 값 2개를 모두 츨력층에서 출력 값을 예측하는데 사용
profile
Student Dev - Language Tech & Machine Learning

0개의 댓글