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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1034|回复: 0

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

[复制链接]

1583

主题

693

回帖

6856

积分

论坛元老

积分
6856
发表于 2023-2-27 19:45:26 | 显示全部楼层 |阅读模式 来自 中国
机器之心报道* i8 K8 l1 [% \5 ^; b' i0 {9 V
机器之心编辑部- H1 P" T3 e/ M; N7 M5 z
GPT 模型实现起来有时也很简单。5 a9 X" h) G3 A7 J& d4 o
当前,大型语言模型(LLM)被认为是人工智能突破的方向。人们正在尝试用它们做各种复杂的事情,比如问答、创作、数学推理以及编写代码等。近段时间 ChatGPT 持续的爆火是最好的例证。7 d+ d- G/ ]; i( V4 _/ S
然而,对于机器学习从业者来说,大模型的门槛很高:因为体量太大难以训练,很长时间里这个方向一直被大公司垄断。不过最近,简化 GPT 模型的方法越来越多了。1 月中旬,前特斯拉 AI 高级总监 Andrej Karpathy(现已回归 OpenAI)就发布了从零开始构建 GPT 模型的完整教程。不过训练出的 GPT 和 OpenAI 的 GPT-3 比较,两者规模差距达 1 万 - 100 万倍。
: m0 o2 K* ^  ~* V8 C6 h2 k! j; k  I6 `近日,加拿大麦克马斯特大学的一位软件工程本科生 Jay Mody 在导入 NumPy 库下,仅用 60 行代码就从头实现了一个 GPT 模型,并将其命名为 PicoGPT。不仅如此,他还将经过训练的 GPT-2 模型权重加载到自己的实现中,并生成了一些文本。下面为 60 行代码展示。" }! ]- ?  I' l+ q% {0 i7 }' I; [

3 d7 J7 ~" v8 c! k7 G' ~# T) @' V
' Z" [, ~% p/ K$ t  e/ A1 V9 R, X# ~! g
不过要做到这些,你需要熟悉 Python 和 NumPy,还要有一些训练神经网络的基本经验。作者表示,这篇博客旨在对 GPT 进行简单易懂的完整介绍。因此,作者只使用已经训练的模型权重来实现前向传递代码。
9 ~1 ~2 O5 g$ ]) v9 K) u3 z
1 E2 B5 p) l8 j" v% w% _
) Q2 {/ w* k/ r7 c. o: F4 J
! O2 L5 i; f' w* Y: l1 D$ M) o4 R$ @7 @代码地址:, s# j+ |* t/ T6 |; k
https://github.com/jaymody/picoGPT/blob/29e78cc52b58ed2c1c483ffea2eb46ff6bdec785/gpt2_pico.py#L3-L58
2 n( u: l& T# c5 E, m, Z% ^# n: S对于此项研究,Andrej Karpathy 给出了四个字:虽迟但到。想当初,Karpathy 构建的 minGPT 和 nanoGPT 还要 300 行代码。; Y6 `3 N: S% q9 h$ g
' T, r! g7 ]: s% z2 D

! w% X' U7 g3 O/ W: e3 Q( H$ n8 |
" D5 J1 v% ?) ^; d值得一提的是,这篇教程不是完全零门槛的。为了让读者明白,作者首先介绍了什么是 GPT、它的输入、输出如何等其他内容,介绍得都非常详细。8 j7 Z0 Y8 C4 s1 [' u

( q6 K- ~+ R- M3 F& @% e) J; u$ ?/ |& k

3 ~8 E8 e( Y( Y0 _1 w至于 GPT 到底能干什么,作者给出了几个示例,它能写电子邮件、总结一本书、给你 instagram 标题的想法、向 5 岁的孩子解释黑洞、用 SQL 编写代码等。
8 z: y) M) @& N# u  `& F8 P7 E通过仔细阅读这部分内容后,你能大致了解 GPT 的一些基础知识。有了这些背景介绍,接下来就是如何设置了。) n( m1 H4 Q2 j& n6 _1 I) D7 N
项目介绍! i$ {9 ]3 C& O, W4 |' q
设置# F5 M4 H& V3 ]) @4 }
这一章节主要介绍了如何设置编码器、超参数以及参数。- S1 G2 [4 O, B, S. h

: c; Z5 ^+ t( Z& J5 [9 y: T! @+ E/ m2 W

% B3 C, R. g; |% V3 O你要做的,首先是克隆代码库:
) Q, A9 B/ W; v
* X9 p. }- e5 L. y/ E0 E- g- o  Z8 f% A4 q

" v& E9 Y3 X8 b) [6 v然后安装依赖项:7 t; O, G, p, j

4 Y1 H, G+ U( ]  {. O# _6 K7 [, y" c% _# \% d2 h- Y: m

% [$ X5 W6 ^: v" J注意,如果你使用的是 M1 Macbook,在运行 pip install 之前,你需要在 requirements.txt 中将 tensorflow 更改为 tensorflow-macos。在这个项目下,文件包括 encoder.py、utils.py、gpt2.py、gpt2_pico.py:
& K2 m% B% _! m- Rencoder.py:包含 OpenAI BPE Tokenizer 的代码,直接取自 gpt-2 repo;
2 v+ h8 z0 \) }" o( w- I  r$ Zgpt2.py:包含 GPT 模型和生成代码,可以将其作为 python 脚本运行;
: s' ~9 ?) o2 q& K9 E, f. [# \3 Ggpt2_pico.py:与 gpt2.py 相同,但是代码行数更少。! s% M* S& d9 `6 v
其中 gpt2.py 需要从头开始实现,因此你要做的是先删除 gpt2.py 并重新创建一个空文件:
- d6 |) l0 j' i) F& y8 b
6 a* h6 M2 U9 g9 l: u/ T& N, s& u2 U5 h, G$ i0 r
& T& H0 c- X: A# g) D% q( o# A
然后将下列代码复制到 gpt2.py 中:* f% B- z) w3 k
7 r0 e/ P. p5 i8 A! Y' C" p+ v9 J

' t6 k* {) Z( o5 ^, T- S# g$ g% z( n& T( ]6 m
上述代码包含 4 个主要部分:
' i2 [7 G7 r# J8 [( X; @, Hgpt2 函数是本次实现 GPT 的实际代码;/ J/ C1 H' b' `% w+ _
generate 函数实现自回归解码算法;8 s" @" `' ?$ @  F9 [
main 函数;* n$ R- _# ]. O7 q
fire.Fire ( main ) 将文件转换为 CLI 应用程序,以便最终可以运行代码:python gpt2.py "some prompt here"。
, b6 T: |) T% h5 S0 e1 pmain 函数包含有 encode、hparams、params 参数,执行下列代码:9 h) d/ e4 K3 e) ?' }! Z
4 |$ L: i5 P2 ~' Y9 a. J
+ o8 P) Q5 m; N7 t) G, H1 ?3 m
) [  ?0 S3 a8 l" b( i
设置完成之后,作者开始介绍编码器、超参数、参数的一些细节内容。就拿编码器来说,本文的编码器和 GPT-2 使用的 BPE tokenizer 一样。下面是该编码器编码和解码的一些文本示例:
* D2 t) H$ s* ^7 `  c& Q
7 e3 L5 J1 ?& Z+ Q& F+ W/ {
# P! B7 f. m8 `0 O9 G- M0 m7 A4 {# L
实际的 token 长这个样子:8 f  ]8 x; k* a

* [4 s4 Z! M$ L7 p) b8 W/ n9 k4 @3 r( R; a! [8 t
8 e& R6 g2 X9 z6 R  Z* o
需要注意,有时 token 是单词(例如 Not),有时它们是单词但前面有一个空格(例如 all, 代表一个空格),有时是单词的一部分(例如 capes 被拆分为 cap 和 es ) ,有时它们是标点符号(例如 .)。1 Z0 I. R7 e3 w
BPE 的一个好处是它可以对任意字符串进行编码,如果遇到词汇表中不存在的内容,它会将其分解为它能理解的子字符串:: V9 S* K, d& i8 L! n% K# v
9 r( L2 H( H7 t: ?4 H( T. R( H
4 ~8 k$ _8 p4 n* D4 o, j# f
7 R6 h% G0 x4 k4 o
更细节的内容不再赘述。接下来介绍基础神经网络,这一部分就更加基础了,主要包括 GELU、Softmax 函数以及 Layer Normalization 和 Linear。) f9 S: @2 o* d: r* L

  y1 p0 w4 s( C3 v! ^+ y1 G; {$ o$ n. k% s  u

) p8 u, g8 o: U每一小部分都有代码示例,例如在 Linear 部分,作者展示了标准矩阵乘法 + 偏置:
- Z7 C/ }/ g: S8 _0 r7 m) B- e5 g0 M( `

' P1 s. j& J" z$ x9 s5 j! G6 e( L4 D' `1 E6 a" }
线性层从一个向量空间投影到另一个向量空间的代码如下:# [. k# B  b* K( o* r5 n

4 H7 ~8 X# m8 y' n; h, _
  B2 [. X, h  W6 P: U3 ^+ w, T0 v% Z
GPT 架构
) o# F# x' r* y9 b1 R! ^这部分介绍 GPT 自身架构。
& Y- V  W  ^; w" r: h9 P3 P- M% N/ T( A$ p- C0 m+ K: Q

- t: v0 m# g, r
  B: m, l3 w. ^; C& _! \6 N% ]( ?Transformer 架构如下:
5 E  i; x- E) |2 x! g5 e  r  q$ b; Y' j$ E  N# B
) ?/ W, J; z7 r$ u& [: ^

  U' F& T  ^: V' O' }7 g3 j% PTransformer 仅使用解码器堆栈(图的右侧部分):9 m( }2 B# P) L9 M+ U

5 R4 v( J8 d0 u3 I9 R
6 g. G: O9 `% W$ \( ~. D/ ^  t" ^* J( |2 s& f( {
需要注意,由于摆脱了编码器,中间的交叉注意力层也被删除了。
! p& e$ O$ z6 p在高层次上,GPT 体系架构有以下三个部分:
7 x+ J+ F/ [+ G4 \3 H/ n) Q) f. J文本 + 位置嵌入;6 S3 S6 E( U+ l+ h
Transformer 解码器堆栈;7 O/ f6 h7 h& O  Z/ H! T0 z. a
投影到词汇表。
5 Z) {5 {/ ~+ v代码就像下面这样:" f5 Z  J% C+ K: S

; D4 f+ g3 F/ y! Y" g  `! n- P, u, F9 n9 x

; I' u) E3 \3 `' K5 o& L8 v代码部分截图
! F: d8 n5 T. Z, h- P# y2 X接下来更详细地分解以上三个部分中的每一个部分,这里也不再赘述。
2 n/ g5 q, }: U: {  N以上就是作者对 GPT 的实现,接下来就是将它们组合在一起并运行代码,得到 gpt2.py。它的全部内容只有 120 行代码(如果删除注释和空格,则为 60 行)。
5 }: [# I3 B" _* W* }" p$ J3 g作者通过以下方式测试结果:
8 E/ `6 h% L# T; k  R: U
' n8 Y6 f, ?9 S1 U+ l8 ]1 M; w! O! H1 o& k5 \0 q
5 r6 J. T5 J9 [) W' O
输出结果如下:
3 z9 U- ^+ `* A3 K* w
1 J# N5 _2 g/ H7 Q
' F$ l* k, J. V* l5 a. D: c! K& o7 k* k5 m6 f. u6 j1 D& a
正如作者说的:这次实验成功了。7 b: s+ y) [6 T
本文只是跟着作者的思路大概介绍了整体流程,想要了解更多内容的小伙伴,可以参考原文链接。
# `6 F: }  }  A6 O# r原文链接:https://jaykmody.com/blog/gpt-from-scratch/#basic-layers
5 d9 m) g7 f: |% `1 T% u全面学习 ChatGPT,机器之心准备了 89 篇文章合集& i- F- c. Q' a1 l' c6 j" d
这是一份全面、系统且高质量的 ChatGPT 文章合集,我们筛选出来了 89 篇相关文章,设计了阅读框架与学习路径,大家可以根据自己的需求进行浏览与研读。合集内容包括:
- K2 I( q: X" B* FChatGPT 及 OpenAI 大事件时间轴6 Z( q; J$ \5 `0 X7 u8 |% l- ]
概念 · 真正搞懂 ChatGPT:共 3 篇文章
5 Z- u9 G+ Y; _. j- v: V2 E& P4 k研究 · GPT 家族更迭:共 16 篇文章& R! j0 A: Y6 Q+ e
八年 · OpenAI 的历史与现在:共 13 篇文章3 k' G7 O+ \+ n& a
干货 · GPT 相关研究与技术:共 18 篇文章
% Q1 a# }$ o3 k! E# Q7 I观点 · 专家谈 ChatGPT:共 8 篇文章, g5 }$ r2 g2 V2 F
行业 · 应用与探索:共 23 篇文章- d, W! Y, Y, A  p/ e/ f: ~
行业 · 同类产品:共 8 篇文章
+ e+ x( W0 z! W THE END
: ^% f9 T  A: }! l9 r投稿或寻求报道:content@jiqizhixin.com

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-7-18 04:42 , Processed in 0.035438 second(s), 24 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

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