일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 피파온라인 API
- BERTopic
- 클래스 분류
- 자연어 모델
- 트위치
- 원신
- LDA
- 문맥을 반영한 토픽모델링
- 포아송분포
- 다항분포
- SBERT
- 조축회
- 데이터넥스트레벨챌린지
- 데벨챌
- 토픽 모델링
- Tableu
- KeyBert
- NLP
- geocoding
- 블루아카이브 토픽모델링
- Roberta
- Optimizer
- 구글 스토어 리뷰
- 개체명 인식
- CTM
- 옵티마이저
- 데이터리안
- 블루 아카이브
- 코사인 유사도
- 붕괴 스타레일
- Today
- Total
분석하고싶은코코
NLP - Bert이해하기(1)_어텐션 매커니즘(Attention) 본문
NLP에서 Bert라는 모델이 중요한 핵심 모델로 자리잡혀있습니다. 이에 Bert 모델을 그냥 사용하기보다 이해를 통해 다양한 파생 모델들이 어떻게 탄생하게 되었는지에 대해서 이해하기 위해 기본적인 Bert 이해하기를 포스팅합니다.
Bert 이해하기는 핵심요소인 트랜스포머(transformer)의 이해가 필요한데 이 트랜스포머에 대한 이해를 하려면 어텐션 매커니즘에 대해서도 이해할 필요가 있어 어텐션매커니즘 - 트랜스포머 - Bert 순으로 Bert에 대한 학습을 진행해볼 예정입니다. 어텐션 매커니즘을 이해하는데는 RNN 모델에 대해서 이해하는게 또 필요한데 너무 돌아가는 느낌이라 기본적으로 RNN과 SeqToSeq에 대해 알고 있다는 가정하에 어텐션 매커니즘부터 Bert까지 알아보고 포스팅해보겠습니다.
어텐션(Attention)
우선 어텐션에 대해서 이야기하기 전에 LSTM으로 구성된 Seq-to-Seq모델에 대해서 생각해보면 인코더에 있는 LSTM층들을 거쳐 나온 결과(컨텍스트 백터)를 디코더에게 전달해주면 이를 입력값으로 디코더의 층을 지나 최종 결과물이 나오게 됩니다. 이때 생각해야할 부분이 있습니다. RNN 모델을 통해 입력부터 결과까지 통과되는 모든 데이터들은 압축이 된 데이터들입니다. 그래서 기존의 데이터가 너무 클 경우 고정된 크기로 압축할 경우 정보의 손실이 발생합니다. 또한 LSTM의 장점이었던 이전 시점들에 대한 정보들이 남아있다는 정보 역시 시점 t의 수가 많아질수록 정확하게 기억하고 있지 못합니다. 또한 RNN의 고질적인 문제인 기울기 소실에 대한 문제 역시 있습니다. 어텐션이라는 기술은 시퀀스의 길이가 길어질때 이를 보정해주기 위해 등장한 기법입니다.
어텐션의 모든 것을 한 문장으로 이야기하자면 '디코더가 결과를 예측할때 디코더의 입력을 인코더에서 다시 한 번 참고하여 결과를 예측한다.'입니다. 이는 모든 디코더 시점마다 반복을 하여 매 시점 입력값에 대해서 인코더에서 입력에 대한 참고 결과를 디코더가 최종 결과를 만들어 내기 전에 참고할 수 있도록 해주는 것입니다. 이렇게 되면 디코더는 시퀀스가 길이가 길어도 이전 시점들에 대한 기억이 더 좋아질 수 밖에 없어지는것이죠. 이를 그림으로 쉽게 작해둔 블로그가 있어서 아래 그림을 참고해보면 쉽게 이해하실 수 있으실 겁니다. 우선 기존에 알고 있던 RNN에 대해서 그림으로 이해해보겠습니다.
RNN
Seq-to-Seq RNN
Seq-to-Seq RNN Attention
이러한 어텐션 중 가장 수식으로 이해하기 쉬운 닷 프로덕트 어텐션을 통해서 과정에 대해서 자세히 알아보겠습니다. 우선 아래 그림이 t시점은 입력값으로 'suis'를 받고 다음 단어를 예측하는 시점입니다. 이때 LSTM에서 들어온 입력값에 대한 은닉상태를 인코더에 다시 한 번 참고하게 하고 그 정보에 대한 결과를 바로 받아오는 것이 아니라 결과들에 대해서 softmax층을 통과시켜 합이 1의 결과로 만드록 이에 대한 정보를 하나로 합쳐서 디코더에게 보내게 됩니다.
디코더의 LSTM에서 t시점에 입력값을 받아 나온 은닉층을 S_t라고 할때 이 정보를 인코더의 각 시점들에 보내주는데 이때 이 정보는 인코드이 각 시점의 은닉층 h_i와 내적(dot product)을 하게됩니다. 이렇게 모든 인코더의 은닉상태들과 내적하여 나온 값들을 앞선 그림에서 봤듯 softmax를 적용하여 합이 1인 상태로 만들어주는데 이를 어텐션 분포라고 합니다.
이렇게 만들어진 어텐션분포를 다시 각 인코더 시점에 대응되는 은닉상태들에게 곱해주고 이를 하나의 백터로 합쳐주는 가중합을 진행합니다. 이렇게 만들어진 백터를 컨텍스트 백터라고도 합니다. 이전에 Seq-to-Seq 모델에서는 인코더 층을 모두 통과하여 나온 결과를 디코더의 입력값으로 사용하는 값을 컨텍스트 백터라고 하였는데 혼동해서는 안됩니다.
이렇게 나온 컨텍스트 백터, 어텐션 값을 이제 디코더의 t시점의 은닉 셀인 s_t와 결합(concatenate)를 진행해줍니다.
이렇게 나온 결과를 통해 t시점에서의 'suis'에 대한 입력에 대해서 다음 결과를 예측하게됩니다. 여기서 좀 더 생각해보면 t시점의 디코더의 입력값으로 나온 은닉셀 (s_t)는 해당 시점의 단어에 대한 정보를 좀 더 잘 담고 있는 정보입니다. 이를 인코더 각 시점마다 보내면 해당 시점마다 현재 디코더에서 집중하고 있는 단어에 대한 중요도를 포함하여 어텐션 스코어가 나오게 되고 이를 인코더의 각 은닉셀들과 결합하는 과정을 거치기 때문에 디코더의 t시점에서 전체 시퀀스 중 타겟 단어에 대한 집중(Attention)을 더욱 잘 할 수 있게 되는 결과가 나옵니다. 이게 어텐션 메커니즘의 핵심이라고 생각하시면 됩니다.
참고자료
'머신러닝&딥러닝 > NLP' 카테고리의 다른 글
NLP - BERT 실전 활용(1) (1) | 2023.10.01 |
---|---|
NLP - Bert이해하기(2)_트랜스포머(transformer) (1) | 2023.09.29 |
NLP - 토픽 모델링(LSA, LDA) (0) | 2023.09.26 |
서브워드 토크나이저(Subword Tokenizer) (0) | 2023.09.22 |
개체명 인식(NER)(2)_Bi_LSTM을 통한 개체명 인식 (0) | 2023.09.20 |