Sequence to Sequence Learning with Neural Networks

nayeoniee·2022년 3월 6일
2

PaperReview

목록 보기
1/4
post-thumbnail

참고 자료

Abstract

딥러닝은 라벨링이 되어있는 대량의 데이터가 존재하는 task에서 좋은 성능을 보이지만, sequence를 sequence에 매핑하는데는 사용되지 않았다. 본 논문에서는 end-to-end approach가 가능한 sequence learning 방법을 제안한다.
LSTM을 여러개 쌓은 multilayered LSTM을 사용했으며, encoder와 decoder는 각각 multilayered LSTM으로 이루어진다. Encoder는 입력 sequence를 고정된 길이의 context vector로 만들고, decoder는 context vector를 출력 sequence를 만든다.
WMT 14 dataset을 사용해 BLEU score를 측정했을 때, 본 논문에서 제안하는 Seq2Seq이 가장 높은 성능을 보였다. 학습 과정에서 입력 sequence를 거꾸로 넣었을 때 모델 성능이 더 높았다.

1. Introduction

Deep Neural Networks(DNNs)는 높은 성능을 보이지만, 입출력 차원을 미리 알고 그 크기가 고정된 경우에만 적용할 수 있어 음성인식(speech recognition), 기계번역(machine translation)과 같은 sequential 문제에는 적용할 수 없다. 본 논문에서는 고정된 크기의 벡터를 얻는 LSTM 1개(encoder)와 해당 벡터로부터 출력 sequence를 얻는 LSTM 1개(decoder)를 사용해 sequence to sequence 문제를 해결한다.

WMT 14 dataset English to French translation task의 BLEU score를 측정했을 때, 본 논문에서 제안하는 Seq2Seq이 가장 높은 성능을 보였다. 학습 과정에서 입력 sequence를 거꾸로 넣었을 때 모델 성능이 더 좋았으며, sequence가 긴 경우에도 잘 작동했다.

LSTM: out-of-vocabulary error
SMT: 33.30 (baseline)
Seq2Seq: 34.81 → 80k vocab,
SMT + Seq2Seq: 36.5 (이전에 가장 스코어가 높은 모델은 37.0)

2. The model

RNN

Recurrent Neural Network(RNN)은 T개의 입력 단어로 이루어진 입력 sequence가 주어졌을 때 T개의 단어로 이루어진 출력 sequence를 생성한다. 한 시점 t에서 hidden state를 구하는 과정은 위의 그림과 같다.

현재 시점(t)의 hidden state는 이전 시점(t-1)의 hidden state(h_t-1)와 현재 시점(t)의 입력값(x_t)을 받아 갱신된다.

RNN은 입력과 출력의 크기가 다르면 사용하기 어려운 단점이 있다. 이를 해결하기 위한 가장 단순한 방법은 RNN을 사용해 다양한 길이의 입력 sequence를 고정된 길이로 변환할 수 있다. 하지만, 학습에 RNN을 사용하면 long-term dependency 문제가 발생해 본 논문에서는 LSTM 사용을 사용했다.

RNN의 문제점

1) Long-term dependency(장기 의존성)
The clouds are in the sky. 에서는 sky를 에측할 때 관련된 정보 clouds가 가까이 위치하기 때문에 많은 문맥을 알지 않아도 마지막 단어가 sky라는 것을 예측할 수 있다.
하지만, I grew up in France and wanted to be a plumber who the best is in the world and speak fluent French.와 같은 예시에서는 French를 예측할 때는France와 멀리 위치하기 때문에 정답임을 예측하기 쉽지 않다.
두 번째 예시 처럼 관련된 요소가 멀리 떨어져 있는 경우 sequence에 장기 의존성이 존재한다고 한다.

2) Vanishing/Exploding gradient
이전 state → 다음 state로 넘어갈 때 gradient를 조금만 작게 해도 gradient가 0에 가깝게 되고, gradient를 조금만 크게 해도 gradient가 너무 커져 gradient를 조절하기 어려운 문제를 말한다.
이를 해결하기 위해 'gradient를 상수로 넘기지 말고 gradient를 조절하는 gate를 달아서 조절하자' 아이디어로 LSTM에서는 gradient를 조절하는 gate는 단순한 activation function이 아니라 하나의 network가 들어있다.

LSTM

RNN은 문장이 길어지면 역전파 시 vanishing gradient 문제 발생한다. LSTM은 RNN의 hidden state에 cell state를 추가해 문장이 길어지면서 발생하는 문제를 개선했다. 후에 attention 개념을 활용해 long-term dependency를 해결한다.

Long Short-Term Memory(LSTM)의 목표는 조건부 확률 예측(계산)이다. T개의 입력 sequence가 들어왔을 때 T’개의 출력 sequence가 나올 확률을 계산하며, 이 때 입출력 sequence의 길이는 달라도 된다. 아래 수식은 standard LSTM-LM formulation이다.

3. Training Stage

LSTM을 학습하는 과정에서 본 논문은 두 가지 방법을 사용했다.

1) Teacher Forcing(교사 강요)

  • 학습 시 실제 정답 데이터를 사용하는 비율을 설정하는 hyperparameter로 decoder가 잘못 예측한 값을 넣어 또 다른 예측에 사용되면 학습이 원활하게 진행되지 않기 때문에 사용한다.
  • 정답 데이터 사용 비율이 높을수록 학습 속도가 빨라지지만, train data에 overfit될 가능성이 높아진다.

2) Reversed Source Sentence as Input

  • 위의 그림처럼 입력 sequence의 순서를 뒤집는 방식으로, the cat is black의 순서인 source문장의 순서를 뒤집어 black is cat the를 입력으로 넣는다.
  • 전체적으로 source와 target간의 거리 변화는 없지만 source의 앞부분 단어와 target의 앞부분 단어가 가까워져 minimal time lag가 감소하고, establishing communication시간이 줄어들어 성능 향상이 있다고 본 논문에서는 추측했다. 또한, 논문에서는 영어->프랑스어 번역 task를 수행했는데 영어와 프랑스어는 어순이 비슷하기 때문에 문장 앞부분의 단어들의 거리가 가까우면 앞부분 단어 번역을 잘 수행하고, 앞부분 단어 예측을 잘 하면 뒷부분 단어 예측에도 영향을 미치기 때문이라고도 볼 수 있다.
  • 성능 향상: perplexity 5.8 → 4.7, test set BLEU score 25.9 → 30.6

4. Inference Stage

1) teacher forcing 사용X

decoder가 예측한 값을 다음 input으로 활용해 예측을 진행한다.

  • Exhaustive search: 모든 경우를 비교해 최고 점수를 선택 → 비효율적
  • Greedy search: 매번 점수가 높은 것 선택 → 선택을 되돌릴 수 없음
  • Beam search: 위의 2가지 방법의 단점을 개선한 방법, 매 step마다 가장 가능성이 높은 상위 beam_size개의 partial translation을 선택함. 매번 greedy하게 가장 높은 확률을 가지는 것을 선택하지 않고, 특정 깊이 만큼 더 들어가 출력 문장의 확률이 높은 결과를 선택함

5. Experiments

  • dataset: WMT 14’ English to French dataset중 깨끗한 데이터셋을 일부 선택해 사용했으며, 일반적인 neural language model은 각 단어의 벡터 표현에 의존적이기 때문에 두 언어에 대해 고정된 크기의 단어 사전을 사용했다. 단어 사전에 없는 모든 out-of-vocabulary word는 UNK 토큰으로 처리했다.
  • WMT 14 dataset: SMT(Statistical Machine Translation) 2014 워크샵에서 공유된 데이터셋으로 4가지 task에 대한 데이터셋을 제공한다. (ACL 2014-9th workshop on SMT)
  • 160,000개의 input vocab과 80,000개의 output vocab을 사용했으며, 각 단어는 1000차원으로 임베딩, 각 레이어는 1000개의 cell로 구성, 4개의 레이어로 구성된 LSTM을 사용했다.
  • LSTM을 1층 추가할 때마다 perplexity는 10% 정도 감소했다.
  • 가중치 초기화: -0.08 ~ 0.08 uniform distribution
  • optimizer: SGD without momentum
  • learning rate=0.7 → 5 epoch 이후 매 epoch마다 lr을 절반으로 (총 7.5 epoch 학습함)
  • mini-batch를 랜덤 구성하지 않고, 최대한 비슷한 길이를 가지도록 배치를 구성해 패딩을 최소화해 학습 속도를 높였다.

Experimental Results

앙상블 LSTM을 사용했을 때 최대 34.81 beam_size=2만 사용해도 충분히 높은 성능을 보인다.

SMT + LSTM을 사용했을 때 BLEU score 36.5이다.

LSTM hidden state를 PCA를 활용해 2d 시각화한 모습으로, 같은 의미의 문장끼리 클러스터링 되어있는 것을 볼 수 있다.

6. Evaluation Metric

1) BLEU score

모델의 예측값과 정답 간의 차이를 계산한 값으로 precision, brevity penalty, clipping을 종합해 계산된다.

  • Precision: n-gram을 통한 순서쌍이 얼마나 겹치는지
  • Brevity penalty: 문장 길이에 따른 score 보정
  • Clipping: 같은 단어가 연속적으로 나올 때 score 보정

2) Perplexity(PPL)

언어 모델을 평가하기 위한 지표로 machine translation, text summarization과 같은 generation task의 성능 비교를 위해 주로 사용된다. perplexed라는 단어는 헷갈리는이라는 뜻으로 PPL은 수치가 낮을수록 언어 모델의 성능이 좋다.

3) n-gram

카운트 기반 언어 모델로 이전에 등장한 모든 단어를 고려하지 않고 n개의 단어만 고려한다.

  • 코퍼스에서 n개의 단어 뭉치 단위로 끊어 하나의 토큰으로 간주한다.
  • "For dinner I'm making __" 문장에서 빈칸에 들어갈 단어의 확률은 P(burgers|For dinner I'm making) > P(cement|For dinner I'm making) 이다.
  • 문장 W일 확률은 각각 N개의 단어로 이루어질 확률과 동일하다. P(W) = P(w1, w2, ..., wN)
  • unigram 모델에서는 P(W) = P(w1)*P(w2)*...,P(wN) 이다.
profile
정말 할 수 있어!

4개의 댓글

comment-user-thumbnail
2022년 3월 6일

안녕하세요 나연님, 김남현입니다. 글 잘 읽었습니다. 저는 부끄럽게도 딥러닝 논문을 읽어본 적이 거의 없고, AI 관련 지식은 초보 단계이지만 열심히 이해하려고 노력했습니다. 논문 내용에 관련해서 제가 말씀드릴 건 없고, 오로지 문체에 관련해서만 피드백을 드리려고 합니다.

RNN의 문제점을 다룬 부분처럼 글을 쓰셨으면 좋을 거 같습니다. 나연님께서는 나중에 이 글을 다시 보시더라도 논문 내용을 기억하기 쉽도록 글을 쓰셨다고 했습니다. 제 경험상 아무리 쉬운 내용이라도, 설령 그것이 간단한 메모라도 짧게 단어 여러 개로만 적어둔다면 몇 주 뒤에 시간이 지나서 다시 보면 제가 어떤 연유로 이러한 메모를 남겼는지 기억조차 안 날 때가 많았습니다. 더 와닿게 설명하자면 알고리즘 문제의 코드를 떠올리시면 될 것 같습니다. 복잡한 문제일수록 나연님께서 몇 주 전에 작성한 코드를 봤을 때 문제 풀이 흐름을 따라가는 상세한 주석이 없다면 코드를 보고 해석하는 데에 시간이 오래 걸릴 거예요. 저는 알고리즘 공부에 관심이 많은데, 오래 전에 풀었던 문제 중에 인상 깊었던 것을 블로그에 정리하려 할 때마다 이러한 경험을 하고 있습니다...

당장 시험 준비용으로 핵심 내용만 정리한 글이라면 이런 스타일도 괜찮겠지만, 미래에 나연님이 본인과 다른 사람에게 전달할 목적으로 쓰신 글이라면 이야기를 풀어나가는 것처럼 조금 더 상세하게 용어 설명과 특정 부분에 대한 이유를 이해하신 대로 쓰시는 편이 나을 것 같습니다.

1개의 답글
comment-user-thumbnail
2022년 3월 13일

글 잘읽었습니다! 우선 바로 제 생각 말씀드리자면
1. 나연님의 인사이트가 리뷰글에 더 들어갔으면 좋겠다.
2. 논문 각 파트별 요약보다는 중요한 부분들을 모아 재구성한 정리였다면 더 좋지 않았을까
3. 읽게된 계기나 읽고난 후의 소감이 있으면 더 재미있는 글이 될 것 같다.

이정도가 될거 같아요. 저도 아직 논문 리뷰를 쓰는게 많이 어렵지만 이 세 부분은 꼭 하려고 노력하고 있습니다. 논문만을 정리한 글들은 흔하지만 각자의 생각을 넣은 글은 흔하지 않기 때문에 이 것이 큰 경쟁력이 되지않을까 생각해요.

1개의 답글