我觉得GPT老师的语言功底比大多数的博客主要好(包括我自己),阅读起来更易理解,而且哪里不明白还可以直接问gpt老师,孜孜不倦,尽心尽责,全天待命,究极贴心。有这么厉害的一个老师,不学习简直暴殄天物。
于是乎我准备立一个flag,挑战跟着GPT老师学习365天,每天我都会整理自己的学习心得和脉络(文字大部分都是GPT直接生成的,我觉得比我自己写肯定好多了)感谢gpt老师!跪谢
全系列文章: 跟着GPT学习-AI系列
成本函数
在神经网络训练过程中,成本函数(也称为损失函数)是用于衡量模型预测与实际目标之间差异的指标。通过最小化成本函数,可以优化模型参数,使得模型的预测尽可能接近真实值。
平方误差成本函数(Mean Squared Error, MSE)
平方误差成本函数是回归问题中常用的损失函数。它计算预测值与实际值之间差异的平方和的平均值。
反向传播的梯度下降
反向传播是一种用于计算神经网络成本函数负梯度的算法。负梯度向量指示了如何调整网络的权重和偏差以最有效地降低成本。
梯度向量可以是非常高维的。例如,对于一个有 13,002 个参数(权重和偏差)的神经网络,梯度向量就是一个 13,002 维的向量。这么高维的空间超出了我们的直观理解范围。
梯度向量的每个分量表示成本函数对每个相应权重和偏差的敏感程度。具体来说,每个分量的大小告诉我们,如果稍微调整对应的权重或偏差,成本函数会发生多大的变化。
- 敏感度:梯度分量越大,表示成本函数对该权重或偏差的变化越敏感。
- 方向:梯度的方向告诉我们应该朝哪个方向调整权重和偏差以最有效地降低成本。
上面图片展示了一个神经网络的结构,包括输入层(784个节点)、两个隐藏层和输出层(10个节点)。输入图像是一个手写的数字“2”。
这张图片显示了计算一个训练样本的成本函数。假设当前网络的权重和偏差还没有经过良好训练,因此输出层的激活值是随机的。
这张图片放大了一个神经元的计算过程。假设我们关注的神经元的当前激活值为0.2。其激活值定义为前一层所有激活值的加权和加上偏差,然后经过一个激活函数(如S型压缩或ReLU)。为了增加这个神经元的激活值,我们有三种途径:
- 增加偏差。
- 增加权重。
- 改变前一层的激活值。
偏差应该如何调整呢?
与数字 2 神经元相关的偏差应该增加,因为这将导致数字 2 神经元的激活增加。所有其他输出激活都应该减少,这需要减少它们相关的偏差。对于这个特定的训练示例,这些变化将以更低的成本提供更准确的预测。
权重应该如何调整?
-
最亮神经元的影响:
- 前一层中最亮(激活值最大)的神经元与当前层的连接对成本函数的影响最大。
- 因为这些权重乘以更大的激活值,所以增加这些权重对成本函数的影响大于增加与较暗神经元的连接权重。
-
梯度下降的目标:
- 不仅关注每个组件(权重和偏差)是否应该向上或向下移动,还关注哪些组件能带来最大的收益。
- 通过调整对成本函数影响最大的组件,可以更有效地优化网络。
-
赫布理论的类比:
- 赫布理论的核心思想:“一起激发的神经元会连接在一起”。
- 在反向传播中,权重的最大增加(连接的最大加强)发生在最活跃的神经元和我们希望变得更加活跃的神经元之间。
- 看到某个输入(如数字“2”)时激发的神经元与思考该输入时激发的神经元之间的联系更为紧密。
-
训练示例的权重变化:
- 每个训练示例的权重实际变化反映了赫布理论的思想,即强化活跃神经元之间的连接。
- 尽管未经训练的网络并没有真正“思考”输入,但通过标签指导的训练过程实际上在“教”网络该如何思考。
如何更改激活值?
- 目标: 通过改变前一层的所有激活度来提高特定神经元的激活度。
- 原理: 增强与该神经元连接的具有正权重的激活度,减弱与负权重连接的激活度。
🧠 操作步骤
- 识别权重:
- 找出与目标神经元(如数字 2 神经元)相连的正权重和负权重。
- 调整激活度:
- 增强与正权重相连的激活度。
- 减弱与负权重相连的激活度。
⚖️ 比例变化
- 权重比例: 根据每个权重的大小,按比例调整相应激活度的变化。
- 激活量比例: 类似于按比例改变权重,按比例增加或减少激活量,最大化收益。
⚙️ 实际操作限制
- 无法直接影响激活度,只能控制权重和偏差。
- 记录所需更改对理解和调节权重、偏差很有帮助。
对所有训练示例重复
我们刚刚经历的一切仅仅记录了单个训练示例如何推动众多权重和偏差。到目前为止,我们仅确定了可以改善数字 2 的结果的权重和偏差的推动因素,但我们还需要考虑所有其他数字。如果我们只听取数字 2 的图像想要表达的意思,网络最终就会被激励将所有图像归类为 2。
稍微缩小一点,你还可以对其他每个训练示例执行相同的反向传播程序,记录每个示例希望如何改变权重和偏差。然后,你将所有这些期望的改变平均起来。每个训练示例对于权重和偏差的调整方式以及相对强度都有自己的要求。通过对所有训练示例的要求进行平均,我们可以得到在单个梯度下降步骤中给定权重或偏差应如何改变的最终结果。
粗略地说,这些对每个权重和偏差的平均推动的集合就是成本函数的负梯度,或者至少是与之成比例的东西。我说“大致来说”只是因为我还没有对这些推动进行定量分析。但如果你理解了我上面提到的每一个变化,为什么有些变化的比例比其他变化大,以及如何将它们全部加在一起,那么你就会理解反向传播实际上在做什么的机制。
随机梯度下降
- 小批量: 将训练数据随机打乱并分成小批量,每个小批量包含 100 个训练示例。
- 随机梯度下降(SGD): 使用每个小批量而非整个训练集计算梯度下降步骤。
🔄 优化过程
-
数据随机化和分批:
- 随机打乱训练数据。
- 分成多个小批量,每个小批量包含 100 个训练示例。
-
小批量梯度计算:
- 根据每个小批量的数据计算梯度。
- 每个小批量提供一个相当好的梯度近似值。
-
迭代更新参数:
- 对每个小批量执行梯度下降步骤。
- 每步仅占总时间的 1/100(假设有 100 个小批量)。
-
整体效果:
- 经过 100 步后,每条训练数据都有机会影响最终结果。
- 尽管每步梯度近似不准确,但整体收敛速度加快。
🤔 随机梯度下降的特点
- 速度: 每个梯度下降步骤的计算时间显著减少。
- 不精确性: 每个步骤只提供了成本函数的近似梯度。
- 效率: 总体上更快地接近最优解,尽管路径不如全批量梯度下降平滑。
🎯 比喻说明
- 传统梯度下降就像一个人缓慢而慎重地走下山坡,每步都经过精心计算。
- 随机梯度下降则像一个醉汉跌跌撞撞地从山上走下来,但速度更快。