“距离”、“范数”和范数正则化

1. 范数

先思考 机器学习中的行向量和列向量?

1.1 概念

向量的范数可以简单形象的理解为向量到零点距离,或者相应的两个点之间的距离、或者向量的长度

(如果对象是一个单独的向量,那么默认是指与原点进行比较,这情况下,范数代表的是向量到原点的距离,也就是向量的向量的长度;如果定义了两个向量,则范数可以表示这两个向量之间的距离

1.2 定义

向量的范数定义:向量的范数是一个函数||x||,满足
非负性 ||x|| >= 0,
齐次性 ||cx|| = |c| ||x|| ,
三角不等式 ||x+y|| <= ||x|| + ||y||。

1.3 常见的向量范数

  • L1范数: ||x||1 为x向量各个元素绝对值之和。

  • L2范数: ||x||2为x向量各个元素平方和的1/2次方,L2范数又称Euclidean范数或者Frobenius范数

  • Lp范数: ||x||p为x向量各个元素绝对值p次方和的1/p次幂

  • L∞范数: ||x||为x所有向量元素中的最大值(向量各个元素绝对值最大那个元素的绝对值),如下:

    在这里插入图片描述

  • 椭球向量范数: ||x||A = sqrt[T(x)Ax], T(x)代表x的转置。定义矩阵C 为M个模式向量的协方差矩阵, 设C’是其逆矩阵,则Mahalanobis距离定义为||x||C’ = sq

机器学习图像处理中,L1范数TV(Total Variation)正则化都是用于防止模型过拟合、提升泛化能力的重要工具,但它们在数学形式、优化特性以及应用场景上存在显著差异。 ### L1范数正则化 L1范数正则化通过在损失函数中加入权重向量的L1范数项来实现正则化目的。L1范数定义为向量各元素绝对值之,其形式为: $$ \|w\|_1 = \sum_{i} |w_i| $$ L1正则化的一个重要特性是它倾向于产生稀疏的权重矩阵,即许多权重会趋近于零。这种稀疏性使得模型更简单,有助于特征选择,从而防止过拟合。在机器学习中,L1正则化常用于线性回归(Lasso回归)逻辑回归中,尤其适用于特征维度高但真正有用的特征较少的场景[^1]。 ### TV正则化 TV正则化,即总变差正则化,主要用于图像处理任务中,如图像去噪、图像修复等。其基本形式为: $$ TV(x) = \sum_{i,j} \sqrt{(\nabla_x x_{i,j})^2 + (\nabla_y x_{i,j})^2} $$ 其中,$\nabla_x$ $\nabla_y$ 分别表示图像在水平方向垂直方向上的梯度。TV正则化的目标是使图像的梯度尽可能稀疏,从而保留图像的边缘信息并平滑噪声区域。与L1正则化不同,TV正则化更关注于图像的局部结构,因此在需要保留边缘细节的图像恢复任务中表现优异。 ### 区别与应用场景比较 1. **数学特性**: - L1范数正则化通过引入稀疏性来简化模型,适用于特征选择问题。 - TV正则化关注于图像的梯度稀疏性,适用于图像处理中需要保留边缘信息的任务。 2. **应用场景**: - L1正则化广泛应用于高维数据的特征选择,例如在基因组学、文本分类等领域。 - TV正则化主要应用于图像处理,如图像去噪、图像分割、图像修复等任务。 3. **优化难度**: - L1正则化的优化相对简单,可以通过标准的优化算法(如坐标下降法、梯度下降法)实现。 - TV正则化的优化较为复杂,通常需要使用专门的优化算法,如梯度下降法结合近端算子(proximal operator)。 4. **结果解释性**: - L1正则化得到的模型具有稀疏性,便于解释哪些特征对预测结果影响较大。 - TV正则化得到的图像结果保留了边缘信息,便于视觉分析进一步处理。 ### 示例代码 以下是一个简单的L1正则化示例,使用Scikit-Learn库实现Lasso回归: ```python from sklearn.linear_model import Lasso from sklearn.datasets import make_regression # 生成模拟数据 X, y = make_regression(n_features=20, n_informative=5, noise=0.1) # 创建Lasso回归模型 lasso = Lasso(alpha=0.1) # alpha控制正则化强度 # 拟合模型 lasso.fit(X, y) # 输出模型系数 print("Lasso coefficients:", lasso.coef_) ``` 对于TV正则化的图像去噪示例,可以使用PyTorch优化库实现: ```python import torch import torch.optim as optim from torchvision import transforms from PIL import Image import numpy as np # 加载图像并转换为张量 image = Image.open("noisy_image.jpg") transform = transforms.ToTensor() image_tensor = transform(image).unsqueeze(0) # 定义TV正则化函数 def total_variation_loss(img): batch_size, channels, height, width = img.size() tv_h = torch.pow(img[:, :, 1:, :] - img[:, :, :-1, :], 2).sum() tv_w = torch.pow(img[:, :, :, 1:] - img[:, :, :, :-1], 2).sum() return (tv_h + tv_w) / (batch_size * channels * height * width) # 定义损失函数 def loss_function(img, target): mse_loss = torch.nn.MSELoss()(img, target) tv_loss = total_variation_loss(img) return mse_loss + 0.1 * tv_loss # 0.1为TV正则化系数 # 初始化优化器 img = image_tensor.clone().requires_grad_(True) optimizer = optim.Adam([img], lr=0.01) # 进行优化 for i in range(1000): optimizer.zero_grad() loss = loss_function(img, image_tensor) loss.backward() optimizer.step() if i % 100 == 0: print(f"Iteration {i}, Loss: {loss.item()}") # 保存去噪后的图像 denoised_image = transforms.ToPILImage()(img.squeeze(0).detach()) denoised_image.save("denoised_image.jpg") ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值