核范数求导(derivative of the nuclear norm)

我在网上找到了关于核范数求导的两种方式,一种是论文里常用的Singular Value Thresholding(SVT)方法,另外一种是网上流传的通过SVD的方式直接求导的方式。

1. Singular Value Thresholding

这种方法最早是针对矩阵补全的问题提出的,在论文《A Singular Value Thresholding Algorithm for Matrix Completion》中,作者提出了关于以下形式问题的求解方法
在这里插入图片描述
即对于(2.3)公式中的优化问题而言,其最优解X等于 D τ ( Y ) D_{\tau}(Y) Dτ(Y),而 D τ ( Y ) D_{\tau}(Y) Dτ(Y)的定义如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210530151204232.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mjk5ODIxNA==,size_16,color_FFFFFF,t_70
也就是说对于公式(2.3),为了获得X的最优解,我们需要将Y进行SVD(skinny SVD)分解,U和V保持不变,但是对于所有的特征值要减去 τ \tau τ(注意:这个 τ \tau τ是公式中核范数前面的系数),并进行max(0,t)操作,那么对于 σ i < τ \sigma_i<\tau σi<τ的那些特征值就会被置0,这是SVT的主要思想,而论文中通常会先将带有核范数的目标函数转化成如(2.3)形式的问题,再利用上述SVT的解法求得最优解
举个具体的实例:
有目标函数一:
min ⁡ Z f ( Z ) + λ ∥ Z ∥ ∗ \min_{Z}f(Z)+\lambda\|Z\|_* Zminf(Z)+λZ
首先引入中间变量 X X X,得到如下目标函数二:
min ⁡ Z , X f ( Z ) + λ ∥ X ∥ ∗ s . t . Z = X \min_{Z,X}f(Z)+\lambda\|X\|_*\\ s.t. Z=X Z,Xminf(Z)+λXs.t.Z=X
利用增广拉格朗日得到目标函数三:
min ⁡ Z , X f ( Z ) + λ ∥ X ∥ ∗ + t r ( A T ( Z − X ) ) + μ 2 ∥ Z − X ∥ F 2 \min_{Z,X}f(Z)+\lambda\|X\|_*+tr(A^T(Z-X))+\frac{\mu}{2}\|Z-X\|_F^2 Z,Xminf(Z)+λX+tr(AT(ZX))+2μZXF2
只关注与X有关的项,我们可以得到如下优化问题一:
arg ⁡ min ⁡ X λ ∥ X ∥ ∗ + t r ( A T ( Z − X ) ) + μ 2 ∥ Z − X ∥ F 2 \arg\min_X \lambda\|X\|_*+tr(A^T(Z-X))+\frac{\mu}{2}\|Z-X\|_F^2\\ argXminλX+tr(AT(ZX))+2μZXF2
经过计算,得到优化问题二:
arg ⁡ min ⁡ X λ μ ∥ X ∥ ∗ + 1 2 ∥ X − ( Z + 1 μ A ) ∥ F 2 \arg\min_X \frac{\lambda}{\mu}\|X\|_*+\frac{1}{2}\|X-(Z+\frac{1}{\mu}A)\|_F^2\\ argXminμλX+21X(Z+μ1A)F2
此时不难发现优化问题二就和公式(2.3)有着相似的结构了( λ μ \frac{\lambda}{\mu} μλ对应 τ \tau τ ( Z + 1 μ A ) (Z+\frac{1}{\mu}A) (Z+μ1A)对应 Y Y Y),直接利用SVT求解即可

2. 直接求导

考虑到矩阵核范数的定义如下:
∥ X ∥ ∗ = t r ( X T X ) \|X\|_*=tr(\sqrt{X^TX}) X=tr(XTX )
结合特征值分解有 X = U Σ V T X=U\Sigma V^T X=UΣVT,可以得到以下结论:
t r ( X T X ) = t r ( Σ ) tr(\sqrt{X^TX})=tr(\Sigma) tr(XTX )=tr(Σ)
对于X而言:
∂ X = ( ∂ U ) Σ V T + U ( ∂ Σ ) V T + U Σ ( ∂ V T ) \partial X=(\partial U)\Sigma V^T+U(\partial \Sigma) V^T+ U\Sigma (\partial V^T) X=(U)ΣVT+U(Σ)VT+UΣ(VT)
将上述公式右侧的第二项挪至等号左边并左乘U^T,右乘V,得到
∂ Σ = U T ( ∂ X ) V − U T ( ∂ U ) Σ − Σ ( ∂ V T ) V \partial \Sigma=U^T(\partial X)V-U^T(\partial U)\Sigma-\Sigma(\partial V^T)V Σ=UT(X)VUT(U)ΣΣ(VT)V
由于后面两项的值为0,所以
∂ Σ = U T ( ∂ X ) V \partial \Sigma=U^T(\partial X)V Σ=UT(X)V
对X的核范数直接求导,得到
∂ ∥ X ∥ ∗ ∂ X = t r ( Σ ) ∂ X = t r ( U T ( ∂ X ) V ∂ X = V U T ( ∂ X ) ∂ X = ( V U T ) T = U V T \frac{\partial \|X\|_*}{\partial X}=\frac{tr(\Sigma)}{\partial X}=\frac{tr(U^T(\partial X)V}{\partial X}=\frac{VU^T(\partial X)}{\partial X}=(VU^T)^T=UV^T XX=Xtr(Σ)=Xtr(UT(X)V=XVUT(X)=(VUT)T=UVT
在知乎的一个答案中看到了关于第二种方法正确性的讨论,这种方法并不适用于所有的W,详情参考矩阵的核范数的导数是什么?

参考文献:

  1. Cai J F, Candès E J, Shen Z. A singular value thresholding algorithm for matrix completion[J]. SIAM Journal on optimization, 2010, 20(4): 1956-1982.
  2. Boyd S, Parikh N, Chu E, et al. Distributed Optimization and Statistics via Alternating Direction Method of Multipliers[J]. 2013.
  3. https://math.stackexchange.com/questions/701062/derivative-of-the-nuclear-norm
  4. https://hyper.ai/wiki/2687
### 向量二范数的求导及其在机器学习优化中的应用 #### 定义与背景 向量的二范数(L2范数)表示为 \( \| \mathbf{v} \|_2 = \sqrt{\sum_{i=1}^{n} v_i^2} \),其中 \( \mathbf{v} \) 是一个 n 维向量。对于该表达式的平方形式 \( \| \mathbf{v} \|_2^2 = \sum_{i=1}^{n} v_i^2 \),其梯度更容易计算,在许多情况下被广泛应用于机器学习模型的正则化项中[^3]。 #### 数学推导过程 假设给定一个向量 \( \mathbf{v} = [v_1, v_2, ..., v_n]^T \),我们需要对其二范数进行求导: 1. 首先考虑二范数的平方形式 \( f(\mathbf{v}) = \| \mathbf{v} \|_2^2 = \sum_{i=1}^{n} v_i^2 \) 的偏导数: 对于每一个分量 \( v_j \),有: \[ \frac{\partial}{\partial v_j} (\| \mathbf{v} \|_2^2) = 2v_j \] 将所有分量组合成向量,则可得梯度为: \[ \nabla_\mathbf{v} (\| \mathbf{v} \|_2^2) = 2\mathbf{v} \] 2. 接下来考虑原始的二范数 \( g(\mathbf{v}) = \| \mathbf{v} \|_2 = \sqrt{\sum_{i=1}^{n} v_i^2} \) 的偏导数: 利用链式法则,可以写为: \[ \frac{\partial}{\partial v_j} (g(\mathbf{v})) = \frac{1}{2\sqrt{\sum_{i=1}^{n} v_i^2}} \cdot 2v_j = \frac{v_j}{\| \mathbf{v} \|_2} \] 故完整的梯度为: \[ \nabla_\mathbf{v} (\| \mathbf{v} \|_2) = \frac{\mathbf{v}}{\| \mathbf{v} \|_2} \][^1] #### 应用于机器学习优化 在机器学习领域,尤其是深度学习和线性回归等问题中,常通过加入 L2 正则化项来防止过拟合。具体来说,损失函数通常写作: \[ L(w) = J(w) + \lambda \| w \|_2^2 \] 其中 \( J(w) \) 表示训练误差部分,\( \lambda \| w \|_2^2 \) 表示权重衰减项。通过对整个损失函数关于参数 \( w \) 求导并更新参数实现最小化目标函数的目的。由于 \( \| w \|_2^2 \) 的梯度简单明了,即 \( 2\lambda w \)[^5],这使得优化算法更加高效稳定。 ```python import numpy as np def l2_norm_derivative(vector): norm = np.linalg.norm(vector) if norm == 0: raise ValueError("Vector has zero length.") return vector / norm # Example usage vector_example = np.array([3, 4]) gradient_l2 = l2_norm_derivative(vector_example) print(gradient_l2) ```
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值