本页面提供了理解大型语言模型 (LLM) 所必需的神经网络基础知识的全面概述。虽然神经网络是机器学习中一个广泛的主题,但我们专门关注构成 LLM 开发基础的概念、架构和训练方法。有关基于这些基础知识的自然语言处理概念,请参阅 自然语言处理。
神经网络是受人脑结构启发的计算模型。其核心是数学函数,通过一系列加权连接和非线性变换,将输入数据转换为期望的输出。
神经网络由相互连接的人工神经元层组成
神经元之间的每个连接都带有一个权重,该权重决定了其影响,每个神经元都有一个偏置项,用于调整其激活阈值。
来源: README.md120
每个神经元执行两个关键操作
激活函数引入非线性,使网络能够学习复杂模式
| 功能 | 公式 | 属性 | 用途 |
|---|---|---|---|
| Sigmoid | σ(x) = 1/(1+e^-x) | 范围:[0, 1] | 分类,早期隐藏层 |
| Tanh | tanh(x) = (e^x - e^-x)/(e^x + e^-x) | 范围:[-1, 1] | 隐藏层,归一化输出 |
| ReLU | ReLU(x) = max(0, x) | 范围:[0, ∞) | 隐藏层,更快的训练 |
| Leaky ReLU | LReLU(x) = max(0.01x, x) | 范围:(-∞, ∞) | 防止“死亡 ReLU”问题 |
来源: README.md120
训练神经网络涉及迭代地调整权重和偏置以最小化预测误差。
来源: README.md121
损失函数量化了预测输出和实际输出之间的差异
| 损失函数 | 目的 | 公式 |
|---|---|---|
| 均方误差 (MSE) | 回归任务 | MSE = (1/n) ∑(y_pred - y_true)² |
| 交叉熵 | 分类任务 | CE = -∑(y_true * log(y_pred)) |
| 二元交叉熵 | 二元分类 | BCE = -(y_true * log(y_pred) + (1-y_true) * log(1-y_pred)) |
来源: README.md121
优化算法决定如何更新权重
| 算法 | 描述 | 优点 |
|---|---|---|
| 梯度下降 | 使用完整数据集更新权重 | 稳定的收敛 |
| 随机梯度下降 (SGD) | 在每个样本后更新权重 | 更快的迭代,有助于跳出局部最小值 |
| 小批量 SGD | 在小批量后更新权重 | 速度和稳定性之间的平衡 |
| Adam | 具有动量的自适应学习率 | 更快的收敛,处理稀疏梯度 |
| RMSprop | 自适应学习率 | 适用于非平稳目标 |
来源: README.md121
过拟合发生在模型在训练数据上表现良好,但在未见数据上表现不佳时。
| 技术 | 描述 | 实现 |
|---|---|---|
| L1 正则化 | 将权重的绝对值添加到损失中 | L1 = λ ∑|w| |
| L2 正则化 | 将权重的平方添加到损失中 | L2 = λ ∑w² |
| Dropout | 在训练期间随机禁用神经元 | 保留概率 p(通常为 0.5-0.8) |
| 早停 | 当验证错误增加时停止训练 | 监控验证指标 |
| 数据增强 | 创建新的训练样本 | 特定领域的转换 |
来源: README.md122
大型语言模型通过几项架构创新,从基本神经网络发展而来。
最简单的全连接层神经网络。MLP 是构建更复杂架构的基础。
驱动现代 LLM 的 Transformer 在神经网络基础之上,引入了自注意力机制,以更有效地处理序列数据。
Transformer 中的前馈网络组件本质上是一个应用于序列中每个位置的小型 MLP,这表明基本神经网络概念对于高级架构仍然至关重要。
来源: README.md123 README.md169-173
虽然理论理解很重要,但实际实现对于掌握神经网络至关重要。
PyTorch 因其灵活性和动态计算图,是实现神经网络的流行框架。
PyTorch 中的基本 MLP 实现遵循此结构
此实现定义了一个具有 ReLU 激活的两层 MLP。可以根据具体要求,使用其他层或不同的激活函数来扩展此架构。
来源: README.md123
对于那些希望加深对神经网络理解的人,建议参考以下资源
来源: README.md126-131