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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 988|回复: 0

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

[复制链接]

1583

主题

693

回帖

6856

积分

论坛元老

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

4 D4 i$ `0 c  q6 Y( A  t; M
) [5 ?. e- d  D8 @6 m2 b& [; n: T% o3 R# v
不过要做到这些,你需要熟悉 Python 和 NumPy,还要有一些训练神经网络的基本经验。作者表示,这篇博客旨在对 GPT 进行简单易懂的完整介绍。因此,作者只使用已经训练的模型权重来实现前向传递代码。# ]" y2 Y' l9 e+ j
& P: p- x. {6 N- h/ D5 c
& V) \. R$ R' A0 }6 w% R
0 P2 O' f  k* P
代码地址:9 C" N4 h+ r; D0 x! p
https://github.com/jaymody/picoGPT/blob/29e78cc52b58ed2c1c483ffea2eb46ff6bdec785/gpt2_pico.py#L3-L58$ |$ K7 r# s5 F- q% m, @+ l, {
对于此项研究,Andrej Karpathy 给出了四个字:虽迟但到。想当初,Karpathy 构建的 minGPT 和 nanoGPT 还要 300 行代码。: \1 }4 ]+ V/ v7 b7 O  S9 c, K

$ t% S( r, |: w* r3 P  a4 j4 V! K) ~
7 T0 d5 ^  z7 ~7 f5 G
值得一提的是,这篇教程不是完全零门槛的。为了让读者明白,作者首先介绍了什么是 GPT、它的输入、输出如何等其他内容,介绍得都非常详细。
1 w/ E; Y5 c6 `$ w0 Z  g+ N$ g' e  J
& t3 O9 o9 x$ z; M  a$ F9 o# w8 S' x6 L' |0 x( ^' ]

1 L7 d, @3 v! t6 O( D1 G' D至于 GPT 到底能干什么,作者给出了几个示例,它能写电子邮件、总结一本书、给你 instagram 标题的想法、向 5 岁的孩子解释黑洞、用 SQL 编写代码等。: S( w6 F8 l: v; W
通过仔细阅读这部分内容后,你能大致了解 GPT 的一些基础知识。有了这些背景介绍,接下来就是如何设置了。. l# a- [) I- m: W% T$ M" w  q4 |
项目介绍
6 G7 N' b% W# j  A' d! @& p6 ^2 }设置8 O% ~6 T! U- R! B  c2 w; q% G
这一章节主要介绍了如何设置编码器、超参数以及参数。, v" M  J& f+ ?7 [$ Y2 q: o
1 o+ d% j+ O! H0 E. a, q$ r8 n

0 q  h* I8 F) s9 m' d7 p6 A
% A! w* n5 u" K3 U" b( f! O你要做的,首先是克隆代码库:
3 u+ S* n& I! b, E& Q7 h0 e/ [4 y5 a- x+ s
7 a+ @: Q" a6 O! b) D* X* L
+ l5 A, t6 a" f) S, ]
然后安装依赖项:
. {+ ]0 m3 K, B0 Y! x5 e3 t- e+ v" U7 Y; `
# M0 H( _" T# e5 `
2 @1 J+ u2 Y8 e2 F5 d  ?
注意,如果你使用的是 M1 Macbook,在运行 pip install 之前,你需要在 requirements.txt 中将 tensorflow 更改为 tensorflow-macos。在这个项目下,文件包括 encoder.py、utils.py、gpt2.py、gpt2_pico.py:
( h: X, @8 H/ L9 C7 H6 v- s( m/ bencoder.py:包含 OpenAI BPE Tokenizer 的代码,直接取自 gpt-2 repo;
9 O6 v$ W0 P) K  U1 A9 O; G3 y* Ngpt2.py:包含 GPT 模型和生成代码,可以将其作为 python 脚本运行;$ v$ [+ R* {, ?/ Q- j
gpt2_pico.py:与 gpt2.py 相同,但是代码行数更少。* S# Q' d8 ?1 f
其中 gpt2.py 需要从头开始实现,因此你要做的是先删除 gpt2.py 并重新创建一个空文件:
6 E0 o: R& h+ [- w% u/ J, F7 x  f$ {9 G8 Y. g8 T

# j0 y2 F# C8 s# d% p# U" p3 [+ E9 u: _2 c* k# o4 G5 \  V) e
然后将下列代码复制到 gpt2.py 中:1 G( P6 g2 G( \, y6 G
% p, j  S5 _9 c( j; f

1 c0 E  w' ~2 A- u) w: p, |8 B9 H1 H; _, S9 u3 V: }
上述代码包含 4 个主要部分:
9 I$ q6 k: j, `0 Pgpt2 函数是本次实现 GPT 的实际代码;6 R9 V! G! N3 b' Z# o! K( [
generate 函数实现自回归解码算法;
# \) h3 y5 Z5 e0 u/ Ymain 函数;' w: \# ^( X" Y, O. Y9 R
fire.Fire ( main ) 将文件转换为 CLI 应用程序,以便最终可以运行代码:python gpt2.py "some prompt here"。
2 e2 H2 g) @' T8 ^4 d  wmain 函数包含有 encode、hparams、params 参数,执行下列代码:0 @) Y, u  I% j* E* M
+ F$ b3 K( \$ c+ ^: x, O/ U7 t2 g! U

3 J/ U! M7 O* U# J6 B  d; i
# ?( D/ I6 i" C# |# }$ ^: o设置完成之后,作者开始介绍编码器、超参数、参数的一些细节内容。就拿编码器来说,本文的编码器和 GPT-2 使用的 BPE tokenizer 一样。下面是该编码器编码和解码的一些文本示例:
1 N; ~2 h/ m- G8 O, z- ?8 R  X  L& b7 ~$ n( n
/ F! |3 w1 Q; {9 H7 C
, C( ?- ^% V1 e! e9 e. `3 P$ J2 O  \
实际的 token 长这个样子:
2 t7 t. v$ o" ?" G2 G7 L0 m" K# W7 z7 w( h0 {) y+ g7 t4 s
8 t$ T- f% V% I" \- _; `, \
7 z, d& p. b8 Y; [
需要注意,有时 token 是单词(例如 Not),有时它们是单词但前面有一个空格(例如 all, 代表一个空格),有时是单词的一部分(例如 capes 被拆分为 cap 和 es ) ,有时它们是标点符号(例如 .)。1 h; w6 c9 G! I) I2 D2 ^1 [  H
BPE 的一个好处是它可以对任意字符串进行编码,如果遇到词汇表中不存在的内容,它会将其分解为它能理解的子字符串:
+ G+ k- X# J! z! P4 z. [- E  W6 A* C% z% {2 L+ F9 h3 |. i& W
6 [4 ?- y2 w% j- F  Y

3 f' r# m' Y- W& i* W# Q, |! y更细节的内容不再赘述。接下来介绍基础神经网络,这一部分就更加基础了,主要包括 GELU、Softmax 函数以及 Layer Normalization 和 Linear。
/ o% o" Q0 z# b8 L  b/ m) |7 d' Y8 {, \# o5 F
# P3 E1 C* S5 O2 [

0 q8 Y% P1 N: [9 A! u每一小部分都有代码示例,例如在 Linear 部分,作者展示了标准矩阵乘法 + 偏置:; o" x/ E2 t/ y7 U' M' D$ z$ s

" h5 Z* ?5 T9 T$ ?
/ H' N3 E  ]# Q3 L% |& n/ R6 `- G# f* e
7 \) W$ U/ ^! B+ ]3 m, \9 g线性层从一个向量空间投影到另一个向量空间的代码如下:+ A( O) e/ S/ {

0 U$ l5 K$ A, L7 M& g2 Z: k  P1 Z6 p: n8 H

1 f. T& R  X+ Z1 X# {6 ?GPT 架构
& V8 X5 U& v. i" d% P, q6 p4 }; c/ `这部分介绍 GPT 自身架构。
$ I% X" w- U+ X# J2 |: i/ ^) k, A8 g! L. n% D) N' I: h7 b% n5 m! |

+ I7 |* R: p$ j6 e. s; S5 B8 C# j1 f6 t
Transformer 架构如下:6 s* y' |- d, r& s. E; }/ E5 l" d/ p- ~
7 A/ Z9 z' n4 m) V
* ?4 x+ ~4 p$ T* X5 [  u. P

( z, q: S% Q- c; VTransformer 仅使用解码器堆栈(图的右侧部分):) {1 W1 F& s# L! B* i% s# d& F
3 [" W+ X) m5 i1 x3 h

" ?4 A8 [" u) v% E1 b" E- `5 [( d! F+ m
需要注意,由于摆脱了编码器,中间的交叉注意力层也被删除了。
2 @! Q9 R6 T# V1 E3 [+ v4 J在高层次上,GPT 体系架构有以下三个部分:8 B% k9 Q& P% u  S  i1 ^5 `8 @+ g
文本 + 位置嵌入;. l( S) k2 @  y- x" d0 j! ~: v. S
Transformer 解码器堆栈;( ]  ?# |, D! `$ f& S
投影到词汇表。
& M( q2 m6 L( Q9 ]  p7 m  U" V代码就像下面这样:
# _4 h$ y5 H  \% `  p- A1 R* a
' Y% L% t  Y. n  d
9 Q" {7 C( q, [
+ r, x( H# R0 p1 e! X( c5 D" e代码部分截图
( O- c3 g2 ^9 ?$ o接下来更详细地分解以上三个部分中的每一个部分,这里也不再赘述。
$ p+ M1 Z5 @0 x. d9 ]  K以上就是作者对 GPT 的实现,接下来就是将它们组合在一起并运行代码,得到 gpt2.py。它的全部内容只有 120 行代码(如果删除注释和空格,则为 60 行)。
# t, [( u* q$ i$ _2 }* @$ F作者通过以下方式测试结果:$ ]. ~5 A$ j, }
5 |$ t' m. C* |" |

* l' G7 s, Z, w! g) x
7 P& m4 Y0 C/ H; I- C0 o输出结果如下:
* C) }- j6 p4 c1 [  K- v- _" a3 n3 f

0 }2 W: g5 e  v. {$ _' R2 l
6 |0 [2 ~4 n1 N( W2 n: d正如作者说的:这次实验成功了。
6 i, n8 U( k% ]4 r+ r本文只是跟着作者的思路大概介绍了整体流程,想要了解更多内容的小伙伴,可以参考原文链接。% g0 r- x; {+ b4 [
原文链接:https://jaykmody.com/blog/gpt-from-scratch/#basic-layers
2 h5 C& U, M+ p8 K; R全面学习 ChatGPT,机器之心准备了 89 篇文章合集
# i, X) t/ X/ `- f; T; m# Q这是一份全面、系统且高质量的 ChatGPT 文章合集,我们筛选出来了 89 篇相关文章,设计了阅读框架与学习路径,大家可以根据自己的需求进行浏览与研读。合集内容包括:
# m9 V7 s4 Q0 N5 a9 lChatGPT 及 OpenAI 大事件时间轴
3 d# K: m  _# i" y) j概念 · 真正搞懂 ChatGPT:共 3 篇文章+ Q, c9 P1 h" w; {
研究 · GPT 家族更迭:共 16 篇文章
0 A1 N) h% l9 }' i/ ]八年 · OpenAI 的历史与现在:共 13 篇文章
; f3 ~2 f4 O& D3 M# ]干货 · GPT 相关研究与技术:共 18 篇文章2 J+ a5 }' C: O  l3 l
观点 · 专家谈 ChatGPT:共 8 篇文章; F) ^' k4 F) v2 b8 ?
行业 · 应用与探索:共 23 篇文章
; g7 i8 Y4 I9 Z行业 · 同类产品:共 8 篇文章: G$ |7 P4 h6 m! q6 E- z3 T/ g
THE END
; A; v$ K) Y+ T投稿或寻求报道:content@jiqizhixin.com

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-20 01:15 , Processed in 0.036693 second(s), 24 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

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