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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1065|回复: 0

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

[复制链接]

1583

主题

693

回帖

6856

积分

论坛元老

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

4 b. w& X; D/ q
: b  E) |2 Y/ a# i. b- v7 U' D5 N# b9 Q" z
不过要做到这些,你需要熟悉 Python 和 NumPy,还要有一些训练神经网络的基本经验。作者表示,这篇博客旨在对 GPT 进行简单易懂的完整介绍。因此,作者只使用已经训练的模型权重来实现前向传递代码。3 S0 B4 ~3 n# h4 y7 ?: a" |8 q" [
. H, H/ @: c3 w. I' c

) ?% i5 F- w9 O6 \- @2 q) C# S/ A( A( \
代码地址:
4 i; g. e# ?* ]- D' W3 z9 X8 ahttps://github.com/jaymody/picoGPT/blob/29e78cc52b58ed2c1c483ffea2eb46ff6bdec785/gpt2_pico.py#L3-L58
3 O) P* X7 t& D. _5 a对于此项研究,Andrej Karpathy 给出了四个字:虽迟但到。想当初,Karpathy 构建的 minGPT 和 nanoGPT 还要 300 行代码。6 N8 t( q  q! p' i

# `9 X+ E. R: [) @! t, b" \+ Y1 u3 L4 v% r* y9 N: t
- ^; S" v: a: Y( J! k5 U# v$ |, f
值得一提的是,这篇教程不是完全零门槛的。为了让读者明白,作者首先介绍了什么是 GPT、它的输入、输出如何等其他内容,介绍得都非常详细。
4 f3 g; G' B1 w$ @, Z% i9 F
2 q5 D+ h1 |6 x
3 _2 r; {5 L- T" ?
' ~1 j2 }- P" L! A至于 GPT 到底能干什么,作者给出了几个示例,它能写电子邮件、总结一本书、给你 instagram 标题的想法、向 5 岁的孩子解释黑洞、用 SQL 编写代码等。
7 O) F) r& P) A4 s: K/ F4 O+ l通过仔细阅读这部分内容后,你能大致了解 GPT 的一些基础知识。有了这些背景介绍,接下来就是如何设置了。$ J& {1 f9 n: y8 t# z7 o% k
项目介绍8 C4 o9 C/ Y8 ~+ Z; b2 y8 d4 [
设置! ]9 f" {4 N4 _  b2 ^9 E2 y
这一章节主要介绍了如何设置编码器、超参数以及参数。' Z' x* ]  Y* y1 h: W

" y1 j  j' `$ U$ D% v. O. j. H
* Z, l3 T8 z; g% ]# h  {8 [# b
你要做的,首先是克隆代码库:
- {$ l/ V( s1 j$ @3 y) s' a& r
; i/ a. Y$ k" T0 a# _4 P, Y1 I* k8 F/ B( s8 `4 a" E! F

; f+ |2 d& ~) N. N: i然后安装依赖项:
8 Z6 N% v( |8 R0 L
. t- {+ t* O/ X$ ^- q& K6 o' ?" C* |1 r9 m- Q' W7 Z8 l

  v$ l% M& N( h' M7 r6 f9 w6 G注意,如果你使用的是 M1 Macbook,在运行 pip install 之前,你需要在 requirements.txt 中将 tensorflow 更改为 tensorflow-macos。在这个项目下,文件包括 encoder.py、utils.py、gpt2.py、gpt2_pico.py:0 [* a3 p3 b/ X
encoder.py:包含 OpenAI BPE Tokenizer 的代码,直接取自 gpt-2 repo;
; x: z2 k* \% X- I' G8 x9 ygpt2.py:包含 GPT 模型和生成代码,可以将其作为 python 脚本运行;% h: n; B  I4 ]  K- [0 i
gpt2_pico.py:与 gpt2.py 相同,但是代码行数更少。
, E+ c* t3 [( t7 C' x* M2 p5 Y. }# t其中 gpt2.py 需要从头开始实现,因此你要做的是先删除 gpt2.py 并重新创建一个空文件:
! l; S5 K- w" R* Z
; k* g# h2 c0 S/ O/ C
! q/ `" J  K: u8 j
( {# h; G* |8 y" U% x  f+ M然后将下列代码复制到 gpt2.py 中:
: y* X# E4 p: z0 X* a8 ]2 D2 B
9 Q! o% O' X1 d' h0 U! \5 F
: ]: C$ M$ I2 m1 d, f" N( ^* `' @
上述代码包含 4 个主要部分:* Q) e; g0 Y* c- j  Q; x5 o
gpt2 函数是本次实现 GPT 的实际代码;& D( Q# j+ k) i$ p, n, J
generate 函数实现自回归解码算法;
: R3 ]3 o9 K  |; _0 Pmain 函数;
# o5 Q- i  `- Cfire.Fire ( main ) 将文件转换为 CLI 应用程序,以便最终可以运行代码:python gpt2.py "some prompt here"。
8 _4 D& K: E. D6 dmain 函数包含有 encode、hparams、params 参数,执行下列代码:
+ r3 Y- {. u" ^
8 t6 K+ ]; O) c8 I0 u5 |6 }( {) c) @+ ^& V: F
/ l' [  m# W+ G: @% u
设置完成之后,作者开始介绍编码器、超参数、参数的一些细节内容。就拿编码器来说,本文的编码器和 GPT-2 使用的 BPE tokenizer 一样。下面是该编码器编码和解码的一些文本示例:( C3 P: c6 }; f8 G+ V) @9 p
- o3 H) j* O- v$ m4 w
0 \  t3 O4 x! H# [. c

( ]1 R, c6 |5 P' L# i实际的 token 长这个样子:
  n: ~0 \: @3 Y4 ]5 A4 X* B( q- {( `
: E1 c( O4 {  z' p0 G
1 a0 W# E4 O# y8 p6 a# q6 H
# Q5 r  G5 l, R  \4 m需要注意,有时 token 是单词(例如 Not),有时它们是单词但前面有一个空格(例如 all, 代表一个空格),有时是单词的一部分(例如 capes 被拆分为 cap 和 es ) ,有时它们是标点符号(例如 .)。# v/ U' ~# R" ^6 ], w7 |* K
BPE 的一个好处是它可以对任意字符串进行编码,如果遇到词汇表中不存在的内容,它会将其分解为它能理解的子字符串:
* Q( O: u7 U7 V4 X+ l9 `/ A! P9 U

4 T( u. r2 j  Y
7 g8 S. H2 [/ Y1 I更细节的内容不再赘述。接下来介绍基础神经网络,这一部分就更加基础了,主要包括 GELU、Softmax 函数以及 Layer Normalization 和 Linear。% l% K- z; J- f! m) c% l7 J2 J0 f

: j- f2 y0 e% [$ C& N  z" [* i0 m
4 |# P/ b8 {# n/ f( _# a* e) m$ N; K/ ~, K% T
每一小部分都有代码示例,例如在 Linear 部分,作者展示了标准矩阵乘法 + 偏置:
$ D& w4 W' H) d5 J9 H: D8 _7 U* \
# s$ V* t. v1 X1 H* H7 ?) L' a
2 W& I- D# O8 r6 N! u
2 J* S$ O& {+ x2 a3 I. `! r线性层从一个向量空间投影到另一个向量空间的代码如下:- J; L$ w4 m  v: B! v( k
( p8 [8 b# Q4 t/ E) B4 q6 b
! d* }% ~; M; d( c/ W

4 m% W6 y+ }/ mGPT 架构
) u# o; F! h6 v* r+ o- `这部分介绍 GPT 自身架构。
0 H7 h) M* P( W  A2 m  g7 g* G, H" D( ]1 x% J* b. A
6 N- {* Z. ~7 e/ }4 ?$ P+ b

8 j* T  ?9 ^1 M+ T9 RTransformer 架构如下:
8 |* O6 [9 }! t7 q" c
  Z9 ?" ~: H3 }4 P# N, {" E8 o' I5 f) v8 o% V

+ }% _! U0 ^) J( s7 O" lTransformer 仅使用解码器堆栈(图的右侧部分):
) g1 s& Q) E! W# r7 p2 M
7 W% l) j: I3 e- U; P: s  F, g4 k& d8 l8 |* p

, n' P1 P& z1 W1 `* m9 V" s需要注意,由于摆脱了编码器,中间的交叉注意力层也被删除了。
8 n/ B2 J& T- K: T* }1 P7 t在高层次上,GPT 体系架构有以下三个部分:
; ^3 T6 L& ^( o9 b$ B( ]5 s- u' e文本 + 位置嵌入;, J$ M) t4 G# S' n; n! A
Transformer 解码器堆栈;: V9 h2 t. N/ N2 l
投影到词汇表。* P3 e" _0 u7 R2 @
代码就像下面这样:8 J$ j- E5 L) w  e1 |& j# N- I. J

8 _# h* I0 N! f1 y+ o* u
4 B$ `' e" W$ A( s0 N4 Q
" v% l  P; S% R% O$ x代码部分截图5 }  ]& [3 e0 U( Y; r, W6 L2 t: L. N
接下来更详细地分解以上三个部分中的每一个部分,这里也不再赘述。
' c. {. h. A3 t$ J) p' @以上就是作者对 GPT 的实现,接下来就是将它们组合在一起并运行代码,得到 gpt2.py。它的全部内容只有 120 行代码(如果删除注释和空格,则为 60 行)。
* x$ h/ y( a, ~# V作者通过以下方式测试结果:  y& {5 s/ B! ?+ o6 v, \: }" @# u
" W; \1 B' P+ _/ v4 o

3 C: w  u+ m2 `, w( Y- R- S5 o9 V2 |* [- U1 f# ^+ n1 K1 ~
输出结果如下:
+ d5 h, ]( K# Y: r) _  b. @3 l8 N) P0 _+ f9 ^
- X! ^$ S: l5 c4 y- |8 t# \! l3 S

5 M: z! {& e$ @正如作者说的:这次实验成功了。
( a6 `* S" J% [- ~& m% z; a! a( P, N本文只是跟着作者的思路大概介绍了整体流程,想要了解更多内容的小伙伴,可以参考原文链接。( S, s8 {* |% B; k9 X* U+ @3 }
原文链接:https://jaykmody.com/blog/gpt-from-scratch/#basic-layers# h9 J6 d% b6 d1 B0 J
全面学习 ChatGPT,机器之心准备了 89 篇文章合集
0 i, i' G. k; F# t' N; ^& v& [8 i( a这是一份全面、系统且高质量的 ChatGPT 文章合集,我们筛选出来了 89 篇相关文章,设计了阅读框架与学习路径,大家可以根据自己的需求进行浏览与研读。合集内容包括:
$ M6 o# ^! x0 }) c. XChatGPT 及 OpenAI 大事件时间轴
" z$ K. k6 X9 k  x( s) k概念 · 真正搞懂 ChatGPT:共 3 篇文章1 w3 u1 J$ f3 C, U+ n* Y5 z
研究 · GPT 家族更迭:共 16 篇文章
" h3 L: N+ P1 @八年 · OpenAI 的历史与现在:共 13 篇文章
* z; l  p# V+ [+ G干货 · GPT 相关研究与技术:共 18 篇文章
  h# n, D5 i& r7 M观点 · 专家谈 ChatGPT:共 8 篇文章
9 k' P7 V. }) h) A+ t, a行业 · 应用与探索:共 23 篇文章6 P/ y$ x: H1 |( T5 a& D& g2 m5 W
行业 · 同类产品:共 8 篇文章$ S& F. M, ^7 j+ ]$ p- _& H
THE END
' I: n9 \/ w- O- u" d5 X; y投稿或寻求报道:content@jiqizhixin.com

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-10-15 21:07 , Processed in 0.043557 second(s), 25 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

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