[算法学习] 从0开始掌握反向传播算法

[算法学习] 从0开始掌握反向传播算法

[算法学习] 从0开始掌握反向传播算法 [算法学习] 从0开始掌握反向传播算法 Created on February 26, 2024 12309 13124 7 3 1. SGD(Stochastic Gradient Descent): Momentum Momentum能够加速SGD在相关方向上的收敛速度,并抑制振荡,使得训练过程更快、更稳定。并且有助于优化过程逃离局部最小值或鞍点,因为累积的速度可以帮助参数跨越这些小的障碍。 更新规则: 使用方法:tf.keras.optimizers.SGD(learning rate=0.01, momentum=0.9) 这里的momentum = 0.9 表示在每次参数更新时,当前梯度的贡献为当前梯度的100%,而过去梯度的累积(动量)的贡献为其90%。这意味着新的更新不仅受当前梯度的影响,还受到之前累积动量的显著影响,这有助于加速学习过程,并提高算法的稳定性。 Nesterov Nesterov加速梯度(Nesterov Accelerated Gradient, NAG)在目标函数的曲率较大时,对于加速收敛有非常显著的效果。Nesterov动量通过提前查看梯度的方向,可以更快地调整参数更新的方向,而在接近最优解时,Nesterov动量能够减少参数更新的振荡,使训练过程更加稳定。 更新规则: 其中, 是动量系数, 表示在预测点的梯度 使用方法:tf.keras.optimizers.SGD(learning rate=0.01, momentum=0.9, nesterov=True) 2. RMSprop(Root Mean Square Propagation): RMSprop是一种自适应学习率的方法,特别适合处理非平稳目标和循环神经网络(RNN)。 RMSprop的核心思想是维护一个平均值,这个平均值是过去梯度平方的指数衰减平均。这个平均值会用来调整每个参数的学习率,使得参数更新更加稳定。 更新规则: RMSprop的优缺点 RMSprop在非凸优化问题上(特别是处理深度学习问题时)表现较好,但仍然需要调整超参数(虽然没有SGD那么多),并且在某些问题上不如更先进的Adam(比如训练初期和在稀疏梯度上的问题)。 使用方法:tf.keras.optimizers.RMSprop(learning rate=0.001, rho=0.9, epsilon=1e 08) 3. Adam(Adaptive Moment Estimation): Adam是一种非常流行的优化器,它对于稀疏梯度特别有效,因为它结合了Momentum(帮助累积过去的非零梯度,从而增强稀疏信号)和自适应学习率(对不同频率的特征进行不同程度的更新)。这两个特点使得Adam在处理稀疏梯度时,既能够捕捉到稀疏信号,又能够避免学习率过快下降,从而在许多稀疏数据场景下,比如NLP和一些稀疏特征的机器学习任务中表现优异。 稀疏梯度 稀疏梯度是指在梯度向量中,大部分元素都是零或接近零,而只有少数元素包含重要的信息。 这种情况在机器学习和深度学习中相当常见,特别是在处理自然语言处理(NLP)、推荐系统、以及某些类型的图像处理任务时。在NLP中,经常使用嵌入层将词汇映射到高维空间。在一个大词汇表中,每次训练只更新一小部分词向量,导致梯度在大部分维度上为零。 而在许多实际应用中,输入数据本身就是稀疏的,比如推荐系统中的用户 物品交互矩阵。除此之外,使用ReLU激活函数也可能会导致稀疏梯度,因为它会把所有负值的输入设置为0。 更新规则: Adam的优缺点: 由于每个参数都有独立的学习率,Adam非常适合处理稀疏梯度和非稳定目标,在很多深度学习中都适用。但由于需要计算过去梯度的一阶和二阶矩衰减,算力消耗要比SGD要高。通常Adam在默认参数就能取得不错的效果,但在特殊情况下仍然需要调整超参数。 使用方法:tf.keras.optimizers.Adam(learning rate=0.001) 4. Adagrad(Adaptive Gradient Algorithm): Adagrad通过将学习率除以所有梯度的平方根之和来调整每个参数的学习率,适合处理稀疏数据。对于频繁更新的参数,Adagrad 会减小其学习率,而对于不频繁更新的参数,Adagrad 会增大其学习率。 更新规则: Adagrad的优缺点: 在处理包含大量稀疏特征的数据时表现良好,如自然语言处理中的词嵌入。但由于梯度平方项的累积,学习率会不断减小,最终可能变得过于小,使得训练过程提前结束。对于非稀疏梯度的问题,Adagrad的表现不如Adam. 使用方法:tf.keras.optimizers.Adagrad(learning rate=0.01) 5. Adadelta: Adadelta是Adagrad的一个扩展,旨在减少其学习率随时间不断减小的激进程度。通过限制每个参数保存的累积梯度平方的数量,从而避免了学习率持续下降至过小的问题。Adadelta 的提出主要是为了减少 Adagrad 学习率单调递减的副作用,同时避免了对学习率的初始选择。 Adadelta 的核心思想是只累积最近的 w 个梯度的平方,而不是累积所有的梯度平方。这种方式通过引入衰减率,相当于只计算固定窗口大小的梯度平方和,避免了长期累积导致的学习率持续下降。 更新规则: Adadelta的优缺点 Adadelta 无需设置默认的学习率,相比Adagrad减少了提前训练终止的风险,但相比于一些更简单的优化器,Adadelta 的实现更复杂,且在实际应用中,很多情况下 Adam 仍然是更优的选择,特别是在需要快速收敛的场景。 使用方法:optimizer = tf.keras.optimizers.Adadelta(learning rate=1.0, rho=0.95) 6. Nadam(Nesterov accelerated Adaptive Moment Estimation): Nadam是Adam优化器的一个变体,结合了Nesterov Momentum(NAG)和Adam优化器的特点。它基本上是在Adam的基础上加入了Nesterov Momentum,旨在结合两者的优点:Adam的自适应梯度调整和Nesterov加速的先行更新策略。 Nadam 通过结合 Nesterov Momentum 到 Adam 的框架中,使得参数更新更为精细和高效。在Nesterov Momentum中,参数更新考虑了未来的梯度方向,这使得更新更为前瞻性和稳定。 更新规则: Nadam的优缺点 相比adam,由于结合了Nesterov的先行更新,提升了优化的速度和稳定性。但相比于传统的SGD,Nadam有更多的超参数需要调整,也需要更多的算力资源。 使用方法:optimizer = tf.keras.optimizers.Nadam(learning rate=0.001, beta 1=0.9, beta 2=0.999) 这里,learning rate、beta 1 和 beta 2 都是可以调整的超参数,分别对应于步长、一阶矩估计的衰减率和二阶矩估计的衰减率。 —————————————————————————————————— 分割线 以上就是基础的反向传播算法知识了,下面是一些水平测试题,大家可以初步检验一下对知识点的理解: 1. 基础理解题: ◦ 解释反向传播算法的工作原理。 ◦ 反向传播算法中的“链式法则”是什么?请举例说明。 ◦ 为什么反向传播算法是高效的?与直接计算每个参数的梯度相比,它有什么优势? 2. 计算题: ◦ 考虑一个简单的神经网络,它有一个输入层(1个神经元),一个隐藏层(2个神经元,使用ReLU激活函数),和一个输出层(1个神经元,使用线性激活函数)。给定输入 x=2,隐藏层权重 w1=1,w2=−1,输出层权重 w3=2,w4=3,无偏置项,目标输出 y=1,使用均方误差损失函数。计算一次前向传播的结果,并进行一次反向传播,更新权重。 3. 应用题: ◦ 给定一个具体的深度学习任务,例如图像分类,解释在进行反向传播时,如何通过梯度下降法更新卷积层的权重。 ◦ 假设你在训练一个深度神经网络,并且观察到过拟合现象。解释你如何使用反向传播算法结合正则化技术(如L2正则化)来减轻过拟合。 4. 概念应用题: ◦ 如果一个神经网络使用了非常深的架构,那么在反向传播过程中可能会遇到什么问题?请解释梯度消失和梯度爆炸的概念,并提出可能的解决方案。 ◦ 请解释在反向传播中,动量(Momentum)和自适应学习率(如Adam)等概念如何帮助提高神经网络的训练效率和效果。 1. SGD(Stochastic Gradient Descent): Momentum Momentum能够加速SGD在相关方向上的收敛速度,并抑制振荡,使得训练过程更快、更稳定。并且有助于优化过程逃离局部最小值或鞍点,因为累积的速度可以帮助参数跨越这些小的障碍。 更新规则: 使用方法:tf.keras.optimizers.SGD(learning rate=0.01, momentum=0.9) 这里的momentum = 0.9 表示在每次参数更新时,当前梯度的贡献为当前梯度的100%,而过去梯度的累积(动量)的贡献为其90%。这意味着新的更新不仅受当前梯度的影响,还受到之前累积动量的显著影响,这有助于加速学习过程,并提高算法的稳定性。 Nesterov Nesterov加速梯度(Nesterov Accelerated Gradient, NAG)在目标函数的曲率较大时,对于加速收敛有非常显著的效果。Nesterov动量通过提前查看梯度的方向,可以更快地调整参数更新的方向,而在接近最优解时,Nesterov动量能够减少参数更新的振荡,使训练过程更加稳定。 更新规则: 其中, 是动量系数, 表示在预测点的梯度 Momentum Momentum能够加速SGD在相关方向上的收敛速度,并抑制振荡,使得训练过程更快、更稳定。并且有助于优化过程逃离局部最小值或鞍点,因为累积的速度可以帮助参数跨越这些小的障碍。 更新规则: 使用方法:tf.keras.optimizers.SGD(learning rate=0.01, momentum=0.9) 这里的momentum = 0.9 表示在每次参数更新时,当前梯度的贡献为当前梯度的100%,而过去梯度的累积(动量)的贡献为其90%。这意味着新的更新不仅受当前梯度的影响,还受到之前累积动量的显著影响,这有助于加速学习过程,并提高算法的稳定性。 Nesterov Nesterov加速梯度(Nesterov Accelerated Gradient, NAG)在目标函数的曲率较大时,对于加速收敛有非常显著的效果。Nesterov动量通过提前查看梯度的方向,可以更快地调整参数更新的方向,而在接近最优解时,Nesterov动量能够减少参数更新的振荡,使训练过程更加稳定。 更新规则: 其中, 是动量系数, 表示在预测点的梯度 使用方法:tf.keras.optimizers.SGD(learning rate=0.01, momentum=0.9, nesterov=True) 2. RMSprop(Root Mean Square Propagation): RMSprop是一种自适应学习率的方法,特别适合处理非平稳目标和循环神经网络(RNN)。 RMSprop的核心思想是维护一个平均值,这个平均值是过去梯度平方的指数衰减平均。这个平均值会用来调整每个参数的学习率,使得参数更新更加稳定。 更新规则: RMSprop的优缺点 RMSprop在非凸优化问题上(特别是处理深度学习问题时)表现较好,但仍然需要调整超参数(虽然没有SGD那么多),并且在某些问题上不如更先进的Adam(比如训练初期和在稀疏梯度上的问题)。 使用方法:tf.keras.optimizers.RMSprop(learning rate=0.001, rho=0.9, epsilon=1e 08) RMSprop是一种自适应学习率的方法,特别适合处理非平稳目标和循环神经网络(RNN)。 RMSprop的核心思想是维护一个平均值,这个平均值是过去梯度平方的指数衰减平均。这个平均值会用来调整每个参数的学习率,使得参数更新更加稳定。 更新规则: RMSprop的优缺点 RMSprop在非凸优化问题上(特别是处理深度学习问题时)表现较好,但仍然需要调整超参数(虽然没有SGD那么多),并且在某些问题上不如更先进的Adam(比如训练初期和在稀疏梯度上的问题)。 使用方法:tf.keras.optimizers.RMSprop(learning rate=0.001, rho=0.9, epsilon=1e 08) 3. Adam(Adaptive Moment Estimation): Adam是一种非常流行的优化器,它对于稀疏梯度特别有效,因为它结合了Momentum(帮助累积过去的非零梯度,从而增强稀疏信号)和自适应学习率(对不同频率的特征进行不同程度的更新)。这两个特点使得Adam在处理稀疏梯度时,既能够捕捉到稀疏信号,又能够避免学习率过快下降,从而在许多稀疏数据场景下,比如NLP和一些稀疏特征的机器学习任务中表现优异。 稀疏梯度 稀疏梯度是指在梯度向量中,大部分元素都是零或接近零,而只有少数元素包含重要的信息。 这种情况在机器学习和深度学习中相当常见,特别是在处理自然语言处理(NLP)、推荐系统、以及某些类型的图像处理任务时。在NLP中,经常使用嵌入层将词汇映射到高维空间。在一个大词汇表中,每次训练只更新一小部分词向量,导致梯度在大部分维度上为零。 而在许多实际应用中,输入数据本身就是稀疏的,比如推荐系统中的用户 物品交互矩阵。除此之外,使用ReLU激活函数也可能会导致稀疏梯度,因为它会把所有负值的输入设置为0。 更新规则: Adam的优缺点: 由于每个参数都有独立的学习率,Adam非常适合处理稀疏梯度和非稳定目标,在很多深度学习中都适用。但由于需要计算过去梯度的一阶和二阶矩衰减,算力消耗要比SGD要高。通常Adam在默认参数就能取得不错的效果,但在特殊情况下仍然需要调整超参数。 使用方法:tf.keras.optimizers.Adam(learning rate=0.001) Adam是一种非常流行的优化器,它对于稀疏梯度特别有效,因为它结合了Momentum(帮助累积过去的非零梯度,从而增强稀疏信号)和自适应学习率(对不同频率的特征进行不同程度的更新)。这两个特点使得Adam在处理稀疏梯度时,既能够捕捉到稀疏信号,又能够避免学习率过快下降,从而在许多稀疏数据场景下,比如NLP和一些稀疏特征的机器学习任务中表现优异。 稀疏梯度 稀疏梯度是指在梯度向量中,大部分元素都是零或接近零,而只有少数元素包含重要的信息。 这种情况在机器学习和深度学习中相当常见,特别是在处理自然语言处理(NLP)、推荐系统、以及某些类型的图像处理任务时。在NLP中,经常使用嵌入层将词汇映射到高维空间。在一个大词汇表中,每次训练只更新一小部分词向量,导致梯度在大部分维度上为零。 而在许多实际应用中,输入数据本身就是稀疏的,比如推荐系统中的用户 物品交互矩阵。除此之外,使用ReLU激活函数也可能会导致稀疏梯度,因为它会把所有负值的输入设置为0。 更新规则: Adam的优缺点: 由于每个参数都有独立的学习率,Adam非常适合处理稀疏梯度和非稳定目标,在很多深度学习中都适用。但由于需要计算过去梯度的一阶和二阶矩衰减,算力消耗要比SGD要高。通常Adam在默认参数就能取得不错的效果,但在特殊情况下仍然需要调整超参数。 使用方法:tf.keras.optimizers.Adam(learning rate=0.001) 4. Adagrad(Adaptive Gradient Algorithm): Adagrad通过将学习率除以所有梯度的平方根之和来调整每个参数的学习率,适合处理稀疏数据。对于频繁更新的参数,Adagrad 会减小其学习率,而对于不频繁更新的参数,Adagrad 会增大其学习率。 更新规则: Adagrad的优缺点: 在处理包含大量稀疏特征的数据时表现良好,如自然语言处理中的词嵌入。但由于梯度平方项的累积,学习率会不断减小,最终可能变得过于小,使得训练过程提前结束。对于非稀疏梯度的问题,Adagrad的表现不如Adam. 使用方法:tf.keras.optimizers.Adagrad(learning rate=0.01) Adagrad通过将学习率除以所有梯度的平方根之和来调整每个参数的学习率,适合处理稀疏数据。对于频繁更新的参数,Adagrad 会减小其学习率,而对于不频繁更新的参数,Adagrad 会增大其学习率。 更新规则: Adagrad的优缺点: 在处理包含大量稀疏特征的数据时表现良好,如自然语言处理中的词嵌入。但由于梯度平方项的累积,学习率会不断减小,最终可能变得过于小,使得训练过程提前结束。对于非稀疏梯度的问题,Adagrad的表现不如Adam. 使用方法:tf.keras.optimizers.Adagrad(learning rate=0.01) 5. Adadelta: Adadelta是Adagrad的一个扩展,旨在减少其学习率随时间不断减小的激进程度。通过限制每个参数保存的累积梯度平方的数量,从而避免了学习率持续下降至过小的问题。Adadelta 的提出主要是为了减少 Adagrad 学习率单调递减的副作用,同时避免了对学习率的初始选择。 Adadelta 的核心思想是只累积最近的 w 个梯度的平方,而不是累积所有的梯度平方。这种方式通过引入衰减率,相当于只计算固定窗口大小的梯度平方和,避免了长期累积导致的学习率持续下降。 更新规则: Adadelta的优缺点 Adadelta 无需设置默认的学习率,相比Adagrad减少了提前训练终止的风险,但相比于一些更简单的优化器,Adadelta 的实现更复杂,且在实际应用中,很多情况下 Adam 仍然是更优的选择,特别是在需要快速收敛的场景。 使用方法:optimizer = tf.keras.optimizers.Adadelta(learning rate=1.0, rho=0.95) Adadelta是Adagrad的一个扩展,旨在减少其学习率随时间不断减小的激进程度。通过限制每个参数保存的累积梯度平方的数量,从而避免了学习率持续下降至过小的问题。Adadelta 的提出主要是为了减少 Adagrad 学习率单调递减的副作用,同时避免了对学习率的初始选择。 Adadelta 的核心思想是只累积最近的 w 个梯度的平方,而不是累积所有的梯度平方。这种方式通过引入衰减率,相当于只计算固定窗口大小的梯度平方和,避免了长期累积导致的学习率持续下降。 更新规则: Adadelta的优缺点 Adadelta 无需设置默认的学习率,相比Adagrad减少了提前训练终止的风险,但相比于一些更简单的优化器,Adadelta 的实现更复杂,且在实际应用中,很多情况下 Adam 仍然是更优的选择,特别是在需要快速收敛的场景。 使用方法:optimizer = tf.keras.optimizers.Adadelta(learning rate=1.0, rho=0.95) 6. Nadam(Nesterov accelerated Adaptive Moment Estimation): Nadam是Adam优化器的一个变体,结合了Nesterov Momentum(NAG)和Adam优化器的特点。它基本上是在Adam的基础上加入了Nesterov Momentum,旨在结合两者的优点:Adam的自适应梯度调整和Nesterov加速的先行更新策略。 Nadam 通过结合 Nesterov Momentum 到 Adam 的框架中,使得参数更新更为精细和高效。在Nesterov Momentum中,参数更新考虑了未来的梯度方向,这使得更新更为前瞻性和稳定。 更新规则: Nadam的优缺点 相比adam,由于结合了Nesterov的先行更新,提升了优化的速度和稳定性。但相比于传统的SGD,Nadam有更多的超参数需要调整,也需要更多的算力资源。 使用方法:optimizer = tf.keras.optimizers.Nadam(learning rate=0.001, beta 1=0.9, beta 2=0.999) 这里,learning rate、beta 1 和 beta 2 都是可以调整的超参数,分别对应于步长、一阶矩估计的衰减率和二阶矩估计的衰减率。 Nadam是Adam优化器的一个变体,结合了Nesterov Momentum(NAG)和Adam优化器的特点。它基本上是在Adam的基础上加入了Nesterov Momentum,旨在结合两者的优点:Adam的自适应梯度调整和Nesterov加速的先行更新策略。 Nadam 通过结合 Nesterov Momentum 到 Adam 的框架中,使得参数更新更为精细和高效。在Nesterov Momentum中,参数更新考虑了未来的梯度方向,这使得更新更为前瞻性和稳定。 更新规则: Nadam的优缺点 相比adam,由于结合了Nesterov的先行更新,提升了优化的速度和稳定性。但相比于传统的SGD,Nadam有更多的超参数需要调整,也需要更多的算力资源。 使用方法:optimizer = tf.keras.optimizers.Nadam(learning rate=0.001, beta 1=0.9, beta 2=0.999) 这里,learning rate、beta 1 和 beta 2 都是可以调整的超参数,分别对应于步长、一阶矩估计的衰减率和二阶矩估计的衰减率。 —————————————————————————————————— 分割线 以上就是基础的反向传播算法知识了,下面是一些水平测试题,大家可以初步检验一下对知识点的理解: 1. 基础理解题: ◦ 解释反向传播算法的工作原理。 ◦ 反向传播算法中的“链式法则”是什么?请举例说明。 ◦ 为什么反向传播算法是高效的?与直接计算每个参数的梯度相比,它有什么优势? ◦ 解释反向传播算法的工作原理。 ◦ 反向传播算法中的“链式法则”是什么?请举例说明。 ◦ 为什么反向传播算法是高效的?与直接计算每个参数的梯度相比,它有什么优势? 2. 计算题: ◦ 考虑一个简单的神经网络,它有一个输入层(1个神经元),一个隐藏层(2个神经元,使用ReLU激活函数),和一个输出层(1个神经元,使用线性激活函数)。给定输入 x=2,隐藏层权重 w1=1,w2=−1,输出层权重 w3=2,w4=3,无偏置项,目标输出 y=1,使用均方误差损失函数。计算一次前向传播的结果,并进行一次反向传播,更新权重。 ◦ 考虑一个简单的神经网络,它有一个输入层(1个神经元),一个隐藏层(2个神经元,使用ReLU激活函数),和一个输出层(1个神经元,使用线性激活函数)。给定输入 x=2,隐藏层权重 w1=1,w2=−1,输出层权重 w3=2,w4=3,无偏置项,目标输出 y=1,使用均方误差损失函数。计算一次前向传播的结果,并进行一次反向传播,更新权重。 3. 应用题: ◦ 给定一个具体的深度学习任务,例如图像分类,解释在进行反向传播时,如何通过梯度下降法更新卷积层的权重。 ◦ 假设你在训练一个深度神经网络,并且观察到过拟合现象。解释你如何使用反向传播算法结合正则化技术(如L2正则化)来减轻过拟合。 ◦ 给定一个具体的深度学习任务,例如图像分类,解释在进行反向传播时,如何通过梯度下降法更新卷积层的权重。 ◦ 假设你在训练一个深度神经网络,并且观察到过拟合现象。解释你如何使用反向传播算法结合正则化技术(如L2正则化)来减轻过拟合。 4. 概念应用题: ◦ 如果一个神经网络使用了非常深的架构,那么在反向传播过程中可能会遇到什么问题?请解释梯度消失和梯度爆炸的概念,并提出可能的解决方案。 ◦ 请解释在反向传播中,动量(Momentum)和自适应学习率(如Adam)等概念如何帮助提高神经网络的训练效率和效果。 ◦ 如果一个神经网络使用了非常深的架构,那么在反向传播过程中可能会遇到什么问题?请解释梯度消失和梯度爆炸的概念,并提出可能的解决方案。 ◦ 请解释在反向传播中,动量(Momentum)和自适应学习率(如Adam)等概念如何帮助提高神经网络的训练效率和效果。 🌲 作者:吵爷 作者:吵爷 基础入门 反向传播算法是深度学习和神经网络领域的重要一步。反向传播算法是一种在神经网络中用于优化权重的方法。它使用链式法则来计算损失函数关于每个权重的梯度。这些梯度然后用于更新权重,以减少神经网络的计算损失,提升模型的准确性。 这部分属于个人兴趣,主要研究机器学习的底层逻辑,不需要强行去理解,有兴趣的同学可以看看。下面的文章会用一个简单易懂的例子解释反向传播算法的工作原理。有兴趣一起研究底层算法的同学也可以私聊,我也不是科班出身,下面涉及的高数知识大部分也是GPT学的。 涉及基础数学知识 导数(Derivative): 导数描述了一个函数在某一点处的瞬时变化率。比如函数y = 3x^2 2x +1, 当x = 1时,导数为4,意味着 x每变动一个极小值(比如0.0001),y会相应变动4倍。 偏导数(Partial Derivative): 当函数有多个变量时,偏导数表示函数关于其中一个变量的变化率,同时保持其他变量不变。在神经网络中,通常处理的是多变量的函数。 链式法则(Chain Rule): 这是微积分中一个非常重要的原理,用于计算复合函数的导数。反向传播算法就是基于链式法则来工作的。 梯度(Gradient): 梯度是一个向量,表示多变量函数的偏导数。在神经网络中,我们通过计算损失函数的梯度来更新参数。 计算原理 前向传播(Forward Propagation): 输入数据通过网络传播,每一层计算其输出。 计算损失(Loss Calculation): 在输出层,计算预测值与实际值之间的损失。 反向传播(Backpropagation): 计算损失函数关于每个权重的梯度。这通常涉及到链式法则,从输出层逐层向后传播。 权重更新(Weight Update): 使用梯度下降或其他优化算法来更新网络中的权重。 这里补充一个概念: 学习率(Learning Rate): 在更新权重时使用的一个参数,决定了更新的幅度。 具体实例 假设我们有一个非常简单的神经网络,包含: • 一个输入层(1个神经元) • 一个隐藏层(2个神经元)可以理解为潜在的结果影响因素 • 一个输出层(1个神经元)可以理解为显性的结果影响因素 tips:关于神经网络的可视化理解,可以参考网站: https://playground.tensorflow.org/ 步骤1:前向传播 假设 前向传播的结果: 步骤2:计算损失 我们现在将计算损失。假设我们的目标预测(真实值)是 y=2, 使用均方误差(MSE)作为损失函数,计算如下: 损失函数的值为0.5625,表示我们的神经网络预测与实际值之间的误差。 步骤3:反向传播 1. 计算损失函数关于输出层输出的梯度。 2. 使用链式法则,计算损失函数关于每个权重的梯度。 输出层权重 v 1 的梯度为 2w 1 x(v 1 w 1 x+v 2 w 2 x−2) 输出层权重 v 2 的梯度为 2w 2 x(v 1 w 1 x+v 2 w 2 x−2) 隐藏层权重 w 1 的梯度为 2v 1 x(v 1 w 1 x+v 2 w 2 x−2) 隐藏层权重 w 2 的梯度为 2v 2 x(v 1 w 1 x+v 2 w 2 x−2) 然后将之前设定的参数数值输入公式计算实际梯度(x =1,w1 = 0.5, w2 = 1, v1 = 1.5,v2 = 2) 结果如下: 输出层权重 v 1 的梯度为0.75。 输出层权重 v 2 的梯度为 1.5。 隐藏层权重 w 1 的梯度为2.25。 隐藏层权重 w 2 的梯度为 3。 步骤4:权重更新 最后一步是使用这些梯度来更新权重。权重的更新通常使用以下公式: 假设我们使用一个小的学习率,比如 0.1(可以根据实际情况调整),我们可以更新每个权重。 更新后的权重值: 输出层权重 v 1 的梯度更新为 0.275。 输出层权重 v 2 的梯度更新为 0.7。 隐藏层权重 w 1 的梯度更新为 1.425。 隐藏层权重 w 2 的梯度更新为 1.85。 再次计算方差的结果是0.17

在 小宇宙note 阅读完整内容