Seq2seq 모델
Sequence-to-Sequence( seq2seq) 시퀀스를 입력으로 받아 시퀀스를 출력하는 구조의 네트워크. 인코더- 디코더 구조로 이루어져있다. many to many의 경우 기계번역에 주로 사용된다.
인코더
입력으로 들어오는 문장의 내용을 RNN을 이용해 벡터 형태로 만들며 이런 과정을 인코딩이라고 한다.
입력의 마지막 단어의 통해 나온 context 벡터를 디코더의 입력으로 사용한다.
디코더
인코딩된 정보 벡터를 이용해 결과문장으로 하나하나 풀어내는 과정으로 디코딩이라고 한다. 인코더의 마지막 출력, context 벡터과 SOS( Start of Sequence)를 입력으로 받아 RNN을 거치며 y값을 생성해낸다.
Teacher Forcing
학습시 모델이 처음에 틀리게 예측을 하더라도 다음단어로 정답을 넣어 학습하는 것. 시퀀스 특성상 앞에서 한번 틀려버리면 그뒤로 줄줄이 이상한 단어를 출력할 수 있기 때문에 처음에 모델이 학습하기 쉽도록 답을 알려준다.
단점
모든 입력 문장을 하나의 고정된 크기 벡터로 압축시키기 때문에 정보 손실이 발생한다. 단일벡터 사용은 문장이 길어질수록 모델의 성능이 급격하게 하락하게 되는 요인이다. 이런 문제를 해결 하기 위해 attention 이라는 메커니즘이 도입 되었다.
Attention
필요한 정보에 주의를 집중한다 라는 뜻을 담고 있어서 Attetion이라는 이름이 붙었다. 디코더에서 출력 할때 인코더의 어떤정보에 집중해야 하는지 알 수 있도록 해서 출력하는데 도움을 준다.
Dot product attention
1) dot product를 이용해 Attention score 계산 한다.
디코더의 히든스테이트 값 하나와 각 인코더의 히든스테이트를 하나씩 내적을 구한다. 이를 Attention score라고 하며 두 벡터가 얼마나 연관관계가 높은지 보기 위해 내적을 한다. 가장 스코어가 높은 인코더의 히든스테이트가 현재 계산한 디코더의 히든스테이트와 연관관계가 높은 것임을 알 수 있다.
2) Softmax 함수를 이용해 Attention Distribution를 구한다.
1에서 계산한 어텐션 스코어에 소프트맥스 함수를 취해 총합이 1인 확률분포로 만들어준다. 어텐션 스코어를 확률 값으로 만들어줘서 어떤 값이 어떻게 영향을 미치는지 비율로 확인 할 수 있게 된다.
3) 각 인코딩 시점의 hidden state와 어텐션 분포 값을 가중합하여 어텐션 값(value)를 구한다.
각 인코더에서 나온 값을 A, B, C, D 라고 했을때 어텐션 분포가 0.2, 0.1, 0.3, 0.4 라면 0.2A+0.1B+0.3C+0.4D = Attention value
각 hidden state 값에 확률값을 곱해주게 되면 중요도에 따라 높은 값은 더 높게 낮은 값은 낮게 들어가게 되는 것. 즉, weighted sum 가중합된 하나의 벡터가 나온게 된다.
4) 최종적으로 나온 어텐션 값과 디코딩 과정에서 나온 hidden state를 concatenate 해 하나의 벡터로 만든다. 각 디코딩 시점마다 어텐션 값을 구해서 concatenate 벡터를 만들어 디코딩을 진행한다.
어텐션 값을 사용하게 되면 디코딩 시 각 시점마다 인코더의 모든 값들과 얼마나 연관 있는지 다시 한번 참조하게 된다. 결론적으로 어떤 인코더의 정보에 집중해야 하는지 알려주게 되므로 문장 길어져도 성능이 크게 하락하지 않고 robust한 모습을 보여준다. 시퀀스 형태를 가지는 구조에는 모두 적용 가능하며 간단한 구조로 성능을 크게 끌어올려 각광받은 메커니즘이다.
'머신러닝 > 딥러닝' 카테고리의 다른 글
텍스트 요약을 위한 BERTSUM (0) | 2022.07.07 |
---|---|
Bert(Bidirectional Encoder Representation from Transformer) (0) | 2022.07.07 |
FastText, Glove (0) | 2022.07.04 |
가중치 초기화 (0) | 2022.07.03 |
배치 정규화, 레이어 정규화 (0) | 2022.07.03 |