神经网络参数记录

batch_size

batch_size跑的太大,GPU会发挥平行运算的优势、跑的超快,但结果可能会坏掉。

总结:

1)batch数太小,而类别又比较多的时候,真的可能会导致loss函数震荡而不收敛,尤其是在你的网络比较复杂的时候。

2)随着batchsize增大,处理相同的数据量的速度越快。

3)随着batchsize增大,达到相同精度所需要的epoch数量越来越多。

4)由于上述两种因素的矛盾, Batch_Size 增大到某个时候,达到时间上的最优。

5)由于最终收敛精度会陷入不同的局部极值,因此 Batch_Size 增大到某些时候,达到最终收敛精度上的最优。

6)过大的batchsize的结果是网络很容易收敛到一些不好的局部最优点。同样太小的batch也存在一些问题,比如训练速度很慢,训练不容易收敛等。

epoch

迭代的次数,一个时期 = 所有训练样本的一个正向传递和一个反向传递。

softmax

softmax函数,也叫做归一化指数函数,它可以将一个包含任意实数的的K维向量z压缩到另一个k维向量$\sigma$

池化

1.前向传播

最大子采样函数取区域内所有神经元的最大值(max-pooling)。以下图为例,输入数据X为44,采样核size为2,stride为2,no padding。输入数据大小类似卷积层的计算方法,(input_width+2pad-pool_size)/stride+1。前向传播中不仅要计算pool区域内的最大值,还要记录该最大值所在输入数据中的位置,目的是为了在反向传播中,需要把梯度值传到对应最大值所在的位置。

《神经网络参数记录》

2.反向传播

还是引用上图,通过前向传播已知,梯度值对应上一层输出的最大值位置。具体过程如下:
《神经网络参数记录》

我搭的神经网络不work该怎么办!看看这11条新手最容易犯的错误

Gradient Clipping(tidu caijian)

当你训练模型出现Loss值出现跳动,一直不收敛时,除了设小学习率之外,梯度裁剪也是一个好方法。
然而这也说明,如果你的模型稳定而且会收敛,但是效果不佳时,那这就跟学习率和梯度爆炸没啥关系了。因此,学习率的设定和梯度裁剪的阈值并不能提高模型的准确率。
(cited from https://blog.csdn.net/guolindonggld/article/details/79547284)

Ref

最大池化层(Maxpool Layer)

训练集&验证集&测试集

首先给出三者的定义。

  • Taining set: the data points used to train the model.
  • Validation set: the data points to keep checking the performance of your model in order to know when to stop training.
  • Testing set: the data points used to check the performance once training is finished.
  1. 训练集和验证集可以重叠(overlap)吗?

答:不可以。验证集是为了了解什么时候停止训练模型的。idea就是什么时候你的模型不再有improvement。下图可以很直观的看到一个正常的model的情形。我们会注意到在验证集上loss停止下降的时候会比在测试集上早,这是因为我们在训练集上可以持续地优化结果,而此时验证集上的结果可以让我们提前结束,防止overfit。

《神经网络参数记录》

考虑一种极端情况,当我们的验证集和训练集完全重合时,此时我们就会出现过拟合的情况,因为在训练集和验证集上跑出来的效果是完全一样的。

  1. 验证集和测试集可以重叠吗?

答:也不可以。这就好比我们在模拟考试直接拿要考的考试的原题去做一样,会使得我们的performance虚高。

Ref

May the training set and validation set overlap?

点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注