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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1059|回复: 0

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

[复制链接]

1583

主题

693

回帖

6856

积分

论坛元老

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

+ `  I' K/ v5 s9 d+ J/ `0 O
4 N3 K2 `8 c: }6 y& z; v2 X不过要做到这些,你需要熟悉 Python 和 NumPy,还要有一些训练神经网络的基本经验。作者表示,这篇博客旨在对 GPT 进行简单易懂的完整介绍。因此,作者只使用已经训练的模型权重来实现前向传递代码。; O6 L) j. w! H! p; |7 D% T

6 ?1 x( B! W7 b* J! n9 Z
' M4 m3 L2 a) n1 g& w5 C7 x9 \
' I& E5 t* D2 k3 x代码地址:
6 F! W5 Z% d6 }9 qhttps://github.com/jaymody/picoGPT/blob/29e78cc52b58ed2c1c483ffea2eb46ff6bdec785/gpt2_pico.py#L3-L58; R$ |# n/ l  h* O% G2 V
对于此项研究,Andrej Karpathy 给出了四个字:虽迟但到。想当初,Karpathy 构建的 minGPT 和 nanoGPT 还要 300 行代码。
( o  u- N+ o( @1 P% t* ]+ D4 K0 @9 O: K% T) b' p

; {& b2 \, ]5 |3 D" t; U
' a) j7 b3 G1 @5 K5 a3 c值得一提的是,这篇教程不是完全零门槛的。为了让读者明白,作者首先介绍了什么是 GPT、它的输入、输出如何等其他内容,介绍得都非常详细。
6 X" H3 t: _% M, U8 |# o6 O7 O8 _5 F* o7 ?# n# C

& |' N$ D6 a+ S8 B) P' u+ W: M  H- `3 S3 h' t8 G$ a
至于 GPT 到底能干什么,作者给出了几个示例,它能写电子邮件、总结一本书、给你 instagram 标题的想法、向 5 岁的孩子解释黑洞、用 SQL 编写代码等。
) b/ D! j2 _7 }, n% Y7 t3 t通过仔细阅读这部分内容后,你能大致了解 GPT 的一些基础知识。有了这些背景介绍,接下来就是如何设置了。
* H9 K* h/ w, w  q6 A* T. i( E项目介绍
* J$ \: ]; P- {, B% `设置) Q) A( y* l2 U/ w7 ^, [' Q) D' ]
这一章节主要介绍了如何设置编码器、超参数以及参数。2 }$ X3 @4 R" {9 n& A
0 a/ g5 I! e/ n2 F. |- A
, T. S7 x; ]' Y: b( i9 x

$ a& W4 Y0 L& b, G8 d) L你要做的,首先是克隆代码库:
: N: e  J% P/ Y# D6 X: P4 u4 `0 V' J: s( q+ y: y* r5 r( ^
$ W5 O) J- |. k3 V! B6 A
; [2 \+ s, p, a0 z# L
然后安装依赖项:
% S+ Y& R- M# E1 q- f( H% v- q
# z& Y8 q- \1 c. _4 g7 b) V1 }2 t2 }7 N& [5 X; {8 C# o0 {
( K2 \% A* e0 J$ f1 o% a& }8 p
注意,如果你使用的是 M1 Macbook,在运行 pip install 之前,你需要在 requirements.txt 中将 tensorflow 更改为 tensorflow-macos。在这个项目下,文件包括 encoder.py、utils.py、gpt2.py、gpt2_pico.py:( h0 {; k& X% G/ [( O9 b  v# ]+ Z
encoder.py:包含 OpenAI BPE Tokenizer 的代码,直接取自 gpt-2 repo;
- d" w6 [' ^6 |" `$ E- d; {gpt2.py:包含 GPT 模型和生成代码,可以将其作为 python 脚本运行;1 u& X/ t' ]. r) l; W
gpt2_pico.py:与 gpt2.py 相同,但是代码行数更少。
5 M* N1 S6 g5 }0 C( i4 y其中 gpt2.py 需要从头开始实现,因此你要做的是先删除 gpt2.py 并重新创建一个空文件:9 A9 r# m& h1 f3 ]
/ j# }. U. l3 G7 j9 ^
3 k4 W  }0 a# _0 G$ U

# C, M3 e1 N& D$ e; ?然后将下列代码复制到 gpt2.py 中:
- b* |( `% A, G6 r! s
- U% ^" x: ]5 X: h6 b/ q0 {0 h2 I
2 u, e" _1 w. v6 O" z* s% w0 b: x% B; g" s
上述代码包含 4 个主要部分:* X$ [/ I7 N% O+ r
gpt2 函数是本次实现 GPT 的实际代码;
' K' V' K3 j3 x) s$ f% H: fgenerate 函数实现自回归解码算法;$ r" `: B1 T! U; e* n. k5 C
main 函数;
" D. Q* M% V  D7 D% [fire.Fire ( main ) 将文件转换为 CLI 应用程序,以便最终可以运行代码:python gpt2.py "some prompt here"。* G) w5 r- r' R% `, a8 J+ M$ P0 C) `  h
main 函数包含有 encode、hparams、params 参数,执行下列代码:
, t: |4 q# l$ l
/ v$ ^7 w( p) D! A/ F& T
6 p0 j' J' m2 l: x; \' G7 x# @' R, W8 G6 u4 a+ E/ E% X
设置完成之后,作者开始介绍编码器、超参数、参数的一些细节内容。就拿编码器来说,本文的编码器和 GPT-2 使用的 BPE tokenizer 一样。下面是该编码器编码和解码的一些文本示例:: G: s( w" D# c3 K  ~. I. c
/ u  z% ^- u4 Y7 i0 U0 T0 Q

( K9 r1 B9 h: q2 Z
9 Q8 }/ n, y( N& u" n7 _) Q实际的 token 长这个样子:
( A* i. ?: k" x6 [6 v! D$ }
, n; r! X2 x' z* }$ X) g
% s2 C1 K+ O5 y6 F) ~1 o
* C6 a0 s4 z$ L! n# [需要注意,有时 token 是单词(例如 Not),有时它们是单词但前面有一个空格(例如 all, 代表一个空格),有时是单词的一部分(例如 capes 被拆分为 cap 和 es ) ,有时它们是标点符号(例如 .)。
  C& O% a; w+ \9 E* KBPE 的一个好处是它可以对任意字符串进行编码,如果遇到词汇表中不存在的内容,它会将其分解为它能理解的子字符串:
" q& N4 ]2 o$ Q6 E
( o( _7 |1 n" a$ W# I( h: q
" M0 M3 f& I# ^, Q. B; F
2 o8 |4 r+ b* T' O: g. C更细节的内容不再赘述。接下来介绍基础神经网络,这一部分就更加基础了,主要包括 GELU、Softmax 函数以及 Layer Normalization 和 Linear。
$ O9 f2 x. M# |" Y, Q% ~; }: P& n/ E7 i  p( X2 O

# F0 `% l2 C  ^. w
5 j, N$ ^7 y+ G3 [2 J0 ^' F8 j# t每一小部分都有代码示例,例如在 Linear 部分,作者展示了标准矩阵乘法 + 偏置:
4 K- g' A) o& E8 Y
3 e: n7 M5 g$ X) Z# [& W7 J7 |1 N8 s  g, R6 y; o
1 M# W4 u- t9 F# v! X  D$ F
线性层从一个向量空间投影到另一个向量空间的代码如下:! k6 ?8 C: m$ g; [( V# k

5 V* O0 P: S; L/ T* B3 l% [( q/ S2 Y! e6 N% ^

% e, _* ]1 D* PGPT 架构
$ ^7 h% Z7 e! s这部分介绍 GPT 自身架构。
: ~$ ]" z1 o5 X, e! s+ A+ V5 \( `# n8 O4 U3 y; _" o" z
9 G1 @. P" m2 O' H+ M+ D
( k3 H' b8 U2 \- i& `. q% |
Transformer 架构如下:* S, w+ H  X% m) c/ P% O6 _/ S
5 Q8 W3 V" X9 N" k- \0 P
) ?) V0 z) q2 \& i4 h3 A6 j, |+ K
0 Z6 m8 u/ a; C- ]7 R
Transformer 仅使用解码器堆栈(图的右侧部分):3 e8 [3 b2 G- T; t% p

' \  f3 M0 _: B. l
" [0 E% A8 ^% J# d" [( x
5 B. A: C; i/ e, j$ [1 a6 X需要注意,由于摆脱了编码器,中间的交叉注意力层也被删除了。
1 [" L) Q1 K+ ^在高层次上,GPT 体系架构有以下三个部分:+ i9 J  |! H. L) F
文本 + 位置嵌入;8 O/ h7 v2 v2 w
Transformer 解码器堆栈;
1 v4 J+ i+ ?+ x投影到词汇表。' q" I- m5 c$ h$ Z
代码就像下面这样:
0 B$ b5 q. J9 m0 u
/ \3 r0 p+ f( s
/ `. B, \. q0 \: d4 k: k2 L  F6 E! I
代码部分截图- a0 z6 \4 \2 W+ O2 C
接下来更详细地分解以上三个部分中的每一个部分,这里也不再赘述。
: H& P5 e. Z, W4 H以上就是作者对 GPT 的实现,接下来就是将它们组合在一起并运行代码,得到 gpt2.py。它的全部内容只有 120 行代码(如果删除注释和空格,则为 60 行)。: Z2 {& p! K% z0 h
作者通过以下方式测试结果:0 r, z) s8 S3 v- v: e

  p9 Z$ J# ^! T, [1 u
5 d% O+ l2 d% B: A& A& |' F+ L$ N6 y* Q) t! v& R' f
输出结果如下:
9 B' c# p& O6 R2 V- u9 t7 k9 i0 E. X8 w4 [% x7 {0 z$ C
2 f' e( o& l) {) Q. ^$ O' Q

( c+ ^9 @2 G7 m正如作者说的:这次实验成功了。( x& F& H% m7 c4 }
本文只是跟着作者的思路大概介绍了整体流程,想要了解更多内容的小伙伴,可以参考原文链接。
7 j- H0 ?% `8 d$ O. w$ A5 q$ `原文链接:https://jaykmody.com/blog/gpt-from-scratch/#basic-layers  I- \8 N/ p! C+ {6 H: C
全面学习 ChatGPT,机器之心准备了 89 篇文章合集# G* q& f  B( `' y9 l8 c
这是一份全面、系统且高质量的 ChatGPT 文章合集,我们筛选出来了 89 篇相关文章,设计了阅读框架与学习路径,大家可以根据自己的需求进行浏览与研读。合集内容包括:
4 h# K' u& d1 GChatGPT 及 OpenAI 大事件时间轴
# N/ N! G  K. h, `7 d概念 · 真正搞懂 ChatGPT:共 3 篇文章
1 h4 `" s* V) y- b4 n研究 · GPT 家族更迭:共 16 篇文章
" K  U0 ^2 M; `% ^6 t八年 · OpenAI 的历史与现在:共 13 篇文章
  R* _. m" u( h! m* J干货 · GPT 相关研究与技术:共 18 篇文章
& o2 E% v7 |! K9 u" ]观点 · 专家谈 ChatGPT:共 8 篇文章
( |% O8 Q2 K$ D- Y& R: [4 \. n行业 · 应用与探索:共 23 篇文章4 {. }3 ~$ G# x; {$ r7 ?
行业 · 同类产品:共 8 篇文章% y! R" ^$ `/ t+ `
THE END
% ]0 |& ~" d, y$ K- u. w8 n投稿或寻求报道:content@jiqizhixin.com

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-9-16 20:45 , Processed in 0.036575 second(s), 25 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

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