입력문장과 출력문장의 길이가 다를 경우 사용한다. (ex) 기계번역 )
예 1) 영어문장을 한국어문장으로 번역한다고 했을 때,
입력문장인 영어문장과 번역된 결과인 한국어 문장의 길이가 똑같을 필요는 없다.
예 2) 텍스트 요약의 경우
출력 문장이 요약된 문장이므로 입력 문장보다는 길이가 짧을 것이다.
context vector
가 된다.[입력]
1) 입력 문장은 '단어 토큰화'를 통해 단어 단위로 쪼개짐
[인코더]
2) 토큰화된 단어가 순차적으로 입력
[컨텍스트 벡터]
3) 모든 단어가 입력되었다면, 인코더 RNN셀의 마지막 시점의 은닉 상태를 디코더 RNN셀로 넘겨줌
-> 컨텍스트 벡터는 디코더 RNN셀의 첫번째 은닉 상태에 사용됨
[디코더]
4) [디코더 1]의 초기 입력으로 문장의 시작을 의미하는 심볼 < SOS >가 들어감
5) < sos >가 [디코더 1]에 들어오면, [디코더 1] 에서는 다음에 등장할 확률이 높은 단어(je
)를 예측
-> [디코더 2]의 입력으로 보냄
6) [디코더 2]는 je
로부터 다음에 올 단어인 suis
를 예측
-> 다시 [디코더 3]의 입력으로 suis
보냄
7) 반복 (다음에 올 단어 예측 -> 예측단어를 다음시점의 RNN셀의 입력으로 넣음)
8) 문장의 끝을 의미하는 심볼인 < eos >가 다음 단어로 예측되면 -> 종료
컨텍스트 벡터(context vector)
: 인코더에서 모든 단어를 입력받은 뒤,
인코더 RNN 셀의 마지막 시점에서의 은닉상태
: 인코더에서 모든 단어를 순차적으로 입력 받은 뒤,
마지막에 이 모든 단어 정보들을 압축해서 만드는 하나의 벡터.
압축이 완료되면 인코더는 이 컨텍스트 벡터를 디코더에 전송하고,
디코더는 컨텍스트 벡터를 받아서 번역된 단어를 한 개씩 순차적으로 출력함.
매시점 RNN 셀에 두 개의 입력이 들어감.
입력 1 - 현 시점 t 에서의 입력값
입력 2 - 이전 시점 t-1 에서의 은닉상태 값
마지막 RNN 셀의 은닉상태 값
= 컨텍스트 벡터
= 이는 과거 시점의 동일한 RNN 셀에서의 모든 은닉 상태의 값들의 영향을 누적해서 받아온 값인 셈
= 입력문장의 모든 단어 토큰들의 정보를 요약해서 담고 있다고 할 수 있다.
1) 입력1의 입력(단어) -> 임베딩 벡터 값으로 변환
2) RNN 셀에 두 개의 입력
입력 1 (단어 벡터값) - 현 시점 t 에서의 입력값 <SOS>
입력 2 (은닉) - 컨텍스트 벡터 ( : 디코더의 첫번째 은닉상태의 값으로 사용)
3) 입력들이 RNN 셀을 거치면 ~
... 3-1) 은닉상태 -> 다음 시점에서의 은닉상태로 사용 (정보 전달 및 유지 역할)
... 3-2) 출력 벡터(여러 개)가 나옴
4) 출력 벡터들은 softmax 함수를 통해
각 요소를 확률로 정규화하여 총합이 1이 되도록 만들어준다.
-> 토큰들에 대한 확률 분포 얻기!
(출력 시퀀스의 각 단어별 확률값을 반환)
5) 이 분포에서 가장 확률이 높은 단어를 선택하며 출력단어 결정
(=해당 시점의 출력으로 사용)
1) 입력1의 입력(단어) -> 임베딩 벡터 값으로 변환
2) RNN 셀에 두 개의 입력
입력 1 - 현 시점에서의 입력값 (= 이전시점에서 예측한 단어)
입력 2 - 이전 시점에서의 은닉상태 값
3) 앞 과정 반복 ~~
🍔
<sos>
와<eos>
인코더에서는 사용되지 않음!
디코더가 문장 생성을 시작하고 끝내는 데에 중요한 역할을 하므로 두 특수토큰이 필요한 거임!
: RNN의 모든 시점에 대해서 이전 시점의 예측값 대신 실제값을 입력으로 주는 방법
<SOS>
에 해당하는 \t
를 디코더로 보냅니다.<EOS>
에 해당하는 \n
이 나올 때까지 다음 문자를 예측하는 행동을 반복합니다.: 기계 번역의 성능이 얼마나 뛰어난가를 측정하기 위해 사용되는 방법
(언어모델의 성능 측정을 위한 방법 -> PPL)
: 기계 번역 결과와 사람이 직접 번역한 결과가 얼마나 유사한지 비교하여 번역에 대한 성능을 측정 방법
디코더의 hidden state 갱신
모델의 가중치 갱신
손실 함수 계산의 목적
context vector
Decoder의 hidden state
이후에는 이전타임 스텝의 hidden state와 현재 time step에서 입력된 단어에 기반하여
hidden state가 게속해서 업데이트 됨
즉, 디코더에서의 hidden state는 context vector의 벡터를 받아오는 것이 맞음!!!!!