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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 990|回复: 0

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

[复制链接]

1583

主题

693

回帖

6856

积分

论坛元老

积分
6856
发表于 2023-2-27 19:45:26 | 显示全部楼层 |阅读模式 来自 中国
机器之心报道
) E/ I  R: R  d机器之心编辑部
  Z. \4 @1 h, X: ]2 Y6 LGPT 模型实现起来有时也很简单。
5 l6 ?9 p) W) a4 _当前,大型语言模型(LLM)被认为是人工智能突破的方向。人们正在尝试用它们做各种复杂的事情,比如问答、创作、数学推理以及编写代码等。近段时间 ChatGPT 持续的爆火是最好的例证。
& W% A  C  t) v& O然而,对于机器学习从业者来说,大模型的门槛很高:因为体量太大难以训练,很长时间里这个方向一直被大公司垄断。不过最近,简化 GPT 模型的方法越来越多了。1 月中旬,前特斯拉 AI 高级总监 Andrej Karpathy(现已回归 OpenAI)就发布了从零开始构建 GPT 模型的完整教程。不过训练出的 GPT 和 OpenAI 的 GPT-3 比较,两者规模差距达 1 万 - 100 万倍。4 K# @! q  T7 O  ?; I
近日,加拿大麦克马斯特大学的一位软件工程本科生 Jay Mody 在导入 NumPy 库下,仅用 60 行代码就从头实现了一个 GPT 模型,并将其命名为 PicoGPT。不仅如此,他还将经过训练的 GPT-2 模型权重加载到自己的实现中,并生成了一些文本。下面为 60 行代码展示。: ]) u  w* Y$ ?8 t
$ v7 M! ?- b* q$ \  U/ s* T
( C! E: j! w/ y: @
# W+ e# m8 [/ x4 l
不过要做到这些,你需要熟悉 Python 和 NumPy,还要有一些训练神经网络的基本经验。作者表示,这篇博客旨在对 GPT 进行简单易懂的完整介绍。因此,作者只使用已经训练的模型权重来实现前向传递代码。
) R0 E5 G: V0 P
; `0 t/ ~, U/ B( {1 S! D  U- ~8 S; D' r3 W0 x

7 p5 P4 M( j/ _2 c代码地址:+ D; U9 z" q9 ]; B* ]( a
https://github.com/jaymody/picoGPT/blob/29e78cc52b58ed2c1c483ffea2eb46ff6bdec785/gpt2_pico.py#L3-L58
& j, E' h' Z* _' `! \( p& g# `对于此项研究,Andrej Karpathy 给出了四个字:虽迟但到。想当初,Karpathy 构建的 minGPT 和 nanoGPT 还要 300 行代码。, I: |* A; J4 u7 ?% Z) ?/ T

% l  _/ H3 q! @$ i1 N0 l
! F! G$ W7 n- g  {; U
4 |) ~/ H' Y5 u; ]7 P值得一提的是,这篇教程不是完全零门槛的。为了让读者明白,作者首先介绍了什么是 GPT、它的输入、输出如何等其他内容,介绍得都非常详细。
- e+ s& N% A/ A' G+ G
3 E! j, ]' z: I* ]+ w4 x0 {
2 K; t9 n; ~3 A5 }. T5 L! E4 e  d0 t) g, \+ t) S/ v
至于 GPT 到底能干什么,作者给出了几个示例,它能写电子邮件、总结一本书、给你 instagram 标题的想法、向 5 岁的孩子解释黑洞、用 SQL 编写代码等。7 G8 E* s& L5 w) m( m. W5 J
通过仔细阅读这部分内容后,你能大致了解 GPT 的一些基础知识。有了这些背景介绍,接下来就是如何设置了。8 m5 Q. p7 l9 O# z. r$ S7 w. S2 D
项目介绍
9 [7 e( ~2 w9 K9 w5 m! J/ ?5 ~设置& A5 f3 ]" Z+ z( `- u7 V# g, X4 G- O7 i  o
这一章节主要介绍了如何设置编码器、超参数以及参数。
% _$ N3 |0 n9 w; E( s: d# n; w! S8 w% ]
7 h! \/ p4 D/ [: s' M) W
# m8 q: Y/ A* ]5 E4 Q
你要做的,首先是克隆代码库:- c) t! \& s; R4 ~9 i8 W5 A# u
: }4 P0 H9 e8 v0 _; V* `* U
% x+ `6 M. A" b% X* _- k

/ N: F0 Q# f) {+ A% e. L$ l然后安装依赖项:; j4 U, b0 l. d' a

, w- S) O6 M( O% u' T  \, a" ?  P6 q' b0 d2 n

" R6 e; k9 J- [1 g5 K注意,如果你使用的是 M1 Macbook,在运行 pip install 之前,你需要在 requirements.txt 中将 tensorflow 更改为 tensorflow-macos。在这个项目下,文件包括 encoder.py、utils.py、gpt2.py、gpt2_pico.py:" c+ `+ L: |, b9 S. |* x6 q
encoder.py:包含 OpenAI BPE Tokenizer 的代码,直接取自 gpt-2 repo;
$ d, L3 ~  z4 s; z7 x3 J3 n, cgpt2.py:包含 GPT 模型和生成代码,可以将其作为 python 脚本运行;+ d- y* s' ?! J% L/ [- c+ _  g1 ^
gpt2_pico.py:与 gpt2.py 相同,但是代码行数更少。* c4 q& f7 O9 w6 c# t- `* a; ^2 U; G
其中 gpt2.py 需要从头开始实现,因此你要做的是先删除 gpt2.py 并重新创建一个空文件:% O7 K7 L: k- V) I8 h! ?$ {

5 {3 F% h' N( G  V* S/ x  J# n1 j2 x  R1 x" x, Y

0 @* Z+ q# m& a( g: j然后将下列代码复制到 gpt2.py 中:
# L$ y3 S& Q0 P0 K0 c, q5 ^8 U* E' w
3 y; y  }1 _4 U
  ~. s% v7 h. q% [( |7 _4 K# C! F' l
上述代码包含 4 个主要部分:
+ c1 v9 F5 R3 M: O+ `7 O( |' ogpt2 函数是本次实现 GPT 的实际代码;
7 n, Q9 h" g8 a. C% ?generate 函数实现自回归解码算法;$ g2 e: }9 r+ m  M( V
main 函数;
0 l' g6 b- c4 t8 Z3 nfire.Fire ( main ) 将文件转换为 CLI 应用程序,以便最终可以运行代码:python gpt2.py "some prompt here"。0 c! z: J9 k2 }2 D
main 函数包含有 encode、hparams、params 参数,执行下列代码:" v/ W$ R: N8 P4 c- O% M" L
% e5 ?0 o4 u3 S

) e' o! D$ G5 I5 d) M' o8 t% q; I" D/ s4 h2 ?8 y1 P  F5 N; q
设置完成之后,作者开始介绍编码器、超参数、参数的一些细节内容。就拿编码器来说,本文的编码器和 GPT-2 使用的 BPE tokenizer 一样。下面是该编码器编码和解码的一些文本示例:
$ U6 a$ z5 F' M- `4 x6 O) P
& r( W% d) a( X$ f  [. l& x7 v9 b/ Q! q3 o9 |; D
' |& z. ^- W% Q
实际的 token 长这个样子:, w) o# O; {* J3 {

& i, _% u( e$ a+ N! d! ?9 g; N) w6 ]
8 Y4 r- M' h2 M+ l. p; {
需要注意,有时 token 是单词(例如 Not),有时它们是单词但前面有一个空格(例如 all, 代表一个空格),有时是单词的一部分(例如 capes 被拆分为 cap 和 es ) ,有时它们是标点符号(例如 .)。' `  x( T# t% @& f
BPE 的一个好处是它可以对任意字符串进行编码,如果遇到词汇表中不存在的内容,它会将其分解为它能理解的子字符串:+ ?3 n) a6 {" T
9 v' P* m! d: z. Y
, J7 n9 ?- K1 m4 G) m5 |

, {) [7 F9 u+ S5 ~% t& J& W; S5 R更细节的内容不再赘述。接下来介绍基础神经网络,这一部分就更加基础了,主要包括 GELU、Softmax 函数以及 Layer Normalization 和 Linear。, I3 E+ l. V! b/ a+ D

: w# a+ z& R; T9 e6 T  v. d( V3 U( Q* O  J* E7 a

' t8 b! C3 m, x- ^每一小部分都有代码示例,例如在 Linear 部分,作者展示了标准矩阵乘法 + 偏置:
4 O/ z! p: A' b; M; i) X" `3 R3 B; I9 l0 L! S( t6 \3 e
/ a. t$ [/ R4 Z
3 c! t% d' ~5 U0 o+ g- X/ E5 A  q
线性层从一个向量空间投影到另一个向量空间的代码如下:
- c2 l- g3 G- h8 m; y( r2 A8 o$ `% w! R
* _3 m( N. z& g- A* V8 h( D
! m6 e1 B3 W  V1 F
GPT 架构  O% R1 ~& Y; y. V! }" c) j! K' |; S
这部分介绍 GPT 自身架构。' u) K" T  Q  K0 b0 h# V8 j

8 S. u( h8 D; O) W
, W. ^1 q( \2 h2 X7 ^' Y! J8 Y
2 f2 q. O$ t, U( l* ]; g2 oTransformer 架构如下:
; `4 A$ n; w2 q! u
7 N, n5 }, M6 _7 B: F; y: Y. E/ [% u( o+ h
0 q( W, ~: D4 w0 @& ?& p
Transformer 仅使用解码器堆栈(图的右侧部分):
: Q9 x' r( ]6 \. q$ x/ ]' Y% v, a8 |5 M1 @& W3 N  L( z8 Z8 D: q5 C
1 M7 M9 E; ~  q3 j. H& ?' l
( w- u; Z* _, F# C0 |1 d
需要注意,由于摆脱了编码器,中间的交叉注意力层也被删除了。+ K9 Y2 p2 H: k8 Y% c
在高层次上,GPT 体系架构有以下三个部分:
) ]" ~% J' Q$ @; P# y; p' n文本 + 位置嵌入;
' H6 D+ k6 b0 q6 oTransformer 解码器堆栈;
3 s  R( x- O) p6 B投影到词汇表。
0 {) @. I- R, w9 G' ~代码就像下面这样:
/ b6 ]. z  E- B( H- y  K* O% H/ x" P4 i! g# C6 O& h
; t4 ^  [! o8 `# j- J9 u

- ~+ a# s, p; }8 A7 g0 a, j代码部分截图6 L/ j$ d% e$ C' R
接下来更详细地分解以上三个部分中的每一个部分,这里也不再赘述。2 y$ S: s6 z+ o1 y: o2 G
以上就是作者对 GPT 的实现,接下来就是将它们组合在一起并运行代码,得到 gpt2.py。它的全部内容只有 120 行代码(如果删除注释和空格,则为 60 行)。2 ^2 Q# s0 \; a# \
作者通过以下方式测试结果:
3 v% S7 j8 V4 A& O' ~  u! n' ^
: w- \' ]6 ~/ l3 m' U3 k7 R. |2 {! r' `1 ^9 L
7 B7 A* [( s- |5 R. B7 K" N4 M
输出结果如下:) ?6 Y) E* e* U7 V  V

1 @  b' l: U! b, v) t, {
+ Q) o8 |- c9 E0 c* `+ [  u
. ]- V0 d- w( a$ W! D% L正如作者说的:这次实验成功了。
, r% p) y5 c; S# ]本文只是跟着作者的思路大概介绍了整体流程,想要了解更多内容的小伙伴,可以参考原文链接。
* C) t6 j8 l! e; i6 x7 \原文链接:https://jaykmody.com/blog/gpt-from-scratch/#basic-layers- g% F& |5 J5 \. l  e; @
全面学习 ChatGPT,机器之心准备了 89 篇文章合集5 `( E/ ]3 B/ U4 }; |: \
这是一份全面、系统且高质量的 ChatGPT 文章合集,我们筛选出来了 89 篇相关文章,设计了阅读框架与学习路径,大家可以根据自己的需求进行浏览与研读。合集内容包括:
! r" u" z# ?  K* n4 |: FChatGPT 及 OpenAI 大事件时间轴
2 q# V, O8 g* x7 ^. O7 Q概念 · 真正搞懂 ChatGPT:共 3 篇文章/ L- G) D/ B+ K- n6 t; g9 ]
研究 · GPT 家族更迭:共 16 篇文章
5 l$ F3 y3 B6 e- Z. E# G八年 · OpenAI 的历史与现在:共 13 篇文章7 m( w) ~; N4 k8 k3 j6 v- J# y
干货 · GPT 相关研究与技术:共 18 篇文章: u$ s3 `" d/ h# o1 W: H& j& r
观点 · 专家谈 ChatGPT:共 8 篇文章
' l" T# V7 F: q0 L行业 · 应用与探索:共 23 篇文章
# b4 v/ [  _1 e. ~. ^行业 · 同类产品:共 8 篇文章3 _* k, n+ V% |8 u" n9 g
THE END 6 k4 t) j( x) x/ G
投稿或寻求报道:content@jiqizhixin.com

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-20 02:51 , Processed in 0.039194 second(s), 24 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

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