1.梯度下降
这里 w 表示所有的网络中权重的集合,b 是所有的偏置,n 是训练输入数据的个数,a 是表示当输入为 x 时输出的向量,求和则是在总的训练输入 x 上进行的。输出 a 取决于 x, w和 b。采用梯度下降的算法来找到能最小化二次代价函数 C(w, b) 的权重和偏置。
假设 C 是一个有 变量 v 1 , v 2 的二元函数,在 v1 和 v2 方向分别移动一个很小的量,即 ∆v1 和 ∆v2 时,
ΔC≈∂C∂v1Δv1+∂C∂v2Δv2.
我们要寻找一种选择 ∆v 1 和 ∆v 2 的方法使得 ∆C 为负,定义 ∆v 为 v 变化的向量,∆v ≡ (∆v 1 , ∆v 2 ) T,用 ∇C 来表示梯度向量
∇C≡(∂C∂v1,∂C∂v2)T.
∆C 的表达式可以被重写为:
ΔC≈∇C⋅Δv.
如何选取 ∆v 才能让∆C 为负数。假设我们选取:
Δv=−η∇C,
这里的 η 是个很小的正数(称为学习速率)。
∆C ≈ −η∇C ·∇C = −η∥∇C∥ 2 。由于 ∥∇C∥ 2 ≥ 0,这保证了 ∆C ≤ 0,则C 会一直减小,不会增加。
更新规则:
v→v′=v−η∇C.
可以把这个更新规则看做定义梯度下降算法
将用权重和偏置代替变量 v j 。也就是说, 现在变量由两个分量组成:w k 和 b l ,而梯度向量 ∇C 则有相应的分量 ∂C/∂w k 和 ∂C/∂b l 。用这些分量来写梯度下降的更新规则,我们得到:
wkbl→→w′k=wk−η∂C∂wkb′l=bl−η∂C∂bl.
2. 随机梯度下降
代价函数有着这样的形式 C=1n∑xCx, 它是遍及每个训练样本代价 Cx≡∥y(x)−a∥22 的平均值。为了计算梯度∇C, 我们需要为每个训练输入 x 单独地计算梯度值 ∇Cx 然后求平均值,∇C=1n∑x∇Cx. 当训练输入的数量过大时会花费很⻓时间,这样会使学习变得相当缓慢。
随机梯度下降通过随机选取小量的 m 个训练输入来工作。我们将这些随机的训练输入标记为 X 1 , X 2 , . . . , X m ,并把它们称为一个小批量数据(mini-batch)。假设样本数量m 足够大,我们期望 ∇C X j 的平均值大致相等于整个 ∇C x 的平均值,即
∑mj=1∇CXjm≈∑x∇Cxn=∇C,
这里的第二个求和符号是在整个训练数据上进行的。交换两边我们得到
假设 w k 和 b l 表示我们神经网络中权重和偏置
wkbl→→w′k=wk−ηm∑j∂CXj∂wkb′l=bl−ηm∑j∂CXj∂bl,
其中两个求和符号是在当前小批量数据中的所有训练样本 X j 上进行的。然后我们再挑选另一随机选定的小批量数据去训练。直到我们用完了所有的训练输入,这被称为完成了一个训练迭代期(epoch)。然后我们就会开始一个新的训练迭代。