我熟悉 SGD 中的更新规则,其中权重 () 用成本函数的梯度更新 () 每个样本乘以学习率 ()。
现在我的问题是何时评估停止标准。在我正在研究的神经网络算法中,步骤/时期一直持续到梯度低于预定义的阈值(或最大时期数)。是在样本循环内(即在 SGD 内)还是在每次完整通过后(即时期)评估梯度。
在前者中,我可以想象数据集中的第一个随机样本都是同一类的情况,因此 SGD 快速收敛以最小化该错误。这将导致模型泛化非常差,因为它已经“学会”将所有内容分类为同一类。所以我怀疑情况并非如此。
如果是后者,如何针对停止条件评估梯度?误差会在样本上平均吗?除了更新功能的工作原理之外,我无法在网上找到任何进一步的信息,也没有在神经网络算法中实现它。我认为这种方法对于“小批量”梯度下降是相同的。
一些伪代码可以帮助解释我的困惑:
while(epoch < max_epochs && reached.threshold < threshold){
# SGD
for(i in N){
weights -= n*dQ(weights)
# calculate new gradients threshold
reached.threshold = ...
# stop check here???
if(reached.threshold < threshold) break
}
# stop check here???
# if so, how to evaluate???
...
epoch += 1
}