vivo策略算法
一、机器学习中 L1 和 L2 正则化的原理
见【搜广推校招面经二十五】
L1 正则化将某些特征权重置0实现模型简化,而 L2 正则化主要通过平滑权重来实现模型简化。
1.1. 正则化的原理
正则化的核心思想是在损失函数中加入一个惩罚项(Regularization Term),通过对模型参数施加约束,避免模型过于复杂,从而减少过拟合的风险。
假设原始损失函数为
L
(
θ
)
L(\theta)
L(θ),其中
θ
\theta
θ 是模型参数。引入正则化后,损失函数变为:
L
regularized
(
θ
)
=
L
(
θ
)
+
λ
R
(
θ
)
L_{\text{regularized}}(\theta) = L(\theta) + \lambda R(\theta)
Lregularized(θ)=L(θ)+λR(θ)
- L ( θ ) L(\theta) L(θ):原始损失函数(如均方误差或交叉熵)。
- R ( θ ) R(\theta) R(θ):正则化项,用于惩罚模型参数。
- λ \lambda λ:正则化系数,控制正则化强度。
通过最小化 L regularized ( θ ) L_{\text{regularized}}(\theta) Lregularized(θ),可以找到既拟合数据又满足正则化约束的模型参数。
2.2. L1 和 L2 正则化的定义
(1)L1 正则化
L1 正则化使用参数绝对值之和作为正则化项:
R
(
θ
)
=
∥
θ
∥
1
=
∑
i
=
1
n
∣
θ
i
∣
R(\theta) = \|\theta\|_1 = \sum_{i=1}^{n} |\theta_i|
R(θ)=∥θ∥1=i=1∑n∣θi∣
(2)L2 正则化
L2 正则化使用参数平方和的平方根作为正则化项:
R
(
θ
)
=
∥
θ
∥
2
2
=
∑
i
=
1
n
θ
i
2
R(\theta) = \|\theta\|_2^2 = \sum_{i=1}^{n} \theta_i^2
R(θ)=∥θ∥22=i=1∑nθi2
2.3. L1 和 L2 正则化的几何解释
(1)无正则化的情况
在没有正则化的情况下,优化目标是最小化损失函数 L ( θ ) L(\theta) L(θ)。假设 L ( θ ) L(\theta) L(θ) 的等高线是一个椭圆形状,则最优解位于椭圆的最低点。
(2)加入正则化后的优化目标
加入正则化后,优化目标变为:
min
θ
L
(
θ
)
+
λ
R
(
θ
)
\min_\theta L(\theta) + \lambda R(\theta)
θminL(θ)+λR(θ)
此时,正则化项
R
(
θ
)
R(\theta)
R(θ) 对参数空间施加了一个约束。我们可以将优化问题视为在参数空间中寻找满足约束条件的最优解。
- L1 正则化: R ( θ ) = ∥ θ ∥ 1 R(\theta) = \|\theta\|_1 R(θ)=∥θ∥1 定义了一个菱形约束区域(在二维情况下)。
- L2 正则化: R ( θ ) = ∥ θ ∥ 2 2 R(\theta) = \|\theta\|_2^2 R(θ)=∥θ∥22 定义了一个圆形约束区域(在二维情况下)。
当损失函数的等高线与正则化约束区域相交时,得到的解即为最终参数。
2.4. L1 正则化为何能让模型变得稀疏?
L1 正则化倾向于使模型参数中的某些值变为零,从而使模型变得稀疏。其原因可以从以下几个方面解释:
(1)几何解释
- 在 L1 正则化中,参数空间的约束区域是一个菱形。
- 损失函数的等高线与菱形的边界相交时,由于菱形的顶点在坐标轴上,交点往往落在坐标轴上(即某些参数为零)。
- 在顶点处,部分坐标值为零(例如 ( w 1 , 0 ) (w_1, 0) (w1,0) 或 ( ( 0 , w 2 ) ((0, w_2) ((0,w2))。因此,L1 正则化倾向于将部分参数压缩到零,形成稀疏解。
(2)数学解释
- L1 正则化的目标是最小化 L ( θ ) + λ ∥ θ ∥ 1 L(\theta) + \lambda \|\theta\|_1 L(θ)+λ∥θ∥1。由于 ∥ θ ∥ 1 \|\theta\|_1 ∥θ∥1 是绝对值的和,优化过程会优先减少较小的参数值,甚至将其直接压缩为零。
2.5. L2 正则化为何不能让模型变得稀疏?
L2 正则化不会使模型参数变为零,而是通过缩小参数值的绝对值来平滑模型。其原因如下:
(1)几何解释
- 在 L2 正则化中,参数空间的约束区域是一个圆形。
- 损失函数的等高线与圆形的边界相交时,交点通常不在坐标轴上(即所有参数都不为零)。
- 因此,L2 正则化不会导致稀疏解,而是均匀地缩小所有参数。
(2)数学解释
- L2 正则化的目标是最小化 L ( θ ) + λ ∥ θ ∥ 2 2 L(\theta) + \lambda \|\theta\|_2^2 L(θ)+λ∥θ∥22。由于 ∥ θ ∥ 2 2 \|\theta\|_2^2 ∥θ∥22 是参数平方的和,优化过程会均匀地缩小所有参数值,而不是将某些参数压缩为零。
二、Sigmoid函数什么情况下会导致梯度消失,如何处理梯度消失
见【搜广推校招面经十八、搜广推校招面经七】
三、46. 全排列(hot100_回溯_中等)
class Solution:
def permute(self, nums: List[int]) -> List[List[int]]:
def dfs(x):
if x == len(nums) - 1:
res.append(list(nums)) # 添加排列方案
return
for i in range(x, len(nums)):
nums[i], nums[x] = nums[x], nums[i] # 交换,将 nums[i] 固定在第 x 位
dfs(x + 1) # 开启固定第 x + 1 位元素
nums[i], nums[x] = nums[x], nums[i] # 恢复交换
res = []
dfs(0)
return res