除了随机梯度初始化(SGD),在深度学习中还有很多其他的方法可以对网络进行优化
1. 减少网络收敛时间
2. 除了学习率(learning rate)还有更多其他的参数
3. 比SGD到达更高的分类准确率
一. 自适应学习率
为了更好的理解优化的方法,这里我们都是用伪代码的方式来进行描述。
首先,我们先来看我们最熟悉的SGD的方法
W += -lr * dW
其中我们有三个变量:
1. W:权值矩阵
2. lr:学习率
3. dW:权值W的梯度
其中,我们的学习率是固定的,假设它很足够小,loss在训练的过程中就会下降。
(1)Adagrad
Adagrad在网络中会自适应的改变学习率,在参数改变不明显的时候学习率变化更频繁,在参数改变明显的地方学习率变化减弱。我们来看看Adagrad的更新公式:
cache += (dW ** 2)
W += -lr * dW / (np.sqrt(cache) + eps)
注意到的第一个参数是cache,这个参数表示每一个参数梯度平方的总和,会在训练过程每一次小的mini-batch进行更新。当观察cache时,我们可以发现哪些参数更新的快,哪些更新的慢。
接着使用lr*dW除以cache的平方(这里加一个epsilon的原因是为了防止除数为0)。发现,当ca