트랜스 포 머

완료됨

오늘날의 생성 AI 애플리케이션은 다음을 포함하여 NLP(자연어 처리) 작업을 수행하는 데 사용할 수 있는 특수한 유형의 기계 학습 모델인 언어 모델을 통해 구동됩니다.

  • 감정을 결정하거나 자연어 텍스트를 분류합니다.
  • 텍스트 요약
  • 의미 체계 유사성을 위해 여러 텍스트 원본을 비교합니다.
  • 새 자연어 생성

이러한 언어 모델의 수학적 원리는 복잡할 수 있지만, 이를 구현하는 데 사용되는 아키텍처에 대한 기본적인 이해는 작동 방식을 개념적으로 이해하는 데 도움이 될 수 있습니다.

변환기 모델

자연어 처리를 위한 기계 학습 모델은 수년 동안 발전해 왔습니다. 오늘날의 최첨단 대형 언어 모델은 변압기 아키텍처를 기반으로 하며, NLP 작업을 지원하기 위해 어휘 모델링에 성공한 것으로 입증된 일부 기술, 특히 언어 생성을 기반으로 합니다. 변환기 모델은 대량의 텍스트로 학습되어 단어 간의 의미 체계 관계를 나타내고 이러한 관계를 사용하여 적합한 텍스트 시퀀스를 결정할 수 있습니다. 용어가 충분히 큰 변환기 모델은 인간의 반응과 구별하기 어려운 언어 응답을 생성할 수 있습니다.

변환기 모델 아키텍처는 다음 두 가지 구성 요소 또는 블록으로 구성됩니다.

  • 학습 어휘의 의미 체계 표현을 만드는 인코더 블록입니다.
  • 새 언어 시퀀스를 생성하는 디코더 블록입니다.

인코더 및 디코더 블록이 있는 변환기 모델 아키텍처의 다이어그램

  1. 모델은 인터넷 또는 기타 공용 텍스트 원본에서 공급되는 대량의 자연어 텍스트로 학습됩니다.
  2. 텍스트 시퀀스는 토큰(예: 개별 단어)으로 세분화되고 인코더 블록은 주의라는 기술을 사용하여 이러한 토큰 시퀀스를 처리하여 토큰 간의 관계를 결정합니다(예: 시퀀스에서 다른 토큰의 존재에 영향을 주는 토큰, 동일한 컨텍스트에서 일반적으로 사용되는 다른 토큰 등).
  3. 인코더의 출력은 벡터의 각 요소가 토큰의 의미 체계 특성을 나타내는 벡터(다중값 숫자 배열)의 컬렉션입니다. 이러한 벡터를 포함이라고 합니다.
  4. 디코더 블록은 새 텍스트 토큰 시퀀스에서 작동하며 인코더에서 생성된 포함을 사용하여 적절한 자연어 출력을 생성합니다.
  5. 예를 들어 다음과 같은 "When my dog was"입력 시퀀스가 지정된 경우 모델은 주의 기술을 사용하여 입력 토큰 및 포함에 인코딩된 의미 체계 특성을 분석하여 문장 "a puppy"의 적절한 완성을 예측할 수 있습니다.

실제로 아키텍처의 특정 구현은 다양합니다. 예를 들어 검색 엔진을 지원하기 위해 Google에서 개발한 BERT(양방향 인코더) 모델은 인코더 블록만 사용하는 반면 OpenAI에서 개발한 GPT(생성 사전 학습 변환기) 모델은 디코더 블록만 사용합니다.

변환기 모델의 모든 측면에 대한 전체 설명은 이 모듈의 범위를 벗어나지만 변환기의 일부 주요 요소에 대한 설명은 생성 AI를 지원하는 방법을 이해하는 데 도움이 될 수 있습니다.

토큰화

변환기 모델을 학습하는 첫 번째 단계는 학습 텍스트를 토큰으로 분해하는 것입니다 . 즉, 각 고유한 텍스트 값을 식별합니다. 간단히 하기 위해 학습 텍스트의 각 고유 단어를 토큰으로 생각할 수 있습니다(실제로는 부분 단어 또는 단어와 문장 부호의 조합에 대해 토큰을 생성할 수 있음).

예를 들어 다음 문장을 살펴봅니다.

I heard a dog bark loudly at a cat

이 텍스트를 토큰화하기 위해 각 불연속 단어를 식별하고 토큰 ID를 할당할 수 있습니다. 다음은 그 예입니다.

- I (1)
- heard (2)
- a (3)
- dog (4)
- bark (5)
- loudly (6)
- at (7)
- ("a" is already tokenized as 3)
- cat (8)

이제 문장을 토큰으로 나타낼 수 있습니다. {1 2 3 4 5 6 7 3 8} 마찬가지로 문장 "I heard a cat" 을 .로 {1 2 3 8}나타낼 수 있습니다.

모델을 계속 학습하면 학습 텍스트의 각 새 토큰이 적절한 토큰 ID를 사용하여 어휘에 추가됩니다.

- meow (9)
- skateboard (10)
- *and so on...*

학습 텍스트 집합이 충분히 큰 경우 수천 개의 토큰 어휘를 컴파일할 수 있습니다.

임베딩

토큰을 간단한 ID로 나타내는 것이 편리할 수 있지만, 기본적으로 어휘의 모든 단어에 대한 인덱스를 만들지만 단어의 의미나 그 사이의 관계에 대해서는 아무 말도 하지 않습니다. 토큰 간의 의미 체계 관계를 캡슐화하는 어휘를 만들기 위해 포함이라고 하는 컨텍스트 벡터를 정의합니다. 벡터는 정보의 다중값 숫자 표현입니다(예: 각 숫자 요소가 정보의 특정 특성을 나타내는 [10, 3, 1]). 언어 토큰의 경우 토큰 벡터의 각 요소는 토큰의 일부 의미 체계 특성을 나타냅니다. 언어 모델의 벡터 요소에 대한 특정 범주는 일반적으로 단어가 함께 또는 유사한 컨텍스트에서 사용되는 방식에 따라 학습 중에 결정됩니다.

벡터는 여러 축을 따라 방향거리를 설명하는 다차원 공간의 선을 나타냅니다(이러한 진폭크기를 호출하여 수학 친구에게 깊은 인상을 줄 수 있습니다). 토큰에 대한 포함 벡터의 요소를 다차원 공간의 경로를 따라 단계를 나타내는 것으로 생각하면 유용할 수 있습니다. 예를 들어 세 개의 요소가 있는 벡터는 요소 값이 앞으로/뒤로, 왼쪽/오른쪽 및 위쪽/아래로 이동한 단위를 나타내는 3차원 공간의 경로를 나타냅니다. 전반적으로 벡터는 원점에서 끝까지 경로의 방향과 거리를 설명합니다.

포함 공간에 있는 토큰의 요소는 각각 토큰의 의미 체계 특성을 나타내므로 의미상 유사한 토큰으로 인해 방향이 비슷한 벡터가 발생합니다. 즉, 동일한 방향을 가리킵니다. 코사인 유사성이라는 기술은 두 벡터의 방향이 거리와 관계없이 비슷한지 확인하는 데 사용되므로 의미상 연결된 단어를 나타냅니다. 간단한 예로, 토큰에 대한 임베딩이 다음과 같이 세 개의 요소로 이루어진 벡터로 구성된다고 가정해 봅시다.

- 4 ("dog"): [10,3,2]
- 8 ("cat"): [10,3,1]
- 9 ("puppy"): [5,2,1]
- 10 ("skateboard"): [-3,3,2]

다음과 같이 이러한 벡터를 3차원 공간으로 그릴 수 있습니다.

3차원 공간에 그려진 토큰 벡터의 다이어그램입니다.

"dog"의 임베딩 벡터는 거의 동일한 방향을 따라가는 경로를 설명하며, 이는 "puppy"의 방향뿐만 아니라 "cat"의 방향과도 매우 유사합니다. 그러나 포함 벡터는 "skateboard" 매우 다른 방향으로의 여정을 설명합니다.

비고

이전 예제에서는 각 포함에 3개의 차원만 있는 간단한 예제 모델을 보여 줍니다. 실제 언어 모델에는 더 많은 차원이 있습니다.

Word2Vec 또는 변환기 모델의 인코더 블록과 같은 언어 모델링 알고리즘을 포함하여 지정된 토큰 집합에 대한 적절한 포함을 계산할 수 있는 여러 가지 방법이 있습니다.

주의

변환 기 모델의 인코더디코더 블록에는 모델의 신경망을 형성하는 여러 계층이 포함됩니다. 이러한 모든 계층의 세부 정보로 이동하지 않아도 되지만 두 블록에서 사용되는 계층 유형 중 하나인 주의 계층을 고려하는 것이 유용합니다. 주의는 텍스트 토큰 시퀀스를 검사하고 두 토큰 간의 관계의 강도를 정량화하는 데 사용되는 기술입니다. 특히 자체 주의는 하나의 특정 토큰을 둘러싼 다른 토큰이 해당 토큰의 의미에 미치는 영향을 고려합니다.

인코더 블록에서 각 토큰은 컨텍스트에서 신중하게 검사되고 해당 벡터 포함에 대해 적절한 인코딩이 결정됩니다. 벡터 값은 토큰과 토큰이 자주 표시되는 다른 토큰 간의 관계를 기반으로 합니다. 이 상황별 접근 방식은 사용되는 컨텍스트에 따라 동일한 단어에 여러 포함이 있을 수 있음을 의미합니다. 예를 들어 "the bark of a tree" 다른 "I heard a dog bark"것을 의미합니다.

디코더 블록에서 주의 계층은 시퀀스에서 다음 토큰을 예측하는 데 사용됩니다. 생성된 각 토큰에 대해 모델에는 해당 시점까지의 토큰 시퀀스를 고려하는 주의 계층이 있습니다. 모델은 다음 토큰을 고려할 때 가장 영향력 있는 토큰을 고려합니다. 예를 들어 시퀀스 "I heard a dog"가 주어졌을 때, 주의 계층은 시퀀스의 다음 단어를 고려할 때 토큰 "heard""dog"에 더 큰 가중치를 부여할 수 있습니다.

I *heard* a *dog* {*bark*}

주의 계층은 실제 텍스트가 아닌 토큰의 숫자 벡터 표현으로 작동합니다. 디코더에서 프로세스는 완료할 텍스트를 나타내는 토큰 포함 시퀀스로 시작합니다. 가장 먼저 다른 위치 인코딩 계층은 각 포함에 값을 추가하여 시퀀스에서 해당 위치를 나타내는 것입니다.

  • [1,5,6,2] (I)
  • [2,9,3,1] (들음)
  • [3,1,1,2] (a)
  • [4,10,3,2] (개)

학습하는 동안 목표는 이전 토큰을 기반으로 시퀀스에서 최종 토큰에 대한 벡터를 예측하는 것입니다. 주의 계층은 지금까지 시퀀스의 각 토큰에 숫자 가중치 를 할당합니다. 이 값은 다음 토큰에 대해 가능한 벡터를 계산하는 데 사용할 수 있는 주의 점수를 생성하는 가중치가 적용된 벡터에 대한 계산을 수행하는 데 사용됩니다. 실제로는 다중 헤드 어텐션이라는 기술이 임베딩의 다양한 요소를 사용하여 여러 어텐션 점수를 계산합니다. 그런 다음 신경망을 사용하여 가능한 모든 토큰을 평가하여 시퀀스를 계속할 가능성이 가장 큰 토큰을 결정합니다. 프로세스는 시퀀스의 각 토큰에 대해 반복적으로 계속되며, 지금까지 출력 시퀀스는 다음 반복에 대한 입력으로 회귀적으로 사용되어 기본적으로 한 번에 하나의 토큰을 작성합니다.

다음 애니메이션은 이 동작의 간단한 표현을 보여 줍니다. 실제로는 주의 계층에서 수행하는 계산이 더 복잡합니다. 그러나 다음과 같이 원칙을 간소화할 수 있습니다.

토큰에 가중치를 할당하고 다음 토큰을 예측하는 주의 계층을 보여 주는 애니메이션입니다.

  1. 일련의 토큰 포함이 주의 계층에 공급됩니다. 각 토큰은 숫자 값의 벡터로 표시됩니다.
  2. 디코더의 목표는 시퀀스의 다음 토큰을 예측하는 것이며, 이 토큰은 모델의 어휘에 포함된 항목에 맞춰지는 벡터이기도 합니다.
  3. 주의 계층은 지금까지의 시퀀스를 평가하고 각 토큰에 가중치를 할당하여 다음 토큰에 대한 상대적 영향을 나타냅니다.
  4. 가중치는 주의 점수가 있는 다음 토큰에 대한 새 벡터를 계산하는 데 사용할 수 있습니다. 다중 헤드 주의는 포함에 다양한 요소를 사용하여 여러 대체 토큰을 계산합니다.
  5. 완전히 연결된 신경망은 계산된 벡터의 점수를 사용하여 전체 어휘에서 가장 가능성이 큰 토큰을 예측합니다.
  6. 예측된 출력은 다음 반복에 대한 입력으로 사용되는 지금까지의 시퀀스에 추가됩니다.

학습하는 동안 토큰의 실제 시퀀스는 알려져 있습니다. 현재 고려 중인 토큰 위치보다 나중에 시퀀스에서 오는 토큰만 마스킹합니다. 신경망에서와 마찬가지로 토큰 벡터의 예측 값은 시퀀스에서 다음 벡터의 실제 값과 비교되며 손실이 계산됩니다. 그런 다음, 손실을 줄이고 모델을 개선하기 위해 가중치를 증분 방식으로 조정합니다. 추론(새 토큰 시퀀스 예측)에 사용되는 경우 학습된 주의 계층은 지금까지 시퀀스에 의미적으로 정렬된 모델 어휘에서 가장 가능성이 큰 토큰을 예측하는 가중치를 적용합니다.

이 모든 것이 의미하는 바는 GPT-4(ChatGPT 및 Bing 뒤에 있는 모델)와 같은 변환기 모델이 텍스트 입력(프롬프트라고 함)을 사용하고 구문적으로 올바른 출력(완료라고 함)을 생성하도록 설계되었다는 것입니다. 실제로 모델의 "매직"은 일관된 문장을 함께 문자열링할 수 있다는 것입니다. 이 기능은 모델의 "지식" 또는 "인텔리전스"를 의미하지는 않습니다. 단지 큰 어휘와 단어의 의미있는 시퀀스를 생성 할 수있는 기능. 그러나 GPT-4와 같은 대규모 언어 모델을 매우 강력하게 만드는 것은 학습된 데이터의 양(인터넷에서 퍼블릭 및 라이선스가 부여된 데이터)과 네트워크의 복잡성입니다. 이렇게 하면 모델이 학습된 어휘의 단어 간 관계를 기반으로 완성을 생성할 수 있습니다. 종종 동일한 프롬프트에 대한 사람의 응답과 구별할 수 없는 출력을 생성합니다.