[구글 BERT의 정석] Chapter1: 트랜스포머 입문(1)
1.1 트랜스포머 소개
트랜스포머는 어텐션 구조를 활용한 새로운 아키텍처이다. BERT, GPT등의 현재 자연어 처리에서 가장 활발히 활용되는 모델의 기반이 되고 있다.
-트랜스포머 소개
-트랜스포머와 인코더 이해하기
- 트랜스포머와 디코더 이해하기 ....................................................>이번 장에서 다룰 것들
-인코더와 디코더의 결합
-트랜스포머 학습
기존에는 RNN과 LSTM(RNN의 단점을 조금 극복했지만 그래도 한계는 여전했다) 이 자연어와 같은 순차적 테스크에서 사용되었었다. 하지만 치명적인 장기 의존성 문제가 존재했고 이를 극복하기 위해 "Attention Is All You Need"에서 트랜스포머라는 구조를 제안했다. 트랜스포머는 자연어 뿐만 아니라 CV에서도 최신 기술로 사용되고 있다. 이를 기반으로 하여 BERT, T-5, GPT-3와 같은 아키텍처가 발전하였다.
트랜스포머는 self-attention이라는 순수하게 어텐션만을 활용한 특수한 구조의 모델이다.
구조는 인코더와 디코더로 구성되는데, 번역 테스크를 예로 들면 인코더에 문장을 넣고 이를 통해
학습시키고 디코더로 내보낸다. 디코더는 학습된 결과를 입력받아 사용자가 원하는 문장을 생성한다.
1.2 트랜스포머의 인코더 이해하기
뭉뚱그려서 표현하면 정말 간단하지만 그렇다면 인코더와 디코더는 어떻게 동작하는 걸까?
트랜스포머는 N개의 인코더가 쌓인 형태이다.
각 인코더에서의 결과 값은 다음 인코더의 입력으로 들어간다. 이렇게 쭉 따라가다보면
마지막 인코더의 결괏값이 입력값의 최종 결과가 된다.
인코더는 두 가지 요소로 구성된다.
멀티 헤드 어텐션
피트포워드 네트워크
1.2.1 셀프 어텐션의 작동 원리
이 문장에서 eating의 대상이 apple은 걸 모델은 어떻게 알 수 있을까? 이를 위해 self -attention이 필요하다.
이 문장이 모델로 들어가면 모델은 각 단어의 표현을 계산하고 각 단어들을 다른 단어와 연결해 문장 내에서 갖는 의미를 파악한다.
eating이라는 단어의 의미를 파악하기 위해 green과 apple을 연결하는 작업을 수행한다( 물론 다른 단어와도)
이를 통해 eating은 apple이라는 것과 가장 큰 연관이 있다는 것을 학습한다.
좀 더 self-attention에 대해 자세히 알아보자. 먼저 "I am good"이라는 문장을 예를 들어보자. 여기서 각 단어의 임베딩을 추출하자. 임베딩은 모델 학습과정에서 같이 학습된다. 각각의 단어의 벡터를 쌓아 다시 행렬의 꼴로 표현할 수 있다.
행를 기준으로 쌓았다면 1행은 "I"의 임베딩 2행은 "am"의 임베딩 3행은 "good"의 임베딩을 나타댄다.
그러므로 행렬의 차원은 [문장길이 x 임베딩 차원]의 형태가 된다.
이제 이를 바탕으로 세가지의 행렬을 생성한다. 쿼리(Q), 키(K), 밸류(V)이다. 이 세 행렬은 셀프 어텐션에서 활용된다.
각 행렬은 W_Q , W_K, W_V의 가중치 행렬을 임베딩 백터에 곱해서 만들어지는데,
학습을 통해 정확한 가중치를 얻게 되면 더 정확한 Q,K,V값을 얻을 수 잇다.
임베딩 행렬에서와 마찬가지로 각 행은 각 단어에 대한 벡터를 의미한다.
자 그럼 각 행렬들이 어떻게 이용되고, 왜 이렇게 계산하는지 알아보자
셀프 어텐션의 작동 원리 이해하기
앞에서 각 단어를 기준으로 문장에서 있는 모든 단어와 연결하는 과정을 수행한다는 사실을 배웠다
왜 이런 과정을 수행하는걸까? 언어에서 단어는 별개로 존재하는 것이 아니라 서로 간의 상호관계가 중요하기 때문이다.
실제로 단어를 연결해 연관을 이해하면 좋은 표현을 학습시키는데에 도움이 된다. 다음으로는 앞서 언급하고 넘어간
쿼리, 키, 밸류를 이용해 단어들을 연결하는 방법을 알아보자