当我添加像 L1,L2 这样的正则化时,我是否需要更多的时期来正确训练我的模型?

数据挖掘 深度学习 正则化
2021-09-30 23:54:46

当我在我的模型中添加正则化技术(如 L1 或 L2)时,我是否需要更多的时期来正确收敛我的模型。

for r in (None,"L1","L2"):
        for max_iter in (30,45,60):    
            classifier=SGDClassifier(loss="log",penalty=r,max_iter=max_iter,learning_rate="constant",eta0=0.01,random_state=42)
            print("max_iter={}".format(max_iter))
            classifier.fit(X_train,Y_train)
            acc=classifier.score(X_test,Y_test)
            print("accuracy when r={} is {}".format(r,acc*100))
  1. 当 r = 无时:
  • max_iter = 30/45它说ConvergenceWarning: Maximum number of iteration reached before convergence. Consider increasing max_iter to improve the fit.
  • max_iter = 60没有警告。
  1. 当 r = L1 时:
  • max_iter= 30相同的警告。
  • max_iter = 45/60没有警告。
  1. 当 r= L2 时:
  • max_iter = 30/45/60相同的警告

重要还是这是随机的?

2个回答

收敛时间对您拥有的数据和随机种子很敏感。具体来说,收敛时间在所有三种情况下都是线性的。SGDClassifier使用随机梯度下降进行优化。由于 L1 损失只是次微分的,因此 L1 惩罚会导致算法的收敛速度明显变慢。

与有或没有 L2 惩罚相比,尚不清楚哪种算法更快。损失函数是微分的。在未确定的情况下,L2 惩罚可能更快。在下面的示例中,我考虑使用梯度下降而不是随机线性下降和正则回归来简化论点。比如说,我们的目标是解决y = Xb + e,我们观察y到的地方X我们将损失函数设置为f(b) = 0.5||y - Xb||^2.没有正则化,解决方案是sol1 =(X^TX)^{-1}X^Ty,使用 L2 正则化,解决方案是sol2 = (X^TX + lambda I)^{-1}X^Ty在后一种情况下,我们可以保证要反转的矩阵不接近奇异矩阵,因此可以预期更快的收敛。

简而言之,平均而言,我预计以下迭代次数需要从最小到最大 ON AVERAGE:

  1. L2惩罚
  2. 无处罚(可能与 L2 处罚密切相关)
  3. L1 罚分

你观察相反的顺序。它应该非常特定于您的数据或随机种子。

Penalty 为损失函数增加了一个附加项。在您的情况下,它使您的模型需要更多迭代才能收敛。添加惩罚时,如果您只看到原始损失(log)的收敛值,它将低于没有惩罚的情况。这显示了优势,添加惩罚使您的模型收敛到更低的损失。