본문 바로가기
AI · 인공지능/AI 뉴스

OpenAI가 개발한 텍스트 생성 AI「GPT-3」가 어떤 처리를 하고 있는지 전문가가 해설

by 두우우부 2022. 12. 22.
반응형


AI 연구단체 · OpenAI가 발표하여 화제를 불러온 대화형 AI「ChatGPT」는, 텍스트 자동 생성 AI・GPT-3 의 파생형인「GPT-3.5」를 파인 튜닝한 자연 언어 처리 모델입니다. 취리히 공과대학에서 기계 학습 및 로보틱스의 박사 학위 과정을 진행 중인 다니엘 듀가스 씨가 GPT-3가 실시하는 수학적 처리 공정에 대하여 해설하고 있습니다.

The GPT-3 Architecture, on a Napkin
https://dugas.ch/artificial_curiosity/GPT_architecture.html

 

The GPT-3 Architecture, on a Napkin

HOW DEEP IS THE MACHINE? The Artificial Curiosity Series The GPT-3 Architecture, on a Napkin There are so many brilliant posts on GPT-3, demonstrating what it can do, pondering its consequences, vizualizing how it works. With all these out there, it still

dugas.ch



◆ 입력/출력
우선 GPT의「입력」이란 일련의 N개의 단어로,「(입력) 토큰」이라고도 합니다. 그리고 GPT의 '출력'은 입력 토큰의 끝에 배치될 가능성이 가장 높은 것으로 추측되는 단어입니다. 예를 들어, "not all heroes wear(모든 영웅들이 입고 있는 것은 아님)"를 입력하면 GPT는 "capes(망토를)"라고 출력합니다. 이때 '팬츠'와 'socks'라는 단어도 추측되고 있지만, 가능성으로는 capes가 가장 높습니다.

입력을 겹쳐 나가면, 다음과 같이 출력이 변해 갑니다. 이대로 입력을 겹쳐가다 보면 끝없이 길어지기 때문에 GPT-3의 경우, 입력 시퀀스의 길이를 2048 단어까지 제한하고 있습니다.

Not all heroes wear capes -> but
Not all heroes wear capes but -> all
Not all heroes wear capes but all -> villans
Not all heroes wear capes but all villans -> do



◆ 부호화(Encoding)
그러나, GPT는 어디까지나 알고리즘이며, 인간처럼 단어를 이해하고 있는 것은 아닙니다. 알고리즘이 단어를 인식하려면 단어를 숫자형 벡터로 변환해야 합니다. GPT에는 5만 257개의 토큰이 등록되어 있으며 이를 ID로 변환하고 있습니다.


GPT-3는 효율화를 위해 'BPE'에 의한 토큰화를 실시하고 있다고 하는데, 실제로 GPT에 등록되어 있는 토큰은 완전한 단어가 아니라 텍스트 중에 자주 나타나는 문자 그룹으로 되어 있다고 합니다. 예를 들어 "Not all heroes wear capes"의 경우 [not][all][heroes][wear][cap][es]라는 토큰으로 분할되어 각각을 ID로 변환하면 [3673][477][10281] [5806][1451][274]입니다.

토큰은 모두 5257차원의 행 벡터로 변환됩니다. 예를 들어 [not]이라는 토큰의 경우 ID는 3673이므로 "3673번째 성분만이 1이고 나머지는 모두 0"인 벡터로 표현됩니다. 2048개의 토큰을 입력하면 2048개의 5만 257차원행 벡터로 변환되며, 최종적으로는 다음과 같이 '0과 1로 구성된 2048행 × 5만 257열의 행렬'로 합성된다는 것입니다. 이것이 토큰의 인코딩입니다.


◆ 임베딩(Embedding)
하지만 변환된 벡터의 대부분의 성분은 0으로 구성되어 있습니다. 그래서 0과 1의 성분으로 구성된 행렬이 아니라 보다 작은 차원 공간에 선형투영했을 때의 길이를 성분으로 하는 벡터로 변환합니다. 예를 들어 투영하는 차원을 2차원으로 했을 경우, 아래의 그림과 같이 각 토큰을 XY 평면에 배치해, 그 좌표 데이터로 옮겨놓게 됩니다.


물론 실제로 투영되는 차원은 2차원이 아니라 GPT에서는 1만 2288차원을 사용한다는 것. 각 토큰의 벡터에 학습된 임베디드 네트워크의 가중치가 곱해지고 1만 2288차원의 임베디드 벡터로 변환됩니다.

즉,「2048행 ×5만 257열의 행렬」에, 12288차원으로 변환하는「5만 257행 ×1만 2288열의 행렬」을 곱해, 2048행 ×1만 2288열의 임베딩 행렬로 변환합니다.


◆ 위치의 부호화
시퀀스에서 토큰의 위치를 변환하기 위해 토큰을 0번째에서 2047번째까지 순서대로 지정하고 주파수가 다른 사인(sin) 함수에 전달합니다. 2048 종류의 토큰 위치를 12288 종류의 사인 함수로 전달하면 2048 x 12288 행렬이 생성됩니다.


위치 변환 후의 행렬은 토큰의 임베딩 행렬에 가산이 가능해, 2048행 ×1만 2288열의 부호화된 행렬이 생성됩니다.


◆ 어텐션
어텐션이란「입력 데이터의 어느 부분에 주의를 둘 것인가」라는 것으로, 심층 학습에 있어서 매우 중요한 기구입니다.

예를 들어, 3개의 토큰을 인코딩하는 3 x 512 행렬이 있고, AI 모델이 3개의 선형 투영을 학습했다고 가정합니다. 3개의 부호화 행렬에서 이 3개의 선형 투영은 3가지 유형의 3 x 64 행렬을 생성합니다.

이 중 두 행렬을 쿼리(Q)와 키(K)라고 합니다. 이 Q와 K의 전치 행렬(K의 T승)을 곱하여 생성되는 3행 ×3열의 행렬(Q x K의 T승 )은 각 토큰의 다른 토큰에 대한 중요도를 나타냅니다.


그리고, 3번째의 3열 ×512행의 행렬인 밸류(V)를 Q x K의 T승에 곱셈함으로써, 각각의 토큰의 중요도에 의해 가중치가 부여된 3행 ×512열의 행렬이 생성됩니다.


GPT 모델은「멀티 헤드 어텐션」이라고 불리는 구조를 채용하고 있습니다. 구체적으로는,「2048행 ×12288열의 부호화된 행렬로부터, 3종류의 선형 사영에 의해 2048행 ×128열의 Q・K・V가 생성되고, (Q・K의 T승)・V = 2048 행 ×128열의 행렬을 생성한다」는 프로세스를 96회 반복, 연결함으로써 2048행 ×1만 2288열의 행렬을 생성합니다. 이 행렬을 추가 선형 투영하여 새로 2048x12288 열의 어텐션된 행렬을 생성합니다.


◆ 피드 포워드
포워드는 1개의 중간층을 가지는 다층 퍼셉트론으로, 입력에 학습한 가중치(중간층)를 곱해 바이어스를 더해, 한번 더 같은 것을 반복하여 결과가 얻어지는 것입니다.

GPT-3의 경우는 4 ×1만 2288 = 4만 9152의 사이즈를 가지는 중간층을 가지고 있습니다만, 2048행 ×1만 2288열의 행렬을 입력해 출력되는 것은 같은 2048행 ×1만 2248 열입니다.


멀티헤드 어텐션과 피드 포워드가 끝난 후, 각각의 블록의 입력을 그 출력에 더해 결과를 정규화합니다. 즉, 어텐션 후에 정규화하고, 그 후에 피트 포워드를 실시해 다시 정규화하는 흐름이 됩니다.


◆ 복호화
어텐션과 피드 포워드를 통과하여 정규화된 2048행 ×1만 2288열의 행렬에는 2048개의 출력 위치마다 어떤 단어가 나타나야 하는지에 대한 정보가 12288개의 벡터로 포함되어야 합니다. 여기서,「임베딩」으로 행한 처리의 역을 실시해, 2048행 ×5만 257열의 행렬로 변환합니다.

이 방법을 사용하면 첫 번째 입력 시퀀스의 행렬처럼 0과 1로만 구성된 행렬을 얻을 수 없지만 소프트맥스를 사용하여 확률 분포로 변환할 수 있습니다. 또한 GPT 논문에서는 매개변수 'top-k'를 언급합니다. 이 top-k는 출력에 포함될 수 있는 단어의 양을 예측된 단어 중 가장 가능성이 높은 k개로 제한한다는 것입니다. 예를 들어 k=1인 경우 항상 가장 가능성이 높은 언어를 선택합니다.


이상과 같이 GPT는 복잡한 수학적 처리과정을 통해 언어를 처리할 수 있게 되었습니다. 덧붙여 듀가스 씨가 GPT의 처리 행정을 정리한 그림은 아래와 같습니다.

반응형