- Transformer : Attention Is All You Need
RNN은 순차적인 데이터를 처리하는 데 사용되는 신경망 구조이다. RNN은 이전 시간 단계의 입력을 현재 시간 단계의 입력과 함께 처리하여 순차적인 정보를 유지하고 활용할 수 있고 텍스트, 음성 등 순차적인 시계열 데이터 처리에 유용하다
- 특징: 순차적인 데이터 처리, 이전 상태의 정보를 기억
- 장점: 순차적인 패턴을 학습할 수 있음, 시계열 데이터 처리에 적합
- 단점: 장기 의존성(Long-Term Dependency)을 잘 학습하지 못하는 문제, Gradient Vanishing/Exploding 등의 문제 발생
![1](https://private-user-images.githubusercontent.com/79856225/259106542-11058141-d431-45f9-bb99-e04569a06bda.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjAxOTk2NjEsIm5iZiI6MTcyMDE5OTM2MSwicGF0aCI6Ii83OTg1NjIyNS8yNTkxMDY1NDItMTEwNTgxNDEtZDQzMS00NWY5LWJiOTktZTA0NTY5YTA2YmRhLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzA1VDE3MDkyMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTdjNDFkOWZiZDc0MDAxNmRiMzBiN2YxMDA0ZjY5NzU0OTYwYmVkMTNhZTdhZjgwNTZkOTdlNGMzNjg4MzA4YTMmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.39YirOsWe5_GavcHxH7Sl9-J4i7J9uIxdp2mHZHI3ZE)
각각의 단어를 컴퓨터가 이해할 수 있도록 Vector로 변환하며 이것을 워드 임베딩이라고 한다
일반적으로 사용되는 워드 임베딩 기법에는 다음과 같은 것들이 있다.
- Word2Vec: 2013년에 구글 연구원인 Tomas Mikolov 등에 의해 제안된 기법으로, CBOW(Continuous Bag of Words)와 Skip-gram 두 가지 모델이 있다. CBOW는 주변 단어들을 통해 중심 단어를 예측하는 방식으로 학습하며, Skip-gram은 중심 단어를 통해 주변 단어들을 예측하는 방식으로 학습한다.
- GloVe(Gloabal Vectors for Word Representation): 스탠포드 대학의 연구자들이 제안한 기법으로, Word2Vec과 유사한 방식으로 단어의 출현 빈도와 동시 등장 확률 통계를 이용하여 단어들을 벡터로 변환한다.
- FastText: 페이스북 AI 연구팀이 개발한 기법으로, Word2Vec의 확장된 버전이다. 단어를 더 작은 서브워드(subword) 단위로 분해하여 임베딩하고, 이를 통해 희소한 단어들에 대한 표현을 더욱 효과적으로 학습할 수 있다.
- ELMo(Embeddings from Language Models): 사전 훈련된 언어 모델을 활용하여 단어 임베딩을 학습하는 기법으로, 문맥 정보를 고려하여 단어의 다의성과 문맥 의존성을 잘 반영한다.
- BERT(Bidirectional Encoder Representations from Transformers): 구글 AI 연구팀이 제안한 기법으로, 양방향 Transformer 인코더를 사용하여 문장 내 단어들을 임베딩한다. BERT는 현재 자연어 처리 분야에서 가장 성능이 우수한 워드 임베딩 기법 중 하나로 인정받고 있다.
LSTM은 RNN의 단점 중 하나인 장기 의존성 문제를 해결하기 위해 제안된 변형된 RNN 구조이다. LSTM은 시간적인 의존성을 잘 다룰 수 있도록 설계되었다. LSTM은 게이트를 이용하여 특정 시간 단계에서 중요한 정보를 기억하고, 필요에 따라 이를 장기적으로 전달하거나 삭제할 수 있다.
- 특징: 장기 의존성을 다루기 위한 메모리 셀, 입력 게이트, 삭제 게이트, 출력 게이트 등의 구조
- 장점: 장기 의존성 문제를 해결, 시계열 데이터 처리에 적합
- 단점: 많은 파라미터와 연산이 필요하여 학습과정이 복잡함, 계산량이 크고 처리 속도가 상대적으로 느릴 수 있음
딥러닝 모델 중 하나로, 시퀀스 데이터를 입력으로 받아 다른 시퀀스 데이터를 출력으로 생성하는 모델이다. 주로 자연어 처리(Natural Language Processing, NLP) 분야에서 사용되며, 기계 번역, 챗봇, 요약, 질의응답 등의 다양한 작업에 적용된다.
Seq2Seq 모델은 기본적으로 두 개의 RNN(Recurrent Neural Network)을 활용하여 동작한다
- 인코더(Encoder): 입력 시퀀스를 받아 고정 길이의 문맥 벡터를 생성한다. 인코더 RNN은 입력 시퀀스의 각 단어를 순차적으로 입력받고, 중간 은닉 상태(hidden state)를 업데이트하여 시퀀스 정보를 요약한다. 인코더의 마지막 은닉 상태를 문맥 벡터(context vector)로 사용한다. 이 문맥 벡터는 입력 시퀀스의 정보를 압축하고 다른 RNN으로 전달한다.
- 디코더(Decoder): 인코더가 생성한 문맥 벡터를 초기 상태로 하여 출력 시퀀스를 생성한다. 디코더 RNN은 시작 토큰(예:
<start>
)을 입력으로 받아 첫 번째 단어를 생성하고, 그 다음에는 이전 단어를 입력으로 받아 다음 단어를 예측한다. 이런 식으로 디코더는 단어 단위로 순차적으로 출력 시퀀스를 생성한다. 디코더는 끝 토큰(예:<end>
)을 생성할 때까지 단어를 계속해서 생성하고, 최종적으로 생성된 시퀀스를 출력으로 반환한다.
Seq2Seq 모델은 훈련과 추론(테스트) 단계에서 다르게 동작한다
- 훈련: 훈련 데이터의 입력 시퀀스와 출력 시퀀스를 사용하여 인코더와 디코더를 동시에 학습한다. 손실 함수로는 보통 교차 엔트로피 손실(Cross-Entropy Loss)을 사용하여 예측된 출력 시퀀스와 실제 출력 시퀀스의 차이를 최소화한다.
- 추론: 훈련된 Seq2Seq 모델을 사용하여 새로운 입력 시퀀스에 대한 출력 시퀀스를 생성한다. 디코더는 시작 토큰을 입력으로 받아 다음 단어를 예측하고, 이를 반복하여 출력 시퀀스를 생성한다. 일반적으로 빔 서치(Beam Search) 등의 방법을 사용하여 더 나은 출력 시퀀스를 찾는다.
Seq2Seq 모델은 자연어 처리 태스크에서 탁월한 성능을 보여주고, 다양한 변형 및 발전된 모델들이 제안되어 계속해서 연구되고 있다. 이러한 모델들은 자연어 이해와 생성 작업에 큰 도움을 주며, 실제 응용에서도 많이 활용되고 있다.
![3](https://private-user-images.githubusercontent.com/79856225/259106569-772bf6da-6238-4f0c-95ab-fd13b2995903.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjAxOTk2NjEsIm5iZiI6MTcyMDE5OTM2MSwicGF0aCI6Ii83OTg1NjIyNS8yNTkxMDY1NjktNzcyYmY2ZGEtNjIzOC00ZjBjLTk1YWItZmQxM2IyOTk1OTAzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzA1VDE3MDkyMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQxOWU2ZGIzZTAyN2RiMmNjMzMxOWVhNzQzYzAyZWEyMTNhZDQ2NTE3YmM1OGMyOGVmMDBjYmVlYjhjZDQ0MWImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.AzRwQ9T5bh-yZw1_-tS7pLp1eYm4NanPWa5e-_mERQg)
![4](https://private-user-images.githubusercontent.com/79856225/259106575-37133b0a-ae34-432e-a1c9-d8373fe0d469.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjAxOTk2NjEsIm5iZiI6MTcyMDE5OTM2MSwicGF0aCI6Ii83OTg1NjIyNS8yNTkxMDY1NzUtMzcxMzNiMGEtYWUzNC00MzJlLWExYzktZDgzNzNmZTBkNDY5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzA1VDE3MDkyMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTAyMDU3ZWY1MDY1NzQ1Y2IzNzQxYTI5M2UyMzRkYmJhMGY1YTU2NWYxMTFkNjMzNWY4OTY0NDc2MzQzZmUyZTEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.BbswDPuXazI4lL_SsQKhe5TcutUX66aBKsychunMpek)
![5](https://private-user-images.githubusercontent.com/79856225/259106582-6177b3d5-911c-48f3-ae7c-ff56964f3761.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjAxOTk2NjEsIm5iZiI6MTcyMDE5OTM2MSwicGF0aCI6Ii83OTg1NjIyNS8yNTkxMDY1ODItNjE3N2IzZDUtOTExYy00OGYzLWFlN2MtZmY1Njk2NGYzNzYxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzA1VDE3MDkyMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWU2ZDIyMjZmNWYwMGM2OGRlNWYzYThmNGM0ZWExNjZlNTZlYzhjY2MyZWM2ZjEyZTc4MDIwZTk2MGI5ODRiMzkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.Gwj8sexGf1sB2_62HNxa6Hh3BQPGDoCQTPNIhnORoow)
![6](https://private-user-images.githubusercontent.com/79856225/259106589-71b89fff-14cf-422d-811b-6120e2b96b14.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjAxOTk2NjEsIm5iZiI6MTcyMDE5OTM2MSwicGF0aCI6Ii83OTg1NjIyNS8yNTkxMDY1ODktNzFiODlmZmYtMTRjZi00MjJkLTgxMWItNjEyMGUyYjk2YjE0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzA1VDE3MDkyMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWM2YmM5NDI2YzEwMzkxZDc2NDhlNjg1NGQwM2Y4MDA2MmU2NzI2MDE3NTAzYmRkNmVjNWFhZmJmYjdjZGFhMWEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.sejIru67Jb82nwacgOoB7GwzuQth79at532JiUZww0g)
![7](https://private-user-images.githubusercontent.com/79856225/259106593-64d03bce-577a-4f9f-ba7a-61970cfbf951.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjAxOTk2NjEsIm5iZiI6MTcyMDE5OTM2MSwicGF0aCI6Ii83OTg1NjIyNS8yNTkxMDY1OTMtNjRkMDNiY2UtNTc3YS00ZjlmLWJhN2EtNjE5NzBjZmJmOTUxLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzA1VDE3MDkyMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTZjY2FiMzFiOTRjNjlmNmY0N2Y5MTYwNTk3NTc3ZjExODkwMzhkNGE1ZGJiODlmODQ2ZThmZmRkZGQyMDlmZjUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.NFUfifUE4wcKlQ5k0MyxszSxWdGL7xcJiHXlQe5S_OU)
각각의 단어들을 벡터로 변환 하며 벡터들이 한번에 들어가므로 위치 정보가 없다.
따라서 위치값을 알려주기 위해 Positional Encoding을 해준다.
![8](https://private-user-images.githubusercontent.com/79856225/259106595-f2c5cb78-3c28-4501-bdd2-f8718ce47230.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjAxOTk2NjEsIm5iZiI6MTcyMDE5OTM2MSwicGF0aCI6Ii83OTg1NjIyNS8yNTkxMDY1OTUtZjJjNWNiNzgtM2MyOC00NTAxLWJkZDItZjg3MThjZTQ3MjMwLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzA1VDE3MDkyMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWUzZjRiNmRkOWIzNDI2NDU0M2JmY2JiNWI3Y2QxMzY3NTJjOTMxNTUwNDdiYmZiYWVkNjNhYzVmYTc5OTAxMjkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.nmsqkWsm9nUbogCzNiBjmtkh7c40FOoOaa09NbvG0AM)
![9](https://private-user-images.githubusercontent.com/79856225/259106597-d4db980d-9250-427a-8a9f-0146fbfc6fc4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjAxOTk2NjEsIm5iZiI6MTcyMDE5OTM2MSwicGF0aCI6Ii83OTg1NjIyNS8yNTkxMDY1OTctZDRkYjk4MGQtOTI1MC00MjdhLThhOWYtMDE0NmZiZmM2ZmM0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzA1VDE3MDkyMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTE3MWRjNGJmYzU1MDA3ZTZkYjQxY2Y5YzcwZTQ5MmIwNDI2ZjhmYjkyNmNiMGFmN2QxZjNiZGZlMzhhMjBiZWImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.OpzIxi0I1_MAEEPE7FaGoyr1tUCpN2s_sHPkAFUiZ64)
![10](https://private-user-images.githubusercontent.com/79856225/259106601-6b5922c5-7c4e-4ee5-865c-9cb12c259808.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjAxOTk2NjEsIm5iZiI6MTcyMDE5OTM2MSwicGF0aCI6Ii83OTg1NjIyNS8yNTkxMDY2MDEtNmI1OTIyYzUtN2M0ZS00ZWU1LTg2NWMtOWNiMTJjMjU5ODA4LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzA1VDE3MDkyMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTdlMTUxOWZmZmQwNTQyOTFiMzA2ZDg3ODQ3MTdmYWRlMTE4MGM1YWFjNzI3OTIzMGI0ZmJmZmIwMjVlNzBhNGUmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.qVlasyttYufilwhr7Zfi7wChkiNxwlKaojKDQbqBjUM)
Self-Attention은 문장 내 단어들 간의 상호 관계를 이해하기 위한 메커니즘이다. 각 단어는 모든 다른 단어들에 대해 가중치를 계산하여 중요한 정보를 집중적으로 수집한다. 이 가중치는 "어텐션 스코어"로 나타내며, 주어진 단어와 다른 단어 간의 유사도를 기반으로 계산된다. 이러한 Self-Attention을 여러 차례 반복하여 문장 내 정보를 효과적으로 추출한다.
어텐션 스코어를 계산하는 방법
- Query, Key, Value 생성: 주어진 입력 시퀀스에 대해 Query, Key 및 Value를 생성한다. 이들은 선형 변환을 통해 생성되며, Query는 주로 해당 위치에서 어떤 정보를 얻고자 하는지를 나타내고, Key와 Value는 각각 해당 위치의 정보를 나타낸다.
- 어텐션 스코어 계산: Query와 Key 사이의 유사도를 계산한다. 이를 위해 Query와 Key 사이의 내적(dot product)을 계산한다. 내적의 결과는 어텐션 스코어가 되며, 스코어는 각 Key에 대해 Query와의 유사성을 나타낸다.
- 스케일링: 어텐션 스코어가 너무 크면 계산이 불안정해질 수 있으므로, 스케일링을 적용한다. 일반적으로 스케일링 인자로 루트값을 사용하여 어텐션 스코어를 나누어준다.
- 소프트맥스 적용: 스케일링된 어텐션 스코어에 소프트맥스 함수를 적용하여 정규화된 어텐션 가중치를 얻는다. 이렇게 하면 각 Key의 중요도가 확률 분포로 표현된다.
- 가중합 계산: 소프트맥스를 통해 얻은 어텐션 가중치와 Value를 곱하여 가중합을 계산한다. 이 가중합은 Query 위치에서의 최종 출력을 생성하는 데 사용된다.
찾고자하는 단어의 Query를 가지고 모든 문장의 Key를 내적하여 가장 유사한 값을 찾아낸다.
![11](https://private-user-images.githubusercontent.com/79856225/259106605-fa89ac5d-77fa-4488-aeaa-6b9819509749.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjAxOTk2NjEsIm5iZiI6MTcyMDE5OTM2MSwicGF0aCI6Ii83OTg1NjIyNS8yNTkxMDY2MDUtZmE4OWFjNWQtNzdmYS00NDg4LWFlYWEtNmI5ODE5NTA5NzQ5LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzA1VDE3MDkyMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTFlNDVhNjQ1ZjRkNjNkN2I4ZDQ0OTExNzg4MTczNmU2NWI1M2QwNTk2MzYzZGVhMmNjOWY4OGRjMjU4ZTQ2NzEmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.iVPgQb3y8OWi8oXtOGAKaKWQsQAPl2_tWehu-WBlAgc)
![12](https://private-user-images.githubusercontent.com/79856225/259106608-3e6d81b1-a0d5-4d80-861a-ecc9d9ac3fd4.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjAxOTk2NjEsIm5iZiI6MTcyMDE5OTM2MSwicGF0aCI6Ii83OTg1NjIyNS8yNTkxMDY2MDgtM2U2ZDgxYjEtYTBkNS00ZDgwLTg2MWEtZWNjOWQ5YWMzZmQ0LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNDA3MDUlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjQwNzA1VDE3MDkyMVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWY2MzY5NTJlZDk1ZDRhM2EyZGRkMzY3N2U3MzNiNTIyOWY1ZWJiNjE2NmZhMWY0ZTg0YzMwMmZjNjI4OGU4OWImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.EawyDUvDWAeri3DF08jOECu7JQwYF5XEYGGp9Mrn74U)
-
워드 임베딩이 딥러닝이 생성한 Weight와 연산하여 Query, Key, Value 3개의 벡터로 변환
-
각 해당하는 Query벡터는 순차적으로 모든 Key와 내적 연산 후 소프트맥스 연산
-
소프트맥스 결과값과 Value 값과 곱한 후 모든 값들을 합쳐서 하나의output을 생성
-
위와 같은 방법으로 각각의 워드임베딩마다 각각의 output을 생성
-
문장을 input으로 넣으면 해당하는 문장을 나타내는 output 행렬이 나옴
-
각각의 어텐션에서 나온 벡터들을 concat 이후 학습된 weight와 연산하여 초기 demention을 맞춰줌