모두야
CH8) 어텐션 본문
seq2seq의 문제점/ 해결
Encoder가 시계열 데이터를 인코딩 할 때, Encoder의 출력은 '고정 길이의 벡터' 이다.
입력 문장 길이에 관계없이, 항상 같은 길이의 벡터로 표현해야한다.
-> 아무리 긴 문장이여도 고정 길이의 벡터로 변환 해야한다.
☞ Encoder 개선
Encoder 출력 길이를 입력 문장 길이에 따라 바꿔주는 것이 좋다.
시각별 LSTM 계층의 은닉 상태 벡터를 모두 이용하여 입력된 단어와 같은 수의 벡터를 얻는다.
=> 시각별 LSTM 계층의 은닉 상태에는 어떤 정보가 담겨 있을까?
직전에 입력된 단어의 정보가 많이 포함되어 있다.
은닉상태의 모든 시각만큼 꺼낸다
☞ Decoder 개선
1. 맥락벡터 c
[ 입력과 출력의 여러 단어 중 어떤 단어끼리 서로 관련이 있는가 의 대응 관계를 알고 싶다 ]
고양이=cat, 나=I (얼라인먼트alignment)
Encoder에서 각 단어에 대응하는 LSTM 계층의 은닉 상태 벡터 hs가 출력되었다.
각 단어에 대응하는 벡터를 hs에서 골라서 사용하는 것이 아니라, (선택시 미분 불가->오차역전파법 불가)
hs의 모든 벡터를 사용하고 각 단어의 중요도를 나타내는 가중치 a를 확률분포처럼 나타낸다.
중요도 a와 각 벡터 hs를 통해 가중치 합을 구하여 맥락벡터 c를 계산한다.
a에서 '나'에 해당하는 가중치가 0.8 이므로 맥락벡터 c에서도 '나' 벡터의 성분이 많이 포함 되어있다.
(마치 '나' 벡터를 선택한 것 같다)
2. 가중치 a
위의 코드 구현을 통해 가중합을 이용하여 맥락 벡터를 얻을 수 있다. 이때 가중치 a는 어떻게 구할까?
데이터로부터 자동으로 학습할 수 있는 가중치 a를 구해보자.
Decoder의 첫번째(시각) LSTM 계층이 은닉 상태 벡터h 를 출력할 때까지의 처리를 알아보자.
내적 : 두 벡터가 얼마나 같은 방향을 향하고 있는가 = 두 벡터의 유사도를 표현한다.
hs와 h의 내적을 통해 유사도를 산출한다 -> s (정규화 되기 전: 점수) => a (정규화 : softmax 함수 0~1값)
3. Attention 계층
[Attention weight + Weight sum 계층]
Attention weight : Encoder가 출력하는 각 단어의 벡터 hs로 부터 해당 단어의 가중치 a를 구한다.
Weight sum : a와 hs의 가중 합을 구하고, 그 결과 맥락 벡터 c를 출력한다.
어텐션을 갖춘 seq2seq 구현
어텐션 가중치 시각화
seq2seq가 시계열 변환을 할 때, 어텐션 가중치를 시각화 한 것
년/월/일 대응 관계가 중요하다
=> 신경망 내에서 어떤 처리가 이루어지는 지 잘 모르는 경우가 많은데, 어텐션으로는 단어와 단어의 관련성을 살펴볼 수 있다.
양방향 RNN
- Encoder가 출력하는 hs의 각 행은 대응하는 단어의 성분이 포함되어 있다.
- 기존 RNN에서는 글이 왼쪽에서 오른쪽으로 읽히니까 균형 있지 못하다.
- 양방향 RNN을 이용하여 균형있도록 처리하려고 한다.
역방향 LSTM을 추가한다. 두개의 LSTM 계층의 은닉 상태를 연결 시킨 벡터가 최종 은닉상태로 처리된다.
양방향으로 처리함으로써, 각 단어에 대응하는 은닉 상태 벡터에는 좌우 양쪽 방향의 정보를 집약할 수 있다.
1) 기존 LSTM 계층 (왼쪽→오른쪽 처리)
2) 뒤집어서 LSTM 처리 (오른쪽→왼쪽 처리)
Attention 계층의 출력(맥락 벡터)가 다음 시각 LSTM 계층에 연결 되는 경우
vs
Attention 계층의 맥락 벡터가 Affine계층으로 들어가는 경우 [기존]
skip 연결(skip connection)
= 잔차 연결(residual connection)
= 숏컷 (short-cut)
: 계층을 넘어 선을 연결하는 기법
:: skip 연결 시 덧셈(원소별 덧셈)으로 연결된다. = 역전파시 영향X
1. 구글 신경망 기계 번역 (GNMT)
2. 트랜스포머
-> RNN을 제거한 Attention을 사용하여 처리한다.
3. 뉴럴 튜링 머신(NTM)
정리
'밑.시.딥 > 2권' 카테고리의 다른 글
CH7) RNN을 사용한 문장 생성 - (2) (0) | 2021.09.28 |
---|---|
CH7) RNN을 사용한 문장 생성 - (1) (0) | 2021.09.28 |
CH6 ) 게이트가 추가된 RNN - (3) (0) | 2021.09.27 |
CH6) 게이트가 추가된 RNN (기울기 문제점 대책) (0) | 2021.09.26 |
CH6) 게이트가 추가된 RNN(기울기 폭발/ 기울기 손실) (0) | 2021.09.26 |