개발자/인공지능과 인간

ChatGPT 작동 원리 1, 한 번에 한 단어씩 추가하기

지구빵집 2023. 6. 12. 08:04
반응형

 

 

ChatGPT 공부에 필요한 내용을 번역했습니다. 공부한 내용을 다른 사람에게 가르치거나 정리를 하는 방법은 학습에 가장 좋은 방법입니다. 원문은 "ChatGPT는 무엇을 하고… 왜 작동합니까?" 글을 링크로 연결합니다.

 

 

ChatGPT 작동 원리 1, 한 번에 한 단어씩 추가하기 

ChatGPT 작동 원리 2 - 신경망 

ChatGPT 작동 원리 3 기계학습과 신경망 훈련 

ChatGPT 작동 원리 4 임베딩 개념 

ChatGPT 작동원리 5 - ChatGPT 훈련 1 

ChatGPT 작동원리 5 - ChatGPT 훈련 2 

 

 

한 번에 한 단어씩 추가하는 것입니다.

 

ChatGPT 가 사람이 쓴 텍스트처럼 표면적으로도 읽을 수 있는 것을 자동으로 생성할 수 있다는 것은 놀랍고 예상치 못한 것입니다. 하지만 어떻게 합니까? 왜 작동합니까? 여기에서 저의 목적은 ChatGPT 내부에서 진행되는 작업에 대한 대략적인 개요를 제공하고 우리가 의미 있는 텍스트로 간주할 수 있는 것을 생성하는 데 왜 그렇게 잘할 수 있는지 탐구하는 것입니다. 우리는 처음부터 무슨 일이 일어나고 있는지에 대한 큰 그림에 초점을 맞출 것입니다. 몇 가지 엔지니어링 세부 사항을 언급하는 동안 깊이 들어가지는 않겠습니다. (그리고 내가 말할 내용의 본질은 ChatGPT와 마찬가지로 현재의 다른 "대형 언어 모델"[LLM]에도 적용됩니다.)

 

가장 먼저 설명할 것은 ChatGPT가 항상 근본적으로 하려고 하는 것은 지금까지 받은 텍스트의 "합리적인 연속"을 생성하는 것입니다. 수십억 개의 웹 페이지 등에 글을 썼습니다.”

 

따라서 " AI의 가장 좋은 점은 어떠어떠한 능력입니다."라는 텍스트가 있다고 가정해 보겠습니다. 수십억 페이지에 달하는 사람이 쓴 텍스트(예: 웹 및 디지털화된 책)를 스캔하고 이 텍스트의 모든 인스턴스를 찾은 다음, 그 단어 다음에 어떤 단어가 몇 분의 1 시간에 오는지 확인한다고 상상해 보십시오. ChatGPT는 문자 그대로의 텍스트를 보지 않는다는 점을 제외하고는 이와 같은 작업을 효과적으로 수행합니다. 어떤 의미에서 "의미가 일치하는" 것을 찾습니다. 그러나 최종 결과는 "확률"과 함께 뒤따를 수 있는 단어의 순위 목록을 생성한다는 것입니다.

 

 

 

그리고 주목할 만한 점은 ChatGPT가 에세이 작성과 같은 작업을 수행할 때 기본적으로 수행하는 작업은 "지금까지 주어진 텍스트에서 다음 단어는 무엇이어야 합니까?"라고 반복해서 묻고 매번 단어를 추가한다는 것입니다. (더 정확하게 설명하자면 단어의 일부일 수 있는 "토큰"을 추가하는 것입니다. 이것이 때때로 "새로운 단어를 구성"할 수 있는 이유입니다.)

 

그러나 각 단계에서 확률이 있는 단어 목록을 얻습니다. 그러나 작성 중인 에세이(또는 무엇이든)에 추가하기 위해 실제로 어떤 것을 선택해야 합니까? "가장 높은 순위"의 단어(즉, 가장 높은 "확률"이 할당된 단어)여야 한다고 생각할 수 있습니다. 그러나 이것은 약간의 부두교가 스며들기 시작하는 곳입니다. 어떤 이유에서인지 언젠가는 과학적인 방식으로 이해하게 될 것입니다. 우리가 항상 가장 높은 순위의 단어를 선택하면 일반적으로 매우 결코 "어떤 창의성도 보여주지" 않는 것 같은 "평평한" 에세이. 그러나 때때로 (무작위로) 순위가 낮은 단어를 선택하면 "더 흥미로운" 에세이가 됩니다.

 

여기에 임의성이 있다는 사실은 동일한 프롬프트를 여러 번 사용하면 매번 다른 에세이를 받을 가능성이 높다는 것을 의미합니다. 그리고 부두교의 개념에 따라 하위 단어가 얼마나 자주 사용될 것인지를 결정하는 소위 "온도" 매개변수가 있으며 에세이 생성의 경우 0.8의 "온도"가 가장 좋은 것으로 나타났습니다. (여기서 사용된 "이론"이 없다는 점을 강조할 가치가 있습니다. 실제로 작동하는 것으로 밝혀진 것이 문제일 뿐입니다. 예를 들어 통계 물리학에서 익숙한 지수 분포가 사용되기 때문에 "온도"라는 개념이 있습니다. , 하지만 적어도 우리가 아는 한 "물리적" 연결은 없습니다.)

 

계속 진행하기 전에 설명을 위해 ChatGPT에 있는 전체 시스템을 거의 사용하지 않을 것임을 설명해야 합니다. 대신 나는 보통 표준 데스크톱 컴퓨터에서 실행할 수 있을 만큼 작다는 좋은 기능을 가진 더 단순한 GPT-2 시스템으로 작업할 것입니다. 따라서 본질적으로 내가 보여주는 모든 것에 대해 컴퓨터에서 즉시 실행할 수 있는 명시적인 Wolfram 언어 코드를 포함할 수 있습니다. (뒤에 있는 코드를 복사하려면 여기에서 아무 그림이나 클릭하세요.)

 

예를 들어, 위의 확률표를 얻는 방법은 다음과 같습니다. 먼저 기본 "언어 모델" 신경망을 검색해야 합니다.

 

 

 

 

나중에 이 신경망의 내부를 살펴보고 작동 방식에 대해 이야기하겠습니다. 그러나 지금은 이 "순 모델"을 지금까지 텍스트에 블랙박스로 적용하고 모델이 따라야 한다고 확률로 상위 5개 단어를 요청할 수 있습니다.

 

 

 

 

이렇게 하면 그 결과를 가져와 명시적으로 형식이 지정된 " 데이터 세트 " 로 만듭니다.

 

 

 

 

반복적으로 "모델을 적용"하면 어떻게 됩니까? 각 단계에서 확률이 가장 높은 단어를 추가합니다(이 코드에서는 모델의 "결정"으로 지정됨).

 

 

 

더 오래 지속되면 어떻게 됩니까? 이("온도 0도") 경우 곧 나오는 내용이 다소 혼란스럽고 반복됩니다.

 

 

 

 

그러나 항상 "최상위" 단어를 선택하는 대신 때때로 임의로 "비상위" 단어를 선택하는 경우("온도" 0.8에 해당하는 "무작위")는 어떻게 됩니까? 다시 텍스트를 작성할 수 있습니다.

 

 

 

 

그리고 이 작업을 수행할 때마다 다른 무작위 선택이 이루어지며 다음 5가지 예에서와 같이 텍스트가 달라집니다.

 

 

 

 

첫 번째 단계에서도 (온도 0.8에서) 선택할 수 있는 가능한 "다음 단어"가 많다는 점을 지적할 가치가 있습니다. 하지만 그 확률은 매우 빠르게 떨어집니다(예, 이 로그-로그 플롯의 직선 언어의 일반 통계의 매우 특징적인 n –1 "멱법칙" 붕괴에 해당 ):

 

 

 

 

 

더 오래 지속되면 어떻게 됩니까? 다음은 임의의 예입니다. 상위 단어(온도 0) 보다 낫지만 여전히 기껏해야 약간 이상합니다.

 

 

 

 

이것은 가장 단순한 GPT-2 모델 (2019년부터)로 수행되었습니다. 더 새롭고 더 큰 GPT-3 모델을 사용하면 결과가 더 좋아집니다. 다음은 동일한 "프롬프트"로 생성된 최상위 단어(제로 온도) 텍스트이지만 가장 큰 GPT-3 모델을 사용합니다.

 

 

 

 

다음은 "온도 0.8"에서 임의의 예입니다.

 

 

 

 

확률은 어디에서 오는가?

 

좋습니다. ChatGPT는 항상 확률에 따라 다음 단어를 선택합니다. 그러나 그 확률은 어디에서 오는가? 더 간단한 문제부터 시작해 봅시다. 한 번에 (단어가 아닌) 한 글자씩 영어 텍스트를 생성하는 것을 고려해 봅시다. 각 문자의 확률이 어떻게 되어야 하는지 알아낼 수 있습니까?

 

우리가 할 수 있는 아주 최소한의 일은 영어 텍스트의 샘플을 취하고 그 안에 얼마나 자주 다른 문자가 나타나는지 계산하는 것입니다. 예를 들어 "고양이"에 대한 Wikipedia 기사의 문자 수를 계산합니다.

 

 

 

 

그리고 이것은 "개"에 대해 동일한 작업을 수행합니다.

 

 

 

 

결과는 비슷하지만 동일하지는 않습니다(“o”는 결국 “dog”라는 단어 자체에서 발생하기 때문에 “dogs” 기사에서 더 일반적입니다). 그래도 영어 텍스트의 샘플을 충분히 많이 가져오면 결국 적어도 상당히 일관된 결과를 얻을 것으로 기대할 수 있습니다.

 

 

 

다음은 이러한 확률로 일련의 문자를 생성하면 얻을 수 있는 샘플입니다.

 

 

 

특정 확률을 가진 문자인 것처럼 공백을 추가하여 "단어"로 나눌 수 있습니다.

 

 

 

 

"단어 길이"의 분포를 영어의 내용과 일치하도록 강제함으로써 "단어"를 만드는 작업을 약간 더 잘 수행할 수 있습니다.

 

 

 

여기서 "실제 단어"를 얻지는 못했지만 결과는 약간 더 좋아 보입니다. 하지만 더 나아가려면 각 문자를 무작위로 개별적으로 선택하는 것 이상을 수행해야 합니다. 예를 들어 "q"가 있으면 기본적으로 다음 문자는 "u"여야 합니다.

 

다음은 문자 자체의 확률 플롯입니다.

 

 

 

다음은 일반적인 영어 텍스트에서 문자 쌍("2-그램")의 확률을 보여주는 도표입니다. 가능한 첫 글자는 페이지 전체에 표시되고 두 번째 글자는 페이지 아래에 표시됩니다.

 

 

 

예를 들어 여기에서 "u" 행을 제외하고 "q" 열이 비어 있음(확률 0)을 볼 수 있습니다. 이제 "단어"를 한 번에 한 글자씩 생성하는 대신 이러한 "2그램" 확률을 사용하여 한 번에 두 글자를 보면서 단어를 생성해 보겠습니다. 다음은 몇 가지 "실제 단어"를 포함하는 결과의 샘플입니다.

 

 

 

영어 텍스트가 충분히 많으면 단일 문자 또는 문자 쌍(2그램)의 확률뿐만 아니라 더 긴 문자에 대해서도 꽤 좋은 추정치를 얻을 수 있습니다. 그리고 점진적으로 더 긴 n- 그램 확률로 "무작위 단어"를 생성하면 점진적으로 "더 현실적"이 되는 것을 볼 수 있습니다.

 

 

 

하지만 이제 ChatGPT가 처리하는 것과 거의 비슷하지만 문자가 아닌 전체 단어를 처리한다고 가정해 보겠습니다. 영어에는 합리적으로 일반적으로 사용되는 약 40,000개의 단어가 있습니다. 그리고 방대한 양의 영어 텍스트 모음(예를 들어, 수 천억 개의 단어가 포함된 수백만 권의 책)을 살펴봄으로써 각 단어가 얼마나 흔한지 추정할 수 있습니다. 그리고 이것을 사용하여 각 단어가 말뭉치에 나타날 확률과 동일한 확률로 독립적으로 무작위로 선택되는 "문장" 생성을 시작할 수 있습니다. 다음은 우리가 얻은 샘플입니다.

 

 

 

당연히 이것은 난센스입니다. 어떻게 하면 더 잘할 수 있을까요? 문자와 마찬가지로 단일 단어에 대한 확률뿐만 아니라 쌍 또는 더 긴 n -그램 단어에 대한 확률도 고려할 수 있습니다. 쌍으로 이 작업을 수행하면 모든 경우에 "고양이"라는 단어로 시작하는 5가지 예가 있습니다.

 

 

 

 

조금 더 "센스 있는 모습"이 되어가고 있습니다. 그리고 충분히 긴 n -그램을 사용할 수 있다면 기본적으로 "ChatGPT를 얻게" 될 것이라고 상상할 수 있습니다. 확률”. 그러나 여기에 문제가 있습니다. 이러한 확률을 추론할 수 있도록 작성된 영어 텍스트가 충분하지 않습니다.

 

웹 크롤링 에는 수천억 개의 단어가 있을 수 있습니다. 디지털화된 책에는 또 다른 천억 단어가 있을 수 있습니다. 그러나 40,000개의 공통 단어로 가능한 2-gram의 수는 이미 16억 개이며 가능한 3-gram의 수는 60조입니다. 그래서 밖에 있는 텍스트에서 이 모든 것에 대한 확률을 추정할 수 있는 방법이 없습니다. 그리고 우리가 20 단어의 "에세이 조각"에 도달할 즈음에는 가능성의 수가 우주의 입자 수보다 많기 때문에 어떤 의미에서 그것들을 모두 적을 수는 없습니다.

 

그래서 우리가 뭘 할 수 있지? 중요한 아이디어는 우리가 본 텍스트 코퍼스에서 이러한 시퀀스를 명시적으로 본 적이 없더라도 시퀀스가 ​​발생해야 하는 확률을 추정할 수 있는 모델을 만드는 것입니다. 그리고 ChatGPT의 핵심에는 이러한 확률을 잘 예측하도록 구축된 소위 "대형 언어 모델"(LLM)이 있습니다.

 

모델이란 무엇입니까?

 

(1500년대 후반에 갈릴레오가 했던 것처럼) 피사의 사탑 각 층에서 떨어진 포탄이 땅에 떨어지는 데 걸리는 시간을 알고 싶다고 가정해 보겠습니다. 글쎄, 당신은 각각의 경우에 그것을 측정하고 결과의 표를 만들 수 있습니다. 또는 이론과학의 본질인 각 경우를 측정하고 기억하기보다는 답을 계산하기 위한 일종의 절차를 제공하는 모델을 만들 수 있습니다.

 

포탄이 여러 층에서 떨어지는 데 걸리는 시간에 대한 (다소 이상화된) 데이터가 있다고 상상해 봅시다.

 

 

 

 

명시적으로 데이터가 없는 바닥에서 떨어지는 데 걸리는 시간을 어떻게 알 수 있습니까? 이 특별한 경우에, 우리는 그것을 해결하기 위해 알려진 물리 법칙을 사용할 수 있습니다. 하지만 우리가 가진 것이라고는 데이터뿐이고 어떤 기본 법칙이 데이터를 지배하는지 모른다고 합시다. 그런 다음 직선을 모델로 사용해야 하는 것과 같은 수학적 추측을 할 수 있습니다.

 

 

 

다른 직선을 선택할 수 있습니다. 그러나 이것은 평균적으로 우리가 받은 데이터에 가장 가까운 것입니다. 그리고 이 직선으로부터 우리는 어떤 층에서 떨어지는 시간을 추정할 수 있습니다.

 

여기서 직선을 사용하는 방법을 어떻게 알았습니까? 어떤 수준에서는 그렇지 않았습니다. 그것은 수학적으로 단순한 것일 뿐이며, 우리는 측정한 많은 데이터가 수학적으로 간단한 것에 잘 맞는 것으로 판명된다는 사실에 익숙합니다. a + b x + c x 2와 같이 수학적으로 더 복잡한 것을 시도할 수 있으며 이 경우에는 더 잘할 수 있습니다.

 

 

 

 

하지만 상황이 상당히 잘못될 수 있습니다. a + b / x + c sin( x )로 할 수 있는 최선의 방법은 다음과 같습니다.

 

 

 

 

"모델 없는 모델"은 없다는 것을 이해해야 합니다. 사용하는 모든 모델에는 특정한 기본 구조가 있습니다. 그런 다음 데이터에 맞게 "돌릴 수 있는 손잡이"(즉, 설정할 수 있는 매개변수)의 특정 집합이 있습니다. 그리고 ChatGPT의 경우 이러한 "손잡이"가 많이 사용됩니다. 실제로는 1,750억 개가 사용됩니다.

 

그러나 주목할만한 점은 ChatGPT의 기본 구조(“그냥” 많은 매개변수 포함)가 합리적인 에세이 길이의 텍스트 조각을 제공하기에 “충분히” 다음 단어 확률을 계산하는 모델을 만들기에 충분하다는 것입니다.

 

인간과 유사한 작업을 위한 모델

 

위에서 제시한 예는 "간단한 수학이 적용된다"는 것을 수세기 동안 알고 있었던 간단한 물리학에서 기본적으로 나오는 수치 데이터에 대한 모델을 만드는 것과 관련이 있습니다. 그러나 ChatGPT의 경우 인간의 두뇌가 생성하는 종류의 인간 언어 텍스트 모델을 만들어야 합니다. 그리고 그런 것에 대해 우리는 (적어도 아직) "간단한 수학"과 같은 것을 가지고 있지 않습니다. 그렇다면 그 모델은 어떤 모습일까요?

 

언어에 대해 이야기하기 전에 인간과 유사한 또 다른 작업인 이미지 인식에 대해 이야기해 봅시다. 이에 대한 간단한 예로서 숫자 이미지를 살펴보겠습니다(예, 이것은 고전적인 기계 학습 예입니다 ).

 

 

 

우리가 할 수 있는 한 가지는 각 숫자에 대한 샘플 이미지를 얻는 것입니다.

 

 

 

 

그런 다음 입력으로 제공된 이미지가 특정 숫자에 해당하는지 알아보기 위해 우리가 가지고 있는 샘플과 명시적인 픽셀 단위 비교를 수행할 수 있습니다. 그러나 인간으로서 우리는 확실히 더 나은 일을 하는 것 같습니다. 예를 들어 손으로 쓴 경우에도 여전히 숫자를 인식할 수 있고 모든 종류의 수정 및 왜곡이 있기 때문입니다.

 

 

 

위의 숫자 데이터에 대한 모델을 만들 때 주어진 숫자 값 x를 취할 수 있었고 특정 a 및 b에 대해 a + bx를 계산할 수 있었습니다. 따라서 여기에서 각 픽셀의 그레이 레벨 값을 어떤 변수 x i로 취급하면 평가할 때 이미지가 어떤 숫자인지 알려주는 모든 변수의 함수가 있습니까? 그러한 기능을 구성하는 것이 가능하다는 것이 밝혀졌습니다. 놀랍지 않게도 특별히 간단하지는 않습니다. 그리고 전형적인 예에는 아마도 50만 개의 수학 연산이 포함될 수 있습니다.

 

그러나 최종 결과는 이미지의 픽셀 값 모음을 이 함수에 공급하면 이미지가 있는 숫자를 지정하는 숫자가 나올 것입니다. 나중에 그러한 기능을 구성하는 방법과 신경망의 개념에 대해 이야기하겠습니다. 하지만 지금은 함수를 블랙박스로 취급하겠습니다. 여기서 손으로 쓴 숫자의 이미지(픽셀 값의 배열)를 입력하고 이에 해당하는 숫자를 얻습니다.

 

 

 

그러나 여기서 실제로 무슨 일이 일어나고 있습니까? 점진적으로 숫자를 흐리게 처리한다고 가정해 보겠습니다. 잠시 동안 우리의 기능은 여전히 ​​"2"로 "인식"합니다. 그러나 곧 "잃어버리고" "잘못된" 결과를 제공하기 시작합니다.

 

 

 

그런데 왜 그것이 "잘못된" 결과라고 말합니까? 이 경우 "2"를 흐리게 처리하여 모든 이미지를 얻었다는 것을 알고 있습니다. 그러나 우리의 목표가 이미지 인식에서 인간이 할 수 있는 일에 대한 모델을 만드는 것이라면, 진짜 질문은 그것이 어디에서 왔는지도 모른 채 흐릿한 이미지 중 하나를 제시했다면 인간이 무엇을 했을 것인가 하는 것입니다.

 

그리고 기능에서 얻은 결과가 일반적으로 인간이 말하는 것과 일치하는 경우 "좋은 모델"이 있습니다. 중요한 과학적 사실은 이와 같은 이미지 인식 작업의 경우 기본적으로 이를 수행하는 기능을 구성하는 방법을 알고 있다는 것입니다.

 

작동한다는 것을 "수학적으로 증명"할 수 있습니까? 음... 아니. 그러기 위해서는 인간이 하는 일에 대한 수학적 이론이 필요하기 때문입니다. "2" 이미지를 선택하고 몇 픽셀을 변경합니다. 몇 개의 픽셀만 "어긋난" 경우에도 이미지를 "2"로 간주해야 한다고 생각할 수 있습니다. 하지만 얼마나 멀리 가야 합니까? 그것은 인간의 시각적 인식의 문제입니다. 그리고 예, 벌이나 문어에 대한 대답은 의심할 여지없이 다를 것이며 외계인으로 추정되는 경우에는 완전히 다를 수 있습니다. 

 

하 여기까지 정리....

 

 

멋진 이미지라서

 

 

반응형