LLM이 작동하는 방식

먼저 이름부터. LLM은 large language model(대규모 언어 모델)의 약자입니다: ChatGPT와 같은 도구를 이끄는 AI의 종류로, 프롬프트를 보내면 텍스트를 받아오는 것입니다. 이 장은 실제로 하나가 무엇인지에 대한 실제 그림입니다.
질문을 입력하면 몇 초 후 유창하고 자신감 있는 답변이 나타납니다. 모델이 당신을 이해하고 답변을 찾아본 것처럼 읽힙니다. 그 인상은 유용하며, 또한 중요한 방식으로 잘못되었습니다. 그리고 둘 사이의 간격이 대부분의 초보자 실수의 원인입니다.
이것이 이러한 도구를 사용한 나머지 경력 동안 보상을 받는 장입니다. 모델을 학습시키기 위한 수학을 알 필요는 없습니다. 답변할 때 실제로 무슨 일이 일어나고 있는지에 대한 실제 그림이 필요합니다. 왜냐하면 그 그림이 다른 모든 것을 설명하기 때문입니다: 프롬프팅이 왜 작동하는지, 같은 질문이 왜 다른 답변을 주는지, 모델이 왜 사실을 만들어내는지, 왜 그들이 그들이 하는 비용이 드는지, 그리고 왜 어떤 기능은 사소해 보이는데 어려운지. 이 핸드북의 나중의 모든 것이 여기의 아이디어의 결과입니다.
모델이 실제로 무엇인지
채팅 인터페이스를 제거하면 대규모 언어 모델은 한 가지입니다: 엄청난 수학 함수, **매개변수**라고 불리는 수십억 개의 고정된 숫자 집합(가중치라고도 불림). 그것이 전체 모델입니다. 데이터베이스가 아니고, 검색 엔진도 아니고, 상자 안의 작은 사람도 아닙니다. 텍스트를 가져와서 텍스트를 출력하는 매우 큰 숫자 더미입니다.
이 숫자들은 프로그래머가 입력해서 나온 것이 아닙니다. 그들은 학습 중에 설정되었습니다. 제공자는 모델에 엄청난 양의 텍스트, 책, 코드, 기사, 웹 페이지를 공급했고 수십억 번 간단한 드릴을 실행했습니다: 다음 단어를 숨기고, 모델에게 그것을 예측하도록 요청하고, 잘못 추측할 때마다 그 숫자를 약간 밀어붙이기. 엄청난 규모로 반복하고 숫자는 천천히 텍스트를 잘 예측하는 값으로 정착합니다. 그것이 학습입니다: 예측이 좋아질 때까지 수십억 개의 다이얼 튜닝.
이 두 가지에서 따르며 나중에 만날 많은 행동을 설명합니다. 첫째, 학습은 한 번 일어나고 미리, 그리고 엄청나게 비쌉니다. 모델을 호출할 때쯤이면 숫자는 고정됩니다. 모델은 당신의 대화에서 학습하지 않습니다. 당신이 말하는 것은 매개변수를 변경하지 않습니다. 그것은 기억하고 적응하는 것처럼 느껴지지만, 그것은 소프트웨어 주변의 것이지 모델 자체가 아니며, 컨텍스트 윈도우 섹션에서 어렵게 돌아오는 포인트입니다.
두 번째, 그 안에는 사실 테이블이 없습니다. "지식"은 그 숫자에 구워진 패턴으로 살아있으며, 만들기 과정에서 그 숫자에 기술을 가지고 있는 제빵사가 레시피를 읽지 않는 것처럼. 모델은 정확하고 타당한 텍스트의 모양을 배웠습니다. 이것이 같은 문장에서 유창하고 잘못될 수 있는 이유입니다: 저장된 사실을 선반에서 읽지 않고 좋은 답변의 모양을 재현하고 있습니다.
다음 토큰 예측
그 숫자 더미를 제자리에 두고, 모델은 정확히 하나의 일을 합니다: 반복해서 다음 텍스트 청크를 예측합니다.
느린 움직임에서 루프입니다. 당신은 그것에 텍스트를 줍니다. 그것은 모든 그 매개변수를 통해 텍스트를 실행하고 가능한 모든 다음 청크의 확률, 한 번에 수만 개의 옵션을 생성합니다. "프랑스의 수도는" 이후에, "Paris" 청크는 97% 점수를 얻을 수 있으며, "a"는 1% 점수, 그 외 모두 거의 아무것도 아닙니다.
모델은 그 다음 한 청크를 선택하고, 텍스트에 추가하고, 다음을 선택하기 위해 전체 것을 다시 실행합니다. 답변이 완료될 때까지 반복합니다.
그것이 전체 엔진입니다. 당신이 단일 생각으로 읽은 답변은 한 번에 한 청크씩 구성되었으며, 각 청크는 가능성의 새로운 순위에서 선택되고, 문장이 어디로 가는지에 대한 계획이 없으며, "다음이 가능한 것"을 초과합니다. 당신이 사용할 모든 기능, 채팅, 코드, 번역, 도구 사용, 추론은 기본에서 실행되는 이 같은 루프입니다.
다음 단어를 제안하는 전화 키보드는 축소 규모의 같은 아이디어입니다. 차이점은 추측 뒤의 수십억 개의 매개변수입니다. 충분한 텍스트에 학습하면, "다음의 가장 가능한 청크가 무엇인가"가 작동 코드를 쓰고 명확한 설명을 제공하기에 충분히 좋아 나타납니다. 그러나 기본 이동은 절대 변하지 않습니다: 그것은 예측이며, 이해가 아니며, 저장된 답변을 찾지 않습니다.
무작위성 다이얼
모델이 항상 단일 최고 점수 청크를 잡았다면, 같은 프롬프트에 같은 답변을 줄 것이고, 그 답변은 종종 평평하고 반복적일 것입니다. 따라서 대부분의 시간에 선택은 약간의 무작위성을 가지고 있습니다: 그것은 보통 높은 확률 청크를 가지고 있지만, 항상 맨 위가 아닙니다. 이것이 같은 질문을 두 번 묻고 두 개의 다른 답변을 얻는 이유입니다. 그것은 시스템이 의도한 대로 작동하는 것이지, 결함이 아닙니다.
당신은 **temperature**라고 불리는 설정을 통해 얼마나 많은 무작위성이 있는지 제어합니다, 당신은 코드에서 모델 호출 장에서 모델을 호출할 때 설정합니다. 직관은 지금 가질 가치가 있습니다. 낮은 온도에서 모델은 최고의 선택에 가깝게 유지합니다: 집중적이고, 일관적이고, 예측 가능하며, 이것이 인보이스에서 숫자를 끌어내거나 텍스트를 범주로 정렬하려는 것입니다. 더 높은 온도에서 더 낮은 확률 청크가 더 자주 선택됩니다: 더 다양하고 창의적이며, 잘못된 곳으로 방황할 가능성이 더 높습니다. 브레인스토밍과 창작 글쓰기가 더 높은 끝을 원합니다; 올바른 답변을 가진 모든 것은 더 낮은 끝을 원합니다.
따라서 단일 다이얼은 모델을 "신중하고 반복 가능한" 과 "놀랍고 창의적인" 사이에서 이동합니다. 온도가 변경되는 방법에 관계없이 동일한 예측 루프입니다; 온도는 가장 안전한 추측을 넘어선 모델 도달이 얼마나 대담한지만 변경합니다.
토큰
모델이 예측하는 "청크"는 이름이 있습니다: tokens(토큰). 토큰은 텍스트 조각이며, 종종 전체 단어이고, 때때로 하나의 일부입니다. 일반적인 단어는 보통 단일 토큰이고, 길거나 드문 단어는 여러 개로 분할됩니다.
"tokenization" -> "token" + "ization"
"unbelievable" -> "un" + "believ" + "able"
"cat" -> "cat"전체 단어나 단일 문자를 사용하는 대신 이 이상한 조각으로 텍스트를 자르는 이유는 무엇입니까? 그것은 절충안입니다. 단일 문자는 모든 시퀀스를 엄청나게 만들 것이고, 길이는 모델이 계산해야 하는 것입니다. 전체 단어는 수백만 개의 항목의 어휘를 필요로 할 것이고 여전히 누군가가 단어를 발명하거나 오타를 낼 때마다 깨질 것입니다. 토큰은 중간 경로입니다: 함께 스냅하여 모델이 본 적이 없는 단어를 포함하여 모든 것을 철자할 수 있는 일반적인 조각의 고정된 어휘는 수만 개입니다.
여기 사람들을 놀라게 하는 후드 아래의 결과입니다. 모델은 절대 편지를 보지 않습니다. 그것은 토큰을 봅니다, 그 청크에 대한 정말로 ID 번호입니다. 따라서 우리에게 쉬워 보이는 작업은 그것에 어려울 수 있습니다: 단어의 문자 세기, 문자열 역순, "딸기"가 3개의 r을 가지고 있다는 것을 알아차리기.
그것은 어두운 것이 아닙니다. 그것은 개별 문자를 전혀 인지하지 않으며, 완성된 빵에서 밀가루의 개별 곡립의 맛을 낼 수 없는 방식입니다. 모델이 철자나 문자 세기 작업에서 헛돌 때, 이것이 이유이고, 수정은 보통 대신 평범한 코드에서 그 부분을 하는 것입니다.
토큰은 또한 당신이 지속적으로 신경 쓸 두 가지의 단위입니다:
- 돈: 제공자는 토큰당 청구합니다, 당신이 보내는 토큰과 모델이 작성하는 토큰 모두, 그래서 길게 문서를 입력하고 길게 답변 출력은 모두 더 비쌉니다. 영어에 대한 대략적인 게이지는 토큰당 약 4개의 문자이거나 매 75개 단어마다 100개의 토큰; 코드 및 기타 언어는 종종 더 많은 토큰으로 분할되며, 그것은 부분적으로 그들이 더 많이 비용이 왜 들 수 있는지입니다. 코드에서 모델 호출을 시작할 때 당신은 이것을 직접 만날 것입니다.
- 제한: 모델이 한 번에 처리할 수 있는 토큰의 상한이 있으며, 다음 섹션입니다.
컨텍스트 윈도우
context window(컨텍스트 윈도우)는 모델이 한 번에 가져올 수 있는 텍스트 양이며, 토큰으로 측정됩니다. 모델의 책상 크기로 생각하세요. 단일 요청과 관련된 모든 것이 한 번에 그 책상에 맞아야 합니다: 당신의 지시사항, 지금까지의 대화, 당신이 붙여넣은 모든 문서, 그리고 모델이 작성하는 답변.
왜 모두 한계가 있나요? 예측이 어떻게 작동하는지에서 옵니다. 다음 토큰을 선택하려면, 모델은 입력의 모든 토큰이 다른 모든 토큰과 어떻게 관련되어 있는지를 비교합니다. 그래서 그것은 "그것"이 3문장 뒤의 고양이를 참조한다는 것을 말할 수 있습니다. 그 모든 대 모든 비교가 모델이 통로 전체의 의미를 추적하도록 허용하는 것이고, 그것은 또한 긴 입력을 처리하는 것을 비싸게 만드는 것입니다. 제공자는 상한, 컨텍스트 윈도우를 설정하여 각 요청을 관리할 수 있게 유지합니다.
책상이 가득 찼을 때, 무언가는 내려와야 합니다. 대화가 오래되어 윈도우를 초과하면, 초기 부분은 떨어지고 모델은 더 이상 그것들을 볼 수 없습니다. 이것이 긴 채팅이 당신이 시작에서 말한 것을 "잊게" 보이는 이유입니다. 어떤 인간 감각에서 그것은 잊지 않았습니다; 토큰은 책상 밖입니다. 그것은 또한 모델이 그것이 책상에 있는 것의 시작과 끝에 가장 가깝게 주의를 기울이는 경향이 있고 중간에 묻힌 것을 추적할 수 있다는 것을 아는 데 도움이 됩니다, 그래서 당신이 중요한 텍스트를 놓는 곳이 중요합니다. 윈도우를 채울 때.
이제 거의 모든 초보자를 잡는 포인트이고, 이것은 나머지보다 더 중요합니다. 모델은 별도의 요청 사이의 기억이 없습니다. 그것의 숫자는 고정되어 있다는 것을 기억하세요. 각 호출은 빈 책상으로 시작합니다. 모델은 당신의 마지막 질문, 당신의 이름, 또는 분 전의 아무 것도 기억하지 않습니다.
채팅 앱은 오직 앱이 모든 새 메시지로 전체 역사를 조용히 다시 보내기 때문에 하나의 흐르는 대화처럼 느껴집니다. 연속성은 모델이 가진 것이 아니라 모델 주변의 소프트웨어가 구축하는 것입니다.
그 단일 사실은 여기서 모든 것을 구축하는 방식을 형성합니다. 모델이 뭔가를 알기를 원하면, 당신은 그 요청에서 책상에 그것을 놓아야 합니다: 지금까지의 대화, 사용자의 세부 정보, 관련 문서, 모두, 매번. 이 핸드북의 큰 부분은 정말로 잘 그 한 가지를 하는 것에 대해입니다, 올바른 텍스트를 책상에 얻기.
모델이 알지 못하는 것
모델의 모든 지식이 학습 중에 구워졌으므로, 그것은 학습 데이터에 있었던 것만 알며, 그 데이터는 과거의 어떤 cutoff 지점까지 수집되었습니다. 두 한계가 바로 이것에서 나옵니다.
첫째, 그것은 cutoff 이후에 일어난 무언가를 알지 못합니다. 지난 주의 뉴스 또는 이번 달에 나온 라이브러리에 대해 묻고 그것은 실제 아이디어가 없으므로, 그것은 행복하게 그럴 듯한 소리 답변을 생산할 수 있습니다. 두 번째, 그것은 절대 비공개 무언가를 알았습니다. 당신의 회사의 내부 문서, 사용자의 주문 역사, 당신의 데이터베이스의 내용: 그 중 어느 것도 그것이 학습한 공개 텍스트에 있었습니다, 그래서 그것은 알 수 없습니다, 당신이 얼마나 멋진지에 상관없이.
조용한 한계도 있습니다. 모델은 보통 그것이 "알고 있는" 어떤 것이 어디서 온 것인지를 말할 수 없습니다, 왜냐하면 그 지식은 그 안에 섞여 있는 것과는 대조적으로 별개의, 소싱된 사실로 파일되지 않았기 때문입니다. 그것은 당신에게 인용을 쓸 수 있으나, 그것은 실제 인용을 찾지 않고 인용이 어떻게 보이는지 예측하고 있습니다.
이것이 당신이 나중에 retrieval, 또는 RAG라고 불리는 기법의 이유입니다. 모델이 최근 이벤트 또는 당신의 자신의 비공개 데이터에 대해 답변하게 하려면, 당신은 그것을 재학습하지 않습니다. 당신은 관련된 텍스트 자신을 가져오고 요청 시간에 책상에 설정하므로, 모델은 추측하는 대신 자신의 앞에 있는 사실을 가집니다. 모델은 특정 사실의 신뢰할 수 있는 우물보다 당신이 주는 텍스트 위의 추론꾼입니다.
모델이 왜 것을 만들어내는지
때때로 모델은 거짓으로 무언가를 완전한 확신으로 명시합니다: 아무도 말하지 않은 인용, 존재하지 않는 함수, 절대 작성되지 않은 연구에 대한 인용. 이것을 **hallucination**이라고 하며, 마지막 몇 섹션 이후 그것은 신비스럽기보다 거의 필연적으로 느껴야 합니다.
이유는 모델이 "참" 대 "거짓"에 대한 내부 감각이 없다는 것입니다. 그것은 "가능성 있는 텍스트" 대 "가능성 없는 텍스트"를 가지고 있습니다. 대부분의 시간, 그들은 정렬됩니다, 왜냐하면 그것이 배운 텍스트에서, 참 명시는 거짓보다 훨씬 더 일반적이므로, 가능한 지속은 보통 정확한 것입니다.
하지만 모델이 간격에 부딪칠 때, 그것이 절대 배운 무언가, 또는 당신의 비공개 데이터는 그것이 절대 볼 수 없었던 것, 그것은 멈추지 않고 간격을 플래그합니다. 그것은 신뢰할 수 없게 할 수 없습니다. 그것은 그것이 항상 하는 유일한 일을 합니다: 가장 가능한 음향 지속을 생성합니다.
자신감 있고 형성 잘된 잘못된 답변은 종종 정확히 가장 가능하게 점수합니다. 같은 기계가 그것을 유창하게 만드는 것이 그것이 틀렸을 때 유창하게 만듭니다.
앉아서 이 부분: hallucination은 완전히 프롬프트 떨어질 수 있는 결함이 아닙니다. 당신은 그것을 감소할 수 있고, 나중 장은 어떻게 보입니다. 모델이 "나는 알지 못한다"라고 말할 수 있다는 것을 말합니다 약간 도움. 당신이 공급하는 텍스트에서만 답변하도록 묻는 것은 훨씬 더 도움이 됩니다, 왜냐하면 지금 동결된 학습에서 채워질 간격이 없습니다. 하지만 경향은 모델이 근본적으로 무엇인지에서 옵니다, 사실 검사기 내부가 없는 확률 기계, 그래서 지속 가능한 수정이 구조: 모델이 작동해야 하는 사실을 제공하기 보다는 그것들이 그것의 학습에 있었기를 바라는 것, 그리고 중요한 것이 답변을 검증합니다.
이 장의 모든 다른 규칙을 통해 이 규칙을 가져가세요: 모델의 자신감은 당신에게 무언가를 알려줍니다 그것이 맞는지. 유창함 그리고 정확성은 같은 과정에서 생성되고 모든 시간을 떨어집니다. 단일 답변이 잘못될 수 있다는 것처럼 구축하세요, 왜냐하면 단일 답변이 할 수 있기 때문입니다.
함께 놓기
이 장의 모든 것은 다른 각도에서 보인 하나의 아이디어입니다. 모델은 동결된 숫자 더미이고 다음 토큰을 예측하며, 거의 모든 행동 당신이 다룰 이것에서 나옵니다:
- 그것은 한 번에 하나의 토큰을 예측하는 확률 순위에서, 그래서 그것은 즉흥적이며 회상 아닙니다, 그리고 무작위성(온도)의 터치는 답변이 다양하다는 것을 의미합니다.
- Tokens은 그것이 일하는 청크입니다: 당신의 청구의 단위, 당신의 크기 제한의 단위, 그리고 그것이 신뢰할 수 없게 셀 수 없는 이유입니다 편지.
- 컨텍스트 윈도우는 단일 요청의 책상입니다, 모든 것 공유, 그리고 모델 기억 아무것도 요청 사이에, 그래서 연속성은 당신의 일입니다.
- 그것의 지식은 학습 cutoff에서 동결되고 절대 당신의 비공개 데이터를 포함했고, 이것이 당신이 사실을 가져오고 프롬프트에 놓는 이유입니다.
- hallucination은 진실 감각이 없는 가능한 텍스트를 예측하는 시스템의 가격이고, 접지 그리고 검사로 감소되고, 절대 현명한 단어로입니다.
이것들을 함께 유지합니다 그리고 놀랍게도 많은 AI 엔지니어링이 서로 다른 의상에서 하나의 일로 켜집니다: 올바른 텍스트를 책상에 얻습니다, 올바른 모양에서, 정확히 옳은 시간에, 그리고 절대 출력이 맹목적으로 신뢰합니다. 다음 장, Open 그리고 폐쇄 모델은 어떤 종류 모델이 거기에 보이고 당신이 하나를 어떻게 얻습니까 보입니다, 그리고 그 다음 prompting은 당신이 시작하는 곳입니다 이 예측 모두를 당신이 실제로 원하는 것을 향해 조종.

