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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 989|回复: 0

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

[复制链接]

1583

主题

693

回帖

6856

积分

论坛元老

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

8 e. _9 Q- Q1 m2 ], Z5 f8 S$ l; Z6 |" b: D9 q

' I( a4 q: c) V; @不过要做到这些,你需要熟悉 Python 和 NumPy,还要有一些训练神经网络的基本经验。作者表示,这篇博客旨在对 GPT 进行简单易懂的完整介绍。因此,作者只使用已经训练的模型权重来实现前向传递代码。
2 r# S/ w; L% t( U4 N" w
2 q+ n3 J8 ~  O0 T0 @+ k7 X* |# ^9 ^( o9 \; V7 j# I

& Q" J( w: N  {% w. Y" j  z* y代码地址:9 {6 c: p# M9 Y0 E# L
https://github.com/jaymody/picoGPT/blob/29e78cc52b58ed2c1c483ffea2eb46ff6bdec785/gpt2_pico.py#L3-L58
8 M5 A$ }) y: w. V! l8 [对于此项研究,Andrej Karpathy 给出了四个字:虽迟但到。想当初,Karpathy 构建的 minGPT 和 nanoGPT 还要 300 行代码。8 k0 U5 V/ e( w2 H2 d
( q; q" |% n' P$ N
4 Y/ B) m/ C0 n  C# Q- H3 c6 D- s

. U( Z" ^3 c8 Z0 S+ w8 [值得一提的是,这篇教程不是完全零门槛的。为了让读者明白,作者首先介绍了什么是 GPT、它的输入、输出如何等其他内容,介绍得都非常详细。7 i4 ?! l9 v' k+ D# s* {
9 D+ o1 r: l6 U' d9 R% ]- e6 |

( T- m, W  n6 o3 V& R# h4 ?9 i; y$ J9 h% U2 f' L
至于 GPT 到底能干什么,作者给出了几个示例,它能写电子邮件、总结一本书、给你 instagram 标题的想法、向 5 岁的孩子解释黑洞、用 SQL 编写代码等。
+ \7 Z2 r( @5 v5 W. ~" \通过仔细阅读这部分内容后,你能大致了解 GPT 的一些基础知识。有了这些背景介绍,接下来就是如何设置了。8 l  d. |% P7 _6 s. O8 S
项目介绍
: t( Q: |/ Q+ U/ k2 f设置1 c$ e5 o+ m4 `; Z6 j! X
这一章节主要介绍了如何设置编码器、超参数以及参数。
) C5 Z2 `- f- A3 Z
, P) `4 z0 L3 }# E2 Q! b! _
7 _: n9 \6 N6 A1 W3 ^/ V, Q: q4 Q! c( k/ r% r( f
你要做的,首先是克隆代码库:  U& W4 C$ s( |- d6 z% S2 Q5 A/ V

3 D+ G' {' o5 f* o, @$ C# a: Q- u5 ^/ E0 i% c# }! H4 F
, Q  O  U+ Q3 N' i- `. y+ w
然后安装依赖项:# a; g. t% y9 J0 y" t$ }3 ]# x/ k* l
4 e  U2 D. R: E! H2 D
- M. T9 f" P/ `. ^! l1 w

5 w) ^+ u2 `2 K9 c8 Z注意,如果你使用的是 M1 Macbook,在运行 pip install 之前,你需要在 requirements.txt 中将 tensorflow 更改为 tensorflow-macos。在这个项目下,文件包括 encoder.py、utils.py、gpt2.py、gpt2_pico.py:. g/ Q/ b! ~/ H9 e" X2 c: H1 O
encoder.py:包含 OpenAI BPE Tokenizer 的代码,直接取自 gpt-2 repo;+ W! E4 g, Q0 F
gpt2.py:包含 GPT 模型和生成代码,可以将其作为 python 脚本运行;% W" P: {6 y+ z+ z1 h
gpt2_pico.py:与 gpt2.py 相同,但是代码行数更少。+ X0 r4 u2 r" E( I  Z) M
其中 gpt2.py 需要从头开始实现,因此你要做的是先删除 gpt2.py 并重新创建一个空文件:
- ?! k, h% S9 i3 X4 d1 S$ M3 L
& i6 |# S9 G  P7 `! V( j) l2 W- ]; z, y8 d/ o) G. K
6 L1 G- I# @' ?# m. I/ w
然后将下列代码复制到 gpt2.py 中:5 Y- l2 j& T3 A! G# U) U. u" i2 E

+ G- W# Y0 \1 y, X( K, S8 D( I% h+ ^4 f  _2 G
- y: A6 C' O; d: w
上述代码包含 4 个主要部分:+ [/ c" T3 H) \( }( I% F, {( h
gpt2 函数是本次实现 GPT 的实际代码;6 _8 p- ~% H( ?
generate 函数实现自回归解码算法;1 s8 ]) h$ ~7 a& m! V
main 函数;# k( I2 _1 t0 F( `7 d; ^
fire.Fire ( main ) 将文件转换为 CLI 应用程序,以便最终可以运行代码:python gpt2.py "some prompt here"。
9 C9 D, x" e0 I! M! Rmain 函数包含有 encode、hparams、params 参数,执行下列代码:
  R& a: h# f7 X$ X% `3 c: x$ b. h5 h4 H5 D# ~

, B2 J6 V: B+ Y* p+ R+ @" i8 K9 T
9 \1 H' |8 T9 u设置完成之后,作者开始介绍编码器、超参数、参数的一些细节内容。就拿编码器来说,本文的编码器和 GPT-2 使用的 BPE tokenizer 一样。下面是该编码器编码和解码的一些文本示例:
$ Y+ ], y1 Y% g* z! c% s
& J. m# `( A$ S7 b/ m
8 n2 h/ q& ?0 @1 e3 {2 B
4 U: K7 f2 @  {$ \- x实际的 token 长这个样子:
" [& W+ |! x4 v+ W9 t
( Z; g) u. ^4 m" Y9 n- I7 O: @3 D. ]; M" l$ k6 Z9 ?

: `5 F% T+ g3 D需要注意,有时 token 是单词(例如 Not),有时它们是单词但前面有一个空格(例如 all, 代表一个空格),有时是单词的一部分(例如 capes 被拆分为 cap 和 es ) ,有时它们是标点符号(例如 .)。
/ t' p! F8 P' H3 nBPE 的一个好处是它可以对任意字符串进行编码,如果遇到词汇表中不存在的内容,它会将其分解为它能理解的子字符串:
% i8 z5 m& h3 C1 c" C( o
: a# X$ Q; q; f  {" Z5 ~2 K8 M- e( Y- b# C
& [9 p( {9 S3 B* ^3 h% A
更细节的内容不再赘述。接下来介绍基础神经网络,这一部分就更加基础了,主要包括 GELU、Softmax 函数以及 Layer Normalization 和 Linear。
' k$ a7 m5 _6 r: P) G; H0 p/ Q+ n0 a- d, B5 H1 y7 u8 t8 s

( |" E* b1 X$ W4 R# Y& q) q# ~8 t: A3 P& Z  t4 y1 o
每一小部分都有代码示例,例如在 Linear 部分,作者展示了标准矩阵乘法 + 偏置:
' H/ c. e/ U8 x# ]6 J9 f, B- ^; n% X: M1 I( O
; J+ p9 g. Y* e' N

! F  y& q9 |( _- q9 v线性层从一个向量空间投影到另一个向量空间的代码如下:
7 h5 p' Q$ ~& R; o/ P5 M3 P$ e
' `& ~+ y0 k: Y# C* z7 A# u' n- h4 _9 g' y: |1 w4 n3 b" K! o

" I4 w" V  N6 T1 _* ^; hGPT 架构
+ j, W1 u) s4 X% G这部分介绍 GPT 自身架构。- N7 h" r! r8 I6 f; B  U

  x4 t( E& P2 T, ?. P. v( a* H; i4 o+ n) G0 y+ i
: @( d8 ?  E2 j7 W
Transformer 架构如下:1 V+ O3 Q% M) P4 r

/ V5 h. c) d* g4 X# @" s! h: a8 C* L! s* ]$ u- \7 B# ^
2 f( A4 z* T& _: s
Transformer 仅使用解码器堆栈(图的右侧部分):+ H( Z/ i4 V2 |
& v9 `0 e/ S' i9 D

$ a$ f3 N* E+ o& v% z" P, M% _1 y7 Y# C2 u/ d, H7 r0 y" w
需要注意,由于摆脱了编码器,中间的交叉注意力层也被删除了。" p) M! ^, Q! b5 t8 ?) Y% c# @
在高层次上,GPT 体系架构有以下三个部分:7 P7 i7 [, p' h2 u1 z: Y' w' ~
文本 + 位置嵌入;
/ v) {6 F, I2 p7 U" o6 MTransformer 解码器堆栈;- o. a! d6 C0 T8 E
投影到词汇表。
$ E! I+ X. o$ Z8 K  r  Y. }代码就像下面这样:
3 d. B, g7 R' J8 `: [# s8 W6 `2 V+ L3 [: Y& ?1 f- B/ @" O! i# E' Y

1 i; `; f5 E# W" ^2 H5 R& [# G
3 t. O, A6 y$ K0 G) i% `代码部分截图
1 X7 S. w# z8 F4 [, `接下来更详细地分解以上三个部分中的每一个部分,这里也不再赘述。
& C/ A7 [/ x# f9 w. M# w以上就是作者对 GPT 的实现,接下来就是将它们组合在一起并运行代码,得到 gpt2.py。它的全部内容只有 120 行代码(如果删除注释和空格,则为 60 行)。
+ v! {, w# L) p* ?  G% N. Q# L  G作者通过以下方式测试结果:; G4 c6 ]* |* n' p2 H
1 j$ t- T9 e& k3 @

; [$ C2 |! b5 R$ j- z
5 v' b/ v$ E( {3 P) B输出结果如下:
3 z( Q+ Y* l, Q& r. r
8 X( o4 v0 r) u# C. K
- k$ W8 V2 t9 Q+ n" f" G- l1 r6 o( ~, H- A1 J8 ^
正如作者说的:这次实验成功了。3 H2 B+ L( L( J! ]1 C
本文只是跟着作者的思路大概介绍了整体流程,想要了解更多内容的小伙伴,可以参考原文链接。8 [+ o- ]# k/ i2 S- i
原文链接:https://jaykmody.com/blog/gpt-from-scratch/#basic-layers
- A2 p5 O1 L5 C6 i6 A全面学习 ChatGPT,机器之心准备了 89 篇文章合集
1 U, ~: P) M# P: B! P- ?" F这是一份全面、系统且高质量的 ChatGPT 文章合集,我们筛选出来了 89 篇相关文章,设计了阅读框架与学习路径,大家可以根据自己的需求进行浏览与研读。合集内容包括:8 v; S9 a7 d# d6 q1 A
ChatGPT 及 OpenAI 大事件时间轴( ^0 B# C% J& l) G. c+ n* B, A
概念 · 真正搞懂 ChatGPT:共 3 篇文章) W6 s2 N' d% T/ m, T2 z
研究 · GPT 家族更迭:共 16 篇文章
0 [( o. ~0 h0 ^, C7 y八年 · OpenAI 的历史与现在:共 13 篇文章5 ~) S6 H4 h; w% v- X. T% ]; ?( G
干货 · GPT 相关研究与技术:共 18 篇文章  H7 h* w  a+ k, F) d2 H
观点 · 专家谈 ChatGPT:共 8 篇文章5 f- o7 G5 z( v2 ]6 U1 R! N
行业 · 应用与探索:共 23 篇文章  }0 h4 x$ ~& c( |& b: `
行业 · 同类产品:共 8 篇文章1 g/ o' g( H4 X) Z& @- z
THE END , \* T1 j3 J( N
投稿或寻求报道:content@jiqizhixin.com

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-20 01:16 , Processed in 0.049744 second(s), 24 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

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