논문명: Sequence to Sequence Learning with Neural Networks
학회(출판연도): NeurIPS (2014)
연구분야: 딥러닝 기반 시퀀스 표현 학습 및 시퀀스-투-시퀀스 모델
✓ 토큰(Token)
- 더 이상 분해할 수 없는 텍스트의 기본 단위
- 단어, 문자, 문장의 일부
- 단어단위 토큰화: i love bitamin → [”i”, “love”,”bitamin”]
- 문자단위 토큰화: i love bitamin →[”i”,”l”,”o”,….,”n”]
✓ 토큰화(Tokeniazation)
- 텍스트를 토큰들로 나누는 과정
- 토큰화 이후, 단어 임베딩이나 벡터화 등의 작업을 통해 텍스트 분석
- 긴 문장을 의미있는(정보단위로 기능, 쓸모있는) 기본 단위인 토큰들로 분해하는 작업
✓ NLP에서 “의미있다”
→ 모델이 학습하거나 예측하는데 쓸모가 있다
- 문자 단위의 토큰화의 경우(”b”,”i”,”t”,”a”,”m”,”i”,”n”)
- 각 문자는 독립적으로 의미가 없지만, 모델이 이 문자들을 조합해서 bitamin이라는 단어를 이해하거나 예측할 수 있다면 의미가 있다 봄
✓ 시퀀스
- “순서”가 중요한 데이터 집합(순서가 바뀌면 의미가 달라질 수 있음)
✓ 기존 DNN의 문제점
✓ 시퀀스를 시퀀스로 매핑하는 문제 (ex. 영어문장 → 프랑스어로 번역)
- 입력문장(영어)이 다른 시퀀스(프랑스어)로 변환되는 문제
- 여기서 영어 문장: 하나의 시퀀스(단어들의 연속), 이를 변환해 프랑스어 시퀀스 생성
✓ LSTM 기반 시퀀스-투-시퀀스 학습
시퀀스 구조에 최소한의 가정만 두는 end-to-end 시퀀스 학습 방법 제안
다층 LSTM(Long Short-Term Memory)
① 입력 시퀀스 → 고정 차원의 벡터로 변환
② 또 다른 심층 LSTM이 이 벡터로부터 목표 시퀀스를 디코딩
✓ 시퀀스 구조에 최소한의 가정만?
- 일반적인 시퀀스 문제(ex. 문장 번역)에서는 입력과 출력 시퀀스 간의 길이나 구조가 복잡
- 기존 - 단어별 대응 규칙 or 정렬 정보 같은 가정을 많이 두고 모델링
- 논문 - 최소한의 가정만 → 입력시퀀스와 출력시퀀스가 어떤 관계인지 미리 정하지 않겠다
✓ end-to-end
- 입력 문장 → 출력 문장 전체 과정을 한 번에 학습
- 인코더 LSTM과 디코더 LSTM을 나누지만, 전체 모델이 하나의 목표 함수를 기준으로 동시에 학습
- 따로 전처리 단계에서 규칙을 넣거나, 중간 단계에서 사람이 개입할 필요X
✓ 입력 시퀀스를 고정 차원의 벡터로 변환?
입력 시퀀스를 인코더 LSTM에 넣어서 마지막 은닉상태나 출력벡터로 고정 크기의 벡터 만듦
→ 이 벡터는 문장 전체 정보를 압축한 컨텍스트 벡터
✓ 또 다른 심층 LSTM이 이 벡터로부터 목표 시퀀스를 디코딩?
디코더 LSTM은 이 고정 벡터를 받아서 순차적으로 출력 시퀀스를 생성
ex. 영어 → 프랑스: 디코더는 벡터 기반으로 프랑스어 문장을 한 단어씩 생성
✓ 실험
WMT`14 데이터셋 영어 → 프랑스어 번역 (기계번역)
① 성능 향상 - BLEU점수
② 단어 순서 뒤집기
LSTM은 단어 순서에 민감하지만, 능동태와 수동태에서는 비교적 강건
단기 의존성을 증가시켜 LSTM이 더 효과적으로 학습할 수 있게 도와줌
✓ 단기 의존성(short-term dependency)
번역에서 첫 번째 단어와 마지막 단어 사이의 거리를 생각해보면,
원래: i love bitamin → 출력 첫 단어와 대응되는 입력 단어 멀리 떨어져 있음
⇒ 장기 의존성 문제(기울기 소실 문제로 어려움)
단어를 뒤집으면
출력 문장의 첫 단어와 대응되는 입력 단어가 가까워짐 → 단기 의존성
⇒ 단기 의존성이 많아지면, 역전파를 통한 학습이 쉬워짐
✓ DNN
✓ N개의 N-비트 숫자
- N개의 숫자가 각각 N비트로 표현되는 숫자들 의미
- N=4 → 4비트로 표현되고 총 4개의 숫자들로 이루어진 집합
✓ N개의 N-비트 숫자 “정렬”
N개의 N-비트 숫자들을 오름차순이나 내림차순으로 정렬해야하는 문제
→ 이 숫자들을 정렬하는 기능을 신경망이 수행할 수 있는데 2개의 은닉층만으로도 해결 가능
음성인식, 시각적 객체 인식과 같은 어려운 문제에서 매우 뛰어난 성능
비교적 적은 단계만으로도 임의의 병렬 연산 가능
2개의 은닉층만으로도 N개의 N-비트 숫자 정렬 가능 → 복잡한 문제를 단순한 구조로 해결가능

✓ 왜 신경망으로 정렬이 가능할까?
- 신경망은 입력 데이터를 처리하고 패턴을 학습할 수 있는 능력有
- DNN은 선형적이지 않은 연산을 반복적으로 적용하여 복잡한 문제를 풀 수 있음
- 정렬문제=순서를 파악하고 비교하는 작업: 2개의 은닉층으로 순서, 비교 패턴 학습 가능
✓ 왜 2개의 은닉층만으로 가능한가?
기본적인 신경망 구조는 선형 연산만으로는 해결할 수 없는 문제들을 다룰 수 있게 해줌
→ 은닉층을 추가함으로써 비선형적인 문제도 해결할 수 있음
단일층: 선형변환만 가능 - 직선적일 수 밖에 없음
3번이상의 은닉층: 상대적으로 더 복잡한 문제나 큰 데이터셋에서 필요, 과적합 위험
⇒ 2개의 은닉층이 학습 효율성과 성능면에서 최적의 균형을 제공하는 경우가 많음
(P) DNN의 한계
입력과 출력이 고정된 차원의 벡터로 인코딩될 수 있는 문제에만 적용 가능
시퀀스-투-시퀀스 문제(ex. 기계 번역, 질의응답 등)에서는 한계 존재
→ 길이가 고정된 데이터(ex. 이미지나 고정된 길이의 텍스트 등)에는 잘 작동하지만,
길이가 달라질 수 있는 시퀀스 데이터에는 적합X
✓ (S) LSTM을 이용한 시퀀스-투-시퀀스 학습
LSTM: 시퀀스를 처리하는데 강력한 신경망
장기의존성을 학습하는데 능숙하여, 시간 지연이 있는 입력과 출력 간의 관계를 잘 모델링 가능
시퀀스-투-시퀀스를 해결하기 위해 2개의 LSTM 사용
인코더 LSTM
→ 입력 시퀀스를 한 번에 한 단어씩 읽어서 고정된 크기의 벡터로 변환(입력시퀀스 요약정보)
디코더 LSTM
→ 인코더에서 생성한 고정된 벡터를 받아 출력 시퀀스 생성 후 차례대로 예측
→ 입력 시퀀스를 조건으로 하는 순환 신경망 언어 모델
⇒ 장기 의존성 문제 해결

<참고> [세션 PPT]

✓ 관련 연구
✓ re-ranking 실험

<참고>
| FNN(feedforward neural network) | RNN | LSTM |
|---|---|---|
| - 입력 데이터 순차적으로 처리 - 각 입력은 독립적 - 시간적인 순서나 의존성 고려X | - 이전의 출력이 현재의 입력에 영향을 미치는 구조 - 시간적인 의존성 처리 가능 | - RNN의 한 종류 - 긴 시간 의존성을 처리할 수 있도록 설계된 네트워크 - 더 효과적으로 긴 시간 간격의 정보 기억 및 처리 가능 |
✓ (P)
RNN은 ①입력과 출력이 같고, ②정렬이 이미 알려져 있는 경우에는 시퀀스 투 시퀀스로 쉽게 매핑 가능
BUT, ①입력과 출력 길이가 다르거나, ② 복잡하고 비단조적인 관계를 가지는 경우에는 적용 어려움
✓ 비단조적인 관계
- 변수 간의 관계가 일정한 방향으로만 변화하지 않고, 증가와 감소가 반복될 수 있는 경우
- 변수 간의 증가나 감소가 일관X(변동적)
- 다른 요인에 의해 영향을 받을 수 있음
✓ (S)
입력 시퀀스를 하나의 고정 길이 벡터 v로 매핑 (첫 번째 RNN)
그 벡터를 기반으로 출력 시퀀스 생성 (두 번째 RNN)
BUT, RNN은 장기 의존성 문제로 학습이 어려움 → LSTM으로!

✓ 개선점 3가지
① 입출력에 서로 다른 LSTM 사용
② 깊은 LSTM 사용 (deep LSTM)
③ 입력 문장 단어 순서 뒤집기 (reverse input sentence)
입력 (a,b,c) → 출력(알파,베타,감마) 대신
입력 (c,b,a) → 출력(알파,베타,감마)
→ 단기 의존성! (장기 의존성 문제 해결)
알파가 난이도 결정 → 초기 출력이 잘 맞으면, 뒤 토큰들도 쉽게 맞아 떨어진다~(가장어려운 부분을)
✓ SMT(Statistical Machine Translation)
확률적 모델 기반으로 한 기계 번역 방식
대규모의 평행 코퍼스(같은 의미를 가진 두 언어로 된 문서)에서 얻은 통계적 규칙을 사용하여 한 언어에서 다른 언어로 번역
- 주어진 입력 문장을 단어와 구문으로 나누고, 이를 확률적 규칙에 따라 번역
- 번역할 때 가장 가능성이 높은 번역을 선택하는 방식으로 작동
문법적 정확성보다 빈번한 단어 및 구문 패턴을 기반으로 작동하여 번역 수행
→ 단어 순서가 중요한 언어적 맥락을 다루는 데에는 한계
✓ n-best 리스트
- 번역 시스템에서 생성한 상위 n개의 번역 후보 리스트
- 시스템이 제공할 수 있는 여러 가지 번역 결과 중 가장 확률이 높은 번역 나열
✓ WMT’14 영어 → 프랑스어 기계번역(MT) 방법
| SMT 시스템 없이 직접 번역 | SMT baseline n-best 리스트 재점수화 |
|---|---|
| - 기계 번역 시스템을 단독으로 사용하여 직접 번역 수행 - 생성된 번역 결과: 1가지 | - SMT 시스템이 생성된 여러 후보 번역 중 가장 적합한 번역 선택 - n-best 리스트에서 상위 n개의 번역 후보가 제공된 후, 이 후보들에 대해 추가적인 점수 부여 or 재조정을 통해 가장 적합한 번역 선택 - 단순히 가장 높은 확률을 가진 번역외에도 문맥에 맞는 최적의 번역 선택 가능 |
✓ 데이터셋
✓ 학습 데이터
✓ 어휘집
✓ 학습 목표
대규모 deep LSTM을 문장 쌍으로 학습
목적함수: 소스 문장 S가 주어졌을 때 올바른 번역 T의 로그 확률을 최적화
번역생성과정: 소스 문장 S가 주어졌을 때 올바른 번역 T의 로그 확률 최대화

로그 확률을 사용하는 이유 예시

✓ 번역 생성 과정
학습 완료 후, 가장 가능성 높은 번역 선택

✓ 디코딩 방법
✓ Partial Hypothesis
- 출력 시퀀스를 완전히 생성하기 전에 현재까지 생성된 부분적인 번역 결과 의미
- 번역을 순차적으로 생성할 때, 시스템은 출력 시퀀스의 일부를 미리 생성하고, 그 결과를 바탕으로 다음 단어 예측
- 이 부분적인 출력 → Partial hypothesis
✓ Beam Search Decode
출력 시퀀스를 생성하는데 사용되는 탐색 알고리즘
다양한 후보 번역을 생성하고 평가하는 방식
→ 현재까지의 번역 후보 중에서 가장 가능성 높은 후보들을 유지하면서 번역을 계속 생성
작동예시
- 모델이 i를 예측하고 beam width가 3이면 i 다음에 올 수 있는 3가지 단어 예측
- 이전 단계에서 예측된 i 뒤에 올 3개의 단어 후보를 각각 확장하여, 3개의 새로운 partial hypothesis 만듦 + 각 후보에 대한 확률 계산
- 각 후보에서 또 다른 단어들을 예측하여, 최고 확률을 가진 3개의 후보를 계속 유지
- 전체 시퀀스가 완성되면, 가장 확률이 높은 시퀀스를 최종 출력으로 선택
좌 → 우 beam search decoder 사용
beam search는 B개의 partial hypothesis 유지
각 시점마다 가능한 모든 단어로 확장 → 후보 수 급증
상위 B개만 남기고 나머지는 제거 (로그 확률 기준)
<EOS>가 나오면 beam에서 제거하고 complete hypothesis 집합에 추가
근사적이지만 구현이 단순하고, beam size = 1로도 좋은 성능, beam size = 2어도 대부분의 성능 향상

✓ 재점수화(rescoring)
✓ LSTM
✓ 최소 시간 지연
입력 시퀀스의 단어가 출력 시퀀스의 대응되는 단어와 시간적으로 가까운 관계를 유지하도록 함
즉, 입력 단어와 출력 단어가 서로 가깝게 위치하도록!!
- 왜 중요할까?
- [기계번역시스템] 입력 문장과 출력 문장 사이에 단어의 순서와 문맥적 관계를 잘 반영해야 함
- 최소 시간 지연을 고려하면 입력 문장에서의 각 단어가 출력 시퀀스의 대응되는 단어와 가까운 위치에 배치되어야 함
장기 의존성 문제 해결 가능하긴 한데, 소스문장(입력)을 역순으로 뒤집으면 훨씬 더 잘 학습하더라~
✓ 타깃 문장(출력)은 뒤집지 X
⇒ 많은 단기 의존성을 도입했기 때문이 아닐까~? (최소 시간 지연_minimal time lag 해결)
평균 거리 자체는 변하지X
<초기>에는 입력 문장을 뒤집는 게 타긴 문장의 앞부분에서 더 자신 있는 부분을 예측하고, 뒷부분에서는 덜 자신있는 부분을 예측하는 것이라고 생각했음
→ 문장을 뒤집으면, 앞부분의 단어들이 뒤쪽 단어들보다 더 간단하게 예측될 듯?
뒷부분이 덜 확실하니까 더 많은 예측 오류가 있을 것이라 생각했었음
<실험결과> 뒤집은 문장이 더 좋은 성능
<결론> LSTM의 메모리 활용의 개선 때문
✓ 모델 설정
4층 deep LSTM, 각 층은 1000개의 셀, 단어 임베딩 차원 1000차원
입력 어휘집 160,000, 출력 어휘집 80,000
8,000개의 실수 → deep LSTM 문장을 표현하기 위함
⇒ 얕은 LSTM보다 훨씬 뛰어난 성능
✓ 학습설정
파라미터 초기화
최적화 방법
미니배치 설정
gradient clipping (폭발 방지)
LSTM은 기울기 소실 문제는 적지만, 기울기 폭발 문제는 발생 가능
→ gradient norm을 제한(hard constraint)
각 배치에서 gradient g (128로 나눈 값)를 구해 s = ||g||^2 계산
만약 s>5 이면 g ← 5/sqrt(s) x g
문장 길이 처리
문장 길이 다양함 (짧은 문장: 20-30 단어, 긴 문장: 100+ 단어)
무작위로 128개 문장을 선택하면 대부분 짧은 문장이라 긴 문장 학습 시 연산 낭비 발생
minibatch 내 문장들이 비슷한 길이를 갖도록 구성
→ 약 2배 이상 속도 향상 얻음
✓ 병렬화
(P) 단일 GPU_C++로 구현된 deep LSTM 약 1,700단어/초 (느림)
→ (S) 8개의 GPU를 사용하여 모델 병렬화
4개 LSTM: 각기 다른 GPU에서 실행 - 계산된 활성화 값은 다음 GPU/층으로 즉시 전달
나머지 4개 LSTM: softmax 병렬화 - 각 GPU가 1000x20000행렬 곱 연산 담당
⇒ 6,300 단어/초 속도 기록, 미니배치 128, 학습 약 10일 걸림


RNNLM (RNN-Language Model) 이나 NNLM (Feedforward Neural Network Language Model)
소스 언어 정보 ⊂ NNLM
Kalchbrenner and Blunsom[18] ← 밀접하게 관련
Cho et al [5]: LSTM과 유사한 RNN 구조를 사용해 문장의 벡터로 매핑하고 다시 복원
** 신경망을 SMT시스템에 통합하는 것에 초점
Bahdanau et al [2]: 어텐션 메커니즘 도입
End-to-end
대규모 deep LSTM: 제한된 어휘, 문제 구조 거의 가정X
→무제한 어휘 SMT보다 대규모 MT 과제에서 우수
⇒ 충분한 학습 데이터가 있다면, 다른 시퀀스 학습 문제에도 효과적일 가능성⬆️