일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 파이썬인강
- 파이썬배우기
- 파이썬강의후기
- 파이썬독학하기
- 순천여행
- 비트코인
- 파이썬온라인수업
- 패스트캠퍼스후기
- 스위스기준금리
- 셀레니움
- 파이썬문법
- 파이썬수업
- 암호화폐
- SQL
- 미국디리스킹
- MBTI성격유형
- 비전공자파이썬
- MBTI
- MBTI성격검사
- 패스트캠퍼스수강후기
- 스크래핑
- 파이썬독학
- 광교카페
- 파이썬클래스
- 파이썬 인강
- swift문법
- 파이썬강의
- 노르웨이기준금리
- 중국수출통제
- 파이썬기초
- Today
- Total
이제 데이터 공부 안하는 블로그
어텐션(Attention) 본문
* 제가 공부하기 위해 만든 자료입니다. 혹시 틀린 부분이 있다면 댓글로 알려주시면 수정하겠습니다.
기존 RNN 의 단점은 기울기 소실로부터 나타나는 장기 의존성(Long-term dependency) 문제이다. 장기 의존성 문제는 문장이 길어질 경우 앞 단어의 정보를 잃어버리는 현상을 말한다. 이러한 장기 의존성 문제를 해결하기 위해 LSTM과 GRU이 등장했다.
RNN 기반 모델 (LSTM, GRU)이 단어를 처리하는 방법은 아래와 같다. 인코더에서 입력 시퀸스를 컨텍스트 벡터라는 하나의 고정된 크기의 벡터로 압축하고, 디코더는 이 컨텍스트 벡터를 통해 출력 시퀸스를 만들어낸다.
위 구조의 문제는 고정 길이의 hidden-state 벡터에 모든 단어의 의미를 담아야 한다는 점이다. LSTM, GRU가 장기 의존성 문제를 어느 정도 개선하기는 했으나 문장이 너무 긴 경우에는 고정길이의 hidden-state 벡터에 다 담기가 어렵다. 하나의 고정된 크기의 벡터에 모든 정보를 압축하다보면 정보 손실이 발생한다. 그리고 RNN의 고질적인 문제인 기울기 소실 문제도 발생한다. 위와 같은 문제들을 해결하기 위해서 고안된 것이 Attention 이다. Attention 은 신경망들의 성능을 높이기 위한 메커니즘이자 트랜스포머의 기반이 되는 메커니즘이다.
어텐션(Attention)
Attention은 디코더에서 출력 단어를 예측하는 매 시점마다 인코더에서의 전체 입력 문장을 다시 한 번 참고한다. 다만, 전체 입력 문장을 전부 동일한 비율로 참고하지 않고 해당 시점에서 예측해야할 단어와 연관이 있는 입력 단어 부분에 더 집중(attention)해서 참고한다.
디코더에서 Attention이 동작하는 방법
- 디코더의 각 time-step 마다의 hidden-state 벡터는 쿼리(query)로 작용한다.
- 인코더에서 넘어온 N개 hidden-state 벡터를 키(key)로 여기고 이들과의 연관성을 계산한다.
- 디코더의 은닉 벡터(hidden state vector)와 인코더의 Time-step 별 은닉 벡터들을 내적한 값이 Attention score가 된다.
위의 사진은 디코터 첫 단어에 대한 어텐션 가중치가 구해지는 과정이다.
- 쿼리(Query)인 디코더의 hidden-state 벡터, 키(Key)인 인코더에서 넘어온 hidden-state 벡터를 준비합니다.
- 각각의 벡터를 내적한 값을 구합니다.
- 이 값에 소프트맥스(softmax) 함수를 취해줍니다.
- 소프트맥스를 취하여 나온 값에 밸류(Value)에 해당하는 인코더에서 넘어온 hidden-state 벡터를 곱해줍니다.
- 이 벡터를 모두 더해줍니다. 이 벡터의 성분 중에는 쿼리-키 연관성이 높은 밸류 벡터의 성분이 더 많이 들어있게 됩니다.
- (그림에는 나와있지 않지만) 최종적으로 5에서 생성된 벡터와 디코더의 hidden-state 벡터를 사용하여 출력 단어를 결정하게 됩니다.
디코더는 인코더에서 넘어온 모든 Hidden state 벡터에 대해 위와 같은 계산을 한다. 그래서 Time-step 마다 출력한 단어가 어떤 인코더의 어떤 단어 정보와 연관되어 있는지, 즉 어떤 단어에 집중(attention)할 지 알 수 있다. 이렇게 attention을 활용하면 디코더가 인코더에 입력되는 모든 단어의 정보를 활용할 수 있기 때문에 장기 의존성 문제를 해결 할 수 있다.
'딥러닝' 카테고리의 다른 글
Convolution Neural Network (CNN, 합성곱 신경망) (0) | 2021.08.24 |
---|---|
Transformer & BERT, GPT (0) | 2021.08.21 |
LSTM (Long Term Short Memory, 장단기기억망) & GRU (Gated Recurrent Unit) (0) | 2021.08.19 |
순환 신경망 (Recurrent Neural Network, RNN) (0) | 2021.08.19 |
Fast Text - 철자 단위 임베딩(Character level Embedding) (0) | 2021.08.18 |