感知机学习-为什么损失函数可以不考虑L2范数?

本文探讨了统计学习中为何感知机采用函数间隔而非几何间隔,解释了两者在优化目标和模型收敛上的差异,重点在于几何间隔在SVM中的稳定性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 前言

最近想重新学习一下统计学习方法(第2版)-李航,为深度学习打下一个坚实的基础。
在看到感知机的损失函数时产生了这样一个疑问,为什么明明用几何间隔计算结果更好,为什么不用,反而用效果不那么好的函数间隔?(函数间隔:即使是同一个平面,计算结果会随着w和b的缩放而产生不同的结果)

2. 概念

- 函数间隔

函数间隔
其中f(x)为函数值,y是人为设定的样本的值(如:区分猫狗图片,猫标定为“ +1”,狗为“ -1 ”),即函数值✖标签。为什么该式可以表示距离?实际上函数间隔并不是真正的数据点到超平面的距离,只是表示数据点被分为某一类的确信度。

- 几何间隔

几何间隔
几何间隔是严格数学公式,具体推导过程网上也很多,这里就不多做说明。

3. 理解

  1. 为什么要用有些地方要用几何间隔?
    几何间隔相对于函数间隔的一个优势就是它不受参数( w和b )缩放影响,所以在SVM 这种优化目标是点到超平面之间的间隔的模型中,采用的是几何间隔(如果采用函数间隔,学习过程会不断的产生更大的w和b,根本停不下来)。
  2. 对于感知机:
    感知机的目标是使误分类的点的个数为0,采用几何间隔并不会带来什么好处,反而会使学习过程复杂化。有些同学可能认为在损失函数L最小化的过程中,若不对参数进行归一化,目标会偏向于选择量级较小的参数w和b
    但是在线性可分的情况下这是不会发生的,因为损失函数是定义在误分类点的集合上的,只要误分点集合为空, 就能取到最小值0,这种情况下无论w和b的初值如何, 损失L最终都可以收敛到0。而对于数据不是线性可分的情况,感知机是处理不了的,这种情况下无论怎么训练,误分类点的集合总不为空,算法会一直使用集合中的误分点更新参数,超平面会在线性不可分的点之间摆动,算法无法收敛。
### 多层感知机中 L2 正则化强度值(alpha)对模型复杂度的影响分析 L2 正则化是一种常用的正则化方法,旨在通过控制权重大小来降低模型的复杂度并提高其泛化能力。在多层感知机(MLP)中,L2 正则化通过对损失函数加入基于权重的惩罚项实现这一目标。 #### L2 正则化的数学表达 假设模型的原始损失函数为 \( L(x, w, b) \),其中 \( x \) 表示输入数据,\( w \) 和 \( b \) 分别表示模型的权重和偏置参数。引入 L2 正则化后,新的损失函数可写为: \[ \min_{w,b}\, L(x, w, b) + \frac{\lambda}{2} \|w\|^2 \] 这里,\( \lambda \) 是正则化系数(即 alpha 值),决定了正则化项在整个损失函数中的比重;\( \|w\|^2 \) 表示权重向量的平方 L2 范数[^1]。 #### Alpha 值对模型复杂度的影响 1. **Alpha 值较小时** 当 \( \lambda \) 取较小值时,正则化项对总损失的影响微弱,此时模型倾向于更加关注训练误差最小化的目标。这可能导致模型过度拟合训练数据,尤其是在高维特征空间或噪声较多的情况下。虽然训练误差可能很低,但测试误差可能会较高,从而降低了模型的泛化能力[^4]。 2. **Alpha 值较大时** 随着 \( \lambda \) 的增大,正则化项的作用逐渐增强,迫使模型减少大权重的使用。这种约束促使模型选择更为简单和平滑的解决方案,有效抑制了过拟合的发生。然而,如果 \( \lambda \) 过大,则会过度压缩权重,使模型变得过于简化甚至发生欠拟合现象,无法充分捕捉数据中的潜在模式[^1]。 3. **适度调节 Alpha 值** 实践中往往需要通过交叉验证等方式寻找合适的 \( \lambda \) 值范围,以平衡偏差与方差之间的关系。理想状态下,适当的选择能够确保模型既会因为复杂的结构而导致过拟合也会由于过于简单的设定而造成欠拟合,进而获得较好的泛化性能[^2]。 ```python from sklearn.neural_network import MLPClassifier from sklearn.datasets import make_classification from sklearn.model_selection import train_test_split, GridSearchCV # 创建模拟二分类数据集 X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=1) # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) # 设置网格搜索参数 param_grid = { 'hidden_layer_sizes': [(50,), (100,)], 'activation': ['relu'], 'solver': ['adam'], 'alpha': [0.0001, 0.001, 0.01, 0.1], 'max_iter': [1000] } mlp = MLPClassifier(random_state=1) grid_search = GridSearchCV(mlp, param_grid, cv=5, scoring='accuracy') grid_search.fit(X_train, y_train) print(f"Best parameters found: {grid_search.best_params_}") print(f"Test set score with best params: {grid_search.score(X_test, y_test)}") ``` 上述代码展示了一个利用 `GridSearchCV` 方法自动搜寻最佳超参组合的过程,其中包括同取值下的 alpha 参数设置及其对应的表现评估。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值