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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1021|回复: 0

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

[复制链接]

1583

主题

693

回帖

6856

积分

论坛元老

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

) i, c0 M: X1 Z9 q/ c" k6 P  Q7 Y. j0 ^1 o
代码地址:
2 P( X5 B. V6 _* F' ?7 x9 p3 bhttps://github.com/jaymody/picoGPT/blob/29e78cc52b58ed2c1c483ffea2eb46ff6bdec785/gpt2_pico.py#L3-L581 d- o" b5 k8 H0 @/ s* V
对于此项研究,Andrej Karpathy 给出了四个字:虽迟但到。想当初,Karpathy 构建的 minGPT 和 nanoGPT 还要 300 行代码。$ P2 l/ ?- g; ]# z" Y& w
6 l8 ?4 a  {! [
& t( R' f5 \; y7 {( T$ x2 V9 r

8 p1 m- _. W! c& E9 R2 c, r3 I值得一提的是,这篇教程不是完全零门槛的。为了让读者明白,作者首先介绍了什么是 GPT、它的输入、输出如何等其他内容,介绍得都非常详细。2 a% O- G: Q3 W+ z* Z7 o! [
/ m5 p7 }- }: s

( j- Q3 E% ^2 i$ [' _# ^' E  w/ {2 y8 d( ?; Z$ O3 U' Q- d4 y
至于 GPT 到底能干什么,作者给出了几个示例,它能写电子邮件、总结一本书、给你 instagram 标题的想法、向 5 岁的孩子解释黑洞、用 SQL 编写代码等。- a$ `$ M! E0 A5 j) ?
通过仔细阅读这部分内容后,你能大致了解 GPT 的一些基础知识。有了这些背景介绍,接下来就是如何设置了。
! R# Q0 Q0 n- g! H& l项目介绍( w# h+ ]3 r3 b2 s9 W
设置
! g( Y7 R8 M, Q! m* N这一章节主要介绍了如何设置编码器、超参数以及参数。
8 D2 M9 p) }% R, C3 S2 ^( Q0 Q( C" D# k/ M. z

0 I3 l" U  F% }! u( k1 e; N% ~( Y& Z8 g' ^$ c6 ]
你要做的,首先是克隆代码库:* X, v4 E' Z9 @% ?/ k0 @' s

7 c% h# x" L4 m8 Z: N
) M2 \# ~0 Z: A: ]8 L2 ]6 F0 \+ d1 L$ S0 `
然后安装依赖项:( J' H7 k% K& j; P  r: ^
9 v5 G4 o: ]7 K: N; p& `/ p! \
# Y  k5 c: W7 [$ m) {! \& O
; J$ S% \9 n* _4 D, y/ l
注意,如果你使用的是 M1 Macbook,在运行 pip install 之前,你需要在 requirements.txt 中将 tensorflow 更改为 tensorflow-macos。在这个项目下,文件包括 encoder.py、utils.py、gpt2.py、gpt2_pico.py:
! r* L4 [/ ~2 N" }encoder.py:包含 OpenAI BPE Tokenizer 的代码,直接取自 gpt-2 repo;
' ?/ R% {) w# d  E0 p& Z% Wgpt2.py:包含 GPT 模型和生成代码,可以将其作为 python 脚本运行;( [4 ?  d. ^" a+ A6 A8 f
gpt2_pico.py:与 gpt2.py 相同,但是代码行数更少。% a# w  a4 U+ W1 Y9 i9 `  ^( \" v: W+ S
其中 gpt2.py 需要从头开始实现,因此你要做的是先删除 gpt2.py 并重新创建一个空文件:
1 I, K% c) G' A, z  s, N% V, Y. j
/ z, b: y3 Q, T: K4 z6 U  [$ u: H
' W# F2 s1 U( p
; E& t: d$ K3 m' _- B然后将下列代码复制到 gpt2.py 中:
8 v4 h' K  O% R* }8 M- S9 n5 S5 `  w- R- m# R  L- H* v' v( M
2 c% ?  y8 I$ {1 J' e* x# t( j
$ E6 _3 z/ m& |* M# e+ [: D+ E. e
上述代码包含 4 个主要部分:
7 F4 G! X, g/ f/ a+ Bgpt2 函数是本次实现 GPT 的实际代码;( f6 H7 g& T8 [, Y) n1 q
generate 函数实现自回归解码算法;1 u4 m; j8 h8 [, g
main 函数;3 F; p7 {, n* [
fire.Fire ( main ) 将文件转换为 CLI 应用程序,以便最终可以运行代码:python gpt2.py "some prompt here"。
* w; p. v% l# xmain 函数包含有 encode、hparams、params 参数,执行下列代码:
1 Z' n2 T  u7 D6 z, p; S3 Q  _: K! {+ F+ D2 |; Q2 H
1 o2 e1 ?3 P- V
& `+ T  L$ i1 f& Q. ^7 c" @1 o
设置完成之后,作者开始介绍编码器、超参数、参数的一些细节内容。就拿编码器来说,本文的编码器和 GPT-2 使用的 BPE tokenizer 一样。下面是该编码器编码和解码的一些文本示例:
: }: x, H) v' {+ H2 _
; D% ^+ r6 u0 ~7 M$ i+ V' {% C8 D+ }. n- Y

) k- u: Z1 O4 c* T实际的 token 长这个样子:
: F" Z/ f6 a; V+ Y. ?9 J/ c, w/ Q" y5 ~0 \7 i1 m$ r/ z/ E
: L, h! Q3 w! {( e, e

+ W. a# W# p6 a% E- {0 J需要注意,有时 token 是单词(例如 Not),有时它们是单词但前面有一个空格(例如 all, 代表一个空格),有时是单词的一部分(例如 capes 被拆分为 cap 和 es ) ,有时它们是标点符号(例如 .)。  k7 M, p! v# O( e6 L' I( k/ M  o
BPE 的一个好处是它可以对任意字符串进行编码,如果遇到词汇表中不存在的内容,它会将其分解为它能理解的子字符串:  Z% q/ P& Q  `9 i1 N+ c
. q( Y, a  H7 D/ t! {+ q* C' Y' a
0 q8 D( o- F# s6 E7 G5 G
- _! T9 s" \: r' F/ C$ y
更细节的内容不再赘述。接下来介绍基础神经网络,这一部分就更加基础了,主要包括 GELU、Softmax 函数以及 Layer Normalization 和 Linear。
! k# r9 U! i- ]/ {% w/ a7 o' J: |, I+ u2 r" o( T1 O8 v
# O3 N& ^/ Y, c+ s, c" p
( o$ z5 r, r* Q
每一小部分都有代码示例,例如在 Linear 部分,作者展示了标准矩阵乘法 + 偏置:' z+ \0 l$ j* B8 p

0 j7 E$ U+ c" q, z, Y9 w/ A9 q  T+ n0 o$ L2 Q8 \$ y

; G3 \- c, H5 `+ Y线性层从一个向量空间投影到另一个向量空间的代码如下:! B1 @8 ^5 \! b: I" d+ s+ I
0 x  E" C6 I6 B$ V; i$ x. E
' y3 q3 p' ~- ?7 J7 L

; z3 {9 f/ X+ e/ |: @# B; `GPT 架构
5 |, S1 L. [. M# L6 ?; ~这部分介绍 GPT 自身架构。9 F5 s/ h$ b- G/ k2 J; |

# a# T& f$ I) c" w( c0 U
& l$ K0 r0 s- }3 i4 \/ `% t) `$ n) B4 A& f: @
Transformer 架构如下:
8 h# E# I* c7 @7 Q7 c; V' D/ T9 n6 p3 \1 M2 j" G$ m5 [
* B, k, K! Z6 Q4 u* ?
5 {/ M, p7 H8 I  u0 r: V! E) ]
Transformer 仅使用解码器堆栈(图的右侧部分):, y; A, ]! U* B+ o' t

$ D" p# |4 A9 N2 O" F& ^: B3 M+ k( e% g& M
1 f* \- P' M) E$ s
需要注意,由于摆脱了编码器,中间的交叉注意力层也被删除了。* Q% E. d  s# S
在高层次上,GPT 体系架构有以下三个部分:8 @4 Z( l$ @1 x7 }
文本 + 位置嵌入;
" \+ J; v/ |( a0 lTransformer 解码器堆栈;$ f; I* p: Z% q, B( O  ~, N* q8 @
投影到词汇表。
) ]/ f; W5 s% J: I代码就像下面这样:
5 t* X" |) S; C5 @$ |1 r# v$ ?5 K' g9 _. D- Q

- x1 `9 B$ V* `* `, R5 T' s# ?' }- ~$ ~8 K* p5 w! v$ n
代码部分截图
. D& d8 `6 n% u8 y: Z接下来更详细地分解以上三个部分中的每一个部分,这里也不再赘述。
) F% o! b9 J* {$ l以上就是作者对 GPT 的实现,接下来就是将它们组合在一起并运行代码,得到 gpt2.py。它的全部内容只有 120 行代码(如果删除注释和空格,则为 60 行)。1 k& ?# @" `% t: l8 p, _
作者通过以下方式测试结果:+ X, i7 s; Z1 @8 ^0 }7 [$ ]

2 ~, i/ B4 _6 `! z. C+ X) `+ e$ s# q2 q2 l  `7 L
. `) H7 l& i7 I1 D4 w6 X
输出结果如下:
2 G2 P0 E: `" u7 s) \
3 W' o# o  F/ |4 R, _
, k, o5 o, U' ~( j1 ~
& {* V; p/ x' \3 I) d正如作者说的:这次实验成功了。* z0 g" X' `+ l! m
本文只是跟着作者的思路大概介绍了整体流程,想要了解更多内容的小伙伴,可以参考原文链接。1 e0 X' ^) n) f5 U' Q0 w' J
原文链接:https://jaykmody.com/blog/gpt-from-scratch/#basic-layers( ~" o- d2 \: w' T! x! j' p1 C
全面学习 ChatGPT,机器之心准备了 89 篇文章合集
* d6 Y  C( H$ Y! ^: h这是一份全面、系统且高质量的 ChatGPT 文章合集,我们筛选出来了 89 篇相关文章,设计了阅读框架与学习路径,大家可以根据自己的需求进行浏览与研读。合集内容包括:) }# g7 P6 x* `% i8 s
ChatGPT 及 OpenAI 大事件时间轴
) b7 Q; q: l0 Z7 E6 }0 P概念 · 真正搞懂 ChatGPT:共 3 篇文章
4 Y% d9 z. Q4 n, s  d! k7 r研究 · GPT 家族更迭:共 16 篇文章
2 {8 \- w( Z: i+ F$ i$ `, K八年 · OpenAI 的历史与现在:共 13 篇文章, K; m" a4 C4 O4 ^2 ]5 o; V9 N
干货 · GPT 相关研究与技术:共 18 篇文章
" [' X% f" a/ K8 @1 Y观点 · 专家谈 ChatGPT:共 8 篇文章! [1 l4 M, I/ p9 E$ b! ^7 Q% q. b$ E
行业 · 应用与探索:共 23 篇文章
" l& v7 T$ I9 s  _; s5 f# l行业 · 同类产品:共 8 篇文章/ h  w' x. }. C7 s, b. W. E! T& {2 a. Y
THE END
: q1 A7 ]) L) g8 ]! u投稿或寻求报道:content@jiqizhixin.com

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-22 01:49 , Processed in 0.046400 second(s), 23 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

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