개발자/인공지능과 인간

ChatGPT 작동원리 5 - ChatGPT 훈련 1

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

 

 

ChatGPT 훈련

 

이제 ChatGPT가 설정되면 작동하는 방식에 대한 개요를 제공했습니다. 그런데 어떻게 설정하게 되었나요? 신경망에 있는 1,750억 개의 가중치는 모두 어떻게 결정되었을까요? 기본적으로 그것들은 웹, 책 등에서 사람이 쓴 방대한 텍스트 모음을 기반으로 하는 매우 대규모 훈련의 결과입니다. 우리가 말했듯이, 모든 훈련 데이터가 주어지더라도 신경망이 "인간과 같은" 텍스트를 성공적으로 생성할 수 있는지는 분명하지 않습니다. 그리고 다시 한번, 이를 실현하는 데 필요한 세부적인 엔지니어링 부분이 있는 것 같습니다. 그러나 ChatGPT의 큰 놀라움과 발견은 이것이 가능하다는 것입니다. 그리고 사실상 1,750억 개의 가중치를 가진 신경망은 인간이 작성하는 텍스트의 "합리적인 모델"을 만들 수 있습니다.

 

현대에는 인간이 쓴 많은 텍스트가 디지털 형식으로 존재합니다. 공개 웹에는 사람이 쓴 페이지가 최소 수십억 페이지에 달하며, 모두 합쳐서 1조 단어에 달하는 텍스트가 포함되어 있습니다. 비공개 웹페이지가 포함된 경우 그 수치는 적어도 100배 이상 커질 수 있습니다. 지금까지 500만 권 이상의 디지털화된 책을 사용할 수 있게 되었으며(지금까지 출판된 1억 권 정도), 또 다른 1000억 단어의 텍스트를 제공합니다. 그리고 그것은 비디오 등의 음성에서 파생된 텍스트도 언급하지 않습니다. 약 1,500만 단어의 이메일과 총 5,000만 단어를 입력했습니다. 지난 몇 년 동안 저는 실시간 스트림에서 1,000만 단어 이상을 말했습니다. 그리고 네, 그 모든 것에서 봇을 훈련시킬 것입니다.)

 

하지만 이 모든 데이터가 주어지면 어떻게 신경망을 훈련시킬 수 있을까요? 기본 프로세스는 위의 간단한 예에서 설명한 것과 같습니다. 예제 배치를 제시한 다음 네트워크에서 해당 예제에 대해 발생하는 오류("손실")를 최소화하기 위해 네트워크의 가중치를 조정합니다. 오류에서 "역전파"하는 데 비용이 많이 드는 주요 사항은 이 작업을 수행할 때마다 네트워크의 모든 가중치가 일반적으로 최소한 약간씩 변경되며 처리해야 할 가중치가 많다는 것입니다. (실제 "역방향 계산"은 일반적으로 정방향 계산보다 작은 상수 요소일 뿐입니다.)

 

최신 GPU 하드웨어를 사용하면 수천 개의 예제 배치에서 결과를 병렬로 계산하는 것이 간단합니다. 그러나 신경망의 가중치를 실제로 업데이트하는 경우 현재 방법에서는 기본적으로 일괄 처리를 수행해야 합니다. (그렇습니다. 계산 및 메모리 요소가 결합된 실제 두뇌가 현재로서는 적어도 구조적 이점을 가지고 있는 곳일 것입니다.)

 

이전에 논의한 수치 함수 학습의 겉보기에는 단순해 보이는 경우에도 네트워크를 성공적으로 훈련하기 위해 최소한 처음부터 수백만 개의 예를 사용해야 하는 경우가 많았습니다. 그렇다면 "인간과 유사한 언어" 모델을 훈련하기 위해 얼마나 많은 예가 필요하다는 의미입니까? 알 수 있는 근본적인 "이론적" 방법은 없는 것 같습니다. 그러나 실제로 ChatGPT는 수천억 단어의 텍스트에 대해 성공적으로 훈련되었습니다.

 

일부 텍스트는 여러 번 공급되었고 일부는 한 번만 공급되었습니다. 그러나 어쩐지 그것이 본 텍스트에서 "필요한 것을 얻었습니다". 그러나 학습할 텍스트의 양이 주어진다면 "잘 배우기" 위해 얼마나 큰 네트워크가 필요할까요? 다시 말하지만, 우리는 아직 근본적인 이론적 방법을 가지고 있지 않습니다. 궁극적으로-아래에서 더 논의하겠지만-아마도 인간의 언어와 인간이 일반적으로 말하는 것에 대한 특정 "전체 알고리즘 콘텐츠"가 있을 것입니다. 그러나 다음 질문은 신경망이 해당 알고리즘 콘텐츠를 기반으로 모델을 구현하는 데 얼마나 효율적일 것인가입니다. 그리고 다시 우리는 알 수 없습니다. ChatGPT의 성공이 합리적으로 효율적임을 시사하지만 말입니다.

 

결국 우리는 ChatGPT가 주어진 학습 데이터의 총 단어(또는 토큰) 수와 비교할 수 있는 수 천억 개의 가중치를 사용하여 작업을 수행한다는 것을 알 수 있습니다. 어떤 면에서는 잘 작동하는 것처럼 보이는 "네트워크의 크기"가 "훈련 데이터의 크기"와 매우 비슷하다는 것이 놀랍습니다(ChatGPT의 더 작은 유사체에서도 경험적으로 관찰되었지만). 결국 웹과 책 등의 모든 텍스트가 "ChatGPT 내부"에 "직접 저장"되는 것은 아닙니다. 실제로 ChatGPT 안에 있는 것은 모든 텍스트의 집계 구조에 대한 일종의 분산 인코딩인 10자리 미만의 정밀도를 가진 숫자 묶음이기 때문입니다.

 

다른 말로 하면, 우리는 인간 언어의 "유효한 정보 콘텐츠"가 무엇이며 일반적으로 그 언어로 무엇을 말하는지 물을 수 있습니다. 언어 예의 원시 코퍼스가 있습니다. 그리고 ChatGPT의 신경망에 표현이 있습니다. 그 표현은 "알고리즘적으로 최소"인 표현(아래에서 논의할 것임)과는 거리가 멀 가능성이 큽니다. 하지만 신경망에서 쉽게 사용할 수 있는 표현입니다. 그리고 이 표현에서 결국 훈련 데이터의 "압축"이 거의 없는 것 같습니다. 평균적으로 훈련 데이터 단어의 "정보 콘텐츠"를 전달하는 데 기본적으로 하나의 신경망 가중치보다 약간 적은 양만 사용하는 것으로 보입니다.

 

ChatGPT를 실행하여 텍스트를 생성할 때 기본적으로 각 가중치를 한 번 사용해야 합니다. 따라서 n개의 가중치가 있는 경우 수행해야 할 n 차 계산 단계가 있습니다. 실제로 많은 단계가 일반적으로 GPU에서 병렬로 수행될 수 있습니다. 그러나 그러한 가중치를 설정하기 위해 약 n 단어의 훈련 데이터가 필요한 경우 위에서 말한 것으로부터 네트워크 훈련을 수행하기 위해 약 n 2개의 계산 단계가 필요하다는 결론을 내릴 수 있습니다. 현재 방법으로는 수십억 달러의 훈련 노력에 대해 이야기해야 합니다.

 

기본 교육을 넘어

 

ChatGPT를 훈련시키는 노력의 대부분은 웹, 책 등의 기존 텍스트를 "보여주는 것"에 사용됩니다.

 

표시된 원본 텍스트 코퍼스에서 "원시 교육"을 완료하자마자 ChatGPT 내부의 신경망은 자체 텍스트를 생성하고 프롬프트에서 계속되는 등의 작업을 시작할 준비가 됩니다. 그러나 이 결과는 종종 합리적으로 보일 수 있습니다. , 그들은 특히 더 긴 텍스트의 경우 종종 인간이 아닌 방식으로 "방황"하는 경향이 있습니다. 예를 들어 텍스트에 대한 전통적인 통계를 수행하여 쉽게 감지할 수 있는 것이 아닙니다. 그러나 텍스트를 읽는 실제 인간이 쉽게 알아차릴 수 있는 것입니다.

 

그리고 ChatGPT 구성의 핵심 아이디어는 웹과 같은 것을 "수동적으로 읽는" 다음 단계를 거치는 것이었습니다. 좋은 챗봇”. 그러나 신경망은 어떻게 그 피드백을 사용할 수 있습니까? 첫 번째 단계는 인간이 신경망의 결과를 평가하게 하는 것입니다. 그러나 그런 다음 이러한 등급을 예측하려고 시도하는 또 다른 신경망 모델이 구축됩니다. 그러나 이제 이 예측 모델은 본질적으로 손실 함수와 같이 원래 네트워크에서 실행될 수 있으므로 사실상 해당 네트워크가 제공된 사람의 피드백에 의해 "조정"될 수 있습니다. 그리고 실제 결과는 "인간과 같은" 출력을 생성하는 시스템의 성공에 큰 영향을 미치는 것 같습니다.

 

일반적으로 "원래 훈련된" 네트워크가 특정 방향으로 유용하게 이동하는 데 필요한 "찌르기"가 얼마나 적은지는 흥미롭습니다. 누군가는 네트워크가 "새로운 것을 배운" 것처럼 동작하도록 하려면 훈련 알고리즘을 실행하고 가중치를 조정하는 등의 작업을 수행해야 한다고 생각할 수 있습니다.

 

하지만 그렇지 않습니다. 대신, 기본적으로 ChatGPT에 사용자가 제공하는 프롬프트의 일부로 무언가를 한 번만 알려주는 것으로 충분해 보입니다. 그런 다음 텍스트를 생성할 때 사용자가 말한 내용을 성공적으로 사용할 수 있습니다. 그리고 다시 한번, 이것이 작동한다는 사실은 ChatGPT가 "실제 수행"하는 것과 그것이 인간 언어 및 사고의 구조와 어떻게 관련되는지 이해하는 데 중요한 단서라고 생각합니다.

 

확실히 인간과 비슷한 면이 있습니다. 사전 훈련을 모두 받은 후에는 단 한 번만 무언가를 말할 수 있고 "기억"할 수 있습니다. 적어도 그것을 사용하여 텍스트를 생성할 수 있을 만큼 "충분히 오래". 그렇다면 이와 같은 경우에는 어떻게 될까요? "당신이 말할 수 있는 모든 것이 이미 어딘가에 있고" 당신은 그것을 올바른 지점으로 이끌고 있는 것일 수 있습니다. 그러나 그것은 그럴듯해 보이지 않습니다. 대신 가능성이 더 높아 보이는 것은 예, 요소가 이미 거기에 있지만 세부 사항은 "해당 요소 사이의 궤적"과 같은 것으로 정의되며 무언가를 말할 때 도입하는 것입니다.

 

그리고 실제로 인간의 경우와 마찬가지로 자신이 알고 있는 틀에 완전히 맞지 않는 기괴하고 예상치 못한 것을 알려준다면 성공적으로 "통합"할 수 없을 것 같습니다. 기본적으로 이미 가지고 있는 프레임워크 위에 상당히 간단한 방식으로 올라타는 경우에만 "통합"할 수 있습니다.

 

신경망이 "선택"할 수 있는 것에는 필연적으로 "알고리즘적 한계"가 있다는 점을 다시 한 번 지적할 가치가 있습니다. "이것은 저것으로 간다" 등의 "얕은" 규칙을 알려주면 신경망은 이러한 규칙을 잘 표현하고 재현할 수 있을 것입니다. 따라야 할 즉각적인 패턴. 그러나 잠재적으로 계산적으로 줄일 수 없는 많은 단계를 포함하는 실제 "깊은" 계산에 대한 규칙을 부여하려고 하면 작동하지 않습니다. (각 단계에서 항상 네트워크에서 "데이터 전달"만 하고 새 토큰을 생성하는 경우를 제외하고는 루프를 돌지 않는다는 점을 기억하십시오.)

 

물론 네트워크는 특정 "환원 불가능한" 계산에 대한 답을 학습할 수 있습니다. 그러나 가능한 조합의 수가 있는 즉시 이러한 "테이블 조회 스타일" 접근 방식은 작동하지 않습니다. 따라서 인간과 마찬가지로 신경망이 "손을 뻗어" 실제 계산 도구를 사용할 때입니다. (그렇습니다. Wolfram|Alpha 와 Wolfram 언어는 언어 모델 신경망과 마찬가지로 "세계의 사물에 대해 이야기"하도록 만들어졌기 때문에 고유하게 적합합니다. )

 

ChatGPT가 실제로 작동하게 하는 것은 무엇입니까?

 

인간의 언어와 그것을 생성하는 데 관련된 사고 과정은 항상 일종의 복잡성의 정점을 나타내는 것처럼 보였습니다. 그리고 실제로 "단지" 1000억 개 정도의 뉴런(그리고 아마도 100조 개의 연결)으로 구성된 네트워크를 가진 인간의 두뇌가 그 일을 담당할 수 있다는 것은 다소 놀라운 것처럼 보였습니다. 아마도 누군가는 뇌에 뉴런 네트워크보다 더 많은 것이 있다고 상상했을 것입니다. 예를 들어, 발견되지 않은 물리학의 새로운 층이 있습니다. 그러나 이제 ChatGPT를 통해 우리는 중요한 새로운 정보를 얻었습니다. 우리는 뇌가 뉴런으로 연결하는 수만큼의 연결을 가진 순수한 인공 신경망이 놀라울 정도로 인간의 언어를 생성할 수 있다는 것을 알고 있습니다.

 

그리고 네, 그것은 여전히 크고 복잡한 시스템입니다. 현재 세계에서 사용할 수 있는 텍스트 단어 수만큼 신경망 가중치가 있습니다. 그러나 어떤 수준에서는 여전히 언어의 모든 풍부함과 그것이 말할 수 있는 것들이 그러한 유한한 시스템에 캡슐화될 수 있다는 것을 믿기 어려워 보입니다. 진행되고 있는 일의 일부는 의심할 여지없이 유비쿼터스 현상( 규칙 30의 예에서 처음으로 분명해짐)을 반영한 것입니다.) 계산 프로세스는 기본 규칙이 단순한 경우에도 시스템의 명백한 복잡성을 사실상 크게 증폭시킬 수 있습니다. 그러나 실제로 위에서 논의한 것처럼 ChatGPT에서 사용되는 종류의 신경망은 훈련에 더 쉽게 접근할 수 있도록 하기 위해 이러한 현상의 영향과 이와 관련된 계산 비환원성을 제한하도록 특별히 구성되는 경향이 있습니다.

 

그렇다면 ChatGPT와 같은 것이 어떻게 언어와 같은 수준까지 도달할 수 있을까요? 내 생각에 기본적인 대답은 언어가 기본 수준에 있어 보이는 것보다 다소 단순하다는 것입니다. 그리고 이것은 ChatGPT가 궁극적으로 간단한 신경망 구조를 가지고 있음에도 불구하고 인간 언어와 그 이면에 있는 생각의 "본질을 포착"할 수 있다는 것을 의미합니다. 또한 ChatGPT는 학습 과정에서 언어(및 사고)의 규칙성이 이를 가능하게 한다는 것을 어떻게든 "암시적으로 발견"했습니다.

 

ChatGPT의 성공은 우리에게 과학의 근본적이고 중요한 부분에 대한 증거를 제공한다고 생각합니다. 그것은 우리가 발견할 주요한 새로운 "언어의 법칙", 사실상 "사고의 법칙"이 있을 것으로 기대할 수 있음을 시사합니다.. 그대로 신경망으로 구축된 ChatGPT에서 이러한 법칙은 기껏해야 암묵적입니다. 그러나 어떻게든 법을 명시적으로 만들 수 있다면 ChatGPT가 훨씬 더 직접적이고 효율적이며 투명한 방식으로 수행하는 것과 같은 일을 할 수 있는 잠재력이 있습니다.

 

하지만 좋아요, 그렇다면 이 법칙은 어떤 것일까요? 궁극적으로 그들은 우리에게 언어와 우리가 언어로 말하는 것들이 결합되는 방식에 대한 일종의 처방을 제공해야 합니다. 나중에 "ChatGPT 내부 살펴보기"가 이에 대한 몇 가지 힌트를 제공할 수 있는 방법과 전산 언어 구축을 통해 우리가 알고 있는 것이 앞으로 나아갈 길을 제시하는 방법에 대해 논의할 것입니다. 그러나 먼저 "언어의 법칙"에 해당하는 오래전부터 알려진 두 가지 예와 이것이 ChatGPT 운영과 어떤 관련이 있는지에 대해 논의해 보겠습니다.

 

첫 번째는 언어의 구문입니다. 언어는 단어의 임의적 뒤죽박죽이 아닙니다. 대신, 서로 다른 종류의 단어를 조합하는 방법에 대한 (상당히) 명확한 문법 규칙이 있습니다. 예를 들어 영어에서는 명사 앞에 형용사가 올 수 있고 뒤에 동사가 올 수 있지만 일반적으로 두 개의 명사가 각 명사 바로 옆에 올 수는 없습니다. 다른. 이러한 문법 구조는 (적어도 대략적으로) "구문 분석 트리"의 양이 어떻게 구성될 수 있는지 를 정의하는 일련의 규칙에 의해 캡처될 수 있습니다.

 

 

 

ChatGPT는 이러한 규칙에 대한 명시적인 "지식"이 없습니다. 그러나 어쩐지 훈련 과정에서 암묵적으로 그것들을 "발견"하고 그것들을 잘 따라가는 것 같습니다. 어떻게 작동합니까? "큰 그림" 수준에서는 명확하지 않습니다. 그러나 통찰력을 얻으려면 훨씬 더 간단한 예를 살펴보는 것이 도움이 될 것입니다.

 

다음과 같은 구문 분석 트리로 표현되는 것처럼 괄호가 항상 균형을 이루어야 함을 지정하는 문법을 사용하여 일련의 (' 및 )로 구성된 "언어"를 고려하십시오.

 

 

 

"문법적으로 올바른" 괄호 시퀀스를 생성하도록 신경망을 훈련시킬 수 있습니까? 신경망에서 시퀀스를 처리하는 방법은 다양하지만 ChatGPT가 하는 것처럼 변환기 망을 사용합시다. 간단한 변환기 네트워크가 주어지면 문법적으로 올바른 괄호 시퀀스를 교육 예제로 공급할 수 있습니다. 미묘한 점(실제로 ChatGPT의 인간 언어 세대에도 나타남)은 "콘텐츠 토큰"(여기서는 "(" 및 ")") 외에도 "종료" 토큰을 포함해야 한다는 것입니다. 출력은 더 이상 계속되지 않아야 합니다(예: ChatGPT의 경우 "이야기의 끝"에 도달함).

 

8개의 헤드와 길이가 128인 특징 벡터가 있는 하나의 어텐션 블록으로 트랜스포머 넷을 설정하면(ChatGPT도 길이가 128인 특징 벡터를 사용하지만 각각 96개의 헤드가 있는 96개의 어텐션 블록이 있음) 괄호 언어에 대해 많이 배우십시오. 그러나 2개의 어텐션 블록을 사용하면 학습 프로세스가 수렴하는 것처럼 보입니다. 적어도 천만 개 정도의 예제가 제공된 후에는 수렴되는 것 같습니다(트랜스포머 넷에서 흔히 볼 수 있듯이 더 많은 예제를 표시하면 성능이 저하되는 것처럼 보입니다).

 

따라서 이 네트워크를 사용하여 ChatGPT가 수행하는 것과 유사한 작업을 수행하고 괄호 시퀀스에서 다음 토큰이 무엇인지에 대한 확률을 요청할 수 있습니다.

 

 

 

첫 번째 경우, 네트워크는 시퀀스가 여기서 끝날 수 없다고 "꽤 확신"하는데, 만약 그렇다면 괄호가 불균형하게 남을 것이기 때문에 좋습니다. 그러나 두 번째 경우에는 시퀀스가 여기서 끝날 수 있다는 것을 "올바르게 인식"하지만, "(", 아마도 ")"를 사용하여 "다시 시작할 수 있다"는 것을 "지적"합니다. 하지만 40만 개 정도의 가중치를 힘들게 훈련했음에도 불구하고 다음 토큰으로 "()"가 나올 확률이 15%라고 말하는데, 이는 괄호가 불균형하게 될 수 있기 때문에 옳지 않습니다.

 

네트워크에 점점 더 긴 () 시퀀스에 대해 가장 높은 확률로 완료되는 것을 요청하면 다음과 같은 결과를 얻을 수 있습니다:

 

 

 

 

그리고 예, 특정 길이까지는 네트워크가 제대로 작동합니다. 그러나 실패하기 시작합니다. 신경망(또는 일반적으로 기계 학습)을 사용하여 이와 같은 "정확한" 상황에서 보는 것은 매우 일반적인 종류의 것입니다. 인간이 "한눈에 해결할 수 있는" 사례도 신경망이 해결할 수 있습니다. 그러나 "보다 알고리즘적인" 작업을 수행해야 하는 경우(예: 괄호가 닫혀 있는지 확인하기 위해 명시적으로 계산) 신경망은 안정적으로 수행하기에는 "너무 계산적으로 얕음"인 경향이 있습니다. (그런데 현재의 전체 ChatGPT조차도 긴 시퀀스에서 괄호를 정확하게 일치시키는 데 어려움을 겪고 있습니다.)

 

그렇다면 이것이 ChatGPT와 영어와 같은 언어의 구문에 대해 무엇을 의미할까요? 괄호 언어는 "엄격"하고 훨씬 더 "알고리즘 이야기"입니다. 그러나 영어에서는 현지에서 선택한 단어와 기타 힌트를 기반으로 문법적으로 무엇이 맞을지 "추측"할 수 있는 것이 훨씬 더 현실적입니다. 그리고 예, 신경망은 이것에서 훨씬 더 낫습니다. 아마도 인간도 놓칠 수 있는 "공식적으로 올바른" 경우를 놓칠 수 있지만 말입니다. 그러나 요점은 언어에 전반적인 구문 구조가 있다는 사실입니다. 모든 규칙성을 함축하는 의미에서 신경망이 "얼마나 많이" 배워야 하는지가 제한됩니다.

 

구문은 언어에 대한 한 종류의 제약을 제공합니다. 그러나 분명히 더 있습니다. "Inquisitive electrons eat blue theory for fish"와 같은 문장은 문법적으로는 정확하지만 일반적으로 말할 것으로 예상되는 것이 아니며 ChatGPT가 생성한 경우 성공한 것으로 간주되지 않습니다. 그 안에 있는 단어는 기본적으로 의미가 없습니다.

 

그러나 문장이 의미가 있는지 알 수 있는 일반적인 방법이 있습니까? 그것에 대한 전통적인 전체 이론은 없습니다. 그러나 그것은 ChatGPT가 웹 등에서 수십억 개의 (아마도 의미 있는) 문장으로 훈련된 후 암묵적으로 "이론을 개발"했다고 생각할 수 있는 것입니다.

 

이 이론은 어떻습니까? 글쎄요, 기본적으로 2천 년 동안 알려진 작은 구석이 하나 있습니다.. 그리고 확실히 아리스토텔레스가 발견한 삼단논법 형식에서 논리는 기본적으로 특정 패턴을 따르는 문장은 합리적이고 다른 문장은 그렇지 않다고 말하는 방식입니다. 따라서 예를 들어 "모든 X는 Y입니다. 이것은 Y가 아니므로 X가 아닙니다"라고 말하는 것이 합리적입니다(예: "모든 물고기는 파란색입니다. 이것은 파란색이 아니므로 물고기가 아닙니다."). 그리고 아리스토텔레스가 수사학의 많은 예를 통해 삼단논법을 발견했다고 다소 기발하게 상상할 수 있는 것처럼("기계 학습 스타일") ChatGPT의 교육에서 "발견할 수 있었을 것"이라고 상상할 수 있습니다. 웹 등에서 많은 텍스트를 살펴봄으로써 삼단논법”을 찾을 수 있습니다.

 

그러나 논리의 편협한 예를 넘어서 그럴듯하게 의미 있는 텍스트를 체계적으로 구성(또는 인식)하는 방법에 대해 무엇을 말할 수 있습니까? 예, 매우 특정한 "문구 템플릿"을 사용하는 Mad Libs 와 같은 것들이 있습니다. 하지만 어떻게든 ChatGPT는 암묵적으로 훨씬 더 일반적인 방법을 가지고 있습니다. 그리고 아마도 "1,750억 개의 신경망 가중치가 있을 때 어떻게든 발생합니다" 이상으로 수행할 수 있는 방법에 대해 말할 것이 없을 것입니다. 그러나 나는 훨씬 더 간단하고 강력한 이야기가 있다고 강력하게 의심합니다. 

 

 

 

 

반응형