2P by GN⁺ | ★ favorite | 댓글 1개
  • GPT는 대규모 데이터로 사전 학습된 트랜스포머가 다음 텍스트 조각의 확률분포를 예측하고, 이를 반복 샘플링해 문장을 생성하는 방식임
  • 같은 구조는 텍스트 생성뿐 아니라 음성 인식, 합성 음성, 이미지 생성, 번역에도 쓰이며, 여기서는 ChatGPT류 도구의 기반인 다음 토큰 예측에 초점을 둠
  • 입력 텍스트는 토큰으로 쪼개져 임베딩 벡터가 되고, 어텐션 블록과 다층 퍼셉트론 블록을 지나며 주변 문맥을 흡수함
  • GPT-3는 1,750억 개 매개변수를 약 28,000개 행렬에 담고 있으며, 임베딩과 언임베딩만 각각 약 6.17억 개 가중치를 차지함
  • 최종 벡터는 언임베딩 행렬과 softmax를 거쳐 다음 토큰 확률분포가 되며, temperature는 예측 가능성과 다양성 사이의 균형을 조절함

GPT와 트랜스포머의 기본 역할

  • GPT의 세 단어는 각각 Generative, Pretrained, Transformer를 뜻함
    • Generative는 새 텍스트를 생성한다는 뜻임
    • Pretrained는 방대한 데이터로 학습된 뒤 추가 학습으로 특정 작업에 맞게 조정될 수 있다는 뜻임
    • Transformer는 현재 AI 붐의 핵심 발명으로 다뤄지는 신경망 구조임
  • 트랜스포머는 여러 형태의 모델에 쓰임
    • 오디오를 입력받아 전사문을 생성하는 모델
    • 텍스트에서 합성 음성을 만드는 모델
    • DALL-E, Midjourney처럼 텍스트 설명에서 이미지를 생성하는 도구
    • 2017년 Google이 처음 소개한 원래 트랜스포머의 용도였던 기계번역
  • 여기서 다루는 변형은 ChatGPT 같은 도구의 기반인 다음 텍스트 예측 모델
    • 텍스트, 경우에 따라 주변 이미지나 소리까지 입력받고 다음에 올 내용을 예측함
    • 출력은 다음에 올 수 있는 여러 텍스트 조각에 대한 확률분포임

다음 토큰 예측이 생성으로 바뀌는 방식

  • 다음 단어 예측과 텍스트 생성은 겉보기에는 다른 목표처럼 보이지만, 예측 모델을 반복 실행하면 긴 텍스트를 만들 수 있음
    • 초기 텍스트를 입력함
    • 모델이 다음 조각의 확률분포를 만듦
    • 그 분포에서 무작위로 샘플을 뽑아 텍스트에 붙임
    • 새 텍스트 전체를 다시 입력해 같은 과정을 반복함
  • GPT-2를 노트북에서 같은 방식으로 실행하면 이야기가 잘 이어지지 않는 사례가 나옴
  • 같은 기본 구조를 더 크게 만든 GPT-3 API로 바꾸면 더 그럴듯한 이야기를 생성할 수 있음
  • ChatGPT와 다른 대형 언어 모델이 한 단어씩 답변을 만드는 과정도 본질적으로 반복 예측과 샘플링
  • 챗봇으로 만들기 위한 간단한 출발점은 대화 상황을 텍스트로 구성하는 방식임
    • 유용한 AI assistant와 사용자가 상호작용한다는 설정을 담은 system prompt를 둠
    • 사용자의 질문을 첫 대화 조각으로 넣음
    • 모델이 그런 assistant가 이어서 할 말을 예측하게 함
    • 이 방식이 잘 작동하려면 추가 학습 단계가 필요함

트랜스포머 내부의 데이터 흐름

  • 입력은 작은 조각인 토큰으로 나뉨
    • 텍스트에서는 단어, 단어 일부, 흔한 문자 조합이 토큰이 될 수 있음
    • 이미지나 소리가 포함되면 이미지 패치나 소리 조각도 토큰이 될 수 있음
  • 각 토큰은 숫자 목록인 벡터와 연결됨
    • 이 벡터는 해당 조각의 의미를 어떤 방식으로든 인코딩함
    • 고차원 공간의 좌표로 보면 의미가 비슷한 단어는 서로 가까운 벡터에 놓이는 경향이 있음
  • 벡터 시퀀스는 먼저 어텐션 블록을 통과함
    • 어텐션 블록은 벡터들이 서로 정보를 주고받아 값을 갱신하게 함
    • “a machine learning model”의 model과 “a fashion model”의 model처럼 문맥에 따라 달라지는 의미를 처리함
    • 어떤 단어가 다른 단어의 의미 갱신에 얼마나 관련되는지와 그 갱신 방식을 맡음
  • 이후 벡터는 다층 퍼셉트론 또는 feed-forward layer로 불리는 블록을 통과함
    • 이 단계에서는 벡터끼리 서로 말하지 않고 같은 연산을 병렬로 거침
    • 각 벡터에 긴 질문 목록을 던지고 답에 따라 갱신하는 방식에 비유됨
  • 전체 네트워크는 어텐션 블록과 다층 퍼셉트론 블록을 반복함
    • 중간에는 정규화 단계도 있지만 고수준 개요에서는 생략됨
    • 마지막에는 문장의 핵심 의미가 시퀀스의 마지막 벡터에 담기기를 기대함
    • 그 마지막 벡터를 이용해 가능한 다음 토큰 전체에 대한 확률분포를 만듦

딥러닝 형식과 GPT-3의 매개변수 규모

  • 딥러닝은 데이터를 사용해 모델의 동작을 정하는 머신러닝 접근법임
    • 이미지에서 라벨을 만들거나, 텍스트 뒤의 다음 단어를 예측하는 작업처럼 직관과 패턴 인식이 필요한 문제에 쓰임
    • 초기 AI처럼 절차를 코드로 명시하기보다, 조정 가능한 매개변수를 가진 유연한 구조를 만들고 예시 데이터로 값을 조정함
  • 선형회귀는 가장 단순한 머신러닝 예시임
    • 집 면적과 가격처럼 입력과 출력이 각각 하나의 숫자인 경우를 다룸
    • 기울기와 y절편이라는 두 연속 매개변수로 최적의 직선을 찾음
  • GPT-3는 두 개가 아니라 1,750억 개 매개변수를 가짐
    • 이런 거대한 모델은 학습 데이터에 과적합하거나 학습이 불가능해질 수 있음
    • 딥러닝 모델은 최근 수십 년 동안 잘 확장되는 것으로 입증된 모델 계열로 다뤄짐
    • 이 계열을 묶는 공통 학습 알고리듬은 역전파
  • 역전파가 큰 규모에서 잘 작동하려면 모델이 특정 형식을 따라야 함
    • 입력은 실수 배열로 표현되어야 함
    • 배열은 여러 층을 지나며 계속 다른 실수 배열로 변환됨
    • 텍스트 모델의 최종 층은 가능한 다음 토큰 전체의 확률분포를 나타내는 숫자 목록임
  • 딥러닝의 매개변수는 보통 가중치라고 불림
    • 가중치가 데이터와 상호작용하는 방식은 가중합임
    • 비선형 함수도 중간에 들어가지만 매개변수에 의존하지 않음
    • 실제 표현은 가중합을 노출하기보다 행렬-벡터 곱셈으로 묶는 경우가 많음
  • GPT-3의 1,750억 개 가중치는 약 28,000개 행렬에 정리되어 있음
    • 이 행렬들은 8개 범주로 나뉨
    • 모델의 가중치는 학습 중 얻어진 “두뇌”이고, 한 번 실행할 때 처리되는 데이터는 입력 텍스트 같은 특정 사례를 인코딩함

임베딩, 문맥 크기, 출력 확률분포

  • 첫 단계는 입력 텍스트를 토큰으로 나누고 각 토큰을 벡터로 바꾸는 과정임
    • 실제 토큰은 단어 일부나 구두점일 수 있지만 설명에서는 이해를 위해 단어처럼 다룸
    • 모델은 가능한 토큰 목록인 vocabulary를 미리 가짐
  • 임베딩 행렬은 각 토큰을 어떤 벡터로 바꿀지 정함
    • W_E로 표기됨
    • 값은 무작위로 시작하지만 데이터 기반 학습으로 정해짐
    • GPT-3의 vocabulary 크기는 50,257이고 임베딩 차원은 12,288임
    • 둘을 곱하면 임베딩 행렬은 약 6.17억 개 가중치를 가짐
  • 단어 임베딩은 고차원 공간의 점으로 생각할 수 있음
    • 의미가 비슷한 단어는 가까운 위치에 놓이는 경향이 있음
    • 학습이 진행되면 공간의 방향이 의미를 갖는 방식으로 임베딩이 자리 잡는 경향이 있음
    • woman - man과 king - queen의 관계, Italy - Germany + Hitler가 Mussolini에 가까워지는 예시가 나옴
    • queen 예시에서는 실제 queen 임베딩이 단순한 여성형 king보다 더 멀리 있을 수 있다는 주의점도 함께 다룸
  • 점곱은 두 벡터가 얼마나 정렬되어 있는지 측정하는 방식임
    • 같은 방향이면 양수, 수직이면 0, 반대 방향이면 음수가 됨
    • cats - cat이 복수성을 나타내는 방향일 수 있다는 가설을 점곱으로 시험함
    • 복수 명사의 값이 단수 명사보다 더 높게 나오는 경향이 있음
    • one, two, three 같은 단어와의 점곱도 증가하는 값이 나오는 사례가 있음
  • 트랜스포머의 벡터는 단어 하나만 나타내는 데 그치지 않고 문맥을 흡수할 수 있어야 함
    • 처음 생성된 벡터는 임베딩 행렬에서 가져온 단일 토큰의 의미만 가짐
    • 네트워크를 통과하면서 주변 단어와 멀리 떨어진 문맥까지 반영한 더 구체적인 의미를 담는 것이 목표임
    • GPT-3의 context size는 2048로, 한 번에 2048개 벡터를 처리하도록 학습됨
    • 이 문맥 크기는 다음 단어를 예측할 때 모델이 반영할 수 있는 텍스트 길이를 제한함
    • 초기 ChatGPT 같은 챗봇이 긴 대화에서 맥락을 잃는 느낌을 주는 이유와 연결됨
  • 마지막 단계는 다음 토큰 확률분포를 만드는 과정임
    • 최종 문맥의 마지막 벡터를 언임베딩 행렬 W_U에 곱해 vocabulary 크기의 숫자 목록을 만듦
    • 이 원시 출력의 각 성분은 다음 단어 예측의 logit으로 불림
    • W_U는 vocabulary의 각 토큰에 해당하는 행을 갖고, 각 행의 길이는 임베딩 차원과 같음
    • GPT-3 기준 W_U도 약 6.17억 개 매개변수를 추가함
    • 임베딩과 언임베딩을 합치면 누적 매개변수는 10억 개를 조금 넘음
  • softmax는 임의의 숫자 목록을 유효한 확률분포로 바꿈
    • 각 값은 0과 1 사이가 되어야 하고 전체 합은 1이어야 함
    • 입력 숫자마다 e의 거듭제곱을 취해 양수로 만들고, 전체 합으로 나눠 정규화함
    • 큰 입력값은 1에 가까운 큰 확률을 얻고 작은 값은 0에 가까워짐
    • 최댓값만 고르는 것보다 부드러워서, 비슷하게 큰 값들도 의미 있는 확률을 받을 수 있음
  • temperature는 softmax 분포의 날카로움을 조절함
    • T가 크면 낮은 값에도 더 많은 가중치가 가서 분포가 더 균일해짐
    • T가 작으면 큰 값이 더 강하게 지배함
    • T=0은 모든 가중치가 최댓값에 몰리는 극단임
    • temperature 0에서는 항상 가장 예측 가능한 단어를 고르며, 예시에서는 Goldilocks류의 진부한 이야기가 생성됨
    • 더 높은 temperature는 덜 가능성 높은 단어를 선택할 기회를 주지만, 예시에서는 이야기가 더 독창적으로 시작한 뒤 빠르게 무의미해짐
    • API는 temperature를 2보다 크게 설정하지 못하게 하며, 이는 수학적 이유가 아니라 도구가 너무 무의미한 결과를 생성하는 것을 막기 위한 임의 제한임

댓글과 토론

Hacker News 의견들
  • GPT 작동 방식을 아는 사람이 있다면 궁금한 게 있음. 이 모델들은 가장 그럴듯한 다음 단어를 고른다고 생각했는데, “그럴듯한 단어 중 하나”를 고르면 그다음 단어 예측 목록이 훨씬 덜 그럴듯해지는 상황으로 이어질 수 있지 않나 싶음
    계산 가능하다면 “두 단어를 함께” 후보로 돌리고, 나아가 3개, 4개, n개 단어로 확장하는 편이 더 유리해 보이는데 이런 방식이 있는지 궁금함
    영상을 보고 댓글을 본 뒤에는 이것이 빔 탐색이고, 이런 동작을 조절하는 온도와 함께 쓰인다는 걸 알게 됨

    • 실제로는 빔 탐색이 생성 모델에서는 잘 작동하지 않는 것 같음
      온도와 top_k는 서로 꽤 비슷한 매개변수인데, 사람이 말할 수 있는 각 문장이 확률적으로 예측 불가능하다는 점을 반영하려고 도입됐음. 2018/2019년 Hugging Face 문서의 오래된 그래프를 2021년에 비슷하게 재현한 예가 여기 있음: https://lilianweng.github.io/posts/2021-01-02-controllable-t...
      훨씬 긴 길이의 빔 탐색이 더 나을 수도 있고, 여러 기법을 합친 방식이 잘 될 수도 있지만 그렇게 보진 않음. 트랜스포머의 쿼리-키-값 부분은 전체 문맥과의 관계 속에서 여러 면에서 하나의 총합에 초점을 맞춤. 아키텍처 자체가 이런 식의 더 긴 단위에 맞춰져 있지 않고, 기본 “두 토큰” 시스템도 없음
      대부분 GPT 모델의 토큰이 5만~10만 개라면 5만*5만처럼 훨씬 많은 매개변수를 보게 되고, 데이터 희소성 문제도 생김. 학습 복잡도까지 고려하지 않아도, GPT 모델의 많은 요소는 단일 토큰 또는 단일 토큰 인덱스의 풍부함을 끌어내는 데 너무 집중돼 있어서 이런 빔 탐색에 맞게 설계됐다고 보긴 어려움
    • 온도 설정은 다음 토큰으로 얼마나 드문 토큰까지 가능하게 할지를 정함. 0이면 확률 목록의 맨 위가 선택되고, 0보다 크면 더 낮은 확률의 토큰도 선택될 수 있음
    • 맞음. 이건 대규모 언어 모델의 근본적인 약점임. 탐색 공간이 지수적으로 커지기 때문에 안타깝게도 해결 불가능할 가능성이 큼
      빔 탐색 같은 기법이 도움이 되긴 하지만, 상수 배율 정도의 개선만 추가할 수 있음. 그래도 대규모 언어 모델은 이런 한계에도 불구하고 현재 성능에 도달했음
    • 이런 방식은 존재함. 실제 운영 시스템은 탐욕 탐색을 거의 쓰지 않고 더 전체적인 탐색 알고리즘을 사용함
      예로 빔 탐색이 있음: https://www.width.ai/post/what-is-beam-search
      본질적으로는 예측 토큰들의 확률 창을 유지해서 최종 출력 품질을 높이는 방식임
    • “단어를 함께” 다루는 건 기본적으로 청킹이거나 적어도 그 시작에 가까움. 개별 단어 벡터 임베딩을 더하고 빼서 의미 있는 결과가 나오는 점이 인상적이었음
      더 큰 블록을 청킹하면 이 과정 전체가 섞여서 같은 일을 개념 공간에서 할 수 있음. 예를 들어 문장 임베딩 같은 기준 방법을 잡으면 그것이 비교를 위한 작업 블록이 됨
  • 어텐션 메커니즘을 대중에게 가르칠 사람으로 이보다 더 나은 사람은 떠오르지 않음. 꿈이 이루어진 느낌임

    • 대단함. 이 3B1B 시리즈는 6년 전에 시작됐고 이제 5장까지 이어지고 있음
      앞 장들을 아직 안 봤다면 정말 강력히 추천함
  • 이게 마음에 들었다면 Andrej Karpathy 채널에도 신경망과 내부 작동 방식을 설명하는 흥미로운 영상들이 있음. 프로그래밍을 아는 사람을 대상으로 한 내용임

    • 꽤 경험 있는 프로그래머로서 Andrej의 영상을 본 입장에서, 신경망을 처음 배우는 출발점으로 쓰기보다는 기초를 알고 난 뒤 보강하거나 확장하는 용도로 쓰는 걸 추천함
      나도 무지하게 바로 뛰어들었고, 그가 이전 영상을 보라고 권했는데도 보면서 이해할 수 있을 거라고 잘못 생각했음. 제대로 얻어가려면 반드시 알아야 하는 용어들이 나옴
      포기하고 다른 학습으로 빈틈을 메운 뒤 다시 돌아가니 그의 영상이 훨씬 더 큰 가치로 다가왔음. 신경망을 배우려는 사람이라면 내 실수에서 배우는 걸 강하게 권함
  • 만우절 콘텐츠들 사이에서 믿기지 않을 정도로 좋은 해독제임. 그냥 혈관에 바로 꽂아 넣고 싶을 정도임

  • 관련해서 이 인터랙티브 시각화도 볼 만함: https://bbycroft.net/llm
    이전 논의: https://news.ycombinator.com/item?id=38505211

  • 3B1B는 YouTube에서 최고의 STEM 교육자 중 하나임

  • 다음 토큰은 언임베딩 뒤 마지막 열의 로짓을 샘플링해서 가져온다고 하는데, 그러면 그냥 마지막 토큰을 다시 가져오는 것 아닌가? 아니면 어떤 단계에서 행렬 크기가 N+1로 바뀌는 건가?

    • 입력 시퀀스 끝에 시퀀스 종료 토큰이 붙고, 이것이 예측된 다음 토큰으로 변환됨
  • 다음 영상들이 기다려짐. 이번에는 마침내 이런 것들이 어떻게 작동하는지 내 안에서 이해하고 체화할 수 있을 것 같음