Using neural nets to recognize handwritten digits
Learning with gradient descent
对于一个网络,它的代价函数:
C(w,b)≡12n∑x∥y(x)−a∥2
其中,w和b为权重和偏置,n为输入样本总数,y(x)为输入样本x所属的类别,也就是groundtruth,a为经过网络计算后得到的向量。另外,C可以称作是二次代价函数,或者均方误差(MSE)。
我们要做的就是尽可能找到一组权重和偏置(w,b)来最小化代价函数,也就是说让预测值越接近groundtruth越好。训练算法采用梯度下降法(gradient descent)。
最小化C(v),而v=v1,v2,…,其中用v来表示w和b。假设代价函数C有两个分量,
我们要做的就是找到曲面的最低点,因此要得到C的梯度信息。
ΔC≈∂C∂v1Δv1+∂C∂v2Δv2
注意啊,这里是变化值,不是梯度啊!
然后将上式中的导数部分提出来作为一个向量有:(∂C∂v1,∂C∂v2)T,那么有:
∇C≡(∂C∂v1,∂C∂v2)T
注意这里就是梯度信息了啊!
然后v1和v2也提出来作为一个向量:Δv≡(Δv1,Δv2)T,然后见证奇迹的时刻到了!ΔC≈∇C⋅Δv
再然后令Δv=−η∇C,得到:ΔC≈−η∇C⋅∇C=−η|∇C|2
其中,η就是所谓的学习率啦(learning rate)。这样,由于∥∇C∥2≥0,而且η为正数,那么就保证了ΔC≤0。
v→v′=v−η∇C
按照这种方式逼近全局最小值。 关于learning rate的选取,如果过大会导致ΔC>0,如果过小就会导致Δv变化的太慢。