当前位置: 首页 > news >正文

正则化方法:L1和L2正则化在神经网络中的应用(代码实现)

在神经网络的训练过程中,正则化是一种非常重要的技术,它能够帮助我们解决过拟合等问题,提升模型的泛化能力。其中,L1和L2正则化是两种最为常用的正则化方法。在这一小节中,我们将详细介绍L1和L2正则化在神经网络中的应用,并通过Python代码来进行实际的操作。

目录

      • L1和L2正则化核心技术点
        • L1正则化
        • L2正则化
      • 在神经网络中应用L1和L2正则化的实操模块
      • 解决正则化参数选择不当导致的模型性能下降问题
      • 总结与后续内容衔接

L1和L2正则化核心技术点

L1正则化

L1正则化也被称为Lasso正则化。简单来说,它是在损失函数中添加了模型权重的绝对值之和作为惩罚项。用公式表示就是在原损失函数 LLL 的基础上加上 λ∑i∣wi∣\lambda\sum_{i}|w_{i}|λiwi,其中 λ\lambdaλ 是正则化系数,wiw_{i}wi 是模型的权重。这样做的好处是可以让一些权重变为0,起到特征选择的作用,就好像是从一堆特征中挑选出真正重要的特征。

例如,在一个图像识别的神经网络中,可能有很多特征,但有些特征对识别结果的影响非常小,L1正则化就可以把这些不重要特征对应的权重变为0,从而简化模型。

L2正则化

L2正则化也叫Ridge正则化。它是在损失函数中添加了模型权重的平方和作为惩罚项,即原损失函数 LLL 加上 λ∑iwi2\lambda\sum_{i}w_{i}^{2}λiwi2。L2正则化会让权重的值变小,但不会让它们变为0。它就像是给模型的权重加上了一个“紧箍咒”,让权重不会变得过大,从而避免模型过于复杂。

比如在一个预测房价的神经网络中,如果不使用正则化,模型可能会为了拟合训练数据而让某些权重变得非常大,导致模型在新数据上表现很差。而L2正则化可以限制这些权重,让模型更加稳定。

在神经网络中应用L1和L2正则化的实操模块

下面我们通过Python代码来展示如何在神经网络中应用L1和L2正则化。我们将使用Keras库来构建一个简单的神经网络模型,并在MNIST手写数字识别数据集上进行实验。

import numpy as np
from tensorflow.keras.datasets import mnist
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
from tensorflow.keras.regularizers import l1, l2# 加载MNIST数据集
(x_train, y_train), (x_test, y_test) = mnist.load_data()# 数据预处理
x_train = x_train.reshape(60000, 784).astype('float32') / 255
x_test = x_test.reshape(10000, 784).astype('float32') / 255# 构建神经网络模型
model_l1 = Sequential()
model_l1.add(Dense(512, activation='relu', input_shape=(784,), kernel_regularizer=l1(0.001)))
model_l1.add(Dense(10, activation='softmax'))model_l2 = Sequential()
model_l2.add(Dense(512, activation='relu', input_shape=(784,), kernel_regularizer=l2(0.001)))
model_l2.add(Dense(10, activation='softmax'))# 编译模型
model_l1.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])
model_l2.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])# 训练模型
history_l1 = model_l1.fit(x_train, y_train, epochs=5, batch_size=128, validation_data=(x_test, y_test))
history_l2 = model_l2.fit(x_train, y_train, epochs=5, batch_size=128, validation_data=(x_test, y_test))# 评估模型
_, accuracy_l1 = model_l1.evaluate(x_test, y_test)
_, accuracy_l2 = model_l2.evaluate(x_test, y_test)print(f"L1正则化模型的准确率: {accuracy_l1}")
print(f"L2正则化模型的准确率: {accuracy_l2}")

在上述代码中,我们首先加载了MNIST数据集,并对数据进行了预处理。然后分别构建了使用L1和L2正则化的神经网络模型。在模型编译时,我们使用了交叉熵损失函数和Adam优化器。最后,我们训练并评估了这两个模型,打印出了它们的准确率。

解决正则化参数选择不当导致的模型性能下降问题

在使用L1和L2正则化时,正则化系数 λ\lambdaλ 的选择非常重要。如果 λ\lambdaλ 选择不当,可能会导致模型性能下降。一般来说,我们可以通过网格搜索等方法来选择合适的 λ\lambdaλ 值。

例如,我们可以定义一个 λ\lambdaλ 值的列表,然后分别使用不同的 λ\lambdaλ 值来训练模型,比较它们的性能,选择性能最好的 λ\lambdaλ 值。

from sklearn.model_selection import GridSearchCV
from tensorflow.keras.wrappers.scikit_learn import KerasClassifierdef create_model(lambda_value=0.001, reg_type='l2'):model = Sequential()if reg_type == 'l1':model.add(Dense(512, activation='relu', input_shape=(784,), kernel_regularizer=l1(lambda_value)))else:model.add(Dense(512, activation='relu', input_shape=(784,), kernel_regularizer=l2(lambda_value)))model.add(Dense(10, activation='softmax'))model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])return modelmodel = KerasClassifier(build_fn=create_model)
param_grid = {'lambda_value': [0.0001, 0.001, 0.01], 'reg_type': ['l1', 'l2']}
grid = GridSearchCV(estimator=model, param_grid=param_grid, cv=3)
grid_result = grid.fit(x_train, y_train)print("Best: %f using %s" % (grid_result.best_score_, grid_result.best_params_))

总结与后续内容衔接

通过本小节的学习,我们了解了L1和L2正则化的核心技术点,掌握了如何在神经网络中应用这两种正则化方法,并通过Python代码进行了实际操作。同时,我们还学习了如何解决正则化参数选择不当导致的模型性能下降问题。这些知识能够帮助我们使用正则化方法优化神经网络模型,提升模型的性能和泛化能力。

掌握了L1和L2正则化在神经网络中的应用内容后,下一节我们将深入学习神经网络的评估指标,进一步完善对本章神经网络的训练与评估主题的认知。

http://www.dtcms.com/a/439525.html

相关文章:

  • 做众筹网站有哪些平面设计视频
  • Redis分布式锁:从“能用就行”到“稳如老狗”的迭代方案
  • 国庆Day3
  • 棋牌类网站开发聚名网官网入口
  • Spring Boot 与数据访问全解析:MyBatis、Thymeleaf、拦截器实战
  • 永久免费个人网站申请注册电子购物网站开发公司
  • 工信部网站黑名单软件开发工程师的岗位职责
  • 阿里云做的网站为啥没有ftp汉南做网站
  • 深度学习是如何收敛的?梯度下降算法原理详解
  • 1.Kali Linux操作系统的下载(2025年10月2日)
  • JVM(七)--- 垃圾回收
  • 专门制作网站郑州男科医院哪家治疗比较好
  • 网站开发 需求文档结构设计网站推荐
  • 自定义异常类中的super(msg)的作用
  • 我想卖自己做的鞋子 上哪个网站好扬州市建筑信息平台
  • 十里河网站建设百度做营销网站多少钱
  • 新版网页传奇网站优化怎么做外链
  • 衡阳网站建设icp备网页设计技术论文范文
  • Linux驱动开发核心概念详解 - 从入门到精通
  • 深圳市建设工程交易服务中心网站在南海建设工程交易中心网站
  • 寻找哈尔滨网站建设服务器内部打不开网站
  • 函数展开成幂级数的方法总结
  • 自己可以做类似拓者的网站吗郑州网站建设行情
  • 中国顶级 GEO 优化专家孟庆涛:用 15 年积淀定义 2025 年 GEO 优化新标准
  • 建筑方案的网站wordpress首页做全屏
  • 建设银行手机官方网站下载安装推荐大良营销网站建设
  • 华为手机网站建设策划方案wordpress文章模块化
  • 修改wordpress用户密码深圳网站营销seo电话
  • 杭州建设企业网站的网络规划设计师考海明码吗
  • DAY24 方法引用、Base64、正则、lombok