(1) 前馈计算每一层的净输入 () 和激活值 (),直到最后一层;
(2) 反向传播计算每一层的误差项 ();
(3) 计算每一层参数的偏导数,并更新参数.
输入: 训练集 = {((), ())} =1,验证集,学习率, 正则化系数,网络层 数,神经元数量 , 1 ≤ ≤ .
1 随机初始化 , ;
2 repeat
3 对训练集 中的样本随机重排序;
4 for = 1 ⋯ do
5 从训练集 中选取样本((), ());
6 前馈计算每一层的净输入 () 和激活值 (),直到最后一层;
7 反向传播计算每一层的误差 ();
8 计算每一层参数的导数
9 更新参数
10 end
11 until 神经网络模型在验证集 上的错误率不再下降; 输出: ,
一般不特指的话, 梯度下降指的就是 Batch Gradient descent
// A code block
for i in range ( epochs ): #epoch中文名字叫训练周期,epoch每增加1,就代表训练集上的所有数据被使用一次
#表示使用batchsize个数据来更新参数。这里Batch恰好等于训练集上的所有数据
params_grad = evaluate_gradient ( loss_function , training_data , params )
params = params - learning_rate * params_grad
#完成一个Batch训练,相当于参数迭代(iteration/updata)一次
for i in range ( nb_epochs ):
np.random .shuffle (training_data)
for example in training_data :
#表示使用单个样例来进行参数更新/迭代,这里的batchsize=1。每个Batch恰好等于单个样例
params_grad = evaluate_gradient ( loss_function , example , params )
params = params - learning_rate * params_grad
##完成一个Batch训练,相当于参数迭代(iteration/updata)一次
for i in range ( nb_epochs ):#epoch每增加1,就代表训练集上的所有数据被使用一次
np. random . shuffle ( training_data )#打乱训练集上的数据
for batch in get_batches (training_data , batch_size =50):#每次从训练集上拿50个样例,直到拿完为止。
#一次参数更新/迭代(iteration/updata)需要用到batchsize个样例,这里的batchsize=50。每个Batch恰好等于50个样例
params_grad = evaluate_gradient ( loss_function , batch , params )
params = params - learning_rate * params_grad
#每个 Epoch 具有的 Iteration 个数: training_data/batchsize(完成一个Batch训练,相当于参数迭代一次)