현재 인공지능의 획기적인 방향으로 LLM(Large Language Model)이 꼽히고 있습니다. 사람들은 질문과 답변, 생성, 수학적 추론, 코드 작성 등 모든 종류의 복잡한 작업을 수행하는 데 이를 사용하려고 합니다. 최근 ChatGPT의 인기가 가장 좋은 예입니다.
그러나 기계 학습 실무자에게 대형 모델에 대한 문턱은 매우 높습니다. 너무 크고 훈련하기 어렵기 때문에 이 방향은 오랫동안 대기업에 의해 독점되어 왔습니다. 그러나 최근에는 GPT 모델을 단순화하는 방법이 점점 더 많아지고 있습니다. 1월 중순, 전 Tesla AI 수석 이사 Andrej Karpathy(현재 OpenAI로 복귀)가 처음부터 GPT 모델을 구축하는 방법에 대한 완전한 튜토리얼을 발표했습니다. 그러나 훈련된 GPT와 OpenAI의 GPT-3를 비교하면 둘 사이의 크기 차이는 10,000~100만 배에 이릅니다. 최근 캐나다 McMaster University의 소프트웨어 공학 학부생인 Jay Mody는 NumPy 라이브러리를 가져와 PicoGPT라는 이름을 지정하여 단 60줄의 코드만으로 처음부터 GPT 모델을 구현했습니다. 뿐만 아니라 그는 훈련된 GPT-2 모델 가중치를 구현에 로드하고 일부 텍스트를 생성했습니다. 아래에는 60줄의 코드가 나와 있습니다.
그러나 이렇게 하려면 Python과 NumPy에 익숙해야 하며 신경망 훈련에 대한 기본적인 경험이 있어야 합니다. 저자는 이 블로그가 GPT에 대해 간단하고 이해하기 쉽고 완전한 소개를 제공하는 것을 목표로 한다고 밝혔습니다. 따라서 저자는 정방향 패스 코드를 구현하기 위해 이미 훈련된 모델 가중치만 사용합니다.
코드 주소:
https://github.com/jaymody/picoGPT/blob/29e78cc52b58ed2c1c483ffea2eb46ff 6bdec785/gpt2_pico.py#L3-L58
이 연구를 위해 Andrej Karpathy는 다음과 같은 네 단어를 제시했습니다: 늦었지만 도착했습니다. 당시 Karpathy가 만든 minGPT와 nanoGPT에는 300줄의 코드가 필요했습니다.
이 튜토리얼은 임계값이 완전히 0이 아니라는 점을 언급할 가치가 있습니다. 독자들의 이해를 돕기 위해 저자는 먼저 GPT가 무엇인지, GPT의 입력과 출력, 기타 내용을 아주 자세하게 소개한다.
GPT가 정확히 무엇을 할 수 있는지에 대해 저자는 이메일을 쓰고, 책을 요약하고, 인스타그램 캡션에 대한 아이디어를 제공하고, 블랙홀을 5가지로 설명할 수 있습니다. , SQL로 코드 작성 등
이 부분을 주의 깊게 읽으면 GPT에 대한 기본 지식을 대략적으로 이해할 수 있습니다. 이 배경 정보를 바탕으로 다음 단계는 설정 방법입니다.
프로젝트 소개
Settings이 장에서는 주로 인코더, 하이퍼 매개 변수 및 매개 변수 설정 방법을 소개합니다. 🎙
참고로 M1 Macbook을 사용하는 경우 pip install을 실행하기 전에 요구사항.txt에서 tensorflow를 tensorflow-macos로 변경해야 합니다. 이 프로젝트의 파일에는 인코더.py, utils.py, gpt2.py, gpt2_pico.py가 포함됩니다.
그런 다음 다음 코드를 복사하세요. to gpt2 In .py:
위 코드에는 4개의 주요 부분이 포함되어 있습니다.
gpt2 함수는 이번에 GPT를 구현하는 실제 코드입니다. 자동 회귀 디코딩 알고리즘 ;main function;
그런 다음 필요한 모델 및 토크나이저 파일이 models/124M 파일에 다운로드됩니다.
설정이 완료된 후 저자는 인코더, 하이퍼 매개변수 및 매개변수에 대한 몇 가지 세부 사항을 소개하기 시작합니다. 인코더를 예로 들면, 이 기사의 인코더는 GPT-2에서 사용하는 BPE 토크나이저와 동일합니다. 다음은 이 인코더로 인코딩 및 디코딩된 텍스트의 몇 가지 예입니다.
실제 토큰은 다음과 같습니다.
때때로 토큰이 단어인 경우도 있습니다(예: Not). , 때로는 단어이지만 앞에 공백이 있고(예: Ġall, Ġ는 공백을 나타냄) 때로는 단어의 일부이고(예: capes는 Ġcap과 es로 분할됨) 때로는 구두점입니다(예: .).
BPE의 한 가지 이점은 임의의 문자열을 인코딩할 수 있다는 점이며, 어휘에 존재하지 않는 항목이 있으면 이를 이해하는 하위 문자열로 나눕니다.
더 자세한 내용 다시 설명하지 않겠습니다. 다음으로 기본 신경망에 대해 소개하겠습니다. 이 부분은 주로 GELU, Softmax 기능, Layer Normalization 및 Linear를 포함하여 훨씬 더 기본적입니다.
각 작은 부분에는 코드 예제가 있습니다. 예를 들어 선형 부분에는 저자가 표준 행렬 곱셈 + 편향을 보여줍니다. 벡터 공간 다른 벡터 공간에 투영하는 코드는 다음과 같습니다.
GPT 아키텍처
이 부분에서는 GPT 자체의 아키텍처를 소개합니다.
Transformer 아키텍처는 다음과 같습니다.
Transformer는 디코더 스택만 사용합니다(다이어그램의 오른쪽 부분):
인코더 제거로 인해 중간 Cross-Attention 레이어도 삭제된다는 점에 유의해야 합니다.
상위 수준에서 GPT 아키텍처는 다음 세 부분으로 구성됩니다.
텍스트 + 위치 삽입Transformer 디코더 스택
어휘로의 투영.
코드 섹션 스크린샷
다음으로, 위의 세 부분은 각각 더 자세히 분류되어 있습니다. 여기 또 다시.
위는 저자의 GPT 구현입니다. 다음 단계는 이들을 결합하고 코드를 실행하여 gpt2.py를 얻는 것입니다. 전체 내용은 단 120줄의 코드입니다(주석과 공백을 제거하면 60줄). 저자는 다음과 같은 방법으로 결과를 테스트했습니다.
출력 결과는 다음과 같습니다.
저자가 말했듯이: 이 실험은 효과가 있었습니다.
이 글은 작가의 아이디어에 따른 전체적인 과정을 간략하게만 소개한 글입니다. 더 알고 싶은 친구들은 원본 링크를 참고하세요.
원본 링크: https://jaykmody.com/blog/gpt-from-scratch/#basic-layers위 내용은 학부생들은 60줄의 코드를 사용하여 손으로 대규모 GPT 모델을 만드는 방법을 가르칩니다. 기술 소개는 튜토리얼과 비슷합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!