Highway Networks

分類:IT技術 時間:2017-09-28

一 、Highway Networks 與 Deep Networks 的關系

深層神經網絡相比於淺層神經網絡具有更好的效果,在很多方面都已經取得了很好的效果,特別是在圖像處理方面已經取得了很大的突破,然而,伴隨著深度的增加,深層神經網絡存在的問題也就越大,像大家所熟知的梯度消失問題,這也就造成了訓練深層神經網絡困難的難題。2015年由Rupesh Kumar Srivastava等人受到LSTM門機制的啟發提出的網絡結構(Highway Networks)很好的解決了訓練深層神經網絡的難題,Highway Networks 允許信息高速無阻礙的通過深層神經網絡的各層,這樣有效的減緩了梯度的問題,使深層神經網絡不在僅僅具有淺層神經網絡的效果。

二、Deep Networks 梯度消失/爆炸(vanishing and exploding gradient)問題

我們先來看一下簡單的深層神經網絡(僅僅幾個隱藏層)

先把各個層的公式寫出來

C  = sigmoid(W4 * H3 + b4)H3 = sigmoid(W3 * H2 + b3)H2 = sigmoid(W2 * H1 + b2)H1 = sigmoid(W1 * x + b1)

我們對W1求導:



W = W - lr * g(t)

以上公式僅僅是四個隱層的情況,當隱層的數量達到數十層甚至是數百層的情況下,一層一層的反向傳播回去,當權值 < 1的時候,反向傳播到某一層之後權值近乎不變,相當於輸入x的映射,例如,g(t) =〖0.9〗^100已經是很小很小了,這就造成了只有前面幾層能夠正常的反向傳播,後面的那些隱層僅僅相當於輸入x的權重的映射,權重不進行更新。反過來,當權值 > 1的時候,會造成梯度爆炸,同樣是僅僅前面的幾層能更改正常學習,後面的隱層會變得很大。

三、Highway Networks Formula

  • Notation

    (.) 操作代表的是矩陣按位相乘

    sigmoid函數:

  • Highway Networks formula

    對於我們普通的神經網絡,用非線性激活函數H將輸入的x轉換成y,公式1忽略了bias。但是,H不僅僅局限於激活函數,也采用其他的形式,像convolutional和recurrent。

    對於Highway Networks神經網絡,增加了兩個非線性轉換層,一個是 T(transform gate) 和一個是 C(carry gate),通俗來講,T表示輸入信息經過convolutional或者是recurrent的信息被轉換的部分,C表示的是原始輸入信息x保留的部分 ,其中 T=sigmoid(wx + b)

    為了計算方便,這裏定義了 C = 1 - T

    需要註意的是x,y, H, T的維度必須一致,要想保證其維度一致,可以采用sub-sampling或者zero-padding策略,也可以使用普通的線性層改變維度,使其一致,可以采用幾個公式相比,公式3要比公式1靈活的多,可以考慮一下特殊的情況,T= 0的時候,y = x,原始輸入信息全部保留,不做任何的改變,T = 1的時候,Y = H,原始信息全部轉換,不在保留原始信息,僅僅相當於一個普通的神經網絡。
    aa

四、Highway BiLSTM Networks 搭建

pytorch搭建神經網絡一般需要繼承nn.Module這個類,然後實現裏面的forward()函數,搭建Highwany BiLSTM Networks寫了兩個類,並使用nn.ModuleList將兩個類聯系起來:


class HBiLSTM(nn.Module):
def init(self, args):
super(HBiLSTM, self).init()
......
def forward(self, x):
# 實現Highway BiLSTM Networks的公式
......

    class HBiLSTM_model(nn.Module):     def __init__(self, args):        super(HBiLSTM_model, self).__init__()        ......        # args.layer_num_highway 代表Highway BiLSTM Networks有幾層        self.highway = nn.ModuleList([HBiLSTM(args) for _ in range(args.layer_num_highway)])        ......    def forward(self, x):        ......        # 調用HBiLSTM類的forward()函數        for current_layer in self.highway:            x, self.hidden = current_layer(x, self.hidden)

HBiLSTM類的forward()函數裏面我們實現Highway BiLSTM Networks的的公式
首先我們先來計算H,上文已經說過,H可以是卷積或者是LSTM,在這裏,normal_fc就是我們需要的H


x, hidden = self.bilstm(x, hidden)
# torch.transpose是轉置操作
normal_fc = torch.transpose(x, 0, 1)

上文提及,x,y,H,T的維度必須保持一致,並且提供了兩種策略,這裏我們使用一個普通的Linear去轉換維度


source_x = source_x.contiguous()
information_source = source_x.view(source_x.size(0) * source_x.size(1), source_x.size(2))
information_source = self.gate_layer(information_source)
information_source = information_source.view(source_x.size(0), source_x.size(1), information_source.size(1))

也可以采用zero-padding的策略保證維度一致

# you also can choose the strategy that zero-padding
zeros = torch.zeros(source_x.size(0), source_x.size(1), carry_layer.size(2) - source_x.size(2))
source_x = Variable(torch.cat((zeros, source_x.data), 2))

維度一致之後我們就可以根據我們的公式來寫代碼了:

# transformation gate layer in the formula is T
transformation_layer = F.sigmoid(information_source)
# carry gate layer in the formula is C
carry_layer = 1 - transformation_layer
# formula Y = H * T + x * C
allow_transformation = torch.mul(normal_fc, transformation_layer)
allow_carry = torch.mul(information_source, carry_layer)
information_flow = torch.add(allow_transformation, allow_carry)

最後的information_flow就是我們的輸出,但是,還需要經過轉換維度保證維度一致。
更多的請參考Github: Highway Networks implement in pytorch

五、Highway Networks 實驗結果

  • 個人實驗結果

    任務:情感分類任務 --- 二分類
    數據規模 :

    分析:從圖中可以看出,相同的參數情況下,淺層神經網絡相互對比變化不是很明顯,5層的神經網絡就有了一些變化,準確率相差了一個點左右。由於硬件資源,更加深的深層神經網絡還沒有測試。 但是從圖中也可以發現問題就是伴隨深度的加深,Highway Networks的準確率也在下降,深度加深,神經網絡的參數也就增加的越多,這就需要重新調節超參數。

  • Paper 實驗結果

    分析:從論文的實驗結果來看,當深層神經網絡的層數能夠達到50層甚至100層的時候,loss也能夠下降的很快,猶如幾層的神經網絡一樣,與普通的深層神經網絡形成了鮮明的對比。

References

  • Highway Networks(paper)

  • Training Very Deep Networks

  • 為什麽深層神經網絡難以訓練

  • Training Very Deep Networks--Highway Networks

  • Very Deep Learning with Highway Networks

  • Hightway Networks學習筆記


Tags: 神經網絡 深層 梯度 Networks 僅僅 反向

文章來源:


ads
ads

相關文章
ads

相關文章

ad