원문: https://ratsgo.github.io/nlpbook/docs/language_model/transformers/
Transformer란
- 2017년 구글이 제안한 Sequence-to-sequence 모델
- 최근 NLP에서는 BERT나 GPT 같은 transformer 기반 language model이 각광 받고 있다.
Sequence-to-sequence
- Transformer란 기계 번역 등 sequence-to-sequence 과제를 수행하기 위한 모델.
- Sequence란 단어 같은 무언가의 나열을 의미
- Sequence-to-sequence는 특정 속성을 지닌 sequence를 다른 속성의 sequence로 변환하는 작업
- 예시) 기계번역: 어떤 언어의 단어 sequence를 다른 언어의 단어 sequence로 변환하는 과제이다.
Encoder & decoder
- Transformer는 sequence-to-sequence 과제 수행에 특화된 모델이다. 임의의 sequence를 해당 sequence와 속성이 다른 sequence로 변환하는 작업이라면 꼭 기계 번역이 아니더라도 수행할 수 있다.
- Sequence-to-sequence 과제를 수행하는 model은 대개 encoder와 decoder 두개 파트로 구성된다.
- Encoder는 소스 sequence의 정보를 압축해 decoder로 보내주는 역할을 담당. Encoder가 소스 sequence 정보를 압축하는 과정을 encoding
- Decoder는 encoder가 보내준 소스 sequence 정보를 받아서 target sequence를 생성. 이 과정을 decoding
- E.g. 기계번역에서는 인코더가 한국어 문장을 압축해 decoder에 보내고, decoder는 이를 받아 영어로 번역한다.
- Transformer 역시 encoder와 decoder 구조를 따르며 구조는 다음 그림과 같다.
- Input: source sequence
Transformer의 학습(train)은 encoder와 decoder 입력이 주어졌을 때 정답에 해당하는 단어의 확률 값을 높이는 방식으로 수행.
- Train과정에서는 정답 sequence를 decoder의 입력으로 입력
- 실제 사용과정(inference) 때는 직전 decoding 결과를 사용한다.
트랜스포머 블록
- transformer의 encoder 가운데 반복되는 요소를 떼어내 나타낸 그림
- 이런 구조를 block 혹은 layer라고 부른다.
encoder block 구성 요소
- 멀티 헤드 어텐션(Multi-Head Attention) : Self Attention
- 피드포워드 뉴럴네트워크(FeedForward) : Technics
- 잔차 연결 및 레이어 정규화(Add & Norm) : Technics
decoder block 구성 요소
- 마스크를 적용한 멀티 헤드 어텐션(Masked Multi-Head Attention) : BERT & GPT
- 멀티 헤드 어텐션(Multi-Head Attention) : Self Attention
- 피드포워드 뉴럴 네트워크(FeedForward) : Technics
- 잔차 연결 및 레이어 정규화(Add & Norm) : Technics
Self Attention
- multi head attention은 self attention이라고도 불린다.
- attention: sequence 요소들 가운데 task 수행에 중요한 요소에 집중하고 그렇지 않은 요소는 무시해 task 수행 성능을 끌어 올린다.
- 기계 번역에 attention을 도입한다면 target 언어를 decoding할 때 souce 언어의 단워 sequence 가운데 decoding에 도움되는 단어들 위주로 취사 선택해서 번역 품질을 끌어 올린다. attention은 decoding할 때 source sequence 가운데 중요한 요소들만 추린다.
- self attention이란, 말 그대로 자기 자신에 수행하는 attention 기법. 입력 input sequence 가운데 task 수행에 의미 있는 요소들 우주로 정보를 추출.
CNN(Convolutional Neural network, 합성곱 신경망)과 비교
CNN은 convolution filter라는 특수한 장치를 이용해 sequence의 지역적인 특징을 잡아내는 모델. 자연어는 기본적으로 sequence이고 특정 단어 기준 주변 문맥이 의미 형성에 중요한 역할을 하므로 CNN이 자연어 처리에 널리 쓰이고 있다.
- Convolution filter란 합성곱 신경망을 구성하는 한 요소. 이 필터는 데이터를 전체적으로 훑으면서 인접 정보를 추출하는 역할을 한다.
CNN이 문장을 인코딩하는 방법 합성곱 필터(붉은 네모칸)이 단어를 하나씩 넘기면서 차레대로 읽어 들인다.
그림12 합성곱 신경망
CNN은 합성곱 필터 크기를 넘어서는 문맥은 읽어내기 어렵다는 단점이 있습니다. 예컨대 필터 크기가 3(3개 단어씩 처리)이라면 4칸 이상 떨어져 있는 단어 사이의 의미는 캐치하기 어렵습니다.
RNN(Recurrensive neural network, 순환 신경망)과의 비교
- RNN도 sequence 정보를 압축하는 데 강점이 있다.
소스 언어 시퀀스인 어제, 카페, 갔었어, 거기, 사람, 많더라를 인코딩해야 한다고 가정해 봅시다. 그렇다면 RNN은 그림13과 같이 소스 시퀀스를 차례대로 처리합니다.
그림13 리커런트 뉴럴 네트워크(RECURRENCT NEURAL NETWORK)
RNN은 sequence 길이가 길어질 수록 정보 압축에 문제가 발생한다. 오래 전에 입력된 단어는 잊어버리거나, 특정 단어 정보를 과도하게 반영해 전체 정보를 왜곡하는 경우가 자주 생긴다.
기계 번역을 할 때 RNN을 사용한다면 encoder가 decoder로 넘기는 정보는 source sequence의 마지막인 '많더라'라는 단어의 의미가 많이 반영될 수 밖에 없다. RNN은 입력 정보를 차례대로 처리하고 오래 전에 읽었던 단어는 잊어버리는 경향이 있음
attention과 비교
다음 그림을 보면 cafe에 대응하는 소스 언어의 단어는 카페이고 이는 소스 시퀀스의 초반부에 등장한 상황입니다. cafe라는 단어를 디코딩해야 할 때 카페를 반드시 참조해야 하는데요. 어텐션이 없는 단순 RNN을 사용하면 워낙 초반에 입력된 단어라 모델이 잊었을 가능성이 크고, 이 때문에 번역 품질이 낮아질 수 있습니다.
그림14 ‘CAFE’의 어텐션
attention은 이러한 문제점을 해결하기 위해 제안됨. decoder 쪽 RNN에 attention을 추가하는 방식. attention은 decoder가 target sequence를 생성할 때 source sequence 전체에서 어떤 요소에 주목해야 할지 알려주므로 '카페'가 source sequence 초반에 등장하거나 source sequence의 길이가 길어지더라도 번역 품질이 떨어지는 것을 막을 수 있다. 위 그림에서 attention 기법으로 주목되는 단어에 좀 더 짙고 굵은 실선이 그려져있다.
특징 및 장점
- self attention은 자기 자신에 수행하는 attention이다. 밑 그림을 보면, 입력 시퀀스가 어제, 카페, 갔었어, 거기, 사람, 많더라일 때 거기라는 단어가 어떤 의미를 가지는지 계산하는 상황입니다.
그림15 ‘거기’의 셀프 어텐션
잘 학습된 self attention 모델이라면 '거기'에 대응하는 장소는 '카페'라는 사실을 알아챌 수 있을 것. 그 뿐만 아니라 '거기'는 '갔었어'와도 연관이 있음을 확인할 수 잇다. transformer encoder block sㅐ부에서는 이처럼 '거기'라는 단어를 encoding할 때 '카페', '갔었어'라는 단어의 의미를 강조해서 반영한다.
정리
CNN - 지역적인 문맥만 본다.
RNN - sequence의 길이가 길어지면 까먹는다.
attention - 주목할 점을 강조해서 sequencedㅢ 길이가 길어져도 안까먹는다.
Attention vs Self-Attention
- attention은 source sequence wㅓㄴ체 단어들과 target sequence eㅏㄴ어 하나 사이를 연결하는 데 쓰인다. 반면 self-attentiondㅡㄴ 입력 sequence 전체 단어들 사이를 연결한다.
- attention은 RNN구조 위에서 동작, self-attention은 RNN 없이 동작
- target 언어의 단어를 한 개 생성할 때 attention은 1회 수행, self-attention은 encoder, decoder block의 개수만큼 반복 수행한다.
cf) 트랜스포머 인코더 내부에서 동작하는 셀프 어텐션을 예로 들었지만, 트랜스포머 디코더에도 셀프 어텐션이 적용됩니다. 인코더와 디코더 차이와 관련해 자세한 내용은 BERT & GPT를 참고하세요.
Distributed by an CC BY-NC-SA 3.0 license.
'정리 > Machine Learning' 카테고리의 다른 글
[경사하강법] gradient descent (0) | 2023.02.11 |
---|---|
RoBERTa 리뷰의 리뷰 (0) | 2022.07.07 |
[FastCampus The RED 추천시스템] CBF (0) | 2021.11.11 |
[FastCampus The RED 추천시스템] 추천 시스템을 돌릴 때 고려사항 (0) | 2021.11.10 |
[FastCampus The RED 추천시스템] 추천 시스템 성능평가 (0) | 2021.11.10 |