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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1063|回复: 0

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

[复制链接]

1583

主题

693

回帖

6856

积分

论坛元老

积分
6856
发表于 2023-2-27 19:45:26 | 显示全部楼层 |阅读模式 来自 中国
机器之心报道: z$ n1 _/ c7 u2 O6 F
机器之心编辑部
* y6 ]) q; k( U5 [7 D2 NGPT 模型实现起来有时也很简单。
, i# O7 v. O' O( M6 _4 b当前,大型语言模型(LLM)被认为是人工智能突破的方向。人们正在尝试用它们做各种复杂的事情,比如问答、创作、数学推理以及编写代码等。近段时间 ChatGPT 持续的爆火是最好的例证。
  [+ _* a& r, R! S& B然而,对于机器学习从业者来说,大模型的门槛很高:因为体量太大难以训练,很长时间里这个方向一直被大公司垄断。不过最近,简化 GPT 模型的方法越来越多了。1 月中旬,前特斯拉 AI 高级总监 Andrej Karpathy(现已回归 OpenAI)就发布了从零开始构建 GPT 模型的完整教程。不过训练出的 GPT 和 OpenAI 的 GPT-3 比较,两者规模差距达 1 万 - 100 万倍。  N* E9 M7 i; i
近日,加拿大麦克马斯特大学的一位软件工程本科生 Jay Mody 在导入 NumPy 库下,仅用 60 行代码就从头实现了一个 GPT 模型,并将其命名为 PicoGPT。不仅如此,他还将经过训练的 GPT-2 模型权重加载到自己的实现中,并生成了一些文本。下面为 60 行代码展示。/ C6 H$ ?! A0 H6 e% _6 I4 S
" w5 y0 B$ h* {6 d. q3 z

2 g& x& a# o3 S
# H' s' O- W9 Y不过要做到这些,你需要熟悉 Python 和 NumPy,还要有一些训练神经网络的基本经验。作者表示,这篇博客旨在对 GPT 进行简单易懂的完整介绍。因此,作者只使用已经训练的模型权重来实现前向传递代码。
( m* D2 a8 N2 i# \  _3 w! h! a, ~1 h0 M3 G: o- |

6 ]" r) |: n. ]* d; D# s! D# r% B6 }* b! y3 F% U
代码地址:/ g- P) r6 w5 b' k
https://github.com/jaymody/picoGPT/blob/29e78cc52b58ed2c1c483ffea2eb46ff6bdec785/gpt2_pico.py#L3-L586 ~; y( X" E! O5 _
对于此项研究,Andrej Karpathy 给出了四个字:虽迟但到。想当初,Karpathy 构建的 minGPT 和 nanoGPT 还要 300 行代码。2 T. Z! s) A7 p/ j9 c

8 L$ w) U6 ~7 \/ c) C) K5 K: r
6 W; E# m: K6 d* H2 ?4 y% \& S* X# F& p2 K) T9 {) z% g: J+ I& ]3 F
值得一提的是,这篇教程不是完全零门槛的。为了让读者明白,作者首先介绍了什么是 GPT、它的输入、输出如何等其他内容,介绍得都非常详细。1 X3 B9 E* Q. f- S( r

% y* Y  R0 a" N% I* ?
: H; R; _: x( X0 l5 C6 E9 a' X5 b
. K5 l' r. {. l' ?! x至于 GPT 到底能干什么,作者给出了几个示例,它能写电子邮件、总结一本书、给你 instagram 标题的想法、向 5 岁的孩子解释黑洞、用 SQL 编写代码等。
6 e3 c! g6 e& p# c$ S通过仔细阅读这部分内容后,你能大致了解 GPT 的一些基础知识。有了这些背景介绍,接下来就是如何设置了。
) [) d9 {3 m9 Q项目介绍
2 b' H' u0 P4 l5 g$ }设置
' s! k* |( M1 s! t; g5 E& ^- E& G2 \7 @这一章节主要介绍了如何设置编码器、超参数以及参数。9 G  Y8 z6 c* Q% Y& m
5 q% n/ u1 V% \( t2 ?' \

0 c" T( i# E6 y* L
) @$ G* I. j+ a) I你要做的,首先是克隆代码库:  S* D! D( |+ H7 a: i
; r, U* _) n0 p' P% r# R

: L- x( n* C  c  A0 |; ~
8 N7 k/ u! ?5 J1 Q. M然后安装依赖项:
2 {: c; X6 e0 X/ b" h: c
; w% u8 t( K+ v/ C6 L7 g; i& B$ j# h# |+ L

. `1 W/ `2 Q, [注意,如果你使用的是 M1 Macbook,在运行 pip install 之前,你需要在 requirements.txt 中将 tensorflow 更改为 tensorflow-macos。在这个项目下,文件包括 encoder.py、utils.py、gpt2.py、gpt2_pico.py:
+ k1 z$ z6 `0 `% {encoder.py:包含 OpenAI BPE Tokenizer 的代码,直接取自 gpt-2 repo;
7 @  Q' Y5 |3 V; M; Cgpt2.py:包含 GPT 模型和生成代码,可以将其作为 python 脚本运行;
+ r, z7 J3 @; c( x: Ygpt2_pico.py:与 gpt2.py 相同,但是代码行数更少。  l7 C/ \! J, D+ J0 A9 }2 I
其中 gpt2.py 需要从头开始实现,因此你要做的是先删除 gpt2.py 并重新创建一个空文件:- S3 i, `; R" y, G- ~, {# s8 A

  x  U+ u4 p$ Q; K: u" J* {4 T" s5 V9 ^; B+ t2 l

0 }) N' G6 O% g, w# K3 ^+ s/ d然后将下列代码复制到 gpt2.py 中:
" s" M* P3 p3 Q" P/ C: X+ g
1 [5 [2 g  X& w9 b$ l4 S
. d% h3 }. ^1 |0 U' H. ~+ o) j* x
上述代码包含 4 个主要部分:
; v" x! l- s  ^9 F! @/ I  xgpt2 函数是本次实现 GPT 的实际代码;
; y* h; }6 ?4 V5 G6 d5 Pgenerate 函数实现自回归解码算法;
8 k+ i% W' q, Zmain 函数;
' @" V3 w/ }$ F/ u/ hfire.Fire ( main ) 将文件转换为 CLI 应用程序,以便最终可以运行代码:python gpt2.py "some prompt here"。
3 s1 t7 W* J$ Kmain 函数包含有 encode、hparams、params 参数,执行下列代码:
/ m8 M; j% W2 Q) [. j5 Z  T0 `: s, }$ A" O- b

- s7 A" h5 F! C+ ^$ R- `6 q9 ]8 l
设置完成之后,作者开始介绍编码器、超参数、参数的一些细节内容。就拿编码器来说,本文的编码器和 GPT-2 使用的 BPE tokenizer 一样。下面是该编码器编码和解码的一些文本示例:6 I4 R- @4 b% Z* u5 K+ K# f$ o$ x
! w! A: q4 u: x  o& Y

) ]2 Q" D; \3 V# i2 h
0 O, E  p& z% o; i4 p- q# w实际的 token 长这个样子:  X4 a& t% Q8 e, D% w6 U% m, [/ Y
$ ?& \6 N* w" Z$ d7 l+ E5 t

6 d  q9 n) K- ?" o( o" J9 M( F: b9 }; _1 P; Q, W/ t6 b: s% }  Y+ S: f
需要注意,有时 token 是单词(例如 Not),有时它们是单词但前面有一个空格(例如 all, 代表一个空格),有时是单词的一部分(例如 capes 被拆分为 cap 和 es ) ,有时它们是标点符号(例如 .)。% S# m; w. Q6 y0 V* i) I  \0 v6 {
BPE 的一个好处是它可以对任意字符串进行编码,如果遇到词汇表中不存在的内容,它会将其分解为它能理解的子字符串:
$ M! M0 u9 ]. O* R3 Y5 g
0 p4 N" L+ E: ]. j. ]5 U0 a. Q* v
, g; S4 v7 Z$ W% z6 V! Y& r6 h, P( ]" G; B8 S% j
更细节的内容不再赘述。接下来介绍基础神经网络,这一部分就更加基础了,主要包括 GELU、Softmax 函数以及 Layer Normalization 和 Linear。$ `' P0 [, G* }3 X

0 B: P9 t' O+ R$ G  D  q6 Z" I" d" ^) W
/ l  C7 u3 h8 F/ e9 o0 X" M
每一小部分都有代码示例,例如在 Linear 部分,作者展示了标准矩阵乘法 + 偏置:
/ _! v0 U+ r( v* b% u
' o4 y2 j/ _/ r# I5 \& b) _+ \& C; z, C% F0 I

' K. {4 \9 B- g  a/ y3 v6 T) s线性层从一个向量空间投影到另一个向量空间的代码如下:
3 v# x/ b6 V1 W
& C5 F: q% z! `/ ?$ k) }7 `, X1 N& Z& M. V: v8 s. H

6 Z( U" [4 d# A4 U5 sGPT 架构
7 ^- k* X" c/ I% O8 T' w这部分介绍 GPT 自身架构。6 l1 M4 J4 t$ x9 r
) G( ^4 q! M" ^3 d

& [+ ~& r1 Q% F& d3 m
4 {6 ]4 a3 h6 P1 J% h+ OTransformer 架构如下:4 k& I5 i* H( G: g; p
- [0 {& m9 ^# A9 U+ x# N/ K% P

  y. `6 r0 N7 t- f
0 c  L, P0 q. c6 UTransformer 仅使用解码器堆栈(图的右侧部分):
: H1 `3 V0 v& z- g2 }/ h: Z* T, X1 P$ U+ q. u

4 `/ e, i* r9 v! f5 Z* F  P
: Z1 Z" o, Y7 ^# n8 S$ P& h+ V需要注意,由于摆脱了编码器,中间的交叉注意力层也被删除了。) i: ^1 \; r. P5 ]3 u, N* i
在高层次上,GPT 体系架构有以下三个部分:8 y1 P9 F# N1 w
文本 + 位置嵌入;" ]& Y  Q0 }( e% q! ?
Transformer 解码器堆栈;
  C. d7 }) Z3 ^( s投影到词汇表。
) W  T: w, M8 Q* p, Y# j& K$ e代码就像下面这样:. d9 J+ I) D( p, s# o
1 q: T9 W  z4 x* m! |8 h8 X' f8 [+ \* s
3 X' ~, T  a* P2 [

0 {3 \) Z/ R: x' i6 O; A代码部分截图, X  Y; e- M1 @; M5 U
接下来更详细地分解以上三个部分中的每一个部分,这里也不再赘述。# p7 s8 Q2 J" D3 f8 I+ |" ^  _
以上就是作者对 GPT 的实现,接下来就是将它们组合在一起并运行代码,得到 gpt2.py。它的全部内容只有 120 行代码(如果删除注释和空格,则为 60 行)。
# h) E$ V9 X9 U: w作者通过以下方式测试结果:0 d8 U8 u7 U  l; k9 I4 N" `" D

; L' D4 ^7 R3 h* G& P) G& z" g: n; t2 b0 [  x! j

! G" Q( |/ }( ?* W输出结果如下:' A2 n9 S8 l# Q0 I: X5 H3 h
! b" Z; R* _: n  z# o+ G( Q
7 j5 S; i( M$ o  i
# Z# j/ R% A. {& a' m0 b! P0 ~
正如作者说的:这次实验成功了。
0 R$ F9 J- C* _2 c! A! B. a, W1 ?本文只是跟着作者的思路大概介绍了整体流程,想要了解更多内容的小伙伴,可以参考原文链接。
) N: f6 M8 X, s! Y$ Y! g* s原文链接:https://jaykmody.com/blog/gpt-from-scratch/#basic-layers( j& |: N: t* l$ j
全面学习 ChatGPT,机器之心准备了 89 篇文章合集; y- s+ g; r$ V6 g9 I
这是一份全面、系统且高质量的 ChatGPT 文章合集,我们筛选出来了 89 篇相关文章,设计了阅读框架与学习路径,大家可以根据自己的需求进行浏览与研读。合集内容包括:
( a- V% h3 \! u5 Q; OChatGPT 及 OpenAI 大事件时间轴  v. S2 S, S8 a& X' W% D2 g! `) r
概念 · 真正搞懂 ChatGPT:共 3 篇文章/ m# H  {1 X3 |" B* V, c" s2 A9 i
研究 · GPT 家族更迭:共 16 篇文章4 Q5 h4 C; v) m6 w
八年 · OpenAI 的历史与现在:共 13 篇文章
! T6 L  E. O4 Q- [1 Y干货 · GPT 相关研究与技术:共 18 篇文章
. ]: `/ q- U6 Y* Q7 A! `2 ~观点 · 专家谈 ChatGPT:共 8 篇文章
% k( x8 n4 v( B/ U行业 · 应用与探索:共 23 篇文章
3 j; H+ ]) Y* B+ Z" l6 N1 D% s4 t行业 · 同类产品:共 8 篇文章
6 D9 q8 w8 V* O6 e" O THE END 7 Z. B+ j8 V/ ?& q. @' {
投稿或寻求报道:content@jiqizhixin.com

本帖子中包含更多资源

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

×

帖子地址: 

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-10-15 20:05 , Processed in 0.055656 second(s), 24 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2026 Discuz! Team.

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