京东6.18大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1060|回复: 0

本科生 60 行代码教你手搓 GPT 大模型,技术介绍堪比教程 ...

[复制链接]

1583

主题

693

回帖

6856

积分

论坛元老

积分
6856
发表于 2023-2-27 19:45:26 | 显示全部楼层 |阅读模式 来自 中国
机器之心报道
* I, ^/ |  N( `/ Y* E5 T机器之心编辑部' A0 W; r$ b/ O: J1 d
GPT 模型实现起来有时也很简单。
% {" O; a; c* S2 q. B' t; r0 I当前,大型语言模型(LLM)被认为是人工智能突破的方向。人们正在尝试用它们做各种复杂的事情,比如问答、创作、数学推理以及编写代码等。近段时间 ChatGPT 持续的爆火是最好的例证。/ n( G! ^3 O) b+ {! \
然而,对于机器学习从业者来说,大模型的门槛很高:因为体量太大难以训练,很长时间里这个方向一直被大公司垄断。不过最近,简化 GPT 模型的方法越来越多了。1 月中旬,前特斯拉 AI 高级总监 Andrej Karpathy(现已回归 OpenAI)就发布了从零开始构建 GPT 模型的完整教程。不过训练出的 GPT 和 OpenAI 的 GPT-3 比较,两者规模差距达 1 万 - 100 万倍。& y/ n2 Z# D- ?+ \: c
近日,加拿大麦克马斯特大学的一位软件工程本科生 Jay Mody 在导入 NumPy 库下,仅用 60 行代码就从头实现了一个 GPT 模型,并将其命名为 PicoGPT。不仅如此,他还将经过训练的 GPT-2 模型权重加载到自己的实现中,并生成了一些文本。下面为 60 行代码展示。
( o4 n5 e4 x# i+ @0 K2 |- ]" D* x4 x2 T6 t  t+ g/ d
; E9 r" Q$ f+ l2 [5 o3 f# k( Q! s: O( X

- V, a9 s3 P" D+ w7 l3 V不过要做到这些,你需要熟悉 Python 和 NumPy,还要有一些训练神经网络的基本经验。作者表示,这篇博客旨在对 GPT 进行简单易懂的完整介绍。因此,作者只使用已经训练的模型权重来实现前向传递代码。
) k' }: w9 L+ J3 D5 j$ z2 p. E
# J, \7 g( C$ l3 a2 W! |1 p: X! P# X) W5 w7 ]" |

( |, b, Q/ j: v! N6 v+ g代码地址:9 }6 |# T/ ]& _% o0 K9 E
https://github.com/jaymody/picoGPT/blob/29e78cc52b58ed2c1c483ffea2eb46ff6bdec785/gpt2_pico.py#L3-L581 Q) g* c1 J& x  v+ M9 o/ ~
对于此项研究,Andrej Karpathy 给出了四个字:虽迟但到。想当初,Karpathy 构建的 minGPT 和 nanoGPT 还要 300 行代码。
0 H2 E9 W  E. {* [0 A% ~& v
  b/ w  _1 C+ o1 v* K1 V% D$ r3 v, L: J7 c" X) ?
# t6 M9 b  z& T" ^
值得一提的是,这篇教程不是完全零门槛的。为了让读者明白,作者首先介绍了什么是 GPT、它的输入、输出如何等其他内容,介绍得都非常详细。. x. X8 _2 i) R" z$ {
4 t7 d6 Y/ w) e  `( u4 ?9 L( H

' Q6 T2 X7 d4 Z% M& L( T
' ?$ b7 l: w+ Q7 Z* p至于 GPT 到底能干什么,作者给出了几个示例,它能写电子邮件、总结一本书、给你 instagram 标题的想法、向 5 岁的孩子解释黑洞、用 SQL 编写代码等。" E. n) Y/ z9 |5 {8 Y* r* ^
通过仔细阅读这部分内容后,你能大致了解 GPT 的一些基础知识。有了这些背景介绍,接下来就是如何设置了。& y: ^; H, u7 e( |% i' K/ p
项目介绍: i3 D. ^2 G; f7 V/ Y* h. c0 l
设置
0 t; ?" G) y( z9 ]$ ?' C这一章节主要介绍了如何设置编码器、超参数以及参数。
- K) j) t- A% A1 z! P. t) _% n' K8 T
. h, u. Q1 U% h* U& H3 Y

. h. @$ W9 R3 ]* y5 Q% D# u# x你要做的,首先是克隆代码库:$ I- a1 W$ x6 t5 |! i
. |; W9 ?9 F4 b
& ~  H' [( G" r5 {, `$ x

8 s9 e# |( d: j" h- @+ d1 f然后安装依赖项:
' z6 V6 C) G- C9 Z$ Q$ H. _$ m
+ t/ L% G* S! C0 C5 D3 |& \0 ?1 g3 n8 v4 N% C  o
/ x, v, d( X- [7 ?' Z) E1 S1 b
注意,如果你使用的是 M1 Macbook,在运行 pip install 之前,你需要在 requirements.txt 中将 tensorflow 更改为 tensorflow-macos。在这个项目下,文件包括 encoder.py、utils.py、gpt2.py、gpt2_pico.py:
; O; Q5 P: K) D/ Qencoder.py:包含 OpenAI BPE Tokenizer 的代码,直接取自 gpt-2 repo;
+ V( w  j. N: Y4 M' [. d/ [gpt2.py:包含 GPT 模型和生成代码,可以将其作为 python 脚本运行;& N$ v7 j' A1 q% h& o
gpt2_pico.py:与 gpt2.py 相同,但是代码行数更少。( v5 V+ D) [0 \
其中 gpt2.py 需要从头开始实现,因此你要做的是先删除 gpt2.py 并重新创建一个空文件:  s# r$ L3 d8 R+ U$ F% P' ^0 `
. o! G0 u5 z, U$ A0 z
( `  O0 p$ w* N( W2 a  m5 p

+ O! ~+ d$ L1 Z1 G8 b' O9 U然后将下列代码复制到 gpt2.py 中:
4 K* `+ m: y. z% B: [. _' K3 M' \: j6 Q' q7 ]3 E

( U8 |/ i/ d  z) ~: Z/ c% W# N. \" k8 ~
上述代码包含 4 个主要部分:* o% S& y) m) f7 I, d/ p5 z: w7 N
gpt2 函数是本次实现 GPT 的实际代码;
- N& B% A/ b& z. t% }7 cgenerate 函数实现自回归解码算法;: c& \" Y6 s7 s
main 函数;
5 k% a7 s$ @9 f4 m' lfire.Fire ( main ) 将文件转换为 CLI 应用程序,以便最终可以运行代码:python gpt2.py "some prompt here"。2 P: E. y( [9 L
main 函数包含有 encode、hparams、params 参数,执行下列代码:
4 P- P; `2 }: F* x7 n( k5 q6 P, _1 \4 d
) e% u9 _, E0 w5 G  b

* K& p2 V# @( w& y, P5 f设置完成之后,作者开始介绍编码器、超参数、参数的一些细节内容。就拿编码器来说,本文的编码器和 GPT-2 使用的 BPE tokenizer 一样。下面是该编码器编码和解码的一些文本示例:( c* U' a0 u: p" H
3 l- v& I8 D) E3 l, ^% P. k& M

/ U" C% ~& {& a& P+ {) Y7 L5 d  j1 n9 j7 q8 m2 @# e  i# g
实际的 token 长这个样子:! n. ?. W3 d# |8 Q( x  O$ C

5 x% P. A6 {5 \4 S" V. A5 q" I/ i, r1 V/ c4 q$ P+ H

7 m  A! ^5 Z- [8 x# A需要注意,有时 token 是单词(例如 Not),有时它们是单词但前面有一个空格(例如 all, 代表一个空格),有时是单词的一部分(例如 capes 被拆分为 cap 和 es ) ,有时它们是标点符号(例如 .)。& _" l; D& ?& @% u. b) }3 A
BPE 的一个好处是它可以对任意字符串进行编码,如果遇到词汇表中不存在的内容,它会将其分解为它能理解的子字符串:
; M6 H1 i$ ?( M& i' ?& j1 t, G( k# P$ y7 p
3 E" r+ v/ b% Z! y

) f0 k5 \' ^" z+ Q更细节的内容不再赘述。接下来介绍基础神经网络,这一部分就更加基础了,主要包括 GELU、Softmax 函数以及 Layer Normalization 和 Linear。
5 a+ Y) Z) X! B" K" V/ J$ W3 K5 D5 V3 F

' h  i1 n0 ]' J/ K0 D+ o2 X) {! W; O3 M! a
每一小部分都有代码示例,例如在 Linear 部分,作者展示了标准矩阵乘法 + 偏置:& _% Z- X6 l1 j; F. l$ [9 L

3 a' C' F; H3 T4 u
; E& l, b0 K" t$ f0 X! ~: O( g1 @& ^) U- s( b
线性层从一个向量空间投影到另一个向量空间的代码如下:
; K1 g1 m* _4 l# V$ Y) u) \+ f" Q$ Q$ b) ]2 K. B" Z. F& C
. y# ]  \, J! e$ [

3 e! y4 _, h% x2 x7 vGPT 架构
, T. ^# h( z2 V% L, K这部分介绍 GPT 自身架构。- ]% x3 y% O9 O  V" S" V$ I
( O1 k. N4 {" A
4 Y; M4 ?& h/ G  w
9 ?% D) x7 T1 Q: U/ R( N) @0 W4 t
Transformer 架构如下:+ q" }/ U, q4 t) T+ A

5 S$ d9 U% q' }' Q% g+ K! [6 J3 ?. A
5 o& k, x7 b* Y  i# s5 |" `; I& i
Transformer 仅使用解码器堆栈(图的右侧部分):. ?% r1 ]  f  X1 _  Q9 f

8 n9 M7 }; M# Y9 x# e3 m( p7 H
+ \7 ^% V3 w, t  L
# \, u! [. X" A$ I需要注意,由于摆脱了编码器,中间的交叉注意力层也被删除了。/ F  G* a" [0 j5 X! C1 e
在高层次上,GPT 体系架构有以下三个部分:6 U) J+ d+ |  U. E* m
文本 + 位置嵌入;7 r( r8 y0 Z6 C5 x
Transformer 解码器堆栈;
4 w/ U/ \$ \; u/ q; z投影到词汇表。; e- l2 D8 Z5 P/ V( G+ t7 ]
代码就像下面这样:  ?. [/ o& @* F/ v/ I/ W
) X7 z- \9 e; D7 S, V

' N5 }8 T3 ?0 K3 x. G
/ @" h& B. }9 ~& C; J! Y代码部分截图
- R0 |6 e0 r( ^! Z9 {接下来更详细地分解以上三个部分中的每一个部分,这里也不再赘述。
, O7 l, X% e8 r  r: P4 O以上就是作者对 GPT 的实现,接下来就是将它们组合在一起并运行代码,得到 gpt2.py。它的全部内容只有 120 行代码(如果删除注释和空格,则为 60 行)。; x0 H" l" p: G
作者通过以下方式测试结果:& i- q) Z' m/ _* ~7 _+ x
; `+ W1 A( L; x2 I/ \! a

: l) g, t4 T0 K+ |* {+ n: l. B- [1 |5 E2 G1 |) |4 R
输出结果如下:7 M2 f/ V) W: J8 t; x! Z
5 a+ p4 B7 ^( I' r

7 k6 }  C$ p7 t$ i& I8 c
3 T8 z3 _6 ^  g# `6 L' ~1 v- R" |正如作者说的:这次实验成功了。2 n/ U% X& \( o) d4 _  h) i
本文只是跟着作者的思路大概介绍了整体流程,想要了解更多内容的小伙伴,可以参考原文链接。
! n- I% F: g; D7 O2 a- B原文链接:https://jaykmody.com/blog/gpt-from-scratch/#basic-layers
% O3 g" ]" n  E$ i& S. C& V全面学习 ChatGPT,机器之心准备了 89 篇文章合集
$ p: |8 V& s+ B4 C. s这是一份全面、系统且高质量的 ChatGPT 文章合集,我们筛选出来了 89 篇相关文章,设计了阅读框架与学习路径,大家可以根据自己的需求进行浏览与研读。合集内容包括:8 Q$ ~. n& S4 I* Q; m
ChatGPT 及 OpenAI 大事件时间轴2 l; l2 h! B: l+ G
概念 · 真正搞懂 ChatGPT:共 3 篇文章; Q. u5 X: k" J9 |) U
研究 · GPT 家族更迭:共 16 篇文章
. x' e9 `8 C. m八年 · OpenAI 的历史与现在:共 13 篇文章
5 M) J* P, t( `: q4 q$ [2 I. g干货 · GPT 相关研究与技术:共 18 篇文章  Y1 _; V# l& n  ~% l7 A! i
观点 · 专家谈 ChatGPT:共 8 篇文章7 r) e+ K/ }* G
行业 · 应用与探索:共 23 篇文章. W  _  F* c9 ]7 N/ C; s
行业 · 同类产品:共 8 篇文章7 ]9 u: ~8 D+ _- E: m
THE END
1 ?0 @- ^2 |  B. ]: d. g投稿或寻求报道:content@jiqizhixin.com

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

帖子地址: 

梦想之都-俊月星空 优酷自频道欢迎您 http://i.youku.com/zhaojun917
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2026-9-16 21:32 , Processed in 0.039922 second(s), 25 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表