稚久|GPT迭代成本「近乎荒谬」,300行代码带你玩转迷你版


稚久|GPT迭代成本「近乎荒谬」,300行代码带你玩转迷你版【新智元导读】最近 , 特斯拉AI总监Karpathy开源了一个名为minGPT的项目 , 用300行代码实现了GPT的训练 。 没有OpenAI的超级算力 , 该如何调整GPT这类语言模型的各种超参数?上周 Andrej Karpathy 发布了一个最小 GPT 实现的项目, 短短一周就收获了4200星 。
稚久|GPT迭代成本「近乎荒谬」,300行代码带你玩转迷你版从代码来看 , 他的minGPT实现确实精简到了极致 , 利用Karpathy的代码 , 你只需要实例化一个GPT模型 , 定好训练计划就可以开始了 , 整个实现只有300行PyTorch代码 。
稚久|GPT迭代成本「近乎荒谬」,300行代码带你玩转迷你版但是最有趣的部分是300行代码背后的故事 。 特别是在说明文档末尾 , 他解构了GPT-3的各种参数:
稚久|GPT迭代成本「近乎荒谬」,300行代码带你玩转迷你版GPT-3:96层 , 96个头 , d _ 模型12,288(175B 参数) 。
GPT-1-like: 12层 , 12个头 , d _ 模型768(125M参数)
GPT-3使用与 GPT-2相同的模型和架构 , 包括修改后的初始化方法等 。
在transformer层使用交替密集和局部稀疏注意力 , 类似于稀疏 Transformer 。 前馈层是瓶颈层的四倍 , 即 dff = 4 * dmodel 。
所有模型都使用 nctx = 2048 token的上下文窗口 。
Adam 的参数 β1 = 0.9, β2 = 0.95, eps = 10^?8 。
前3.75亿token用线性 LR 预热 , 剩下的2600亿token用余弦衰减法将学习率降至其值的10% 。

  • 「近乎荒谬」的迭代成本让GPT调参陷困境
GPT-3的工程师们是如何确定学习速率的 , 以及其他的7个超参数 + 架构?
GPT-3迭代成本相当高(一次训练可能需要几天到一周) 。 选择正确的超参数对于算法的成功至关重要 , 如果够幸运 , 模型的复杂度不高 , 可以使用超参数搜索方法 。
稚久|GPT迭代成本「近乎荒谬」,300行代码带你玩转迷你版超参数的搜索
事实上 , 许多研究人员都注意到 , 其实可以将其他问题中「穷举搜索」到的许多参数保持在冻结状态 , 并将搜索的复杂性降低到一些关键参数 , 如学习速率 。
另一方面 , 考虑到 GPT-3的庞大规模和训练成本 , 显然 OpenAI 的研究人员不可能通过超参数搜索来获得结果 , 单次训练可能花费数百万美元 。
那么 , 在这种「近乎荒谬」的迭代成本范式中 , 研究人员如何确定最终确定这些参数呢?
稚久|GPT迭代成本「近乎荒谬」,300行代码带你玩转迷你版在训练过程中是否有干扰 , 比如在检查点重新设置并重新开始?是否会用过超参数搜索越来越大的模型 , 然后猜测超参数的大致范围?
当真正的迭代不可能时 , 如何继续AI模型的训练?相信很多人工智能的研究者有类似的疑问 , 很多训练调参还是要靠「直觉」 。
但是GPT-3这种大规模模型的成功 , 是不是用了什么更科学的方法?
  • 算力无限时 , 模型性能不再「严重依赖」超参数
OpenAI其实发表过一篇论文 , 探讨了如何更好地训练GPT这类语言模型 。
随着模型大小 , 数据集集大小和用于训练的计算资源增加 , 语言模型的性能总是平稳提高的 , 为了获得最佳性能 , 必须同时放大所有三个因素 。 当另外两个因素没有限制时 , 模型性能与每个因素都有幂律关系 。


推荐阅读