LLM(대규모 언어 모델)
비고
자세한 내용은 텍스트 및 이미지 탭을 참조하세요.
생성 AI의 핵심은 대규모 언어 모델(LLM)과 그보다 간결한 작은 언어 모델(SLM)로, 이들은 어휘 내 단어와 구 간의 언어적 및 의미적 관계를 캡슐화합니다. 모델은 이러한 관계를 사용하여 자연어 입력을 추론하고 의미 있고 관련 있는 응답을 생성할 수 있습니다.
기본적으로 LLM은 프롬프트에 따라 완료를 생성하도록 훈련됩니다. 많은 휴대폰에서 예측 텍스트 기능의 매우 강력한 예라고 생각합니다. 프롬프트는 의미상 올바른 완성을 초래하는 텍스트 예측 시퀀스를 시작합니다. 요령은 모델이 단어 간의 관계를 이해하고 지금까지 시퀀스에서 다음 단어에 영향을 줄 가능성이 가장 큰 단어를 식별할 수 있다는 것입니다. 를 사용하여 시퀀스의 가장 가능성이 큰 연속성을 예측합니다.
예를 들어 다음 문장을 고려합니다.
고양이에게 큰 소리로 짖는 개가 들립니다.
이제 처음 몇 마디만 들었다고 가정해 봅시다: "강아지가 ...". 이러한 단어 중 일부는 다음 단어가 다른 단어보다 무엇인지에 대한 더 유용한 단서라는 것을 알고 있습니다. "들었어요"와 "개"는 다음에 오는 것에 대한 강력한 지표이며 확률을 좁히는 데 도움이된다는 것을 알고 있습니다. 당신은 문장이 "나는 개가 짖는 것을 들었다"로 계속될 좋은 가능성이 있다는 것을 알고 있다.
다음 단어는 다음과 같은 이유로 추측할 수 있습니다.
- 당신은 사용할 수 있는 방대한 어휘를 가지고 있습니다.
- 일반적인 언어 구조를 배웠으므로 의미 있는 문장에서 단어가 서로 어떻게 관련되는지 알 수 있습니다.
- 당신은 단어와 관련된 의미 체계 개념의 이해가 - 당신은 당신이 들었던 무언가가 어떤 종류의 소리해야한다는 것을 알고, 당신은 개에 의해 만들어진 특정 소리가 있다는 것을 알고있다.
그렇다면 이러한 동일한 기능을 갖도록 모델을 어떻게 학습시킬 수 있을까요?
토큰화
첫 번째 단계는 모델에 매우 방대한 단어와 구문의 어휘를 제공하는 것입니다. 그리고 우리는 그것이 정말로 방대하다는 것을 의미합니다. 최신 세대의 LLM에는 인터넷 및 기타 원본에서 대량의 학습 데이터를 기반으로 하는 수십만 개의 토큰으로 구성된 어휘가 있습니다.
잠깐만 기다리세요. 토큰?
단어 측면에서 언어를 생각하는 경향이 있지만, LLM은 어휘를 토큰으로 분해합니다. 토큰에는 단어뿐만 아니라 하위 단어(예: "믿을 수 없는" 및 "가능성"의 "un"), 문장 부호 및 기타 일반적으로 사용되는 문자 시퀀스도 포함됩니다. 따라서 큰 언어 모델을 학습하는 첫 번째 단계는 다음과 같이 학습 텍스트를 고유 토큰으로 분해하고 각 토큰에 고유한 정수 식별자를 할당하는 것입니다.
- I(1)
- heard(2)
- a(3)
- 개 (4)
- 껍질 (5)
- 큰 소리로 (6)
- at(7)
- a (3) 이미 할당됨
- cat(8)
등
학습 데이터를 더 추가하면 어휘 및 할당된 식별자에 더 많은 토큰이 추가됩니다. 따라서 강아지, 스케이트보드, 자동차 등과 같은 단어에 대한 토큰으로 끝날 수 있습니다.
비고
이 간단한 예제에서는 단어를 기반으로 예제 텍스트를 토큰화했습니다. 실제로는 하위 단어, 문장 부호 및 기타 토큰도 있습니다.
변환기를 사용하여 토큰 변환
이제 고유한 ID가 있는 토큰 집합이 있으므로 서로 연결할 방법을 찾아야 합니다. 이를 위해 각 토큰에 벡터 ([1, 23, 45]와 같은 여러 숫자 값의 배열)를 할당합니다. 각 벡터에는 여러 숫자 요소 또는 차원이 있으며, 이를 사용하여 토큰의 언어 및 의미 체계 특성을 인코딩하여 토큰의 의미 와 토큰이 다른 토큰과 어떻게 관련되는지에 대한 많은 정보를 효율적인 형식으로 제공할 수 있습니다.
토큰의 초기 벡터 표현을 학습 데이터에 나타나는 컨텍스트에 따라 언어 및 의미 체계 특성이 포함된 새 벡터로 변환해야 합니다. 새 벡터에는 의미 체계 값이 포함되어 있으므로 포함이라고 합니다.
이 작업을 수행하기 위해 변환기 모델을 사용합니다. 이러한 종류의 모델은 다음 두 개의 "블록"으로 구성됩니다.
- 주의라는 기술을 적용하여 임베딩을 만드는 인코더 블록입니다. 주의 계층은 각 토큰을 차례로 검사하고 해당 토큰의 영향을 결정합니다. 인코딩 프로세스를 보다 효율적으로 만들기 위해 다중 헤드 주의는 토큰의 여러 요소를 병렬로 평가하고 새 벡터 요소 값을 계산하는 데 사용할 수 있는 가중치를 할당하는 데 사용됩니다. 어텐션 레이어의 결과는 임베딩의 최상의 벡터 표현을 찾기 위해 완전히 연결된 신경망에 공급됩니다.
- 인코더에서 계산한 포함을 사용하여 프롬프트로 시작된 시퀀스에서 가장 가능성이 큰 다음 토큰을 결정하는 디코더 계층입니다. 디코더는 또한 주의 및 피드 전달 신경망을 사용하여 예측을 합니다.
비고
설명 및 다이어그램에서 변환기 아키텍처 및 프로세스를 크게 간소화했습니다. 주의가 작동하는 방식에 대한 구체적인 세부 사항에 대해 너무 걱정하지 마세요. 핵심은 사용되는 컨텍스트에 따라 각 토큰의 언어 및 의미 체계 특성을 캡처하는 데 도움이 된다는 것입니다. 트랜스포머 아키텍처에 대해 더 깊이 파악하고 어떻게 어텐션을 사용하는지 알고 싶다면 원본 논문 Attention is all you need을 읽어볼 수 있습니다.
초기 벡터 및 위치 인코딩
처음에는 토큰 벡터 값이 임의로 할당된 후 변환기를 통해 공급되어 포함 벡터를 만듭니다. 토큰 벡터는 학습 텍스트 시퀀스에서 토큰이 나타나는 위치를 나타내는 위치 인코딩 과 함께 변환기에 공급됩니다(시퀀스에 표시되는 토큰이 서로 관련되는 방식과 관련이 있기 때문에 이 작업을 수행해야 합니다). 예를 들어 토큰은 다음과 같이 표시될 수 있습니다.
| 토큰 | 토큰 ID | Position | Vector |
|---|---|---|---|
| I | 1 | 1 | [3, 7, 10] |
| 들었습니다 | 2 | 2 | [2, 15, 1] |
| 오전 | 3 | 3 | [9, 11, 1] |
| 강아지 | 4 | 4 | [2, 7, 11] |
| 짖다 | 5 | 5 | [9, 12, 0] |
| 큰 소리로 | 6 | 6 | [3, 8, 13] |
| at | 7 | 7 | [5, 7, 10] |
| 오전 | 3 | 8 | [9, 11, 1] |
| cat | 8 | 9 | [8, -6, 9 ] |
| ... | ... | ... | ... |
| 강아지 | 127 | 45 | [7, 7, -2 ] |
| 차량 | 128 | 56 | [5, -5, 1 ] |
| 스케이트보드 | 129 | 67 | [4, 7, 14] |
비고
3개 요소만 있는 벡터를 사용하여 작업을 간단하게 유지했습니다(나중에 3차원으로 시각화하는 데 도움이 됨). 실제로 벡터에는 수천 개의 요소가 있습니다.
주의 및 임베딩
포함된 컨텍스트 정보를 포함하는 토큰의 벡터 표현을 확인하기 위해 변환기는 주의 계층 을 사용합니다. 주의 계층은 표시되는 토큰 시퀀스의 컨텍스트 내에서 각 토큰을 차례로 고려합니다. 현재 토큰 주위의 토큰은 영향을 반영하기 위해 가중치가 적용되고 가중치는 현재 토큰의 포함 벡터에 대한 요소 값을 계산하는 데 사용됩니다. 예를 들어, "나는 개 짖는 소리를 들었다"라는 문맥에서 "bark"이라는 토큰을 고려할 때, "heard"와 "dog"의 토큰이 "I" 또는 "a"보다 더 많은 가중치가 할당됩니다. 이는 그들이 "bark"을 더 잘 설명하는 강력한 지표이기 때문입니다.
처음에는 모델이 어떤 토큰이 다른 사람에게 영향을 미치는지 "알 수 없다"고 합니다. 그러나 더 많은 양의 텍스트에 노출되므로 일반적으로 함께 표시되는 토큰을 반복적으로 학습하고, 토큰의 근접성 및 사용 빈도에 따라 토큰의 언어 및 의미 체계 특성을 반영하는 벡터 요소에 값을 할당하는 데 도움이 되는 패턴을 찾기 시작할 수 있습니다. 이 프로세스는 다중 헤드 주의를 사용하여 벡터의 다양한 요소를 병렬로 고려함으로써 보다 효율적으로 수행됩니다.
인코딩 프로세스의 결과는 포함 집합입니다. 어휘의 토큰이 서로 어떻게 관련되는지에 대한 컨텍스트 정보를 포함하는 벡터입니다. 실제 트랜스포머는 수천 개의 요소를 포함하는 임베딩을 생성하지만 단순하게 유지하기 위해, 예제에서는 세 개의 요소만 있는 벡터로 집중해 보겠습니다. 어휘에 대한 인코딩 프로세스의 결과는 다음과 같을 수 있습니다.
| 토큰 | 토큰 ID | 임베딩 |
|---|---|---|
| I | 1 | [2, 0, -1] |
| 들었습니다 | 2 | [-2, 2, 4 ] |
| 오전 | 3 | [-3, 5, 5 ] |
| 강아지 | 4 | [10, 3, 2 ] |
| 짖다 | 5 | [9, 2, 10 ] |
| 큰 소리로 | 6 | [-3, 8, 3 ] |
| at | 7 | [-5, -1, 1] |
| cat | 8 | [10, 3, 1] |
| 강아지 | 127 | [5, 3, 2 ] |
| 차량 | 128 | [-2, -2, 1 ] |
| 스케이트보드 | 129 | [-3, -2, 2] |
| 짖다 | 203 | [2, -2, 3 ] |
관찰력이 뛰어나다면, 결과에 "bark" 토큰에 대한 두 개의 포함 항목이 있음을 발견했을 수 있습니다. 임베딩은 특정 컨텍스트 내의 토큰을 나타낸다는 것을 이해하는 것이 중요합니다. 그리고 일부 토큰은 다양한 의미를 가질 수 있습니다. 예를 들어, 개의 짖다(bark)와 나무의 껍질은 다릅니다. 여러 컨텍스트에서 일반적으로 사용되는 토큰은 여러 포함을 생성할 수 있습니다.
embeddings의 요소를 다차원 벡터 공간의 차원으로 생각할 수 있습니다. 간단한 예제에서는 포함 요소에 세 개의 요소만 있으므로 다음과 같이 3차원 공간에서 벡터로 시각화할 수 있습니다.
차원은 토큰이 언어적으로 서로 어떻게 관련되는지에 따라 계산되기 때문에 유사한 컨텍스트에서 사용되는 토큰(따라서 비슷한 의미가 있는)은 비슷한 방향의 벡터를 생성합니다. 예를 들어"개"와 "강아지"에 대한 포함은 "고양이"에 대한 포함과 너무 다르지 않은 다소 같은 방향으로 가리킵니다. 그러나 "스케이트 보드"또는 "자동차"에 대한 포함과는 매우 다릅니다. 벡터의 코사인 유사성 을 계산하여 토큰이 서로 얼마나 가까운지 의미 체계적으로 측정할 수 있습니다.
프롬프트 기반 완성 예측
이제 토큰 간의 컨텍스트 관계를 캡슐화하는 포함 집합이 있으므로 변환기의 디코더 블록을 사용하여 시작 프롬프트에 따라 시퀀스에서 다음 단어를 반복적으로 예측할 수 있습니다.
다시 한 번 각 토큰을 컨텍스트에서 고려하기 위해 주의가 사용됩니다. 그러나 이번에는 예측하려는 토큰의 앞에 오는 토큰들만 컨텍스트에 포함할 수 있습니다. 디코더 모델은 이미 전체 시퀀스가 있는 데이터를 사용하여 마스킹된 주의라는 기술을 적용하여 학습됩니다. 현재 토큰 뒤의 토큰이 무시되는 경우 학습 중에 다음 토큰을 이미 알고 있으므로 변환기는 예측 토큰과 비교하고 이후 학습 반복에서 학습된 가중치를 조정하여 모델의 오류를 줄일 수 있습니다.
다음 토큰을 알 수 없는 새 완성을 예측할 때 주의 계층은 다음 토큰에 대해 가능한 벡터를 계산하고 피드 전달 네트워크는 가장 가능성이 큰 후보를 결정하는 데 사용됩니다. 그러면 예측 값이 시퀀스에 추가되고 전체 프로세스가 반복되어 다음 토큰을 예측합니다. 디코더가 시퀀스가 종료되었음을 예측할 때까지 등등입니다.
예를 들어 "내 개가 ...였을 때"라는 시퀀스를 감안할 때 모델은 지금까지 시퀀스의 토큰을 평가하고, 가중치를 할당하고, 다음으로 가능한 토큰이 "cat" 또는 "skateboard"가 아닌 "강아지"라고 예측합니다.