개발자/인공지능과 인간

ChatGPT 작동 원리 4 임베딩 개념

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

 

 

임베딩의 개념

 

적어도 현재 설정되어 있는 신경망은 기본적으로 숫자를 기반으로 합니다. 따라서 텍스트와 같은 작업에 사용하려면 텍스트를 숫자로 나타내는 방법이 필요합니다 . 그리고 확실히 우리는 (ChatGPT가 하는 것처럼) 사전에 있는 모든 단어에 숫자를 할당하는 것으로 시작할 수 있습니다. 그러나 이를 뛰어넘는 중요한 아이디어가 있습니다. 예를 들어 ChatGPT의 핵심입니다. 그리고 그것은 "임베딩"의 아이디어입니다. 임베딩은 숫자 배열로 어떤 것의 '본질'을 나타내는 방법으로 생각할 수 있습니다. "가까운 사물"은 가까운 숫자로 표현된다는 속성이 있습니다.

 

예를 들어 단어 임베딩을 일종의 "의미 공간"에 단어를 배치하려고 시도하는 것으로 생각할 수 있습니다 . 단어는 임베딩에서 근처에 나타납니다. 예를 들어 ChatGPT에서 사용되는 실제 임베딩은 많은 수의 목록을 포함하는 경향이 있습니다. 그러나 2D로 투영하면 임베딩에 의해 단어가 어떻게 배치되는지에 대한 예를 보여줄 수 있습니다.

 

 

 

그리고 그렇습니다. 우리가 보는 것은 전형적인 일상의 인상을 매우 잘 포착합니다. 그러나 그러한 임베딩을 어떻게 구성할 수 있습니까? 대략적인 아이디어는 많은 양의 텍스트(여기서는 웹의 50억 단어)를 살펴본 다음 서로 다른 단어가 나타나는 "환경"이 "얼마나 유사한지" 확인하는 것입니다. 예를 들어 "alligator"와 "crocodile"은 다른 유사한 문장에서 거의 같은 의미로 나타나는 경우가 많으며 이는 임베딩에서 근처에 배치됨을 의미합니다. 그러나 "turnip"과 "eagle"은 유사한 문장에 나타나지 않는 경향이 있으므로 임베딩에서 멀리 떨어져 배치됩니다.

 

그러나 신경망을 사용하여 이와 같은 것을 실제로 구현하는 방법은 무엇입니까? 단어가 아닌 이미지 임베딩에 대해 이야기하는 것으로 시작하겠습니다. "우리가 유사하다고 생각하는 이미지"에 유사한 숫자 목록이 할당되는 방식으로 숫자 목록으로 이미지를 특성화하는 방법을 찾고 싶습니다.

 

"이미지를 유사하게 간주"해야 하는지 어떻게 알 수 있습니까? 예를 들어 이미지가 손으로 쓴 숫자인 경우 숫자가 같으면 "두 개의 이미지가 유사하다고 간주"할 수 있습니다. 앞서 우리는 손글씨 숫자를 인식하도록 훈련된 신경망에 대해 논의했습니다. 그리고 우리는 이 신경망이 최종 출력에서 각 숫자에 대해 하나씩 10개의 서로 다른 빈에 이미지를 넣도록 설정되어 있다고 생각할 수 있습니다.

 

그러나 최종 "'4'" 결정이 내려지기 전에 신경망 내부에서 일어나는 일을 "차단"하면 어떻게 될까요? 우리는 신경망 내부에 이미지를 "대부분 4와 같지만 약간 2와 같은" 것으로 특징짓는 숫자가 있다고 예상할 수 있습니다. 그리고 아이디어는 임베딩의 요소로 사용할 숫자를 선택하는 것입니다.

 

그래서 여기에 개념이 있습니다. "어떤 이미지가 다른 이미지 근처에 있는지"를 직접 특성화하려고 시도하는 대신 명시적인 훈련 데이터를 얻을 수 있는 잘 정의된 작업(이 경우 숫자 인식)을 고려한 다음 이 작업을 수행할 때 신경망은 암묵적으로 "가까운 결정"을 내려야 합니다. 따라서 "이미지의 근접성"에 대해 명시적으로 이야기하는 대신 이미지가 나타내는 숫자에 대한 구체적인 질문에 대해 이야기한 다음 "신경망에 맡기고" 암묵적으로 그것이 무엇을 의미하는지 결정합니다. "이미지의 근접성"에 대해.

 

그렇다면 이것이 숫자 인식 네트워크에서 어떻게 더 자세하게 작동할까요? 우리는 네트워크가 11개의 연속적인 레이어로 구성되어 있다고 생각할 수 있으며, 다음과 같이 상징적으로 요약할 수 있습니다(활성화 기능이 별도의 레이어로 표시됨).

 

 

 

 

처음에는 픽셀 값의 2D 배열로 표현되는 실제 이미지를 첫 번째 레이어에 공급합니다. 그리고 마지막 레이어에서 우리는 10개의 값 배열을 얻고 있는데, 네트워크가 이미지가 0에서 9까지의 각 숫자에 해당한다는 것을 "얼마나 확신하는지"라고 말할 수 있습니다.

 

4 이미지를 피드 하고 마지막 레이어의 뉴런 값은 다음과 같습니다.

 

 

 

즉, 신경망은 이 시점에서 이 이미지가 4라는 것을 "믿을 수 없을 정도로 확신"하고 실제로 출력 "4"를 얻으려면 가장 큰 값을 가진 뉴런의 위치를 ​​선택하기만 하면 됩니다.

 

하지만 한발 앞서 보면 어떨까요? 네트워크의 가장 마지막 작업은 "확실성을 강제"하려고 시도하는 소위 소프트맥스 입니다. 그러나 그것이 적용되기 전에 뉴런의 값은 다음과 같습니다.

 

 

 

 

"4"를 나타내는 뉴런은 여전히 ​​가장 높은 수치를 가집니다. 그러나 다른 뉴런의 값에도 정보가 있습니다. 그리고 우리는 이 숫자 목록이 어떤 의미에서 이미지의 "본질"을 특성화하는 데 사용될 수 있고 따라서 임베딩으로 사용할 수 있는 것을 제공할 수 있다고 기대할 수 있습니다. 예를 들어, 여기서 4는 각각 약간 다른 "시그니처"(또는 "기능 임베딩")를 가집니다. 모두 8과 매우 다릅니다.

 

 

 

여기서 우리는 본질적으로 이미지를 특성화하기 위해 10개의 숫자를 사용하고 있습니다. 그러나 종종 그보다 훨씬 더 많이 사용하는 것이 좋습니다. 예를 들어 숫자 인식 네트워크에서 이전 레이어를 탭하여 500개의 숫자 배열을 얻을 수 있습니다. 그리고 이것은 아마도 "이미지 임베딩"으로 사용하기에 합리적인 배열일 것입니다.

 

손으로 쓴 숫자에 대한 "이미지 공간"의 명시적 시각화를 만들고 싶다면 우리가 얻은 500차원 벡터를 효과적으로 투영하여 "차원을 축소"해야 합니다. 예를 들어 3D 공간:

 

 

 

 

우리는 (트레이닝 세트에 따라) 이미지가 동일한 손글씨 숫자에 해당하는지 여부를 결정하여 이미지의 유사성을 효과적으로 식별하는 것을 기반으로 이미지에 대한 특성화(및 임베딩)를 생성하는 것에 대해 이야기했습니다. 예를 들어 각 이미지가 5000개의 일반적인 유형의 개체(고양이, 개, 의자 등) 중 어떤 유형인지 식별하는 훈련 세트가 있는 경우 이미지에 대해 훨씬 더 일반적으로 동일한 작업을 수행할 수 있습니다. 그리고 이런 식으로 우리는 일반적인 객체의 식별에 의해 "고정"된 이미지 임베딩을 만들 수 있지만 신경망의 동작에 따라 "그 주변을 일반화"합니다. 그리고 요점은 그 행동이 우리 인간이 이미지를 인식하고 해석하는 방식과 일치하는 한, 이것은 결국 "우리에게 옳게 보이는" 임베딩이 될 것이며 실제로 "인간 판단과 같은" 작업을 수행하는 데 유용하다는 것입니다.

 

자, 그렇다면 단어 임베딩을 찾기 위해 동일한 접근 방식을 어떻게 따릅니까? 핵심은 쉽게 훈련할 수 있는 단어에 대한 작업부터 시작하는 것입니다. 그리고 그러한 작업의 표준은 "단어 예측"입니다. 우리에게 "___ 고양이"가 주어졌다고 상상해보세요. 많은 텍스트 코퍼스(예: 웹의 텍스트 콘텐츠)를 기반으로 "빈칸을 채울" 수 있는 다른 단어의 확률은 얼마입니까? 또는 "___ black ___"이 주어지면 서로 다른 "측면 단어"에 대한 확률은 무엇입니까?

 

신경망에 대해 이 문제를 어떻게 설정합니까? 궁극적으로 모든 것을 숫자로 공식화해야 합니다. 이를 수행하는 한 가지 방법은 50,000개 정도의 일반적인 영어 단어 각각에 고유 번호를 할당하는 것입니다. 따라서 예를 들어 "the"는 914일 수 있고 "cat"(앞에 공백이 있음)은 3542일 수 있습니다. (그리고 이들은 GPT-2에서 사용하는 실제 숫자입니다.) "the ___ cat" 문제의 경우 , 입력은 {914, 3542}일 수 있습니다. 출력은 어떻게 되어야 합니까? 음, 가능한 "채우기" 단어 각각에 대한 확률을 효과적으로 제공하는 50,000개 정도의 숫자 목록이어야 합니다. 그리고 다시 한 번 임베딩을 찾기 위해 우리는 신경망이 "결론에 도달하기" 직전에 신경망의 "내부"를 "가로채기"를 원합니다. 그런 다음 거기에서 발생하고 우리가 생각할 수 있는 숫자 목록을 선택합니다. "각 단어의 특성화"로.

 

좋아요, 그럼 그 특성화는 어떻게 생겼나요? 지난 10년 동안 각기 다른 신경망 접근 방식을 기반으로 개발된 일련의 서로 다른 시스템( word2vec , GloVe , BERT , GPT 등) 이 있었습니다 . 그러나 궁극적으로 그들 모두는 단어를 취하고 수백에서 수천 개의 숫자 목록으로 특성화합니다.

 

원시 형식에서 이러한 "임베딩 벡터"는 그다지 유익하지 않습니다. 예를 들어 다음은 GPT-2가 세 가지 특정 단어에 대한 원시 임베딩 벡터로 생성하는 것입니다.

 

 

 

이러한 벡터 사이의 거리를 측정하는 것과 같은 작업을 수행하면 단어의 "근접성"과 같은 것을 찾을 수 있습니다. 나중에 우리는 그러한 임베딩의 "인지적" 중요성을 고려할 수 있는 것에 대해 더 자세히 논의할 것입니다. 그러나 지금 중요한 점은 단어를 "신경망 친화적인" 숫자 모음으로 유용하게 변환하는 방법이 있다는 것입니다.

 

그러나 실제로 우리는 숫자 모음으로 단어를 특성화하는 것 이상으로 갈 수 있습니다. 일련의 단어 또는 전체 텍스트 블록에 대해서도 이 작업을 수행할 수 있습니다. 그리고 ChatGPT 내부에서 그것이 사물을 처리하는 방식입니다. 지금까지 얻은 텍스트를 가져와 이를 나타내는 임베딩 벡터를 생성합니다. 그런 다음 목표는 다음에 발생할 수 있는 다른 단어에 대한 확률을 찾는 것입니다. 그리고 50,000개 정도의 가능한 단어 각각에 대한 확률을 본질적으로 제공하는 숫자 목록으로 이에 대한 답을 나타냅니다.

 

(엄밀히 말하면 ChatGPT는 단어를 다루지 않고 "토큰"을 다룹니다. 이는 전체 단어일 수도 있고 "pre", "ing" 또는 "ized"와 같은 조각일 수도 있는 편리한 언어 단위입니다. 토큰을 사용하면 더 쉽게 작업할 수 있습니다. ChatGPT가 희귀하고 복합적인 비영어 단어를 처리하고 때로는 좋든 나쁘든 새로운 단어를 발명합니다.)

 

인사이드챗GPT

 

자, 드디어 ChatGPT 내부에 대해 논의할 준비가 되었습니다. 그리고 네, 궁극적으로 그것은 거대한 신경망입니다. 현재 1,750억 개의 가중치를 가진 소위 GPT-3 네트워크 버전입니다. 여러 면에서 이것은 우리가 논의한 다른 것과 매우 유사한 신경망입니다. 하지만 이것은 언어를 다루기 위해 특별히 설정된 신경망입니다. 그리고 가장 눈에 띄는 특징은 "변압기"라고 불리는 신경망 구조입니다.

 

위에서 논의한 첫 번째 신경망에서 주어진 레이어의 모든 뉴런은 기본적으로 이전 레이어의 모든 뉴런에 연결되었습니다(최소한 약간의 가중치 포함). 그러나 이러한 종류의 완전히 연결된 네트워크는 특정하고 알려진 구조를 가진 데이터로 작업하는 경우 (아마도) 과잉입니다. 따라서 예를 들어 이미지를 다루는 초기 단계 에서는 뉴런이 이미지의 픽셀과 유사한 그리드에 효과적으로 배치되고 연결되는 소위 컨벌루션 신경망 ("convnets")을 사용하는 것이 일반적입니다. 그리드 근처의 뉴런에만 적용됩니다.

 

변환기의 아이디어는 텍스트를 구성하는 일련의 토큰에 대해 적어도 다소 유사한 작업을 수행하는 것입니다. 그러나 연결이 있을 수 있는 시퀀스에서 고정된 영역을 정의하는 대신 변환기는 " 주의 "라는 개념과 시퀀스의 일부에 다른 부분보다 더 많은 "주의를 기울이는" 개념을 도입합니다. 언젠가는 일반 신경망을 시작하고 훈련을 통해 모든 사용자 정의를 수행하는 것이 합리적일 것입니다. 그러나 적어도 현재로서는 변압기가 하는 것처럼, 그리고 아마도 우리의 두뇌가 하는 것처럼 사물을 "모듈화"하는 것이 실제로 중요한 것 같습니다.

 

그렇다면 ChatGPT(또는 이를 기반으로 하는 GPT-3 네트워크)가 실제로 수행하는 작업은 무엇입니까? 전반적인 목표는 (웹 등에서 수십억 페이지의 텍스트를 보는 것으로 구성되는) 교육에서 본 것을 기반으로 "합리적인" 방식으로 텍스트를 계속하는 것입니다. 그것은 일정량의 텍스트를 가지고 있으며 그 목표는 추가할 다음 토큰에 대한 적절한 선택을 제시하는 것입니다.

 

그것은 세 가지 기본 단계에서 작동합니다. 먼저 지금까지 텍스트에 해당하는 일련의 토큰을 가져와 이를 나타내는 임베딩(예: 숫자 배열)을 찾습니다. 그런 다음 새 임베딩(즉, 새로운 숫자 배열)을 생성하기 위해 네트워크의 연속적인 레이어를 통해 "파문을 일으키는" 값을 사용하여 "표준 신경망 방식"으로 이 임베딩에서 작동합니다. 그런 다음 이 배열의 마지막 부분을 가져와 가능한 다른 다음 토큰에 대한 확률로 전환되는 약 50,000개의 값 배열을 생성합니다. (그렇습니다. 영어로 된 일반적인 단어와 거의 동일한 수의 토큰이 사용되지만 토큰 중 약 3000개만이 전체 단어이고 나머지는 단편입니다.)

 

중요한 점은 이 파이프라인의 모든 부분이 신경망에 의해 구현된다는 것입니다. 신경망의 종단 간 교육에 의해 가중치가 결정됩니다. 즉, 사실상 전체 아키텍처 외에는 "명시적으로 설계"되지 않은 것이 없습니다. 모든 것은 교육 데이터에서 "학습"됩니다.

 

그러나 모든 종류의 경험과 신경망 지식을 반영하여 아키텍처가 설정되는 방식에는 많은 세부 사항이 있습니다. 그리고 이것이 확실히 잡초에 들어가고 있지만 적어도 ChatGPT와 같은 것을 구축하는 데 무엇이 들어가는지 이해하는 것뿐만 아니라 이러한 세부 사항 중 일부에 대해 이야기하는 것이 유용하다고 생각합니다.

 

먼저 임베딩 모듈이 있습니다. 다음은 GPT-2에 대한 개략적인 Wolfram 언어 표현입니다.

 

 

 

입력은 n 토큰 의 벡터 입니다 (이전 섹션에서 1에서 약 50,000까지의 정수로 표시됨). 이러한 각 토큰은 단일 레이어 신경망 에 의해 포함 벡터(GPT-2의 경우 길이 768, ChatGPT의 GPT-3의 경우 12,288)로 변환됩니다. 한편, 토큰에 대한 일련의 (정수) 위치를 취하는 "보조 경로"가 있으며 이러한 정수에서 또 다른 임베딩 벡터를 생성합니다. 마지막으로 토큰 값의 임베딩 벡터와 토큰 위치가 함께 추가되어 임베딩 모듈에서 임베딩 벡터의 최종 시퀀스를 생성합니다.

 

토큰 값과 토큰 위치 임베딩 벡터를 함께 추가하는 이유는 무엇입니까? 나는 이것에 특별한 과학이 있다고 생각하지 않습니다. 다양한 시도를 해봤을 뿐이고, 이것이 효과가 있는 것 같습니다. 그리고 어떤 의미에서 설정이 "거의 옳다"는 한 신경망 지식의 일부입니다. 일반적으로 "어느 정도 이해"할 필요 없이 충분한 훈련을 하는 것만으로 세부 사항에 집중할 수 있습니다. 엔지니어링 수준”은 신경망이 자체적으로 구성되는 방식과 매우 유사합니다.

 

임베딩 모듈이 하는 일은 다음과 같습니다. 문자열 hello hello hello hello hello hello hello hello bye bye bye bye bye bye bye bye bye bye :

 

 

 

각 토큰에 대한 임베딩 벡터의 요소는 페이지 아래에 표시되며 페이지 전체에서 먼저 " hello " 임베딩 실행과 " bye " 임베딩 실행을 볼 수 있습니다. 위의 두 번째 배열은 위치 임베딩으로, 다소 임의적으로 보이는 구조가 "우연히 학습된" 것입니다(이 경우 GPT-2).

 

임베딩 모듈 다음에 변환기의 "메인 이벤트"가 옵니다. 이른바 "주의 블록" 시퀀스(GPT-2의 경우 12개, ChatGPT의 GPT-3의 경우 96개)입니다. 그것은 모두 매우 복잡하고 이해하기 어려운 전형적인 대형 엔지니어링 시스템 또는 생물학적 시스템을 연상시킵니다. 그러나 어쨌든 다음은 단일 "주의 블록"(GPT-2용)의 도식적 표현입니다.

 

 

 

각 어텐션 블록 내에는 "어텐션 헤드"(GPT-2의 경우 12개, ChatGPT의 GPT-3의 경우 96개) 모음이 있습니다. 각 헤드는 임베딩 벡터의 서로 다른 값 청크에서 독립적으로 작동합니다. (그렇습니다. 임베딩 벡터를 분할하는 것이 좋은 이유나 벡터의 다른 부분이 "의미"하는 특별한 이유를 알지 못합니다. 이는 "작동하는 것으로 확인된" 항목 중 하나일 뿐입니다. .)

 

자, 주의 머리는 무엇을 할까요? 기본적으로 그들은 일련의 토큰(즉, 지금까지 생성된 텍스트)에서 "뒤를 돌아보고" 다음 토큰을 찾는 데 유용한 형식으로 "과거를 포장"하는 방법입니다. 위의 첫 번째 섹션에서 우리는 2그램 확률을 사용하여 직전 단어를 기반으로 단어를 선택하는 방법에 대해 이야기했습니다. 변환기의 "주의" 메커니즘이 하는 일은 훨씬 이전 단어에도 "주의"를 허용하는 것입니다. 따라서 잠재적으로 동사가 문장에서 앞에 나오는 많은 단어 앞에 나타나는 명사를 참조할 수 있는 방법을 포착할 수 있습니다.

 

더 자세한 수준에서 어텐션 헤드가 하는 일은 서로 다른 토큰과 관련된 임베딩 벡터의 청크를 특정 가중치로 재결합하는 것입니다. 예를 들어, 첫 번째 어텐션 블록(GPT-2)에 있는 12개의 어텐션 헤드는 다음과 같습니다(“look-back-all-the-way-to-the-beginning-of-the-sequence-of- 토큰") 위의 " hello , bye " 문자열에 대한 "재조합 가중치" 패턴:

 

 

 

어텐션 헤드에 의해 처리된 후 결과 "재가중 임베딩 벡터"(GPT-2의 경우 길이 768, ChatGPT의 GPT-3의 경우 길이 12,288)는 표준 "완전히 연결된" 신경망 레이어를 통과합니다 . 이 계층이 수행하는 작업을 처리하기가 어렵습니다. 그러나 다음은 사용 중인 768×768 가중치 매트릭스의 플롯입니다(여기서는 GPT-2의 경우).

 

 

 

64×64 이동 평균을 취하면 일부 (랜덤 워크 같은) 구조가 나타나기 시작합니다.

 

 

 

무엇이 이 구조를 결정합니까? 궁극적으로 그것은 아마도 인간 언어의 특징에 대한 일종의 "신경망 인코딩"일 것입니다. 그러나 현재로서는 이러한 기능이 무엇인지 알 수 없습니다. 실제로 우리는 "ChatGPT의 두뇌를 열고"(또는 적어도 GPT-2) 발견하고 있습니다. 예, 그 안에 복잡하고 이해하지 못합니다. 결국에는 인식 가능한 인간 언어를 생성하지만 .

 

좋아요, 하나의 어텐션 블록을 거친 후 새로운 임베딩 벡터를 얻었습니다. 그런 다음 추가 어텐션 블록(GPT-2의 경우 총 12개, GPT-3의 경우 96개)을 연속적으로 통과합니다. 각 주의 블록에는 "주의" 및 "완전히 연결된" 가중치의 고유한 특정 패턴이 있습니다. 다음은 GPT-2의 첫 번째 어텐션 헤드에 대한 "hello, bye" 입력에 대한 어텐션 가중치 시퀀스입니다.

 

 

 

 

다음은 완전 연결 레이어에 대한 (이동 평균) "매트릭스"입니다.

 

 

 

 

흥미롭게도, 서로 다른 어텐션 블록에 있는 이러한 "가중치 행렬"이 상당히 유사해 보이지만 가중치 크기의 분포는 다소 다를 수 있습니다(항상 가우시안이 아님).

 

 

 

따라서 이러한 주의 블록을 모두 통과한 후 변압기의 순 효과는 무엇입니까? 기본적으로 토큰 시퀀스에 대한 원래 임베딩 컬렉션을 최종 컬렉션으로 변환하는 것입니다. 그리고 ChatGPT가 작동하는 특별한 방법은 이 컬렉션에서 마지막 임베딩을 선택하고 "디코딩"하여 다음에 어떤 토큰이 올 것인지에 대한 확률 목록을 생성하는 것입니다.

 

이것이 ChatGPT 내부의 개요입니다. 복잡해 보일 수 있지만(최소한 필연적으로 다소 임의적인 "공학적 선택"이 많기 때문에) 실제로 관련된 궁극적인 요소는 매우 간단합니다. 결국 우리가 다루고 있는 것은 "인공 뉴런"으로 구성된 신경망일 뿐이며, 각 뉴런은 일련의 숫자 입력을 취한 다음 특정 가중치와 결합하는 간단한 작업을 수행합니다.

 

ChatGPT에 대한 원래 입력은 숫자 배열(지금까지 토큰에 대한 임베딩 벡터)이며 ChatGPT가 새 토큰을 생성하기 위해 "실행"될 때 발생하는 일은 이러한 숫자가 신경망의 레이어를 "파급"하는 것입니다. 각 뉴런이 "일을 하고" 그 결과를 다음 레이어의 뉴런으로 전달합니다. 루핑 또는 "되돌아가기"가 없습니다. 모든 것이 네트워크를 통해 "피드 포워드"됩니다.

 

결과가 동일한 계산 요소에 의해 반복적으로 "재처리"되는 튜링 기계 와 같은 일반적인 계산 시스템과는 매우 다른 설정입니다 . 여기에서 적어도 주어진 출력 토큰을 생성할 때 각 계산 요소(예: 뉴런)는 한 번만 사용됩니다.

 

그러나 어떤 의미에서는 ChatGPT에서도 계산 요소를 재사용하는 "외부 루프"가 여전히 존재합니다. ChatGPT가 새 토큰을 생성할 때 항상 이전에 오는 전체 토큰 시퀀스를 "읽기"(즉, 입력으로 사용)하기 때문입니다. 여기에는 ChatGPT 자체가 이전에 "작성"한 토큰도 포함됩니다. 그리고 우리는 이 설정을 ChatGPT가 적어도 가장 바깥쪽 수준에서 "피드백 루프"를 포함한다는 의미로 생각할 수 있습니다. 비록 모든 반복이 생성하는 텍스트에 나타나는 토큰으로 명시적으로 표시되기는 하지만 말입니다.

 

하지만 각 토큰을 생성하는 데 반복적으로 사용되는 신경망인 ChatGPT의 핵심으로 돌아가 보겠습니다. 어떤 수준에서는 매우 간단합니다. 동일한 인공 뉴런의 전체 집합입니다. 그리고 네트워크의 일부는 주어진 레이어의 모든 뉴런이 이전 레이어의 모든 뉴런에 연결되는 (" 완전히 연결된 ") 뉴런 레이어로 구성됩니다. 그러나 특히 변압기 아키텍처의 경우 ChatGPT에는 다른 레이어의 특정 뉴런만 연결되는 구조가 더 많은 부분이 있습니다. (물론, 여전히 "모든 뉴런이 연결되어 있다"고 말할 수 있지만 일부는 가중치가 0입니다.)

 

또한 ChatGPT의 신경망에는 "균질한" 계층으로 구성된 것으로 가장 자연스럽게 생각되지 않는 측면이 있습니다. 그리고 예를 들어 위의 상징적인 요약에서 알 수 있듯이 어텐션 블록 내에는 들어오는 데이터의 "여러 복사본이 만들어지는" 장소가 있으며, 각각은 다른 "처리 경로"를 거쳐 잠재적으로 다른 수의 레이어를 포함하고 있습니다. 나중에 재결합. 그러나 이것은 진행 상황을 편리하게 표현한 것일 수 있지만 적어도 원칙적으로 레이어를 "조밀하게 채우는" 것을 생각할 수 있지만 일부 가중치는 0입니다.

 

ChatGPT를 통한 가장 긴 경로를 살펴보면 약 400개의 (코어) 레이어가 관련되어 있으며 어떤 면에서는 그리 많은 수가 아닙니다. 그러나 총 1,750억 개의 연결과 1,750억 개의 가중치가 있는 수백만 개의 뉴런이 있습니다. 그리고 한 가지 깨달아야 할 점은 ChatGPT가 새 토큰을 생성할 때마다 이러한 가중치를 모두 포함하는 계산을 수행해야 한다는 것입니다. 구현적으로 이러한 계산은 GPU에서 편리하게 수행할 수 있는 고도의 병렬 배열 작업으로 "레이어별로" 구성될 수 있습니다. 그러나 생산되는 각 토큰에 대해 여전히 1,750억 개의 계산이 수행되어야 합니다(결국에는 조금 더). 따라서 ChatGPT로 긴 텍스트를 생성하는 데 시간이 걸리는 것은 놀라운 일이 아닙니다.

 

그러나 결국 놀라운 점은 이러한 모든 작업(개별적으로는 매우 간단함)이 어떻게든 함께 텍스트를 생성하는 훌륭한 "인간과 같은" 작업을 수행할 수 있다는 것입니다. (적어도 우리가 아는 한) 이와 같은 것이 작동해야 하는 "궁극적인 이론적 이유"가 없다는 점을 다시 한 번 강조해야 합니다. 그리고 사실, 우리가 논의할 것처럼 저는 이것을 잠재적으로 놀라운 과학적 발견으로 보아야 한다고 생각합니다. 어떻게든 ChatGPT와 같은 신경망에서 언어를 생성할 때 인간의 두뇌가 관리하는 것의 본질을 포착할 수 있다는 것입니다.

 

 

오늘은 여기까지... 오랜 기간 늘 정체기에 머무른다. 

 

반응형