链载Ai

标题: 终于搞懂了梯度下降和scaling law, 原来OpenAI 4 年前早已验证 [打印本页]

作者: 链载Ai    时间: 2 小时前
标题: 终于搞懂了梯度下降和scaling law, 原来OpenAI 4 年前早已验证


最近我看了 2020 年 OpenAI 发布的论文《Scaling Laws for Neural Language Models》, 看完这篇论文我才终于理解AI 行业经常提到的scaling是什么,比如很多人都在讨论 "Scaling 能通往 AGI 吗?"
上个月了解Transformer 入门框架和为什么现在都不说BERT,甚至不提模型架构了?
在后一篇文章中,我介绍了2023年一位OpenAI员工在其博客中讨论的模型架构和数据对模型质量生成的影响。此外,我也提到了上个月前谷歌科学家Yi Tay关于各类模型架构的文章及他对模型架构与数据重要性的讨论,这些内容在AI界引发了短暂的关注。
回顾这篇2020年的论文,尤其是在GPT-3.5尚未席卷全球之前,OpenAI已经在训练过程中识别出对模型性能影响最显著的因素,并提出了这些因素的平滑性和可预测性实践规律:
language modeling performance improves smoothly and predictably
看了有三十多篇论文, 收获最大的,大都是 OpenAI早在人们研究 GPT 之前发布的,包括这里说到的 scaling Law, 包括 Prompt和 GPT 系列论文
这篇文章除了介绍 Openai 对 scaling law 的研究, 首先对模型的基本组成部分如梯度下降,损失函数以及模型参数的组成部分等概念进行了讲解,以帮助读者更好地理解Scaling相关的实践规律(注意,这些规律并非通用的恒定理论)

01

首先介绍 Transformer 模型的参数是怎么计算的, 包括哪些部分 :
(1)Embedding 层:用于将输入的标记(token)映射到高维的词嵌入空间,参数的数量取决于词汇表的大小(Vocabulary Size)和词嵌入的维度(Embedding Dimension,一般为 4096)
(2)Transformer 层:每个 Transformer 层包括多个子层,包括自注意力层self-attention layer, 一般有多个自注意力层和前馈神经网络层feedforward neural network layer,一般有两层全连接层;参数的数量取决于每个子层的权重和偏置参数数量,以及模型中的 Transformer 层数
(3)Layer Normalization:归一化层通常用于规范模型中间层的输出,这些层的参数数量取决于归一化层的输入维度
(4)Output 层:大多数语言模型在最后添加一个用于分类的线性层,用于将模型的输出映射到分类标签
在OpenAI scaling law 的图表中, 参数有时是排除 Embedding 层的

02

梯度消失, 梯度爆炸,梯度下降,损失函数到底是什么?
首先,我们来解释反向传播,因为模型是在反向传播的过程中进行训练的。训练模型的目的是找到权重等参数,让每一次正向传播时将损失降到最低,而反向传播算法正是找到这些最佳参数的一种方法
反向传播的简单理解:
反向传播是一种算法,用来计算每个参数对损失函数的影响(梯度)。通过反向传播,模型从输出层开始,逐层向回传递梯度到输入层。这样做的目的是找到一组最优的参数,使得模型的损失函数(预测结果和实际结果之间的差异)最小化
想象一下,A传话给B,B再传给C,C再传给D,最后D传给E。这是一个正向传播的过程:信息从A传到E
但是,当信息从A传到E时,可能会有一些变化或错误。E听到的内容和A最初传的话之间的差距就是我们说的“损失”或“loss”
为了让E能准确地听到A的话,我们需要通过训练不断调整传话的过程。这就是反向传播的过程:我们从E听到的内容开始,倒推回去,找到每个环节的问题并修正,直到A传的话能够正确地到达E
在这个过程中,我们通过调整“声音的大小”来改善传话效果。这个“声音的大小”可以类比为神经网络中的权重
权重合适时, 从 E 传到 A,大家都能听清楚, 权重不合适时, 比如如果声音太大,每个人都大声传话,声音可能会过于强烈,强烈到NaN 的程度,这就是“梯度爆炸”;相反,如果声音太小,信息会逐渐变弱,直到几乎听不见,这就是“梯度消失”
这个从 A 传到E 的概念也可以理解为神经网络从一层传到另一层
梯度Gradient是损失函数相对于权重参数的导数, 表示损失上升/下降的速度, 每一批次训练数据的大小 batch size 就主要由噪音的梯度变化决定
梯度为负数, 表示损失下降,也就是梯度下降, 我们希望达到的就是梯度下降 gradient descent;梯度为正数, 损失上升, 且绝对值越大, 上升/下降的速度越大,这种情况一般出现在我们需要最大化目标函数,找到最高点时
而在损失函数里, 我们是想要损失最小, 所以梯度下降会提到地更多, 在上图中,处于左半部分的区域
优化后的表达如下:
为了应对深度学习中的梯度缩小和梯度爆炸问题,通常用以下策略:
  1. 残差连接(Residual Connection):在Transformer模型中,通过允许原始输入直接传递至网络的更深层,这种方法有助于防止信息在深层网络中丢失。
  2. 残差网络(ResNet):在深层的卷积神经网络(CNN)中,残差连接用于解决梯度消失问题。对于浅层CNN,梯度消失现象较少发生。残差网络的广泛应用使得训练极深的网络成为可能。
  3. LSTM和GRU:这两种循环神经网络(RNN)的变体通过引入门控机制来解决梯度消失问题。
  4. 层归一化(Layer Normalization):通过对神经网络每一层的输出进行归一化处理,使其均值为0,方差为1,这有助于保持梯度在稳定范围内,减少梯度消失问题,并稳定训练过程。层归一化多用于RNN和Transformer;层归一化通常与激活函数一起使用,激活函数一般放在中间层,以确保网络的非线性特性和梯度的稳定性
  5. 激活函数:激活函数用于引入非线性,使神经网络能够处理复杂和非线性的数据。以下是几种常见的激活函数:





欢迎光临 链载Ai (https://www.lianzai.com/) Powered by Discuz! X3.5