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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1002|回复: 0

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

[复制链接]

1583

主题

693

回帖

6856

积分

论坛元老

积分
6856
发表于 2023-2-27 19:45:26 | 显示全部楼层 |阅读模式 来自 中国
机器之心报道
) |& r+ a( T7 `% n机器之心编辑部
0 I: e3 ^! Y- l" Q8 qGPT 模型实现起来有时也很简单。
/ n: ^/ F. u! c当前,大型语言模型(LLM)被认为是人工智能突破的方向。人们正在尝试用它们做各种复杂的事情,比如问答、创作、数学推理以及编写代码等。近段时间 ChatGPT 持续的爆火是最好的例证。
- b0 V; l) m! b, c) Y9 l然而,对于机器学习从业者来说,大模型的门槛很高:因为体量太大难以训练,很长时间里这个方向一直被大公司垄断。不过最近,简化 GPT 模型的方法越来越多了。1 月中旬,前特斯拉 AI 高级总监 Andrej Karpathy(现已回归 OpenAI)就发布了从零开始构建 GPT 模型的完整教程。不过训练出的 GPT 和 OpenAI 的 GPT-3 比较,两者规模差距达 1 万 - 100 万倍。
- L5 X& a+ S+ l4 N4 Z近日,加拿大麦克马斯特大学的一位软件工程本科生 Jay Mody 在导入 NumPy 库下,仅用 60 行代码就从头实现了一个 GPT 模型,并将其命名为 PicoGPT。不仅如此,他还将经过训练的 GPT-2 模型权重加载到自己的实现中,并生成了一些文本。下面为 60 行代码展示。' t/ f+ }" ?! {% k' u
' q+ D2 R+ q. ?. ~! S% S
4 e0 _) S6 Y3 J6 u  Z5 l+ Y
0 R) P+ M: P% E  c& o
不过要做到这些,你需要熟悉 Python 和 NumPy,还要有一些训练神经网络的基本经验。作者表示,这篇博客旨在对 GPT 进行简单易懂的完整介绍。因此,作者只使用已经训练的模型权重来实现前向传递代码。
2 j* _+ |  j6 l+ U; T5 ?/ e5 p; c+ X
! b7 v5 O9 Y, F" G: l: ^, Z% v
; `4 w( h! V( t$ l* o1 f" P( B8 _  `
代码地址:
% _) @8 B) L- q3 x  [/ u* R$ D+ G+ ~https://github.com/jaymody/picoGPT/blob/29e78cc52b58ed2c1c483ffea2eb46ff6bdec785/gpt2_pico.py#L3-L58
3 Z; n8 s  p* i/ k. e7 H6 z  [4 F对于此项研究,Andrej Karpathy 给出了四个字:虽迟但到。想当初,Karpathy 构建的 minGPT 和 nanoGPT 还要 300 行代码。
, D& u5 {9 S% u" c$ T; Z8 O3 o. X% _; r* N: F7 G, A; D# T
0 F  N( G/ T' b8 L
  b) O9 b$ w' F
值得一提的是,这篇教程不是完全零门槛的。为了让读者明白,作者首先介绍了什么是 GPT、它的输入、输出如何等其他内容,介绍得都非常详细。+ B, I* A  [. W) A  I- a( B
- B% v' S/ V. q0 t- I

# I2 E  T) k4 n; b# e( _6 Y+ }
- J; V  d1 Z' k8 F+ B1 }. ?- l至于 GPT 到底能干什么,作者给出了几个示例,它能写电子邮件、总结一本书、给你 instagram 标题的想法、向 5 岁的孩子解释黑洞、用 SQL 编写代码等。
+ t" P. ?/ F, L1 u& E9 m1 r& _通过仔细阅读这部分内容后,你能大致了解 GPT 的一些基础知识。有了这些背景介绍,接下来就是如何设置了。$ |/ X. }$ u& n2 D! q
项目介绍
, m" }& }6 z4 h5 d设置
9 }. T& p7 K& A3 t8 O这一章节主要介绍了如何设置编码器、超参数以及参数。
5 ^3 w1 R# k- G: H' r  A; O1 o8 C4 K6 c4 G
5 V$ s1 M) b- L8 o5 V# d

- W: o4 z$ h( {( E* X& |, m你要做的,首先是克隆代码库:
+ s6 v! h: v1 @' ]9 X
$ ]1 P# F% ?* Z! \1 e  x  a& C& E3 ~( G$ {) e$ s; @

' N; b! R. ~; f& ]9 Q! o6 _然后安装依赖项:) d/ k' o, x. G5 R

/ ~) D6 H/ W% U1 R; S5 I$ v
+ A/ n6 u3 c) A- O  T9 ]+ o: v( E) h2 E
注意,如果你使用的是 M1 Macbook,在运行 pip install 之前,你需要在 requirements.txt 中将 tensorflow 更改为 tensorflow-macos。在这个项目下,文件包括 encoder.py、utils.py、gpt2.py、gpt2_pico.py:
# A6 Z( ^" ~) o5 W4 P. C- yencoder.py:包含 OpenAI BPE Tokenizer 的代码,直接取自 gpt-2 repo;
* D# [4 ^! e% S' `gpt2.py:包含 GPT 模型和生成代码,可以将其作为 python 脚本运行;
+ @4 {7 Y% p$ d2 G- @1 |gpt2_pico.py:与 gpt2.py 相同,但是代码行数更少。8 D! |/ ^# R' x0 f5 f' H5 u- _/ P
其中 gpt2.py 需要从头开始实现,因此你要做的是先删除 gpt2.py 并重新创建一个空文件:
1 j4 A! K# o2 [1 U/ u$ S( Z# ~2 e; n
* l: _3 Z, `  m% e
* r) ^- a* f# u; E2 T" z6 p5 r+ ^2 c5 B, z% R1 m3 R; M; n4 q
然后将下列代码复制到 gpt2.py 中:- ~& K! x8 A& \# N

% o, U6 o. e. k) Y: W$ e: `
* G: q6 G" [% v0 \  j% r" C! I5 [, B4 ]4 a9 s9 e- W
上述代码包含 4 个主要部分:$ B; U* Q3 z' o5 n7 j
gpt2 函数是本次实现 GPT 的实际代码;( r8 j) g% q: x3 m6 z# S" @7 H
generate 函数实现自回归解码算法;3 X5 R; D2 k  |4 M( Q0 \
main 函数;4 u7 P' {5 m7 ^. {7 u$ ^
fire.Fire ( main ) 将文件转换为 CLI 应用程序,以便最终可以运行代码:python gpt2.py "some prompt here"。
+ D7 y+ g4 V8 Nmain 函数包含有 encode、hparams、params 参数,执行下列代码:
: G$ x9 |$ p- V+ x5 P
2 k4 ~9 Q; X6 h4 x9 K
; p8 G: H; I+ {) a: \& @8 D& M+ P9 J, \1 r4 }
设置完成之后,作者开始介绍编码器、超参数、参数的一些细节内容。就拿编码器来说,本文的编码器和 GPT-2 使用的 BPE tokenizer 一样。下面是该编码器编码和解码的一些文本示例:
8 K" o' f- D5 L% R" P- e+ x/ z2 q9 |+ B6 N& m4 E8 ?' R4 l
; t2 g  _( l2 T

: `8 _# j. [5 q0 t! G& P" J/ q7 }1 O实际的 token 长这个样子:$ @$ _  f, e1 k$ w$ U& u8 _

& A( T$ B6 R% B* ^' l
8 b- L) m2 Z5 H3 e  h" c! W; T) s! _/ P: }1 ]. n2 Z# B4 f" t
需要注意,有时 token 是单词(例如 Not),有时它们是单词但前面有一个空格(例如 all, 代表一个空格),有时是单词的一部分(例如 capes 被拆分为 cap 和 es ) ,有时它们是标点符号(例如 .)。- e+ `' P6 [% n* f; a; M+ z
BPE 的一个好处是它可以对任意字符串进行编码,如果遇到词汇表中不存在的内容,它会将其分解为它能理解的子字符串:  H/ S6 T4 {5 Y6 d# l- k" z6 \3 ~2 j

/ p/ q+ y* J: k  A- N  \- ]" ^$ I2 F" E, h+ [. p$ }* n
# f# W/ s& W0 h7 I
更细节的内容不再赘述。接下来介绍基础神经网络,这一部分就更加基础了,主要包括 GELU、Softmax 函数以及 Layer Normalization 和 Linear。
' {) P. q  E+ ~* r. W  H2 C  A7 |1 U. \3 `' _

4 o9 P6 Y+ ?+ k$ Z- D; q1 V/ W8 T
4 d  `3 k* I( q8 ?4 B1 y; V每一小部分都有代码示例,例如在 Linear 部分,作者展示了标准矩阵乘法 + 偏置:  O/ Q( ^# ?  T9 M/ r

3 x- O; h8 w% u9 P
8 Z/ b: _( @! i+ _
. S* N/ F7 M, I: ~4 `线性层从一个向量空间投影到另一个向量空间的代码如下:
: g8 G4 D+ T- n* O% W3 u% k
4 A4 K) _$ T$ D) Q6 K% Z' ?" u# E6 o! t; {' e) X+ z/ \

; F, m; z; o4 \8 F" hGPT 架构* _8 K: i( B$ u/ H
这部分介绍 GPT 自身架构。
" |3 a9 E0 e% j! h' e& t% {% O$ p- W  g# `
! @5 t" y% Q3 l  t3 \9 S/ ?

. a3 f+ t  r6 D+ sTransformer 架构如下:+ c7 C' U3 `7 N

* ]7 t- a7 l( ^+ Q& p- m
- C1 g. S3 |9 K  B4 R8 l
* S- y! Y& t: g0 @' H9 \1 xTransformer 仅使用解码器堆栈(图的右侧部分):1 m& {8 v$ P& X6 n1 H9 |
2 H% v  O* b  t( Y6 c9 y

% m$ K; K! Z3 r6 o
+ f) T  m1 g9 X$ h$ I& ^( y需要注意,由于摆脱了编码器,中间的交叉注意力层也被删除了。
) r, H  W! V* y" \" A在高层次上,GPT 体系架构有以下三个部分:' Z  \- r& x( b$ F  e
文本 + 位置嵌入;
' b6 @4 s( s) N$ gTransformer 解码器堆栈;
8 Y) ]+ x- Y/ K" _投影到词汇表。
' O6 H* h; u$ X% ~代码就像下面这样:, u4 f' Q& e7 {7 B: P

) t; a' W) K: g2 I/ x2 }, k: ^
2 e0 r$ M7 \4 N5 f- S6 y6 L6 ^. Q; U
代码部分截图7 _+ o- O0 Z1 m
接下来更详细地分解以上三个部分中的每一个部分,这里也不再赘述。3 v, q0 E3 a& d+ p  r
以上就是作者对 GPT 的实现,接下来就是将它们组合在一起并运行代码,得到 gpt2.py。它的全部内容只有 120 行代码(如果删除注释和空格,则为 60 行)。
2 h% g9 Y; e1 U" V/ ~作者通过以下方式测试结果:
* Q9 e; W, A0 R) x# A% L% K% o( ~3 {& H4 R

* g' `  C# b1 O$ }. j- M) a3 m3 d% f. U% T# u. o
输出结果如下:
, L: g. L% j: q# G$ j0 C. ?) V2 n8 K/ r. I
. p( j+ ?$ m: y  {5 Q2 r4 o% A' g

# U% `' ?7 V6 V; G4 z' |% d正如作者说的:这次实验成功了。
! U" g/ j( c; F" Q( U本文只是跟着作者的思路大概介绍了整体流程,想要了解更多内容的小伙伴,可以参考原文链接。. i, h$ i6 I" u; y9 ?9 G
原文链接:https://jaykmody.com/blog/gpt-from-scratch/#basic-layers' F, l4 Y% V/ z, T
全面学习 ChatGPT,机器之心准备了 89 篇文章合集
, r) ^7 y  g* h7 `5 h这是一份全面、系统且高质量的 ChatGPT 文章合集,我们筛选出来了 89 篇相关文章,设计了阅读框架与学习路径,大家可以根据自己的需求进行浏览与研读。合集内容包括:1 u) `0 d8 B. A1 P: w& a
ChatGPT 及 OpenAI 大事件时间轴
' l0 ^; [7 U1 E概念 · 真正搞懂 ChatGPT:共 3 篇文章1 P. u; h0 K  k% S" Q" o
研究 · GPT 家族更迭:共 16 篇文章
( f& V$ s. |/ C% [9 q八年 · OpenAI 的历史与现在:共 13 篇文章
0 _+ u: v; h2 m9 a干货 · GPT 相关研究与技术:共 18 篇文章" |$ G% C" Z+ B6 Z0 w7 ?/ n0 j7 ]
观点 · 专家谈 ChatGPT:共 8 篇文章: S, p1 u! W) c, `# Q4 f/ b
行业 · 应用与探索:共 23 篇文章
' L7 _" W3 ]6 @) L( U' z行业 · 同类产品:共 8 篇文章
4 p% k' P3 Q# u( Y- p THE END 9 G4 e2 G3 A7 I# K, P/ {3 G
投稿或寻求报道:content@jiqizhixin.com

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-21 09:46 , Processed in 0.038852 second(s), 24 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

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