神经网络发展至今,优化算法层出不穷,但大底是出不了梯度下降的框框架架。
梯度下降法 Gradient Descent
公式:
选择负梯度方向进行参数更新,算是常规操作了。对于多层神经网络如何执行梯度下降:
def update_parameters_with_gd(parameters, grads, learning_rate):
"""
Update parameters using one step of gradient descent
Arguments:
parameters -- python dictionary containing your parameters to be updated:
parameters['W' + str(l)] = Wl
parameters['b' + str(l)] = bl
grads -- python dictionary containing your gradients to update each parameters:
grads['dW' + str(l)] = dWl
grads['db' + str(l)] = dbl
learning_rate -- the learning rate, scalar.
Returns:
parameters -- python dictionary containing your updated parameters
"""
L = len(parameters) // 2 # number of layers in the neural networks
# Update rule for each parameter
for l in range(L):
parameters['W' + str(l+1)] = parameters['W' + str(l+1)] - learning_rate * grads['dW' + str(l+1)]
parameters['b' + str(l+1)] = parameters['b' + str(l+1)] - learning_rate * grads['db' + str(l+1)]
return parameters
在上述代码中,传入含有权值和偏置的字典、梯度字段和更新的学习率作为参数,按照开头的公式编写权值更新代码。
小批量梯度下降法 mini-batch Gradient Descent
在工业数据环境下,直接对大数据执行梯度下降法训练往往处理速度缓慢,这时候将训练集分割成小一点的子集进行训练就非常重要了。这个被分割成的小的子集就叫做 mini-batch,意为小批量。对每一个小批量同时执行梯度下降会大大提高训练效率。在实际利用代码实现的时候,小批量梯度下降算法通常包括两个步骤:
- 充分打乱数据(shuffle)
- 分组组合数据(partition)。如下图所示。
具体代码实现为:
def