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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1022|回复: 0

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

[复制链接]

1583

主题

693

回帖

6856

积分

论坛元老

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

( F9 Q  p6 e0 U$ ]
  |9 D6 N4 i& X5 y7 o, ^" D6 t7 q! O% D# r' k( P. B
代码地址:
/ H' @: T7 t) K" Zhttps://github.com/jaymody/picoGPT/blob/29e78cc52b58ed2c1c483ffea2eb46ff6bdec785/gpt2_pico.py#L3-L586 z. J$ |: G# ~
对于此项研究,Andrej Karpathy 给出了四个字:虽迟但到。想当初,Karpathy 构建的 minGPT 和 nanoGPT 还要 300 行代码。
" m! @4 ]: v+ u$ \; t- w+ l' T% K- c' M
: T) O+ r( [) s+ ~# X+ ^

6 C9 F! p5 ^- b: z6 S值得一提的是,这篇教程不是完全零门槛的。为了让读者明白,作者首先介绍了什么是 GPT、它的输入、输出如何等其他内容,介绍得都非常详细。% |# _! V) e8 `
$ Y, v2 ?6 B; e$ g

. O1 `6 v5 k% ]: q9 _' X
& E% Q3 x, x% a* D至于 GPT 到底能干什么,作者给出了几个示例,它能写电子邮件、总结一本书、给你 instagram 标题的想法、向 5 岁的孩子解释黑洞、用 SQL 编写代码等。7 j$ K, |; Q; L. \1 J3 K
通过仔细阅读这部分内容后,你能大致了解 GPT 的一些基础知识。有了这些背景介绍,接下来就是如何设置了。
7 ?! G# q/ d  l项目介绍0 B+ o; ^. Y* Q8 b( k0 m
设置
5 `, v5 s  ^; R4 X6 M这一章节主要介绍了如何设置编码器、超参数以及参数。
) W! {3 O- i$ Q( y6 K& n  Z0 j& z! @" Q3 d

3 Q4 L3 Y2 y2 {0 {/ C! m2 _
3 g* E6 @9 w8 u/ R/ _( X6 i你要做的,首先是克隆代码库:& G+ r. ?1 ?6 l# Q( [8 D. D

# `+ x3 I: p& ?) X! @# H$ @; @' i' D4 e% N, \3 H: H' J
9 x9 }  ]. W9 T! \# Q3 D
然后安装依赖项:
* t* q+ @: P, n  l! c% C( \8 A) P, A7 k+ g9 H' z1 Y( ]3 U/ S
8 _+ J  H  X: B$ c/ m8 l. l
/ z" b$ C5 Z" m& i6 A  Q
注意,如果你使用的是 M1 Macbook,在运行 pip install 之前,你需要在 requirements.txt 中将 tensorflow 更改为 tensorflow-macos。在这个项目下,文件包括 encoder.py、utils.py、gpt2.py、gpt2_pico.py:
- y$ r8 F5 `, xencoder.py:包含 OpenAI BPE Tokenizer 的代码,直接取自 gpt-2 repo;7 [( n+ m" [. f: v/ ^
gpt2.py:包含 GPT 模型和生成代码,可以将其作为 python 脚本运行;: y- [7 @7 l# e/ U1 \/ p
gpt2_pico.py:与 gpt2.py 相同,但是代码行数更少。
: A2 {4 e" O8 Y  m  Q其中 gpt2.py 需要从头开始实现,因此你要做的是先删除 gpt2.py 并重新创建一个空文件:* T7 b4 s% P, k) T1 b- U3 g5 d
( U. H6 L7 I- A
9 U( h, U# Z. D7 f% U+ P

8 S3 T' b, e+ I5 N然后将下列代码复制到 gpt2.py 中:  B. j, d& j- u) N9 I5 v  z
1 [% H. K8 V; S4 g
8 B' f: [- D4 c* Y# ]
7 M% G2 Z  ~8 N9 |. d" w* O
上述代码包含 4 个主要部分:
5 }, x. J; N' Z! c0 n! A2 T: d; Zgpt2 函数是本次实现 GPT 的实际代码;% I& b3 _  \$ v9 v9 v
generate 函数实现自回归解码算法;
$ B  R4 s' U5 t2 `main 函数;
2 h& Z7 P  t9 c/ B, D8 s; Tfire.Fire ( main ) 将文件转换为 CLI 应用程序,以便最终可以运行代码:python gpt2.py "some prompt here"。
0 R; [$ s  m: K% emain 函数包含有 encode、hparams、params 参数,执行下列代码:4 O5 V6 o5 s& [; ?/ k9 D* @9 p. S
7 M" t4 \1 i- d

( C$ x! K/ Z* A9 k" j! g0 E2 @; }( b2 g; @
设置完成之后,作者开始介绍编码器、超参数、参数的一些细节内容。就拿编码器来说,本文的编码器和 GPT-2 使用的 BPE tokenizer 一样。下面是该编码器编码和解码的一些文本示例:# W+ O9 F- k3 w, x; q" g, S. Y
$ o1 j5 x$ u7 l( C$ i& j
, k! H% V3 |7 e$ N0 _2 s3 x2 H
- \8 Z$ [! R5 t+ Y3 L( a8 d
实际的 token 长这个样子:* r: M, n* v) c6 \
: ^% m& c2 z9 d, H& J1 @9 B% C0 ]

" i: O# t0 C. J; A) l" d
9 k+ _7 V, X4 v1 V# W7 T需要注意,有时 token 是单词(例如 Not),有时它们是单词但前面有一个空格(例如 all, 代表一个空格),有时是单词的一部分(例如 capes 被拆分为 cap 和 es ) ,有时它们是标点符号(例如 .)。
0 E. t( Y" {  BBPE 的一个好处是它可以对任意字符串进行编码,如果遇到词汇表中不存在的内容,它会将其分解为它能理解的子字符串:2 U6 P' v7 c8 S/ V' ]1 M# ~9 I8 Z

  k' A! U# H2 b* s. d! e
7 ?- {1 }  z! Z3 s) w2 f7 }& ~9 u- G% T) E$ w% _
更细节的内容不再赘述。接下来介绍基础神经网络,这一部分就更加基础了,主要包括 GELU、Softmax 函数以及 Layer Normalization 和 Linear。
* X7 |" m' P9 c4 a
4 e1 h, I2 `5 d$ ?, Z
" d0 m* w2 @: M  H: l$ D$ G9 R! D5 v9 m
每一小部分都有代码示例,例如在 Linear 部分,作者展示了标准矩阵乘法 + 偏置:/ G/ N) {# }' j  d& i, c4 s

: u+ F1 `: M0 H* @# f/ }" z9 Q/ G6 j7 Y. I8 E
# C: s- K, z; g; p  @! c
线性层从一个向量空间投影到另一个向量空间的代码如下:
2 s: [4 \# O  F: z+ U" U, |' l
( ~/ n  V) Y9 {0 h9 {& ^
) e/ E0 }6 M4 m5 o% O1 X, b, A4 |1 _7 A" O
GPT 架构1 b/ r5 ^1 w1 i$ O% t
这部分介绍 GPT 自身架构。9 o* t! X6 M) v/ l' z

$ U' n0 m; h/ O6 |1 }% ^2 y! R& D1 N7 T& g8 L
; _# j# D% l! }0 @
Transformer 架构如下:- I2 w, o5 s* b; t
. j, v9 f6 Y& }' {; V) s0 `. X& U

9 B0 _+ i4 d* K; H( W& K6 d# V% M
. ^# Y/ s# G9 Z: P; r( r5 d& b+ ?0 RTransformer 仅使用解码器堆栈(图的右侧部分):. |: i2 `5 y$ d1 z6 v4 u

& j3 r! I3 s4 d+ Q* A( S! E0 Q4 X( ]; K1 k+ C
. E5 ~+ l7 i- F) P# \* P
需要注意,由于摆脱了编码器,中间的交叉注意力层也被删除了。. O' G; W# d5 B( K# F6 {
在高层次上,GPT 体系架构有以下三个部分:
; g. ^2 N' f7 H' @1 G* v文本 + 位置嵌入;, D& F) z* W1 B0 F
Transformer 解码器堆栈;
4 a, I+ Y4 a+ v/ B投影到词汇表。9 _$ u4 s: Y& x& ~
代码就像下面这样:1 R! [3 n. L; R! u4 P5 p$ R- I; S
. F7 q9 {7 Z% o
/ |8 _0 x* s/ @/ m& C
+ Q) q4 G* Y- c' L. V' `* L
代码部分截图
- l$ T2 |9 B; a: r; Q接下来更详细地分解以上三个部分中的每一个部分,这里也不再赘述。' q5 R# ^$ ^4 s% e& Z
以上就是作者对 GPT 的实现,接下来就是将它们组合在一起并运行代码,得到 gpt2.py。它的全部内容只有 120 行代码(如果删除注释和空格,则为 60 行)。) ?1 B+ |0 t+ s8 q9 j" X
作者通过以下方式测试结果:8 k) i+ i6 W; [0 E* _: |0 X

& N0 u; ]: c: X
  D- E( Z( \- [! R8 u5 U. ^4 }( G3 v8 h/ t5 c7 ?) r
输出结果如下:  G( l: \$ c* }
4 n& ~  @/ _5 W; x- M1 `: p

: \% |+ k8 n1 R# s: [) t/ v- M7 V8 c  O
正如作者说的:这次实验成功了。. D& b+ S) Y8 ~
本文只是跟着作者的思路大概介绍了整体流程,想要了解更多内容的小伙伴,可以参考原文链接。
) q+ H  |3 e$ E1 F. c% P6 ]原文链接:https://jaykmody.com/blog/gpt-from-scratch/#basic-layers
2 C: u9 N: p1 t& e! p全面学习 ChatGPT,机器之心准备了 89 篇文章合集- V9 ~5 l$ Q/ w: }  U( h7 \
这是一份全面、系统且高质量的 ChatGPT 文章合集,我们筛选出来了 89 篇相关文章,设计了阅读框架与学习路径,大家可以根据自己的需求进行浏览与研读。合集内容包括:* _- K) i6 D4 N
ChatGPT 及 OpenAI 大事件时间轴2 D; ?* |& F/ }, @5 I
概念 · 真正搞懂 ChatGPT:共 3 篇文章5 y2 h; N4 t! y) a
研究 · GPT 家族更迭:共 16 篇文章! ~  k( G6 N9 I& L
八年 · OpenAI 的历史与现在:共 13 篇文章
% A9 g$ [  p  b& q( O干货 · GPT 相关研究与技术:共 18 篇文章5 z, w+ c( v9 v
观点 · 专家谈 ChatGPT:共 8 篇文章
& r- A# l. k3 E* ]( K% N7 a! p行业 · 应用与探索:共 23 篇文章
( ^* Y2 d/ e* Y+ q( U  P行业 · 同类产品:共 8 篇文章* l' y- I. t1 z7 Z
THE END
% ?0 `% q0 }- P投稿或寻求报道:content@jiqizhixin.com

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-22 02:01 , Processed in 0.036871 second(s), 24 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

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