Overparameterizationによって暗黙加速:ディープ・ネットワークの最適化について

アローラS、コーエンN、Hazan Eら。Overparameterization [J]によって暗黙の加速:ディープ・ネットワークの最適化について。arXivの:学習、2018。

リード

知識の使用の証拠として、私は本当にこの記事のように、難しいことではありませんが、非常に巧妙で、数学が本当にあまりにも悪い、臭いのどのようにこれらの人々の感覚とても良いのですか?

この記事では、最終的な分析は、問題を説明することであり、一般的な認識が落ちることはありません収束率を更新し、ニューラルネットワークパラメータの深化と、異なっている、私は多くの論文は、深さの深さの重要性について説明がある感じ。

しかし、この記事では、ほかに線形ニューラルネットワーク、加速のタイトルとうまく対応していない理論に行われた分析で、著者はいくつかの例外といくつかの実験的な証拠を提供します。私は著者が試し認めると思いますが、少なくともを考え出す必要があり、考えることは容易ではないことを証明するために、\(O(T ^?) \) などが挙げられます。

理論的なサポートが十分ではありませんが、私はまだ非常に多く感じますが。

主なコンテンツ

まず、交絡因子の数を排除するために、2つの異なるネットワークからの加速度を発現する能力、ニューラルネットワークである\(N_1、N_2 \)おそらく、異なる2の収束の速度であれば、\(N_1 \)\(N_2 \)ネットワークの表現能力を増加させるリニアネットワークながら、層の数を変化させない異なる程度は、損失の減少を作る。
\(Lは(Wである)\)を約ある\(W \で\ R ^ {k個の\倍D} \)損失関数、ネットワークとの表現能力\(L(W_NW_ {N- 1} \ cdots W_1)\) 式は、もし同じである\(W_NW_ {N-1} \ cdots W_1 \ \のR&LT ^における{K \ D}タイムズ\)

上記の結論は、仮定、ほとんど疑いがある後者の最適\((^ * W_N、W_。1} ^ {N- * \ ldotsは、W_1 * ^)\) そしてちょうどせ\(W = W_N ^ * W_ {N-1 } ^ * \ cdots W_1 ^ * \) することができ、したがって\(L(W ^ *) \ルL(W_N ^ * W_ {N-1} ^ * \ cdots W_1 ^ * )\)

逆に、必ずしもではないと思われる、と仮定\(N = 2 \) \(\ R&LT ^でW_2 \ {K \回1}、\でW_1 \ {R&LT ^ 1 \ D}タイムズ\)が、使用ここでは、結果を限り、\(\ R&LT ^ {D_I \タイムズD_ {I- 1}}でW_i \ \) 満足\(D_I \ GE \分\ {K、Dの\} \) と\(Lの\)について(\ Wは\)と同等を説明することができ、凸関数である。前に見た結果を過ごすために胆嚢。

シンボルビット以上であってよく、それは可能な限り点を簡単にする。\(X \で\ R&LT ^ D \)サンプル、\(R&LT ^ K \でY \)が出力される、
\ [\ピー^ N = \ {X \ RIGHTARROW W_NW_ {N-1} \
\ R ^ {n_j \回N_ {J-1}}、J = 1、\ cdots、N \}、\]でw_j \ | cdots W_1 X 明らか\(N_N = K、 N - 0 = D \)と仮定する。(L ^ N(\ CDOT \ )\) 約ある\((W_N、W_ {N -1}、\ cdots、W_1)\) 機能、利用可能
\ [L ^ N( W_ {N}、W_ {N
-1}、\ ldots、W_1)= Lは、^ 1(W_NW_は{N-1} \ cdots W_1)、\] その彼ら余分思わない、またはそれ以降の時間がバラバラ証明します。

グラデーション勢いの似た感覚を持つ降下が、それは少し異なります。

\ [W_j ^ {(T + 1)} \ LEFTARROW(1- \イータ\ラムダ)W_j ^ {(T)} - \イータの\ FRAC {\部分L ^ N} {\部分W_j}(W_1 ^ {( T)}、\ ldots、W_N ^ {(T)})、\:J = 1 \ ldots N. \]
\(\ ETA> 0 \)学習速度、\(\ラムダ\ GE 0 \)の重みであります係数低下
定義
\を[W_e = W_NW_ {N-
1} \ cdots W_1、\] ので\(L ^ N(W_N、\ ldots、W_1)= L ^ 1(W_e)\)

仮定上の\(\ ETA \)上記式は微分方程式の視点で見ることができるように、学習率は、小さいあり、
\ [\ドット{W} _j \イータ\ラムダW_j( - (T)= T) - 。\イータの\ FRAC
{\部分L ^ N} {\部分w_j}(W_1 ^ {(T)}、\ ldots、W_N ^ {(T)})\] 言う方法、その結果Iことを理解\(\ ETA \)非常に若い、\(w_j(t)は\)非常に穏やかで、それは誘導体と考えることができる\(\デルタT = 1 \ ) 時間は同じですか?

読むには、同様の先行Oja'ruleは:もし著者の意味がなければならないことを感じ、また、このアプローチを使用する
- \ w_jラムダ(T) - \ FRAC {\パーシャル\ [\ DOT {W} _J(T)= L ^ N} {\部分w_j
}(W_1 ^ {(T)}、\ ldots、W_N ^ {(T)})、\] このとき、
\ [\配列{WはLL} _J(ある{} {}開始T +の\ ETA)&= W (T) - [\ラムダw_j(T)+ \ FRAC {\部分L ^ N} {\部分w_j}(W_1 ^ {(T)}、\ ldots、W_N ^ {(T )})] \イータ+ O (\ ETA ^ 2)\\&\約(1- ETA \ \ラムダ)w_j ^ {(T)} - \イータの\ FRAC {\部分L ^ N} {\部分w_j }(W_1 ^ {(T) }、\ ldots、W_N ^ {(T)})。\端{アレイ} \]

私はそれがこのようにすべきだと思いませんが、最終的な結果には影響。

定理1

1つの定理は、重み行列想定\を(W_1は、\ ldots W_N \は ) :微分方程式を満足
\ ETA \ラムダw_j(T) - - ETA \ FRAC {\部分L \ ^ N \ [\ DOT {Wである} _J(T)= } {\部分w_j}(W_1
^ {(T)}、\ ldots、W_N ^ {(T)})、J = 1、\ ldots、N、\] と
\ [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 \]は重み行列である\(W_e \)の変更は、以下を満たします式:
\ [\ LLラムダN \ CDOT W_e(T)&\\ {アレイ} {} \ {W_e DOT}(T)開始=&\ ETA \ - \ ETAの\ sum_ 1} = {J ^ N [ W_e(T)W_e ^ T( T)] ^ {\ FRAC {J-1} {N} \ CDOT \\&\クワッドの\ FRAC {\ mathrm {D} L ^ 1} {\ mathrm {D} W }(W_e(T))\ CDOT [W_e ^ T(T)W_e(T)] ^ {\ FRAC {ニュージャージー} {N} \端{アレイ} \] \([\ CDOT]は^ { \ FRAC {Q} {P}} \) 定義された半定値行列について、場合:\ [= VDV ^ T、^ {\ FRAC {Q} {P} = VD ^ {\ FRAC {Q} {P}} V ^ T、 \] 対角行列\(D ^ {\ FRAC { Q} {P}} \)


対角要素を作ることである\(D_ {II} ^ {\ FRAC {Q} P {}} \)

したがって、体重\(W_e \)更新された変換は、近似:
(1 + T)\ [\ LL開始{アレイ} {} {} W_e =&(1- ETA \ラムダN \)\ CDOT W_e(T)\ \& - \イータの\ sum_ { J = 1} ^ N [W_e(T)W_e ^ T(T)] ^ {\ FRAC {J-1} {N} \ CDOT \\&\クワッドの\ FRAC {\ mathrm {D} L ^ 1} {\ mathrm {D} W}(W_e(T))\ CDOT [W_e ^ T(T)W_e(T)] ^ {\ FRAC {ニュージャージー} {N}}。\端{アレイ} \]

請求項1

著者はアップデートの形でベクトルを与えるように、上記のアップデートは、実際の人々は、表示するために、より直感的にすることができ、それを自分自身を見ていないところ謎。
請求項1任意の行列のために\(A \) 定義された\(VEC (A)\)マトリックスとして(\)\。したがって、再配置列のベクトル形式によって\(P_ {W_e ^ {( \)} T)} に依存半定値行列であり、\は(W_e \) 仮定\ [W_e ^ {(T) } = UDV ^ T、\] ここで\(U = [U_1、U_2 、\ ldots、u_k] \ \のR ^ {k個の\倍K}、V =で[ \ R&LT ^ {D \ D}タイムズ\)でV_1、V_2、\ ldots、V_D] \\(D \)対角要素、すなわち\(W_e ^ {(T) } \) の特異値から以下のような小さなに大きな\(\ sigma_1、\ sigma_2、\ ldots、\シグマ_ {\ maxの\ {K、D \}} \) 次いで\(P_ {W_e ^ {( T)}} \) 固有ベクトルと対応する固有値:
ここに画像を挿入説明



ここに画像を挿入説明

これは何を示していますか?即ち更新overparameterization、\(W_eは^ {(T + 1)} \)更新、すなわち\(VEC(W_e ^ {( T + 1)})\) 更新がする傾向があるu_1v_1(VEC(\します{T} ^)\) あなたのいくつかは、勾配降下法の概念は幾分似ていると感じ、そして前借入の結果はまた、この借入は、座標間の相互通信が存在するであろう、一般的なドロップ法は使用できませんこれ。

請求項2

ここに画像を挿入説明

定理2

定理2と仮定\(\ FRAC {\ mathrm { D} L ^ 1} {\ mathrm {D} W} \) で\(W = 0 \)の定義で、\(W = 0 \)のO連続は、次いで、所定の領域のための\(\ NでN \ \ N> 2) 定義されている:
ここに画像を挿入説明
それは上に存在しない\(Wは\)勾配磁場である関数の\(F. \)

定理2を意味することは、あるため、メソッドoverparameterizationは、達成するために正則化項を追加することではないを教えてくれるということです\(F(W)が\)など、本来の機能は存在しません
\ [L(W)+ \ |ラムダ\ Wの\は| \]
の操作は、変更overparametrizationを更新することはできません。

証明のアイデアは閉曲線、証明構築することである\(F(W)\)線積分が0ではないとしたが(ハンサムな...)

証明します

定理1

首先是一些符号:
\[ \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 \]

ここに画像を挿入説明
表示块对角矩阵.

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

ここに画像を挿入説明

于是
ここに画像を挿入説明
\(j\)个等式俩边右乘\(W_j^T(t)\), 第\(j+1\)个等式俩边左乘\(W_{j+1}^T(t)\)可得:
ここに画像を挿入説明
俩边乘以2
ここに画像を挿入説明

\(C_j(t):=W_j(t)W_j^T(t), C_j'(t):=W_j^T(t)W_j(t)\), 则
ここに画像を挿入説明

注意,我们将上面的等式改写以下,等价于
\[ \dot{(C'_{j+1}-C_j)}(t) = -2\eta \lambda (C'_{j+1}-C_j)(t), \]
\(y(t):=(C'_{j+1}-C_j)(t)\), 则
\[ \dot{y}(t)=-2\eta \lambda y, \]
另外有初值条件\(y(t_0)=0\)(这是题设的条件).
容易知道,上面的微分方程的解为\(y\equiv0\).
所以
\[ C'_{j+1}(t)=C_j(t), j=1,\ldots, N-1. \]
假设\(W_j(t)\)的奇异值分解为
\[ W_j(t)=U_j \Sigma_jV_j^T. \]
且假设\(\Sigma_j\)的对角线元素,即奇异值是从大到小排列的.
则可得
ここに画像を挿入説明

显然\(\Sigma_{j+1}^T\Sigma_{j+1}=\Sigma_j \Sigma_j^T\), 这是因为一个矩阵的特征值是固定的(如果顺序固定的话),特征向量是不一定的,因为可能有多个相同的特征值,那么对于一个特征值的子空间的任意正交基都可以作为特征向量,也就是说
ここに画像を挿入説明
ここに画像を挿入説明

其中\(I_{d_r} \in \R^{d_r \times d_r}\)是单位矩阵, \(O_{j,r} \in \R^{d_r \times d_r}\)是正交矩阵.

所以对于\(j=1\ldots N-1\), 成立
ここに画像を挿入説明

\(j=N\)
ここに画像を挿入説明

ここに画像を挿入説明
注意,上面的推导需要用到:
\[ (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}) \]
既然
ここに画像を挿入説明
那么
ここに画像を挿入説明
ここに画像を挿入説明
上式左端为\(\dot{W}_e(t)\), 于是
ここに画像を挿入説明

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

ここに画像を挿入説明

Claim 1 的证明

Kronecker product (克罗内克积)

网上似乎都用\(\otimes\), 不过这里还是遵循论文的使用规范吧, 用\(\odot\)来表示Kronecker product:
\[ 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}, \]
其中\(A \in \R^{m_a \times n_a}, B \in \R^{m_b \times n_b}\).

容易证明 \(A \odot B\)的第\(rn_b + s, r = 0, 1, \ldots, n_a-1, s = 0, 1, \ldots, n_b-1\)列为:
\[ vec(B_{*s+1}A_{*r+1}^T), \]
其中\(B_{*j}\)表示\(B\)的第\(j\)列, 沿用\(vec(A)\)\(A\)的列展开. 相应的,\(A \odot B\)的第\(pm_b+q, p=0,1,\ldots,m_a-1,q=0, 1, \ldots, m_b-1\)行为:
\[ vec(B_{q+1*}^TA_{p+1*})^T, \]
其中\(A_{i*}\)表示\(A\)的第\(i\)行.

\([A\odot B]_{(p,q,r,s)}\)表示\([A \odot B]\)的第\(rn_b+s\)\(pm_b+q\)行的元素, 则
\[ [A\odot B]_{(p,q,r,s)} = a_{p+1,r+1}b_{q+1,s+1} \]

另外\(I_{d_1} \odot I_{d_2} = I_{d_1d_2}\).

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

\((A_1 \odot A_2)(B_1 \odot B_2) = (A_1 B_1) \odot (A_2B_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}\), 则
\[ (A_1 \odot A_2)(B_1 \odot B_2) = (A_1 B_1) \odot (A_2B_2) \]

考察俩边矩阵的\((pm_2+q,rn_2+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} \]
得证. 注意,倒数第四个等式到倒数第三个用到了迹的可交换性.

\((A \odot B)^T=A^T \odot B^T\)

\[ \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} \]

\(A^T=A^{-1},B^T=B^{-1} \Rightarrow (A \odot B)^T = (A \odot B)^{-1}\)

\[ \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} \]
所以\((A \odot B)^T = (A \odot B)^{-1}\).

回到Claim 1 的证明上来,容易证明
ここに画像を挿入説明
于是
ここに画像を挿入説明
第二个等式用到了\((A_1 \odot A_2)(B_1 \odot B_2) = (A_1 B_1) \odot (A_2B_2)\).

只需要证明:
ここに画像を挿入説明

等价于\(P_{W_e}\). 令
\[ W_e = UDV^T, \]
其中\(U \in \R^{k \times k}, V \in \R^{d \times d}\).
所以

ここに画像を挿入説明

第三个等式用了俩次\((A_1 \odot A_2)(B_1 \odot B_2) = (A_1 B_1) \odot (A_2B_2)\).

定义:

ここに画像を挿入説明

\[ Q = O \Lambda O^T. \]

残り約\(O \)
ここに画像を挿入説明
\(\ラムダ\)対角要素:
ここに画像を挿入説明
ベールのちょうどいくつかの簡単な導出。

定理2の証明

私はこれは私がこの証拠を理解することができますので、私が直接知っているオリジナルのバーを見たいのですが、ここに掲載さを証明する必要はありません。

コード

ここに画像を挿入説明
ここに画像を挿入説明
唯一の実験に非常に簡単な例を使用しますが、気持ちは、反復アルゴリズムの初期値が食べている。ちょうど説明したように請求項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()

おすすめ

転載: www.cnblogs.com/MTandHJ/p/11701133.html