记录下对神经网络反向传播的理解

看到一篇文章把反向传播梯度更新解释的很通透,总结了一下:

1. 一个batch内的所有样本输入计算出的损失函数梯度累积,一个batch更新一次梯度。

    for batch_idx, (data, target) in enumerate(train_loader):

        data = data.view(-1, 28*28)
        data, target = data.to(device), target.to(device)

        logits = net(data)
        loss = criteon(logits, target)

        optimizer.zero_grad()
        loss.backward()

        optimizer.step()

2. 每次梯度更新时,更新所有层的梯度,所用到的方法就是链式求导

3. batch size大小与模型的收敛有关,个人理解就是相当于图像分割算法里的分水岭原理类似,要先找到种子,然后以种子为基地向四周蔓延;

4. 与大批量训练相比,小批量训练可以找到距离初始权重更远的最小值小批量训练可能会为训练引入足够的噪声,以退出锐化minimizers 的损失池,而是找到可能更远的平坦minimizers

 

5. 使用小批量的训练倾向于收敛到平坦的极小化,该极小化在极小化的小邻域内仅略有变化,而大批量则收敛到尖锐的极小化,这变化很大。平面minimizers 倾向于更好地泛化,因为它们对训练集和测试集之间的变化更加鲁棒 。

6. batch size越大:

  • 训练损失减少的越慢。
  • 最小验证损失越高。
  • 每个时期训练所需的时间越少。
  • 收敛到最小验证损失所需的 epoch 越多。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值