1.1. 연도순 발전과정¶
- RNN (1986)
- LSTM (1997) : 다양한 시퀀스 정보 모델링 가능 (주가예측, 주기함수 예측 등)
- Seq2Seq (NIPS 2014) : 딥러닝 기반. 고정된 크기의 context vector를 사용하여 번역 진행. 단, 소스 문장을 고정된 크기의 vector에 압축해야 한다는 점에서 성능 한계가 드러남
- Attention (ICLR 2015) : Attention 기법의 등장
- Transformer (NIPS 2017) : RNN를 사용하지 않고, Attention 기법에 의존하는 아키텍처. 이후 전반적인 기계 번역의 추세는 Attention 기법을 사용하는 형태가 대세로 자리잡음.
- GPT-1 (2018)
- BERT (NAACL 2019)
- G{T-3 (2020)
1.2. 기존 Seq2Seq 모델들의 한계¶
- context vector v에 소스 문장의 정보를 압축
- 병목 현상이 발생하여 성능 하락의 원인으로 작용함.
- 입력문장의 길이에 상관없이 고정된 크기의 vector로 압축되므로 성능하락이 발생
- 해결책1 : 디코더가 context vector를 매번 참고할 수 있도록 한다.
- 다만, 여전히 소스 문장을 하나의 벡터에 압축해야 하므로, 여전히 병목현상이 발생
- 근본적인 문제 : 하나의 문맥 벡터가 소스 문장의 모든 정보를 갖고 있어야 하므로, 무조건 병목 현상이 발생할 수밖에 없고, 이는 성능 하락의 원인이 된다.
- 해결방안 : 그렇다면 매번 소스 문장에서의 출력 전부를 입력으로 받으면 어떻게 되는가?
- 최신 GPU는 많은 메모리와 빠른 병렬 처리를 지원한다.
- 해결방안 : 그렇다면 매번 소스 문장에서의 출력 전부를 입력으로 받으면 어떻게 되는가?
1.3. Seq2Seq with Attention¶
- Seq2Seq 모델에서 어텐션(attention)매커니즘을 사용
- 디코더는 인코더의 모든 출력(outputs)을 참고한다.
- 입력받은 모든 값을 배열에 추가한다.
- hidden state의 값을 모두 갖고 있게 된다.
- 출력되는 hidden state 값과 입력받은 hidden state 값을 서로 행렬곱을 수행하여 "어떤 단어에 초점을 맞춰야 하는지"를 알려주는 가중치를 계산하여 반영한다.
1.3.1. 디코더(decoder)¶
- 디코더는 매번 인코더의 모든 출력 중에서 어떤 정보가 중요한지를
- 에너지(Energy) : 디코더가 이전에 출력했던 단어를 만들기 위해 사용했던 hidden state과 인코더의 모든 출력값을 비교해서 계산 (어떤 출력값과 가장 연관이 있는가)
- 가중치(Weight) : 에너지 값들을 소프트맥스에 넣어서 상대적인 확률값을 구한 것.
1.3.2. 어텐션 시각화¶
- 어텐션 가중치를 사용해 각 출력이 어떤 입력 정보를 참고했는지 알 수 있음.
- 매번 출력할 때마다, 출력하는 단어가 입력받은 단어 중 어느 단어와 연관성이 깊은지를 확인 가능
- 딥러닝이 어떤 요소에 더욱 더 많은 초점을 두어서 데이터를 생성했는지 분석할 때 유리하다
2. 트랜스포머(Transformer)¶
- 2021년 기준 현대의 자연어 처리 네트워크에서 핵심이 되는 논문
- 원제 : Attention is All You Need
- 트랜스포머는 RNN이나 CNN을 전혀 필요로 하지 않음
- RNN, CNN을 사용하지 않을 경우, 순서에 관한 정보를 주기가 쉽지 않음
- 따라서 Positional Encoding을 사용하여 순서에 관한 정보를 제공
- BERT와 같은 향상된 네트워크에서도 채택되고 있음
- 인코더와 디코더로 구성
- Attention 과정을 여러 레이어에서 반복
2.1. 입력 값 임베딩(Embedding)¶
- 트랜스포머 이전 전통적인 임베딩 : 임베딩 차원은 "문장의 단어 개수"만큼 행의 크기를 가지고, "임베딩 차원(기본 : 512)"만큼 열의 크기를 가진다. 입력값들을 임베딩 형태로 변화
- RNN을 사용하지 않으려면 위치 정보를 포함하고 있는 임베딩을 사용해야 함.
- 문장 내 단어의 순서를 알려주는 임베딩을 사용해야 함.
- 이를 위해 트랜스포머에서는 Positional Encoding을 사용
- 임베딩이 끝난 이후 어텐션(Attention)을 진행
2.2. 인코더(Encoder)¶
- 성능 향상을 위해 잔여 학습(Residual Learning)을 사용
- 특정 레이어를 건너뛰어서 값을 입력하여, 추가적으로 남은 부분만 학습하도록 함.
- 학습속도가 크게 빨라지는 장점이 있음
- 입력값이 들어운 후, 어텐션(Attention)과 정규화(Normalization) 과정을 반복
- 각 레이어는 서로 다른 파라미터를 가진다 (각 레이어에 사용되는 어텐션 등은 서로 다르다)
- 마지막 인코더 레이어의 출력이 모든 디코더 레이어에 입력되는 구조를 가지고 있음
2.3. 인코더와 디코더¶
- 트랜스포머에서도 인코더(Encoder)와 디코더(Decoder)의 구조를 따른다.
- 이때, RNN을 사용하지 않으며, 인코더와 디코더를 다수 사용한다는 특징이 있음
- 'eos'가 나올 때까지 디코더를 이용한다.
- 하나의 문장을 한 번에 인코더로 투입하여 병렬적으로 처리하므로 RNN을 사용했을 때와 비교하여 계산복잡도가 크게 하락
2.4. 어텐션(Attention)¶
- 인코더와 디코더는 Multi-Head Attention 레이어를 사용한다.
- Multi-Head Attention을 사용하더라도 출력되는 값의 차원이 같도록 만들어준다.
- 어텐션을 위한 세 가지 입력요소
- 쿼리(Query) : 무언가를 물어보는 주체
- 키(Key) : 물어보는 대상 (단어에 관하여 어떠한 가중치를 갖는가)
- 값(Value) : Attention의 값
2.5. 쿼리, 키, 값¶
- 어텐션을 위해 쿼리, 키, 값이 필요
- 각 단어의 임베딩을 이용해 생성 가능
- 쿼리(Query)는 각 단어의 키(Key) 값과 행렬곱을 진행하여 어텐션 에너지 산출
- 산출된 각 어텐션 에너지 값은 정규화 과정을 거친다.
- 이후, 정규화과정을 거친 값에 소프트맥스를 취한다.
- 이렇게 소프트맥스를 취한 에너지 값에 각 단어의 값을 곱한 뒤 더하여 Attention을 산출한다.
- 실제로는 행렬(matrix) 곱셈 연산을 이용해 한꺼번에 연산이 가능
2.6. Scaled Dot-Product Attention¶
- 마스크 행렬(Mask matrix)를 이용해 특정 단어는 무시할 수 있도록 한다.
- 마스크 값으로 음수 무한의 값을 넣어 softmax 함수의 출력이 0%에 가까워지도록 한다
2.7. Multi-Head Attention¶
- MultiHead(Q, K, V)를 수행한 뒤에도 차원(dimension)이 동일하게 유지
2.8. 어텐션의 종류¶
- 트랜스포머에서는 위치에 따라 세 가지 종류의 어텐션 레이어가 사용됨
- Encoder Self-Attention : 각각의 단어가 서로에게 어떤 연관이 있는지를 어텐션을 통해 구하도록 만듦. 각각의 문장에 대한 표현을 학습할 수 있도록 함.
- Masked Decoder Self-Attention : 각각의 출력단어가 앞쪽에 등장했던 단어만 참고할 수 있도록 만듦.
- Encoder-Decoder Attention : Query를 디코더에 위치시키고, key와 value는 인코더에 위치하도록 만듦.
2.9. Self-Attention¶
- Self-Attention은 인코더와 디코더 모두에서 사용
- 매번 입력 문장에서 각 단어가 다른 어떤 단어와 연관성이 높은지 게산 가능
2.10. Positional Encoding¶
- 하나의 문장에 포함된 단어의 상대적 위치정보를 알려주기 위해 사용하는 인코딩
- 주기 함수를 활용한 공식을 사용
- 각 단어의 상대적인 위치 정보를 네트워크에게 입력한다.
'전문지식 함양 > TIL' 카테고리의 다른 글
[Microsoft Excel] 엑셀 매크로 작성1 (0) | 2023.04.21 |
---|---|
[프로그래머스 겨울방학 인공지능 과정] Transformer 이론 기초 (0) | 2022.02.21 |
[프로그래머스 겨울방학 인공지능 과정] Neural Image Caption 이론 (0) | 2022.02.20 |
[프로그래머스 겨울방학 인공지능 과정] Sequence to Sequence Learning with Neural Networks - 이론 (0) | 2022.02.20 |
[프로그래머스 겨울방학 인공지능 과정] CNN을 활용한 풍경 이미지 분류 실습1 (0) | 2022.02.17 |