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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1004|回复: 0

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

[复制链接]

1583

主题

693

回帖

6856

积分

论坛元老

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

: J! h5 ^" B! z, [
! x9 T7 g% i; [9 x  X- F不过要做到这些,你需要熟悉 Python 和 NumPy,还要有一些训练神经网络的基本经验。作者表示,这篇博客旨在对 GPT 进行简单易懂的完整介绍。因此,作者只使用已经训练的模型权重来实现前向传递代码。$ l; k5 h% m1 U/ U, {5 N5 m

' ?5 ~+ d6 g# X+ o6 s2 s1 W: {/ r+ O- _
. h, q$ g# H5 d5 F
代码地址:
, E8 s/ |8 D$ _, }2 ?) q- ehttps://github.com/jaymody/picoGPT/blob/29e78cc52b58ed2c1c483ffea2eb46ff6bdec785/gpt2_pico.py#L3-L585 z% }# m9 W2 H3 d" ^
对于此项研究,Andrej Karpathy 给出了四个字:虽迟但到。想当初,Karpathy 构建的 minGPT 和 nanoGPT 还要 300 行代码。1 o5 t1 c" ]) {6 g

+ ~% a; f9 t3 }, P  O
7 J( Y/ R, y/ O& j; Y7 V+ ?* t4 F7 T. C0 U4 `5 ]# `( o
值得一提的是,这篇教程不是完全零门槛的。为了让读者明白,作者首先介绍了什么是 GPT、它的输入、输出如何等其他内容,介绍得都非常详细。& d) M6 d. I5 \
8 U+ L: f7 p; t' Y, B( G9 M

7 @9 @" l5 |; U; C: }" @5 f. D/ J
# _+ j- h, p: _3 j6 i- e* q至于 GPT 到底能干什么,作者给出了几个示例,它能写电子邮件、总结一本书、给你 instagram 标题的想法、向 5 岁的孩子解释黑洞、用 SQL 编写代码等。* i" i# ?" r3 _2 A
通过仔细阅读这部分内容后,你能大致了解 GPT 的一些基础知识。有了这些背景介绍,接下来就是如何设置了。" {. b7 A: V3 g/ L& ]( M4 ]
项目介绍( l- S/ H) L4 \  p
设置
, R4 s$ Z# Z) G5 y这一章节主要介绍了如何设置编码器、超参数以及参数。
8 V5 z4 t, D; s0 u+ n
* U3 J" B5 x. p5 T3 b, c# v# w: Q" m2 ?+ q
$ B, K& t# S6 S! S9 P; L
你要做的,首先是克隆代码库:( R. Q1 E% O0 j+ M+ o6 K3 C

+ _# q9 u: G6 l+ J) N0 U6 {+ q% R) G
/ @3 s/ p9 c" _( d8 C( Q1 ?* ~, ^+ H. x  Y
然后安装依赖项:( @9 q, T7 h9 l8 i, r2 h

, C9 o6 s7 I) S' L- l: F7 P9 Z5 e% P% J/ F+ S# V( h0 h

( r& H) L. E0 j4 z注意,如果你使用的是 M1 Macbook,在运行 pip install 之前,你需要在 requirements.txt 中将 tensorflow 更改为 tensorflow-macos。在这个项目下,文件包括 encoder.py、utils.py、gpt2.py、gpt2_pico.py:% e3 T" o" S" \$ J
encoder.py:包含 OpenAI BPE Tokenizer 的代码,直接取自 gpt-2 repo;4 J+ D9 ~+ e- X! J* F
gpt2.py:包含 GPT 模型和生成代码,可以将其作为 python 脚本运行;) |4 M% ]" t$ d& w
gpt2_pico.py:与 gpt2.py 相同,但是代码行数更少。
; D& I; I3 o1 I( v. E: `+ M, z其中 gpt2.py 需要从头开始实现,因此你要做的是先删除 gpt2.py 并重新创建一个空文件:4 s6 N1 g9 J" e; R! A, e! Z

7 O1 f2 m9 E0 ?/ n. q1 B; m$ ]8 B6 o0 t  J6 k9 W# Z* z' r
* d, k. u4 A) U* a" i
然后将下列代码复制到 gpt2.py 中:
; h/ G! o' H4 D$ F- c/ s3 |9 U+ b. a' w5 I0 X
- Y& I; C/ K. z. S" b

4 Z) e$ ?/ ]: }  j1 y0 g( V8 y上述代码包含 4 个主要部分:
2 p2 p$ l- K2 w7 u# x+ |; J0 V: @gpt2 函数是本次实现 GPT 的实际代码;
- I- n' P0 n; ?, s- G' N' s4 Igenerate 函数实现自回归解码算法;8 U! T2 |8 F8 c9 t( A
main 函数;
" u4 q$ @: s+ C: u4 Mfire.Fire ( main ) 将文件转换为 CLI 应用程序,以便最终可以运行代码:python gpt2.py "some prompt here"。
- C& b$ U9 [/ ]0 ^! jmain 函数包含有 encode、hparams、params 参数,执行下列代码:3 E( d" ?7 E/ y/ W5 Y' y; l
; {% E4 S/ R% J/ u  }
  R; a" X: J9 O5 m2 f) @' l" D

7 N9 j6 j" v+ _设置完成之后,作者开始介绍编码器、超参数、参数的一些细节内容。就拿编码器来说,本文的编码器和 GPT-2 使用的 BPE tokenizer 一样。下面是该编码器编码和解码的一些文本示例:
; j7 ~  _! c5 \: ?# h. H/ b# l( H  D  l9 q, k1 f& F
" W: X2 y/ D; v, h

+ @2 Y4 h; X5 a, C4 f实际的 token 长这个样子:
& `: a; E) x5 s- r- ~7 w2 Y- L! f' @- J8 e8 J
& ]) y% W" e( C. t3 z

9 F& i# Z* H9 F6 V6 D4 f! t需要注意,有时 token 是单词(例如 Not),有时它们是单词但前面有一个空格(例如 all, 代表一个空格),有时是单词的一部分(例如 capes 被拆分为 cap 和 es ) ,有时它们是标点符号(例如 .)。1 x7 S$ g) d0 ?8 i2 b9 Q! i- N
BPE 的一个好处是它可以对任意字符串进行编码,如果遇到词汇表中不存在的内容,它会将其分解为它能理解的子字符串:7 o  \; {& D1 n) u0 S& I

6 [$ S% s+ H& K
: q: F4 W' `* D$ X6 k/ f7 c) `$ h, C+ a# r" G, l& t
更细节的内容不再赘述。接下来介绍基础神经网络,这一部分就更加基础了,主要包括 GELU、Softmax 函数以及 Layer Normalization 和 Linear。! k( C6 i) z' i. t% p. V1 g

6 b+ b0 d+ ]) A4 l% G
' Z* P) Q+ ?  y6 Z5 @* C9 E
4 l: E) H1 W# l; {; ?* B每一小部分都有代码示例,例如在 Linear 部分,作者展示了标准矩阵乘法 + 偏置:
) ?; m6 [3 J% v4 ?7 x
, n" L8 H- j2 f3 e, s$ V
( u! j9 }7 x: Z% y( `
  O' Q- U# \/ ?; u& Y2 n, ?+ B: ]2 o线性层从一个向量空间投影到另一个向量空间的代码如下:
5 O) W8 W' O+ Y" v6 a* ~! [' k7 ?. h( Y% ^' P" z, D

6 Y! U' d) z- z' T4 t5 b$ ^' Z$ \; _1 Q9 x3 F: \1 e0 N
GPT 架构
5 l# b% [) c7 m- x6 F这部分介绍 GPT 自身架构。
5 K1 Y& H$ F1 S* Y, X
* ~  R4 h0 M4 ~, \" q
$ I  S1 y, I3 p' m; t7 C( F8 i6 w: ?
  ~. E8 V% {# J: mTransformer 架构如下:8 I+ S) C- z' k: Z, i+ E. K" q8 `

1 t% |/ c8 J- w# P! l
( q5 r+ W. [# y/ I& C3 q$ _9 Z+ T( C8 F5 a& X/ e
Transformer 仅使用解码器堆栈(图的右侧部分):
7 R$ t9 `) C  t8 Z" u. l6 w
* s; w! |& o* T; Q  y1 a2 f8 F: b$ J1 A

: l+ ?; `4 o  b3 J& J. y7 i需要注意,由于摆脱了编码器,中间的交叉注意力层也被删除了。. z; r4 ]) r2 n7 E
在高层次上,GPT 体系架构有以下三个部分:
" Y7 O4 c* ]# g! l文本 + 位置嵌入;
: \" M  A6 G+ H# P* rTransformer 解码器堆栈;
, C* x* E) M) }& R' V+ G5 a投影到词汇表。- ?+ U( \% ?# |( u+ e& V
代码就像下面这样:
1 c5 @$ L; e1 z" e* J$ Y1 ?
0 P% e( L. L1 z' _
; f) D  G: b8 ]8 E) G1 Q" K" \- d# T8 {& b$ ^
代码部分截图
5 c& @. w9 e* ]7 F" x  \3 T' K接下来更详细地分解以上三个部分中的每一个部分,这里也不再赘述。6 j7 T2 ?9 s) s3 _
以上就是作者对 GPT 的实现,接下来就是将它们组合在一起并运行代码,得到 gpt2.py。它的全部内容只有 120 行代码(如果删除注释和空格,则为 60 行)。
" I- f, D6 y; _9 S5 D作者通过以下方式测试结果:
, D$ S1 F4 \" a1 O9 @+ \
: }- f. {8 f7 O) k! N& q4 V0 H. Q% q  [8 x5 a

0 A' s) V3 B4 c0 r( i输出结果如下:
" v3 z: x! W) E* f) a3 f" @- T3 e9 T0 H# s5 g. [8 j+ y! V
, A. e% X; V0 K# _, \4 P
+ ^; Q- ]3 W9 H. }
正如作者说的:这次实验成功了。2 A1 @# V# S; K2 ], i
本文只是跟着作者的思路大概介绍了整体流程,想要了解更多内容的小伙伴,可以参考原文链接。# f4 d5 {% f& }
原文链接:https://jaykmody.com/blog/gpt-from-scratch/#basic-layers/ a+ a8 g9 s$ B5 R: H7 |; n
全面学习 ChatGPT,机器之心准备了 89 篇文章合集* k# w0 f: i/ g; G2 V  \
这是一份全面、系统且高质量的 ChatGPT 文章合集,我们筛选出来了 89 篇相关文章,设计了阅读框架与学习路径,大家可以根据自己的需求进行浏览与研读。合集内容包括:
& G* \; V* ~) R7 XChatGPT 及 OpenAI 大事件时间轴4 T7 w' p) e! {% E1 h
概念 · 真正搞懂 ChatGPT:共 3 篇文章
7 S% A3 b6 R7 o& Q! @) x研究 · GPT 家族更迭:共 16 篇文章) w5 J% r! v% p# e3 C$ N
八年 · OpenAI 的历史与现在:共 13 篇文章
  }4 d+ f$ }* |& K& [4 w干货 · GPT 相关研究与技术:共 18 篇文章8 S6 B6 d4 ^( V& G6 }5 a. a( B3 K! u
观点 · 专家谈 ChatGPT:共 8 篇文章
/ s6 g9 o/ ?: o2 ~' u行业 · 应用与探索:共 23 篇文章
" y0 W) `3 h5 a- Q9 J行业 · 同类产品:共 8 篇文章* s- g" O+ Y* T* W
THE END # p' O1 e- ], s3 D
投稿或寻求报道:content@jiqizhixin.com

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-4-21 11:10 , Processed in 0.042605 second(s), 24 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

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