이글은 towardsdatascience.com의 내용임. (링크)
Intuitive explanation of Neural Machine Translation
신경 기계 번역(NMT - Neural Machine Translation)이란?
신경 기계 번역은 언어를 다른 언어로 번역하기 위한 기술이다. 영어를 힌디어로 변환하는 것을 예로 들수 있다.
신경 기계 번역은 영어와 같은 소스 언어로부터의 단어 시퀀스를 심층 신경망을 사용하여 힌디어 또는 스페인어 같은 목표 언어로 변환하는 작업이다.
신경 기계 번역에 필요한 특성은 무엇인가?
- 여러 (시간) 단계에 걸친 순차적인 데이터를 유지하기 위한 능력
NMT는 여러 단계에 걸쳐 유지되어야 하는 순차적인 데이터를 사용한다. 인공 신경망(ANN - Atificial Neural Network)는 여러 단계에 걸쳐 데이터를 유지하지 않는다. LSTM 또는 GRU 같은 RNN은 여러단계에 걸쳐 데어터를 유지하는 것이 가틍하다.
- 길이가 변하는 입력과 출력 벡터를 다루는 능력
ANN과 CNN은 고정된 출력을 생성하기 위한 함수를 적용하기 위해 고정된 입력 벡터가 필요하다. 언어를 다른 언어로 번역하는 것은 소스 언어뿐만아니라 목표 언어 모두 길이가 변하는 단어의 연속으로 구성된다.
길이가 변하는 소스 언어와 목표 문장
LSTM 또는 GRU 같은 RNN이 연속적인 데이터 처리에 어떻게 도움이 될까?
RNN은 정보를 유지하기 위한 루프(loop)를 가진 신경망으로 시퀀스에서 모든 요소(element)에 대해 동일 작업을 수행하고 출력 요소는 이전 요소 또는 상태(state)에 영향을 받는다. 이것이 정확히 연속적인 데이터를 처리하기 위해 필요한 부분이다.
RNN은 하나 이상의 입력뿐만 아니라 하나 이상을 출력을 가질 수 있다. 이는 연속적인 데이터 처리를 위한 또다른 요구사항이다. 즉, 길이가 변하는 입력과 길이가 변하는 출력이다.
RNN 사용 - [Source]
왜 신경 기계 번역을 위해 RNN을 사용못할까?
ANN 에서는 네트워크의 다른 레어어간에 가중치를 공유하자 않는다. 따라서 기울기를 합(sum)할 필요가 없다. RNN은 가중치를 공유하고 아래 그림에서 보이는 것과 같이 매 단계에서 W에 대한 기울기를 더해야 한다.
시간 단계 t=0에서 h의 기울기를 계산하는 것은 RNN cell의 각각을 통과하는 역전파가 필요하기 때문에 W의 많은 인자(factor)가 관련된다. 비록 가중치 행렬을 잊어버리고 동일한 스칼라 값을 반복적으로 곱할지라도 100 시간 단계라고 가정해도 이것은 도전(challenge)을 나타낸다.
만약 가장 큰 단수 값이 1보다 크다면 기울기는 확산할 것이고 이를 기울기 폭발 (Exploding gradient)이라 부른다.
만약 가장 큰 단수 값이 1보다 작다면, 기울기는 소실될 것이고 이를 기울기 소실(Vanishing gradient)라 부른다.
순방향과 역방향 전달과 강중치는 기울기 폭발 또는 소실을 유발하면서 모든 레이어에 걸쳐 공유된다.
LSTM과 GRU는 무엇인가?
LSTM은 Long Short Term Memory이고 GRU는 Gated Recurrent Unit이다. 이들은 빠르게 장기 의존성을 학습할 수 있다. LSTM은 1000단계가 넘는 시간 간격을 연결하는 방법을 배울 수 있다. 이는 내부 상태를 통한 상수 오류 흐름을 사용하는 효과적인 기울기 기반 알고리즘에 의해 달성된다.
LSTM과 GRU는 긴 시간 단계에 걸친 정보를 기억한다. 이는 무엇을 기엇하고 무엇을 잊어버릴지를 결정하는 것으로 수행한다.
LSTM은 이전 상태를 기억해야 하는지를 결정하기 위해 4개의 게이트(gate)를 사용한다. Cell 상태(state)는 LSTM의 주요 역할(key role)을 수행한다. LSTM은 4개의 정규화된 게이트를 사용하여 셀 상태에서 정보를 추가할 지 제거할 지를 결정할 수 있다. 이들 게이트는 얼마나 많은 정보가 흐를지 결정하기 위해 수도꼭지처럼 동작한다.
LSTM의 3 단계
GRU는 기울기 소실 문제를 해결하기 위한 LSTM의 더 간단한 변종이다.
GRU는 2개의 게이트를 사용한다. : LSTM에서 3 단계인것과 다르게 reset 게이트와 update 게이트. GRU는 내부적인 메모리를 갖지 않는다.
리셋 게이트는 이전 시간 단계의 메모리와 새로운 입력을 어떻게 묶을지를 결정한다. 업데이트 게이트는 이전 메모리가 얼마나 많이 남겨져야 하는지를 결정한다.
GRU는 더 적은 파라미터를 갖는다. 따라서 계산적으로 더 효과적이다. 그리고 LSTM보다 정규화하기 위한 데이터가 덜 필요하다.
신경 기계 번역에 LSTM 또는 GRU를 어떻게 사용할까?
기본 블록으로 LSTM 또는 GRU로 인코더와 디코더 프레임워크를 사용하는 Seq2Seq 모델을 만든다.
Seq2Seq 모델은 소스 시퀀스를 목표 스퀀스로 매핑한다. 소스 시퀀스는 기계 번역 시스템으로 들어가는 입력 언어이고 목표 시퀀스는 출력 언어이다.
인코더 : 인코더는 소스 언어로부터 단어의 입력 시퀀스를 읽어 그 정보를 숨겨진 상태(hidden state) 또는 생각 벡터(thought vector) 또는 컨텍스트 벡터(context vector)로 알려진 실수값 벡터로 인코딩한다. 생각 벡터는 입력 시퀀스의 "의미(meaning)"를 단일 벡터로 인코딩한다. 인코더 출력은 버려지고 단지 숨겨진 또는 내보적 상태만이 디코더에 초기 입력으로써 전달된다.
디코더 : 디코더는 출력 시퀀스를 생성하기 위한 초기 입력으로써 시작문자열
인코더는 단어별로 입력 시퀀스를 읽는다. 유사하게 디코더는 단어별로 출력 시퀀스를 생성한다.
디코더가 훈련과 추론 단계동안 다르게 동작하는 반면 임토더는 훈련과 추론단계동안 동일하게 동작한다.
디코더의 훈련 단계 (Training phase)
Teacher forcing을 사용하는 인코더-디코더 훈련단계
디코더의 더빠르고 효과적인 훈련을 위해 Teacher forcing을 사용한다.
Teacher forcing은 학생이 새로운 개념을 훈련받을 때 학생을 바로잡는 선생님과 같다. 훈련중에 선생님에 의해 학생에게 올바른 입력이 주어지기 때문에 학생은 새로운 개념을 더 빠르고 효과적으로 학습할 수 있다.
Teacher forcing 알고리즘은 훈련 동안 입력으로 이전 단계(시간)으로부터 예측된 출력 대신 이전 시간단계의 실제 출력을 제공하는 것으로 디코더를 훈련한다.
목표 시퀀시의 시작 신호로
디코더의 추론 단계 (Inference phase)
인코더-디코더 추론단계
추론(Inference) 또는 예측(Prediction) 단계 동안 실제 출력 시퀀스 또는 단어를 갖지 않는다. 추론단계 동안 숨겨진 상태(hidden state)와 함께 디코더에 입력으로 이던 시간 단계로부터 예측된 출력을 전달한다.
디코더의 예측 단계에서 첫번째 시간 단계는 입력으로
이후 시간 단계 동안 디코더로의 입력은 이전 디코더로부터의 숨겨진 상태(hidden state)와 출력이다.
예측 단계는 최고 목표 시퀀스 길이 또는
NOTE : 이는 단지 Seq2Seq의 직관적인 설명일 뿐이다. 입력 언어 단어와 목표 언어 단어에 대한 단어 임베딩(embedding)을 만든다. 임베딩(Embedding)은 단어와 그에 관련된 의미를 조밀하게 표현한다.
Seq2Seq 모델의 성능을 어떻게 개선할 수 있을까?
- 대규모 훈련 데이터셋
- 하이퍼파라미터 튜닝
- 어텐션 메커니즘(attention mechanism)
어텐션 메커니즘이란?
인코더는 컨텍스트 벡터(context vector) 또는 생각 벡터(thought vector)를 디코더로 전달한다. 생각 또는 컨텍스트 벡터는 전체 입력 시퀀스를 요약하는 하나의 벡터이다. 입력 단어중에는 번역시 영향도 때문에 좀 더 많은 주목(attention)이 필요한 단어들도 있을 것이다.
어텐션 메커니즘의 기본적인 아이디어는 각 문장에 대해 하나의 벡터 표현을 학습하는 시도를 피하는 것이다. 어텐션 메커니즘은 어텐션 가중치(attention weight)를 기준으로 입력 시퀀스의 특정 입력 벡터에 어텐션을 추가하는 것이다. 이는 디코더 네트워트가 인코더의 출력의 다른 부분에 '집중(focus)'하도록 한다. 어텐션 가중치 셋을 사용하여 디코더의 출력의 모든 단계에서 이를 수행한다.