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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1058|回复: 0

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

[复制链接]

1583

主题

693

回帖

6856

积分

论坛元老

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

+ E! C( j% K3 X4 Y7 Q4 H7 ]" W$ ]! p. d" z# N# I
' i, n/ m1 ~, m. @; K
不过要做到这些,你需要熟悉 Python 和 NumPy,还要有一些训练神经网络的基本经验。作者表示,这篇博客旨在对 GPT 进行简单易懂的完整介绍。因此,作者只使用已经训练的模型权重来实现前向传递代码。
4 e8 W4 r4 O! P4 V
7 \1 P# A' {2 }" F: m  L; a: z1 N- s& D- ^
# z3 s& W( J8 O) n! u, v8 ^! m
代码地址:' C' A  l8 C% Y  v6 r
https://github.com/jaymody/picoGPT/blob/29e78cc52b58ed2c1c483ffea2eb46ff6bdec785/gpt2_pico.py#L3-L587 `0 C' s8 m  k4 I3 I5 A
对于此项研究,Andrej Karpathy 给出了四个字:虽迟但到。想当初,Karpathy 构建的 minGPT 和 nanoGPT 还要 300 行代码。( j, i% r" y: f% f

% S* M' r2 B: x3 N! ]) ]' M1 x% d$ R' j8 e& m' t' g; c

) `/ l9 G1 T" D* U, l2 _; r: ^值得一提的是,这篇教程不是完全零门槛的。为了让读者明白,作者首先介绍了什么是 GPT、它的输入、输出如何等其他内容,介绍得都非常详细。
! |2 A. d  ^4 E) q/ M4 G  \# _+ K  I& f
  r& K2 F4 v4 I& p6 U
( w; y& B$ X" W6 Q% k! G* A
至于 GPT 到底能干什么,作者给出了几个示例,它能写电子邮件、总结一本书、给你 instagram 标题的想法、向 5 岁的孩子解释黑洞、用 SQL 编写代码等。) x* P6 Y4 r  w% c% @- u$ I
通过仔细阅读这部分内容后,你能大致了解 GPT 的一些基础知识。有了这些背景介绍,接下来就是如何设置了。( U2 f1 `3 |3 E, \0 _
项目介绍
# t9 v  T) l  z9 l3 X设置
9 `* v0 B/ }1 O, U- |这一章节主要介绍了如何设置编码器、超参数以及参数。* p( `  z5 b8 e8 d
) ~, Q  Y$ L) J8 t
- ^1 X' s9 N( B& a1 p: T2 c
! O$ G+ u% g0 o$ M) K; \% `
你要做的,首先是克隆代码库:2 Q# o% v' E6 S0 O% v* {
  U& s1 P( |2 g( g9 A

7 f2 U2 \; ~" o2 d
2 L4 @9 z; Q  s, N$ U+ ?5 q2 W0 e然后安装依赖项:& n: g6 f$ L: o: y* k9 w' W' ]
7 e; U/ j) I& A# p0 B. m0 O
4 f0 d& G. a  V- w
, K9 y, U3 v- q/ s
注意,如果你使用的是 M1 Macbook,在运行 pip install 之前,你需要在 requirements.txt 中将 tensorflow 更改为 tensorflow-macos。在这个项目下,文件包括 encoder.py、utils.py、gpt2.py、gpt2_pico.py:
1 I7 Q) V/ Y: y+ Yencoder.py:包含 OpenAI BPE Tokenizer 的代码,直接取自 gpt-2 repo;- Q: R' `$ ~3 B) c0 S1 e, i
gpt2.py:包含 GPT 模型和生成代码,可以将其作为 python 脚本运行;+ |3 i5 w8 t' Z$ @
gpt2_pico.py:与 gpt2.py 相同,但是代码行数更少。
4 Z" `* O; b7 L; w其中 gpt2.py 需要从头开始实现,因此你要做的是先删除 gpt2.py 并重新创建一个空文件:  l3 A$ k! o$ x& D+ w$ h

/ O- ]. f: M$ G2 o+ I/ e; ]# A# U7 x5 m' G1 @3 H% \; i- a
0 E2 U4 ^+ g: F
然后将下列代码复制到 gpt2.py 中:
$ k1 C1 ~$ P8 p) [8 `0 S' y7 X  O7 H1 Z! D: Z- p9 N

: j! O9 x3 y) |& x' y) d# G' H; S4 w& X
9 n9 ]9 Q7 |( P4 _6 j上述代码包含 4 个主要部分:
- u1 P- [/ |2 {, L# H# \gpt2 函数是本次实现 GPT 的实际代码;
% T# o' ?& c: i2 n8 W+ bgenerate 函数实现自回归解码算法;; c8 F" `$ N% l) a, c! L
main 函数;, T1 a+ i- z0 c0 h' B+ d8 |) m
fire.Fire ( main ) 将文件转换为 CLI 应用程序,以便最终可以运行代码:python gpt2.py "some prompt here"。
$ F( b# ?: v) y. t0 m$ R0 nmain 函数包含有 encode、hparams、params 参数,执行下列代码:
% x. a5 s( [- ~# ]- [6 c0 p1 M3 p
( V7 ~! U9 @! k0 H9 B4 L! F9 H2 P5 i* P% e8 B: f9 W% P8 E4 @
& o+ N. C" v9 n! @9 s5 m' g+ h
设置完成之后,作者开始介绍编码器、超参数、参数的一些细节内容。就拿编码器来说,本文的编码器和 GPT-2 使用的 BPE tokenizer 一样。下面是该编码器编码和解码的一些文本示例:
8 K. K) d8 S# s2 @3 g
5 a0 B# n4 {. l& C
% A$ i( z4 s: f0 r+ Q: c  D# i8 T. k/ V5 T" o0 `
实际的 token 长这个样子:
( x. q6 A7 e9 C7 w6 ?  i  t- `  T% F' p% e* N; `* F

3 `: a' t; h5 G
& H. S- I. j( u5 k. l2 Z. U需要注意,有时 token 是单词(例如 Not),有时它们是单词但前面有一个空格(例如 all, 代表一个空格),有时是单词的一部分(例如 capes 被拆分为 cap 和 es ) ,有时它们是标点符号(例如 .)。
7 r) V) v- c' c" Z6 bBPE 的一个好处是它可以对任意字符串进行编码,如果遇到词汇表中不存在的内容,它会将其分解为它能理解的子字符串:# g. t8 U# M$ c2 N% O

4 s6 T, ]) ]6 N2 y9 L0 Q4 }3 g; n, Z; _$ J( ]$ {" F& q( K

$ b! e6 J) \* P. M) {更细节的内容不再赘述。接下来介绍基础神经网络,这一部分就更加基础了,主要包括 GELU、Softmax 函数以及 Layer Normalization 和 Linear。
: J: l- c, a6 S' j1 `; ~0 V" V# [( `7 M" F0 E1 b3 h

4 l8 S" y- R/ ?
6 k1 F$ O! D7 G& X8 ?9 K每一小部分都有代码示例,例如在 Linear 部分,作者展示了标准矩阵乘法 + 偏置:. d- g# k0 T- s' }7 z
9 l+ m3 F' P) B$ @9 x/ A( v
3 |( K0 a' l7 `6 [9 i2 ~5 C

, v7 z7 Q2 E& t4 K  x4 C. V线性层从一个向量空间投影到另一个向量空间的代码如下:5 b! {9 r4 N$ X% w: p+ \- [
& g& |$ c8 ~1 }! E% Y$ K

6 h8 I  L8 }  n) I, T( a
+ O: M- z2 U( ?GPT 架构
' _- U& A' t. N& X. T* f3 N这部分介绍 GPT 自身架构。0 [$ a+ K6 W/ C, B7 A4 s

- V8 J& X! F. k5 t4 u4 \( l' K  Q. w9 [) P' K# L

) C# G9 d+ V. l2 u) T# v+ s' GTransformer 架构如下:
, P) f- k0 M4 E9 O# \) ^+ I; d# F- X- K
- {6 _- w1 d. s3 S  Y# a! B

" }. \  I& M5 @* r! f3 vTransformer 仅使用解码器堆栈(图的右侧部分):$ g1 K- k: `% q( v
1 i  ^/ k3 E/ W7 h
4 ?/ c. j* q1 `1 ~! `- P, k
  ~9 v5 j) ~5 T1 H* L& f3 S/ E
需要注意,由于摆脱了编码器,中间的交叉注意力层也被删除了。
+ C* o  b9 g9 Z3 V在高层次上,GPT 体系架构有以下三个部分:
. z" U9 J$ D& c  n文本 + 位置嵌入;
- ?4 w7 {  X: ^' O1 C, bTransformer 解码器堆栈;
* T  U" }7 ^5 c# s3 p8 k$ u投影到词汇表。2 r+ E7 b+ a5 o9 D) L) Q8 n
代码就像下面这样:
4 L$ O: B, m  j. _( i6 G6 U' t) a* |% A; V$ |. Y/ U0 ^( t  z
* i$ ~# x5 T' d" h/ s
/ v7 q) v: K) v5 L% R
代码部分截图
8 Z3 H: d2 k4 z+ \接下来更详细地分解以上三个部分中的每一个部分,这里也不再赘述。6 f( ]8 ~) `$ G" _
以上就是作者对 GPT 的实现,接下来就是将它们组合在一起并运行代码,得到 gpt2.py。它的全部内容只有 120 行代码(如果删除注释和空格,则为 60 行)。
; x+ m9 \& S+ A作者通过以下方式测试结果:
! [  |- k& E% z: v$ g+ ]
( k$ b' T" c8 y* |+ J
, q1 @  \$ y' {: Y# |. {( C: V3 `" h/ l
输出结果如下:. ~$ g0 a5 R* t5 A
2 [! a- q/ H6 q+ `
; u) l5 t0 f! N; Q" @* \8 q

' k+ w( {+ G4 f/ ~) j) Z正如作者说的:这次实验成功了。
! H# Y3 ^+ h0 d本文只是跟着作者的思路大概介绍了整体流程,想要了解更多内容的小伙伴,可以参考原文链接。
0 o1 v, B* e" x; l( c原文链接:https://jaykmody.com/blog/gpt-from-scratch/#basic-layers! T7 x1 J  Z3 N! z6 q
全面学习 ChatGPT,机器之心准备了 89 篇文章合集
7 g) @1 J: e% |4 I这是一份全面、系统且高质量的 ChatGPT 文章合集,我们筛选出来了 89 篇相关文章,设计了阅读框架与学习路径,大家可以根据自己的需求进行浏览与研读。合集内容包括:
, J+ n- w+ l9 U4 d6 oChatGPT 及 OpenAI 大事件时间轴% e! Y* h1 U# B5 j* T" @+ ]% _. A
概念 · 真正搞懂 ChatGPT:共 3 篇文章5 Q* N3 R% b3 f2 S7 h- p: Y
研究 · GPT 家族更迭:共 16 篇文章# b# Q: N( I  ]4 F* a& d- |
八年 · OpenAI 的历史与现在:共 13 篇文章
+ n) m1 ^( D- s9 h( h+ S# [6 }干货 · GPT 相关研究与技术:共 18 篇文章+ I) m, u: i- P, n( p6 H
观点 · 专家谈 ChatGPT:共 8 篇文章: o6 M0 d# e) P/ O; i
行业 · 应用与探索:共 23 篇文章
5 \) v# `; b& h1 ]行业 · 同类产品:共 8 篇文章3 e4 ]$ y4 {0 A$ ]3 X9 u
THE END
/ _) U5 {* z5 M投稿或寻求报道:content@jiqizhixin.com

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

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

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

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

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