On the Optimization of Deep Networks: Implicit Acceleration by Overparameterization

Arora S, Cohen N, Hazan E, et al. On the Optimization of Deep Networks: Implicit Acceleration by Overparameterization[J]. arXiv: Learning, 2018.

我很喜欢这一篇文章,因为证明用到的知识并不难,但是却用的很巧,数学真是太牛了,这些人的嗅觉怎么这么好呢?

这篇文章,归根结底就是想说明一个问题,就是和一般的认知不同,随着神经网络的加深,参数更新的收敛速度并不会下降,感觉也有很多论文论述了深度depth的重要性.

不过,这篇文章,是在线性神经网络上做的一个分析,另外,标题中的Acceleration并没有很好的理论支撑,作者给出了几个特例和一些实验论据。我想作者肯定尝试过,但是想要证明想想就不易,至少得弄出个 O ( T ? ) O(T^?) O(T?)之类的.

虽然理论支撑不够,但是我感觉还是很厉害了.

主要内容

首先,为了排除一些干扰因素,就是Acceleration来自于俩个网络的表达能力不同,神经网络 N 1 , N 2 N_1,N_2 N1,N2, 如果二者的收敛速度不同,原因可能是 N 1 N_1 N1 N 2 N_2 N2能让损失下降的程度不同. 而在线性网络中,层数增加并不会改变网络的表达能力.
L ( W ) L(W) L(W)是关于 W ∈ R k × d W\in \R^{k\times d} WRk×d的损失函数,这个网络的表达能力和 L ( W N W N − 1 ⋯ W 1 ) L(W_NW_{N-1}\cdots W_1) L(WNWN1W1)的表达能力是相同的,如果 W N W N − 1 ⋯ W 1 ∈ R k × d W_NW_{N-1}\cdots W_1\in \R^{k \times d} WNWN1W1Rk×d.

对上面的结论,有一点点存疑,假设后者的最优为 ( W N ∗ , W N − 1 ∗ , … , W 1 ∗ ) (W_N^*, W_{N-1}^*,\ldots,W_1^*) (WN,WN1,,W1),那么只要让 W = W N ∗ W N − 1 ∗ ⋯ W 1 ∗ W=W_N^* W_{N-1}^*\cdots W_1^* W=WNWN1W1即可,所以 L ( W ∗ ) ≤ L ( W N ∗ W N − 1 ∗ ⋯ W 1 ∗ ) L(W^*)\le L(W_N^* W_{N-1}^*\cdots W_1^*) L(W)L(WNWN1W1).

反过来似乎不一定,假设 N = 2 N=2 N=2, W 2 ∈ R k × 1 , W 1 ∈ R 1 × d W_2 \in \R^{k \times 1}, W_1 \in \R^{1 \times d} W2Rk×1,W1R1×d, 但是利用here的结果,只要 W i ∈ R d i × d i − 1 W_i\in \R^{d_i \times d_{i-1}} WiRdi×di1, 满足 d i ≥ min ⁡ { k , d } d_i \ge \min \{k, d\} dimin{k,d} L L L关于 W W W为凸函数,就能说明等价. 居然还用上了之前看过的结果.

符号可能有点多,尽可能简化点吧. x ∈ R d x \in \R^d xRd为样本, y ∈ R k y\in R^k yRk为输出,
Φ N : = { x → W N W N − 1 ⋯ W 1 x ∣ W j ∈ R n j × n j − 1 , j = 1 , ⋯   , N } , \Phi^N := \{ x \rightarrow W_NW_{N-1}\cdots W_1 x|W_j \in \R^{n_j \times n_{j-1}}, j=1,\cdots,N\}, ΦN:={xWNWN1W1xWjRnj×nj1,j=1,,N},
显然 n N = k , n 0 = d n_N=k,n_0=d nN=k,n0=d. 假设 L N ( ⋅ ) L^N(\cdot) LN()是关于 ( W N , W N − 1 , ⋯   , W 1 ) (W_N,W_{N-1},\cdots, W_1) (WN,WN1,,W1)的函数, 可得
L N ( W N , W N − 1 , … , W 1 ) = L 1 ( W N W N − 1 ⋯ W 1 ) , L^N(W_{N}, W_{N-1}, \ldots, W_1)=L^1(W_NW_{N-1}\cdots W_1), LN(WN,WN1,,W1)=L1(WNWN1W1),
不要觉得这么做多此一举,不然后面证明的时候会弄乱的.

梯度下降采用了类似momentum的感觉,但是又有点不一样:

W j ( t + 1 ) ← ( 1 − η λ ) W j ( t ) − η ∂ L N ∂ W j ( W 1 ( t ) , … , W N ( t ) ) ,   j = 1 … N . W_j^{(t+1)} \leftarrow (1-\eta \lambda)W_j^{(t)} - \eta \frac{\partial L^N}{\partial W_j}(W_1^{(t)},\ldots,W_N^{(t)}), \: j=1\ldots N. Wj(t+1)(1ηλ)Wj(t)ηWjLN(W1(t),,WN(t)),j=1N.
η > 0 \eta>0 η>0的学习率, λ ≥ 0 \lambda \ge 0 λ0是权重的递减系数.
定义
W e = W N W N − 1 ⋯ W 1 , W_e = W_NW_{N-1}\cdots W_1, We=WNWN1W1,
L N ( W N , … , W 1 ) = L 1 ( W e ) L^N(W_N,\ldots,W_1)=L^1(W_e) LN(WN,,W1)=L1(We).

作者假设 η \eta η,也就是学习率是一个小量,所以上面的式子可以从微分方程的角度去看
W ˙ j ( t ) = − η λ W j ( t ) − η ∂ L N ∂ W j ( W 1 ( t ) , … , W N ( t ) ) . \dot{W}_j(t) = -\eta \lambda W_j(t) - \eta \frac{\partial L^N}{\partial W_j}(W_1^{(t)},\ldots,W_N^{(t)}). W˙j(t)=ηλWj(t)ηWjLN(W1(t),,WN(t)).
怎么说呢,这个所以,我的理解是 η \eta η很小的时候, W j ( t ) W_j(t) Wj(t)很平缓,所以可以认为导数和 Δ t = 1 \Delta t=1 Δt=1的时候是一样的?

看了之前有一篇类似的Oja’rule也用了这种方法,感觉作者的意思应该是如果:
W ˙ j ( t ) = − λ W j ( t ) − ∂ L N ∂ W j ( W 1 ( t ) , … , W N ( t ) ) , \dot{W}_j(t) = -\lambda W_j(t) - \frac{\partial L^N}{\partial W_j}(W_1^{(t)},\ldots,W_N^{(t)}), W˙j(t)=λWj(t)WjLN(W1(t),,WN(t)),
此时,
W j ( t + η ) = W ( t ) − [ λ W j ( t ) + ∂ L N ∂ W j ( W 1 ( t ) , … , W N ( t ) ) ] η + O ( η 2 ) ≈ ( 1 − η λ ) W j ( t ) − η ∂ L N ∂ W j ( W 1 ( t ) , … , W N ( t ) ) . \begin{array}{ll} {W}_j(t+\eta) &= W(t)-[\lambda W_j(t) + \frac{\partial L^N}{\partial W_j}(W_1^{(t)},\ldots,W_N^{(t)})]\eta+O(\eta^2)\\ &\approx(1-\eta \lambda)W_j^{(t)} - \eta \frac{\partial L^N}{\partial W_j}(W_1^{(t)},\ldots,W_N^{(t)}). \end{array} Wj(t+η)=W(t)[λWj(t)+WjLN(W1(t),,WN(t))]η+O(η2)(1ηλ)Wj(t)ηWjLN(W1(t),,WN(t)).

我觉得应该是这个样子的,不过对于最后的结果没有影响.

定理1

定理1 假设权重矩阵 W 1 , … W N W_1, \ldots W_N W1,WN满足微分方程:
W ˙ j ( t ) = − η λ W j ( t ) − η ∂ L N ∂ W j ( W 1 ( t ) , … , W N ( t ) ) , j = 1 , … , N , \dot{W}_j(t) = -\eta \lambda W_j(t) - \eta \frac{\partial L^N}{\partial W_j}(W_1^{(t)},\ldots,W_N^{(t)}), j=1,\ldots,N, W˙j(t)=ηλWj(t)ηWjLN(W1(t),,WN(t)),j=1,,N,

W j + 1 T ( t 0 ) W j + 1 ( t 0 ) = W j ( t 0 ) W j T ( t 0 ) ,   j = 1 , … , N − 1. W_{j+1}^T(t_0)W_{j+1}(t_0)=W_j(t_0)W_j^T(t_0), \: j=1,\ldots, N-1. Wj+1T(t0)Wj+1(t0)=Wj(t0)WjT(t0),j=1,,N1.
则权重矩阵 W e W_e We的变化满足下列微分方程:
W e ˙ ( t ) = η λ N ⋅ W e ( t ) − η ∑ j = 1 N [ W e ( t ) W e T ( t ) ] j − 1 N ⋅ d L 1 d W ( W e ( t ) ) ⋅ [ W e T ( t ) W e ( t ) ] N − j N . \begin{array}{ll} \dot{W_e}(t) = & \eta \lambda N \cdot W_e(t) \\ & - \eta \sum_{j=1}^N [W_e(t) W_e^T(t)]^{\frac{j-1}{N}} \cdot \\ & \quad \frac{\mathrm{d}L^1}{\mathrm{d}W}(W_e(t))\cdot [W_e^T(t)W_e(t)]^{\frac{N-j}{N}}. \end{array} We˙(t)=ηλNWe(t)ηj=1N[We(t)WeT(t)]Nj1dWdL1(We(t))[WeT(t)We(t)]NNj.
其中 [ ⋅ ] q p [\cdot]^{\frac{q}{p}} []pq是关于半正定矩阵的一个定义,假如:
A = V D V T , A q p = V D q p V T , A = VDV^T, A^{\frac{q}{p}}=VD^{\frac{q}{p}}V^T, A=VDVT,Apq=VDpqVT,
对角矩阵 D q p D^{\frac{q}{p}} Dpq是让对角线元素的 D i i q p D_{ii}^{\frac{q}{p}} Diipq.

所以,权重 W e W_e We的更新变换近似于:
W e ( t + 1 ) = ( 1 − η λ N ) ⋅ W e ( t ) − η ∑ j = 1 N [ W e ( t ) W e T ( t ) ] j − 1 N ⋅ d L 1 d W ( W e ( t ) ) ⋅ [ W e T ( t ) W e ( t ) ] N − j N . \begin{array}{ll} {W_e}(t+1) = & (1-\eta \lambda N) \cdot W_e(t) \\ & - \eta \sum_{j=1}^N [W_e(t) W_e^T(t)]^{\frac{j-1}{N}} \cdot \\ & \quad \frac{\mathrm{d}L^1}{\mathrm{d}W}(W_e(t))\cdot [W_e^T(t)W_e(t)]^{\frac{N-j}{N}}. \end{array} We(t+1)=(1ηλN)We(t)ηj=1N[We(t)WeT(t)]Nj1dWdL1(We(t))[WeT(t)We(t)]NNj.

Claim 1

上面的更新实际上让人看不出一个所以然来,所以作者给出了一个向量形式的更新方式,可以更加直观地展现其中地奥秘.
Claim 1 对于任意矩阵 A A A, 定义 v e c ( A ) vec(A) vec(A)为由矩阵 A A A按列重排后的向量形式. 于是,
在这里插入图片描述
其中 P W e ( t ) P_{W_e^{(t)}} PWe(t)是一个半正定矩阵,依赖于 W e W_e We, 假设
W e ( t ) = U D V T , W_e^{(t)}=UDV^T, We(t)=UDVT,
其中 U = [ u 1 , u 2 , … , u k ] ∈ R k × k , V = [ v 1 , v 2 , … , v d ] ∈ R d × d U = [u_1,u_2, \ldots,u_k]\in \R^{k \times k}, V=[v_1,v_2,\ldots,v_d] \in \R^{d \times d} U=[u1,u2,,uk]Rk×k,V=[v1,v2,,vd]Rd×d, D D D的对角线元素,即 W e ( t ) W_e^{(t)} We(t)的奇异值从大到小为 σ 1 , σ 2 , … , σ max ⁡ { k , d } \sigma_1,\sigma_2,\ldots, \sigma_{\max \{k, d\}} σ1,σ2,,σmax{k,d}, 则 P W e ( t ) P_{W_e^{(t)}} PWe(t)的特征向量和对应的特征值为:
在这里插入图片描述

这说明了什么呢?也就是overparameterization后的更新, W e ( t + 1 ) W_e^{(t+1)} We(t+1)的更新,也就是 v e c ( W e ( t + 1 ) ) vec(W_e ^{(t+1)}) vec(We(t+1))的更新倾向于 v e c ( u 1 v 1 T ) vec(u_1v_1^{T}) vec(u1v1T), 感觉这一点就和一些梯度下降方法的思想有点类似了,借用之前的成果. 而且,这个借用,会有一种坐标之间的互相沟通,一般的下降方法是不具备这一点的.

Claim 2

在这里插入图片描述

定理2

定理2 假设 d L 1 d W \frac{\mathrm{d}L^1}{\mathrm{d}W} dWdL1 W = 0 W=0 W=0处有定义, W = 0 W=0 W=0的某个邻域内连续,那么对于给定的 N ∈ N , N > 2 N \in \N, N > 2 NN,N>2, 定义:
在这里插入图片描述
那么,不存在关于 W W W的一个函数,其梯度场为 F F F.

定理2的意义在于,它告诉我们,overparameterization的方法是不能通过添加正则项来实现的,因为 F ( W ) F(W) F(W)不存在原函数,所以诸如
L ( W ) + λ ∥ W ∥ L(W)+\lambda \|W\| L(W)+λW
的操作是不可能实现overparametrization的更新变化的.

证明思路是,构造一个封闭曲线,证明 F ( W ) F(W) F(W)在其上的线积分不为0. (太帅了…)

证明

定理1的证明

首先是一些符号:
∏ a j = b W j : = W b W b − 1 ⋯ W a ∏ j = a b W j T : = W a T W a + 1 T ⋯ W b T \prod_a^{j=b} W_j := W_b W_{b-1} \cdots W_a \\ \prod_{j=a}^b W_j^T := W_a^TW_{a+1}^T \cdots W_b^T aj=bWj:=WbWb1Waj=abWjT:=WaTWa+1TWbT

在这里插入图片描述
表示块对角矩阵.

容易证明(其实费了一番功夫,但是不想写下来,因为每次都会忘,如果下次忘了,就再推一次当惩罚):

在这里插入图片描述

于是
在这里插入图片描述
j j j个等式俩边右乘 W j T ( t ) W_j^T(t) WjT(t), 第 j + 1 j+1 j+1个等式俩边左乘 W j + 1 T ( t ) W_{j+1}^T(t) Wj+1T(t)可得:
在这里插入图片描述
俩边乘以2
在这里插入图片描述

C j ( t ) : = W j ( t ) W j T ( t ) , C j ′ ( t ) : = W j T ( t ) W j ( t ) C_j(t):=W_j(t)W_j^T(t), C_j'(t):=W_j^T(t)W_j(t) Cj(t):=Wj(t)WjT(t),Cj(t):=WjT(t)Wj(t), 则
在这里插入图片描述

注意,我们将上面的等式改写以下,等价于
( C j + 1 ′ − C j ) ˙ ( t ) = − 2 η λ ( C j + 1 ′ − C j ) ( t ) , \dot{(C'_{j+1}-C_j)}(t) = -2\eta \lambda (C'_{j+1}-C_j)(t), (Cj+1Cj)˙(t)=2ηλ(Cj+1Cj)(t),
y ( t ) : = ( C j + 1 ′ − C j ) ( t ) y(t):=(C'_{j+1}-C_j)(t) y(t):=(Cj+1Cj)(t), 则
y ˙ ( t ) = − 2 η λ y , \dot{y}(t)=-2\eta \lambda y, y˙(t)=2ηλy,
另外有初值条件 y ( t 0 ) = 0 y(t_0)=0 y(t0)=0(这是题设的条件).
容易知道,上面的微分方程的解为 y ≡ 0 y\equiv0 y0.
所以
C j + 1 ′ ( t ) = C j ( t ) , j = 1 , … , N − 1. C'_{j+1}(t)=C_j(t), j=1,\ldots, N-1. Cj+1(t)=Cj(t),j=1,,N1.
假设 W j ( t ) W_j(t) Wj(t)的奇异值分解为
W j ( t ) = U j Σ j V j T . W_j(t)=U_j \Sigma_jV_j^T. Wj(t)=UjΣjVjT.
且假设 Σ j \Sigma_j Σj的对角线元素,即奇异值是从大到小排列的.
则可得
在这里插入图片描述

显然 Σ j + 1 T Σ j + 1 = Σ j Σ j T \Sigma_{j+1}^T\Sigma_{j+1}=\Sigma_j \Sigma_j^T Σj+1TΣj+1=ΣjΣjT, 这是因为一个矩阵的特征值是固定的(如果顺序固定的话),特征向量是不一定的,因为可能有多个相同的特征值,那么对于一个特征值的子空间的任意正交基都可以作为特征向量,也就是说
在这里插入图片描述
在这里插入图片描述

其中 I d r ∈ R d r × d r I_{d_r} \in \R^{d_r \times d_r} IdrRdr×dr是单位矩阵, O j , r ∈ R d r × d r O_{j,r} \in \R^{d_r \times d_r} Oj,rRdr×dr是正交矩阵.

所以对于 j = 1 … N − 1 j=1\ldots N-1 j=1N1, 成立
在这里插入图片描述

j = N j=N j=N
在这里插入图片描述

在这里插入图片描述
注意,上面的推导需要用到:
( d i a g ( O j , 1 , … , O j , m ) ) T d i a g ( ( ρ 1 ) c I d 1 , … , ( ρ , ) j I d m ) ( d i a g ( O j , 1 , … , O j , m ) ) = d i a g ( ( ρ 1 ) c I d 1 , … , ( ρ , ) j I d m ) (diag(O_{j,1},\ldots, O_{j,m}))^T diag((\rho_1)^c I_{d_1},\ldots, (\rho_,)^j I_{d_m})(diag(O_{j,1},\ldots, O_{j,m})) = diag((\rho_1)^c I_{d_1},\ldots, (\rho_,)^j I_{d_m}) (diag(Oj,1,,Oj,m))Tdiag((ρ1)cId1,,(ρ,)jIdm)(diag(Oj,1,,Oj,m))=diag((ρ1)cId1,,(ρ,)jIdm)
既然
在这里插入图片描述
那么
在这里插入图片描述
在这里插入图片描述
上式左端为 W ˙ e ( t ) \dot{W}_e(t) W˙e(t), 于是
在这里插入图片描述

再利用(23)(24)的结论

在这里插入图片描述

Claim 1 的证明

Kronecker product (克罗内克积)

网上似乎都用 ⊗ \otimes , 不过这里还是遵循论文的使用规范吧, 用 ⊙ \odot 来表示Kronecker product:
A ⊙ B : = [ a 11 ⋅ B ⋯ a 1 n a ⋅ B ⋮ ⋱ ⋮ a m a 1 ⋅ B ⋯ a m a n a ⋅ B ] ∈ R m a m b × n a n b , A \odot B := \left [ \begin{array}{ccc} a_{11} \cdot B & \cdots & a_{1n_{a}} \cdot B \\ \vdots & \ddots & \vdots \\ a_{m_a1} \cdot B & \cdots & a_{m_a n_a} \cdot B \end{array} \right ] \in \R^{m_am_b \times n_an_b}, AB:=a11Bama1Ba1naBamanaBRmamb×nanb,
其中 A ∈ R m a × n a , B ∈ R m b × n b A \in \R^{m_a \times n_a}, B \in \R^{m_b \times n_b} ARma×na,BRmb×nb.

容易证明 A ⊙ B A \odot B AB的第 r n b + s , r = 0 , 1 , … , n a − 1 , s = 0 , 1 , … , n b − 1 rn_b + s, r = 0, 1, \ldots, n_a-1, s = 0, 1, \ldots, n_b-1 rnb+s,r=0,1,,na1,s=0,1,,nb1列为:
v e c ( B ∗ s + 1 A ∗ r + 1 T ) , vec(B_{*s+1}A_{*r+1}^T), vec(Bs+1Ar+1T),
其中 B ∗ j B_{*j} Bj表示 B B B的第 j j j列, 沿用 v e c ( A ) vec(A) vec(A) A A A的列展开. 相应的, A ⊙ B A \odot B AB的第 p m b + q , p = 0 , 1 , … , m a − 1 , q = 0 , 1 , … , m b − 1 pm_b+q, p=0,1,\ldots,m_a-1,q=0, 1, \ldots, m_b-1 pmb+q,p=0,1,,ma1,q=0,1,,mb1行为:
v e c ( B q + 1 ∗ T A p + 1 ∗ ) T , vec(B_{q+1*}^TA_{p+1*})^T, vec(Bq+1TAp+1)T,
其中 A i ∗ A_{i*} Ai表示 A A A的第 i i i行.

[ A ⊙ B ] ( p , q , r , s ) [A\odot B]_{(p,q,r,s)} [AB](p,q,r,s)表示 [ A ⊙ B ] [A \odot B] [AB]的第 r n b + s rn_b+s rnb+s p m b + q pm_b+q pmb+q行的元素, 则
[ A ⊙ B ] ( p , q , r , s ) = a p + 1 , r + 1 b q + 1 , s + 1 [A\odot B]_{(p,q,r,s)} = a_{p+1,r+1}b_{q+1,s+1} [AB](p,q,r,s)=ap+1,r+1bq+1,s+1

另外 I d 1 ⊙ I d 2 = I d 1 d 2 I_{d_1} \odot I_{d_2} = I_{d_1d_2} Id1Id2=Id1d2.

下面再证明几个重要的性质:

( A 1 ⊙ A 2 ) ( B 1 ⊙ B 2 ) = ( A 1 B 1 ) ⊙ ( A 2 B 2 ) (A_1 \odot A_2)(B_1 \odot B_2) = (A_1 B_1) \odot (A_2B_2) (A1A2)(B1B2)=(A1B1)(A2B2)

假设 A 1 ∈ R m 1 × l 1 , B 1 ∈ R l 1 × n 1 , A 2 ∈ R m 2 × l 2 , B 2 ∈ R l 2 × n 2 A_1 \in \R^{m_1 \times l_1}, B_1 \in \R^{l_1 \times n_1}, A_2 \in \R^{m_2 \times l_2}, B_2 \in \R^{l_2 \times n_2} A1Rm1×l1,B1Rl1×n1,A2Rm2×l2,B2Rl2×n2, 则
( A 1 ⊙ A 2 ) ( B 1 ⊙ B 2 ) = ( A 1 B 1 ) ⊙ ( A 2 B 2 ) (A_1 \odot A_2)(B_1 \odot B_2) = (A_1 B_1) \odot (A_2B_2) (A1A2)(B1B2)=(A1B1)(A2B2)

考察俩边矩阵的 ( p m 2 + q , r n 2 + s ) (pm_2+q,rn_2+s) (pm2+q,rn2+s)的元素,
[ ( A 1 ⊙ A 2 ) ( B 1 ⊙ B 2 ) ] ( p , q , r , s ) = ( A 1 ⊙ A 2 ) p m 2 + q ∗ ( B 1 ⊙ B 2 ) ∗ r n 2 + s = v e c ( A 2 q + 1 ∗ T A 1 p + 1 ∗ ) T v e c ( B 2 ∗ s + 1 B 1 ∗ r + 1 ) = t r ( A 1 p + 1 ∗ T A 2 q + 1 ∗ B 2 ∗ s + 1 B 1 ∗ r + 1 T ) = ( A 1 p + 1 ∗ B 1 ∗ r + 1 ) ( A 2 q + 1 ∗ B 2 ∗ s + 1 ) = ( A 1 B 1 ) p + 1 , r + 1 ( A 2 B 2 ) q + 1 , s + 1 = [ ( A 1 B 1 ) ⊙ ( A 2 B 2 ) ] ( p , q , r , s ) . \begin{array}{ll} [(A_1 \odot A_2)(B_1 \odot B_2)]_{(p,q,r,s)} &= (A_1 \odot A_2)_{pm_2+q*} (B_1 \odot B_2)_{*rn_2+s} \\ &= vec({A_2}_{q+1*}^T{A_1}_{p+1*})^T vec({B_2}_{*s+1}{B_1}_{*r+1}) \\ & = tr({A_1}_{p+1*}^T{A_2}_{q+1*}{B_2}_{*s+1}{B_1}_{*r+1}^T) \\ & = ({A_1}_{p+1*}{B_1}_{*r+1}) ({A_2}_{q+1*}{B_2}_{*s+1}) \\ & = (A_1B_1)_{p+1,r+1} (A_2B_2)_{q+1,s+1} \\ & = [(A_1 B_1) \odot (A_2B_2)]_{(p,q,r,s)}. \end{array} [(A1A2)(B1B2)](p,q,r,s)=(A1A2)pm2+q(B1B2)rn2+s=vec(A2q+1TA1p+1)Tvec(B2s+1B1r+1)=tr(A1p+1TA2q+1B2s+1B1r+1T)=(A1p+1B1r+1)(A2q+1B2s+1)=(A1B1)p+1,r+1(A2B2)q+1,s+1=[(A1B1)(A2B2)](p,q,r,s).
得证. 注意,倒数第四个等式到倒数第三个用到了迹的可交换性.

( A ⊙ B ) T = A T ⊙ B T (A \odot B)^T=A^T \odot B^T (AB)T=ATBT

[ ( A ⊙ B ) T ] ( p , q , r , s ) = [ A ⊙ B ] ( r , s , p , q ) = a r + 1 , p + 1 b s + 1 , q + 1 = a p + 1 , r + 1 T b q + 1 , s + 1 T = [ A T ⊙ B T ] ( p , q , r , s ) . \begin{array}{ll} [(A \odot B)^T]_{(p, q, r, s)} &= [A \odot B]_{(r, s, p, q)} = a_{r+1,p+1}b_{s+1,q+1} \\ & = a^T_{p+1,r+1}b^T_{q+1,s+1}=[A^T \odot B^T]_{(p,q,r,s)}. \end{array} [(AB)T](p,q,r,s)=[AB](r,s,p,q)=ar+1,p+1bs+1,q+1=ap+1,r+1Tbq+1,s+1T=[ATBT](p,q,r,s).

A T = A − 1 , B T = B − 1 ⇒ ( A ⊙ B ) T = ( A ⊙ B ) − 1 A^T=A^{-1},B^T=B^{-1} \Rightarrow (A \odot B)^T = (A \odot B)^{-1} AT=A1,BT=B1(AB)T=(AB)1

( A ⊙ B ) T ( A ⊙ B ) = ( A T ⊙ B T ) ( A ⊙ B ) = ( A T A ) ⊙ ( B T B ) = I n a ⊙ I n b = I n a n b , \begin{array}{ll} (A \odot B)^T(A \odot B) & = (A^T \odot B^T)(A \odot B) \\ &= (A^TA) \odot (B^TB) \\ &= I_{n_a} \odot I_{n_b} \\ & = I_{n_a n_b}, \end{array} (AB)T(AB)=(ATBT)(AB)=(ATA)(BTB)=InaInb=Inanb,
所以 ( A ⊙ B ) T = ( A ⊙ B ) − 1 (A \odot B)^T = (A \odot B)^{-1} (AB)T=(AB)1.

回到Claim 1 的证明上来,容易证明
在这里插入图片描述
于是
在这里插入图片描述
第二个等式用到了 ( A 1 ⊙ A 2 ) ( B 1 ⊙ B 2 ) = ( A 1 B 1 ) ⊙ ( A 2 B 2 ) (A_1 \odot A_2)(B_1 \odot B_2) = (A_1 B_1) \odot (A_2B_2) (A1A2)(B1B2)=(A1B1)(A2B2).

只需要证明:
在这里插入图片描述

等价于 P W e P_{W_e} PWe. 令
W e = U D V T , W_e = UDV^T, We=UDVT,
其中 U ∈ R k × k , V ∈ R d × d U \in \R^{k \times k}, V \in \R^{d \times d} URk×k,VRd×d.
所以

在这里插入图片描述

第三个等式用了俩次 ( A 1 ⊙ A 2 ) ( B 1 ⊙ B 2 ) = ( A 1 B 1 ) ⊙ ( A 2 B 2 ) (A_1 \odot A_2)(B_1 \odot B_2) = (A_1 B_1) \odot (A_2B_2) (A1A2)(B1B2)=(A1B1)(A2B2).

定义:

在这里插入图片描述

Q = O Λ O T . Q = O \Lambda O^T. Q=OΛOT.

剩下的,关于 O O O的列
在这里插入图片描述
Λ \Lambda Λ的对角元素:
在这里插入图片描述
只是一些简单的推导罢了.

Theorem 2 的证明

这个证明我不想贴在这里,因为这个证明我只能看懂,所以想知道就直接看原文吧.

代码

在这里插入图片描述
在这里插入图片描述
虽然只是用了一个很简单的例子做实验,但是感觉,这个迭代算法很吃初始值. 就像Claim 1 所解释的那样,这个下降方法,会更倾向于之前的方向,也就是之前的错了,后面也会错?

y1设置为100, y2设置为1, lr=0.005, 会出现(也有可能是收敛不到0):
在这里插入图片描述

这种下降的方式是蛮恐怖的啊,但是感觉实在是不稳定. 当然,也有可能是程序写的太烂了.


"""
On the Optimization of Deep
Net works: Implicit Acceleration by
Overparameterization
"""

import numpy as np
import torch
import torch.nn as nn
from torch.optim.optimizer import Optimizer, required



class Net(nn.Module):
    def __init__(self, d, k):
        """
        :param k:  输出维度
        :param d:  输入维度
        """
        super(Net, self).__init__()
        self.d = d
        self.dense = nn.Sequential(
            nn.Linear(d, k)
        )

    def forward(self, input):
        x = input.view(-1, self.d)
        output = self.dense(x)
        return output




class Overparameter(Optimizer):
    def __init__(self, params, N, lr=required, weight_decay=1.):
        defaults = dict(lr=lr)
        super(Overparameter, self).__init__(params, defaults)
        self.N = N
        self.weight_decay = weight_decay

    def __setstate__(self, state):
        super(Overparameter, self).__setstate__(state)
        print("????")
        print(state)
        print("????")

    def step(self, colsure=None):
        def calc_part2(W, dw, N):
            dw = dw.detach().numpy()
            w = W.detach().numpy()
            norm = np.linalg.norm(w, 2)
            part2 = norm ** (2-2/N) * (
                dw +
                (N - 1) * (w @ dw.T) * w / (norm ** 2 + 1e-5)
            )
            return torch.from_numpy(part2)

        p = self.param_groups[0]['params'][0]
        if p.grad is None:
            return 0
        d_p = p.grad.data
        part1 = (self.weight_decay * p.data).float()
        part2 = (calc_part2(p, d_p, self.N)).float()
        p.data -= self.param_groups[0]['lr'] * (part1+part2)

        return 1

class L4Loss(nn.Module):
    def __init__(self):
        super(L4Loss, self).__init__()

    def forward(self, x, y):
        return torch.norm(x-y, 4)

x1 = torch.tensor([1., 0])
y1 = torch.tensor(10.)
x2 = torch.tensor([0, 1.])
y2 = torch.tensor(2.)
net = Net(2, 1)
criterion = L4Loss()
opti = Overparameter(net.parameters(), 4, lr=0.01)


loss_store = []
for epoch in range(500):
    running_loss = 0.0
    out1 = net(x1)
    loss1 = criterion(out1, y1)
    opti.zero_grad()
    loss1.backward()
    opti.step()
    running_loss += loss1.item()
    out2 = net(x2)
    loss2 = criterion(out2, y2)
    opti.zero_grad()
    loss2.backward()
    opti.step()
    running_loss += loss2.item()
    #print(running_loss)
    loss_store.append(running_loss)

net = Net(2, 1)
criterion = nn.MSELoss()
opti = torch.optim.SGD(net.parameters(), lr=0.01)
loss_store2 = []
for epoch in range(500):
    running_loss = 0.0
    out1 = net(x1)
    loss1 = criterion(out1, y1)
    opti.zero_grad()
    loss1.backward()
    opti.step()
    running_loss += loss1.item()
    out2 = net(x2)
    loss2 = criterion(out2, y2)
    opti.zero_grad()
    loss2.backward()
    opti.step()
    running_loss += loss2.item()
    #print(running_loss)
    loss_store2.append(running_loss)


import matplotlib.pyplot as plt


plt.plot(range(len(loss_store)), loss_store, color="red", label="Over")
plt.plot(range(len(loss_store2)), loss_store2, color="blue", label="normal")
plt.legend()
plt.show()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值