给损失函数加正则化项

减小过拟合途径

(1)增大数据集;
(2)减少变量个数,去掉不重要变量;
(3)正则化:保留所有变量,但减小特征变量的数量级。这种处理方法更合适,因为实际所有变量对结果都有一定贡献,只是有些变量对结果的影响很小。
正规化背后的思路:这些参数的值越小,通常对应于越光滑的函数,也就是更加简单的函数。因此 就不易发生过拟合的问题。

给损失函数加正则化项

给损失函数加上正则化项可防止模型过拟合。正则化方法有两种:

(1)L1正则化:

使用L1正则化的模型又叫做Lasso Regularization(Lasso回归),直接在原来的损失函数基础上加上权重参数的绝对值的倍数,如公式1所示:
公式1:L1正则化

(2)L2正则化

使用L2正则化的模型又叫做岭回归(ridge regression),直接在原来的损失函数基础上加上权重参数的平方的倍数,如公式2所示:
公式2:L2正则化
lasso 可以用来做 feature selection,而 ridge 不行。或者说,lasso 更容易使得权重变为 0,而 ridge 更容易使得权重接近 0。(具体可参考这篇文章:https://blog.csdn.net/red_stone1/article/details/80755144)

TensorFlow中正则化的实现

TensorFlow中对相应参数进行正则化的函数如下:
tf.contrib.layers.l1_regularizer(regularizer)(w) (L1正则化)
tf.contrib.layers.l2_regularizer(regularizer)(w) (L2正则化)
以上两个参数往往配合tf.add_to_collection()和tf.add_n()两个函数使用,如下所示:
tf.add_to_collection(‘losses’, tf.contrib.layers.l1_regularizer(regularizer)(w))或
tf.add_to_collection(‘losses’, tf.contrib.layers.l2_regularizer(regularizer)(w))
其中,tf.add_to_collection(“list_name”, element),函数有两个参数,分别是列表名和元素,其作用是将元素element添加到list_name所指的列表中。
而tf.add_n(list_name)函数有一个参数,即列表名,其作用是将列表元素相加并返回。
因此,得到损失函数中正则化项的语句包括以下(以L2正则化为例):
tf.add_to_collection(‘losses’, tf.contrib.layers.l2_regularizer(regularizer)(w))
L2_err=tf.add_n(losses)
loss=cem或其它损失函数+L2_err

### 改进损失函数添加正则化 为了提升机器学习模型的性能,特别是在面对过拟合问题时,可以在损失函数中引入正则化项。这不仅有助于控制模型复杂度,还能增强其泛化能力[^1]。 #### 添加L2正则化损失函数 对于线性回归或其他基于梯度下降优化算法构建的模型而言,在原始损失函数基础上增L2正则化项是一个有效的方法。具体来说,就是将所有权重参数平方后的总和乘以一个小于等于1的比例系数λ作为附惩罚项入到总的损失计算之中: \[ \text{Loss} = \frac{1}{N}\sum_{i=1}^{N}(y_i-\hat y_i)^2+\lambda\sum w_j^2 \] 其中\( N \)表示样本数量;\( (y_i,\hat y_i)\)分别代表第 \( i \) 个实例的真实标签值与其预测输出之间的差异;而最后一部分则是由各层神经元连接权值构成的二次型表达式,用来衡量整个网络结构所蕴含的信息量大小。这种做法能够促使那些较大绝对数值下的权重逐渐趋近零点附近分布,进而简化最终得到的学习器形式[^3]。 ```python import tensorflow as tf model = tf.keras.models.Sequential([ tf.keras.layers.Dense(64, activation='relu', kernel_regularizer=tf.keras.regularizers.l2(l=0.01)), tf.keras.layers.Dense(1) ]) loss_fn = tf.keras.losses.MeanSquaredError() optimizer = tf.keras.optimizers.Adam() model.compile(optimizer=optimizer, loss=loss_fn) history = model.fit(x_train, y_train, epochs=10, validation_data=(x_val, y_val)) ``` 上述代码展示了如何利用TensorFlow框架中的`kernel_regularizer`选项指定应用L2正则化的程度(即设置超参λ)。这里选择了Adam优化器配合均方误差作为评估指标来进行监督式训练过程[^4]。 #### 使用L1正则化改善稀疏性 除了L2之外,另一种常见的策略是采用L1范数约束机制。相比于前者倾向于均匀压缩各个维度上的特征贡献度,后者更侧重于制造更明显的“赢家通吃”效应——让少数几个最具影响力的输入变量占据主导地位的同时令其余大部分接近消失不见。因此当目标在于获取具有较强解释性的紧凑表征时往往优先考虑这种方法。 \[ \text{Loss} = \frac{1}{N}\sum_{i=1}^{N}(y_i-\hat y_i)^2+\lambda\sum |w_j| \] 同样的逻辑也可以应用于卷积神经网络CNN的设计当中,只需简单调整相应层配置即可完成转换操作。值得注意的是由于L1容易造成某些方向完全被抑制住的情况发生所以实践中有时会结合两者优点形成弹性网Elastic Net的形式进一步平衡二者间的关系[^2]。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值