机器学习面试题汇总与解析——正则化

本章讲解知识点

    1. 什么是正则化
    1. 为什么要使用正则化?
    1. 详细讲解正则化


  • 本专栏适合于Python已经入门的学生或人士,有一定的编程基础。
  • 本专栏适合于算法工程师、机器学习、图像处理求职的学生或人士。
  • 本专栏针对面试题答案进行了优化,尽量做到好记、言简意赅。这才是一份面试题总结的正确打开方式。这样才方便背诵
  • 如专栏内容有错漏,欢迎在评论区指出或私聊我更改,一起学习,共同进步。
  • 相信大家都有着高尚的灵魂,请尊重我的知识产权,未经允许严禁各类机构和个人转载、传阅本专栏的内容。

  • 关于机器学习算法书籍,我强烈推荐一本《百面机器学习算法工程师带你面试》,这个就很类似面经,还有讲解,写得比较好。

  • 关于深度学习算法书籍,我强烈推荐一本《解析神经网络——深度学习实践手册》,简称 CNN book,通俗易懂。



1. 什么是正则化

1.1 定义与作用

正则化是在训练机器学习模型时使用的一种技术,旨在减小模型的过拟合(overfitting)风险。过拟合是指模型在训练数据上表现很好,但在未见过的测试数据上表现较差的现象

正则化通过在损失函数中引入惩罚项来限制模型的复杂度,以防止模型过度拟合训练数据。惩罚项会在优化过程中对模型的参数进行调整,以平衡模型的拟合能力和泛化能力。

正则化的作用包括:

  • 防止过拟合:正则化技术通过限制模型的复杂度,减少模型对训练数据的过度拟合,提高模型在未见过的数据上的泛化能力。

  • 特征选择:L1 正则化可以使得部分参数变为 0,从而实现特征选择,选择对目标变量有较大影响的特征,减少冗余特征的影响。

  • 改善模型稳定性:正则化可以降低模型对数据中噪声的敏感性,提高模型的稳定性。

总之,正则化是一种重要的技术,可以提高机器学习模型的泛化能力,减少过拟合问题。选择适当的正则化方法和参数可以根据具体的问题和数据集进行调整。

1.2 常见的正则化方法

  • L1 正则化(L1 Regularization):在损失函数中加入模型参数的 L1 范数,即参数的绝对值之和。L1 正则化倾向于生成稀疏的参数,使得部分参数变为 0,从而达到特征选择的效果。

  • L2 正则化(L2 Regularization):在损失函数中加入模型参数的 L2 范数,即参数的平方和的开方。L2 正则化会使得模型的参数向较小的值靠近,避免参数过大,从而防止过拟合。

  • Dropout:Dropout 是一种特殊的正则化方法,它在模型的训练过程中随机地将一些神经元的输出设置为 0,从而强制模型去学习多个独立的子模型。这种随机的神经元失活可以减少神经网络的复杂性,提高模型的泛化能力。


2. 为什么要使用正则化?

2.1 过拟合与欠拟合

讲正则化前,需要先讲过拟合与欠拟合。神经网络在完成学习后,对应就是一个函数,网络学习的过程,就是这个函数拟合数据分布的过程

img

如图中,绿色就是拟合刚好的函数。而左边的蓝色就是过拟合,拟合得太好了,针对以后的新数据可能泛化性能就差;而右边的蓝色就是欠拟合,没有很好的拟合现有的数据分布。

过拟合(Overfitting)和欠拟合(Underfitting)是机器学习中常见的两个问题,它们都与模型的泛化能力有关。

过拟合指的是模型在训练数据上表现得很好,但在未见过的测试数据上表现较差。过拟合的原因是模型过于复杂,过度拟合了训练数据中的噪声和细节,导致对新样本的预测能力下降。

欠拟合指的是模型无法在训练数据上达到很好的拟合效果,无法捕捉到数据中的关键模式和规律。欠拟合的原因通常是模型过于简单或者数据量不足。

2.2 过拟合与欠拟合的评判标准

过拟合:训练集效果很好,测试集效果较差

欠拟合:训练集效果差,测试集效果也差。

2.3 正则化的作用

正则化应用于过拟合的场景,正则化可以减轻过拟合现象,使得网络更好地拟合数据。正则化通过在损失函数中引入惩罚项来限制模型的复杂度,以防止模型过度拟合训练数据。惩罚项会在优化过程中对模型的参数进行调整,以平衡模型的拟合能力和泛化能力。

2.4 正则化的原理

我们从损失函数入手,前面的文章我们讲过均方误差损失函数,神经网络学习的过程就是最小化我们的损失函数,如下:

arg min 1Ni=1N(yif(xi))2(.)arg \ min \ \frac{1}{N} \sum_{i=1}^N (y_i-f(x_i))^2 \\ \tag{.}

这个 f(x)f(x) 可以是二次曲线、三次曲线,甚至 n 次曲线,但是不管它是几次曲线,从高等数学的泰勒展开原理我们可以得知, f(x)f(x) 可以表示为多项式的趋近:f(x)=w0x0+w1x1+...+wnxnf(x)=w_0x_0+w_1x_1+...+w_nx_n

好,那么直观来看,w0,w1...wnw_0,w_1...w_n 都是特征,网络为什么出现过拟合?就是因为特征分得太细、太多。我们举个例子,我们可以根据“头发长短”、“繁殖器官”这两个特征基本就可以很好的区分“男”、“女”,泛化性能更好,虽然会将“女装大佬”分错,但是“女装大佬”毕竟是少数。而如果我们特征分得更细化,“胡子长短”、“喉结大小”、“指甲长短”,这样虽然可以区分出“女装大佬”,但是这就过拟合了,网络很可能会将“小喉结的男人”都区分成女人了,错误率就提高了,反而过拟合了。

所以一个网络过拟合,可能就是特征过多,**那我们减少特征不就可以减轻过拟合了吗?**即减少 ww 的个数。问题就转化为求 0 范数(向量中非 0 元素的个数)了。减少 ww 的个数就是最小化 w0|\vec w|_0我们将这一项加入目标函数中,就是我们说的正则项了

arg min 1Ni=1N(yif(xi))2+w0(.)arg \ min \ \frac{1}{N} \sum_{i=1}^N (y_i-f(x_i))^2+ |\vec w|_0 \\ \tag{.}

所以最终的目标就是既要损失函数最小,又要控制特征的数量,那么就是两者求和最小,要在这两者的约束下进行网络优化,这就是我们的最终目标了。


3. 详细讲解正则化

3.1 l1l_1 正则化

对于待正则的网络层参数 w\vec wl1l_1 正则化为:

l1=λw1=iwi(.)l_1 =\lambda ||\vec w||_1 = \sum_{i}|w_i| \\ \tag{.}

其中,λ\lambda 控制正则项大小,较大的 λ\lambda 取值将较大程度约束模型复杂度;反之亦然。需注意,l1l_1 不仅可以约束参数量,还可以使参数更稀疏。因为对目标函数经过优化后,一部分参数会变为 0(一部分特征被去除了,减轻模型过拟合),另一部分参数为非零实值。非零实值说明这部分参数是最重要的特征。这样一看,l1l_1 还可以用来挑选特征

L1 正则化的优点和应用包括:

  • 特征选择:L1 正则化倾向于生成稀疏的参数,即将一部分参数变为 0,从而实现特征选择。这样可以降低特征的维度,减少冗余特征的影响,提高模型的泛化能力。

  • 模型解释性:L1 正则化可以将一些特征的权重设置为 0,这样可以更容易解释模型的结果,确定对预测结果贡献较大的特征。

  • 防止过拟合:L1 正则化可以限制模型的复杂度,防止模型过度拟合训练数据,提高模型在未见过的数据上的泛化能力。

  • 稀疏性:L1 正则化可以产生稀疏的参数,使得模型的计算效率更高,减少存储空间。

3.2. l2l_2 正则化

l1l_1 正则化我们理解后,l2l_2 正则化也就很简单了,就是乘方加和,L2正则化是一种用于降低模型复杂度和防止过拟合的正则化技术。它通过在损失函数中引入模型参数的L2范数的平方作为惩罚项来实现:

l2=12λw22=iwi2(.)l_2 =\frac{1}{2} \lambda ||\vec w||_2^2 = \sum_{i}|w_i|^2 \\ \tag{.}

l2l_2 正则化会使部分特征趋近于 0,也就达到正则化的目的了。

此外,l1l_1 正则化和 l2l_2 正则化也可以联合使用,例如:

λw1+λw22(.)\lambda ||\vec w||_1 + \lambda ||\vec w||_2^2 \\ \tag{.}

这种形式也被称为“Elastic 网络正则化”。

L2 正则化的优点和应用包括:

  • 参数稳定性:L2 正则化可以使得模型的参数更加稳定,减少参数的摆动,使得模型对训练数据中的噪声和细节不敏感,提高模型的泛化能力。

  • 防止过拟合:L2 正则化限制了模型参数的大小,使得模型更加平滑,减少模型对训练数据的过拟合现象。

  • 权重衰减:L2 正则化可以促使模型参数向较小的值靠拢,从而实现权重衰减的效果,减少复杂模型对训练数据的过度拟合。

  • 泛化能力:L2 正则化可以提高模型在未见过的数据上的泛化能力,使得模型更具有普适性和适应性。

l1l_1 正则化l2l_2 正则化总结:

正则化通过在损失函数中引入惩罚项来限制模型的复杂度,以防止模型过度拟合训练数据。惩罚项会在优化过程中对模型的参数进行调整,以平衡模型的拟合能力和泛化能力。

我们以一次和二次为例,正则项的图分别是一个矩形和圆形,如图:

img

那这有什么关系呢?我们把损失函数(包括正则项)整个画出来就知道了。

img

左边是二次正则项,右边是一次正则项

可以直观的理解为,我们最小化损失函数就是求蓝圈+红圈的和的最小值,而这个值通在很多情况下是两个曲面相交的地方。

可以看