導航:首頁 > 網路共享 > 以下哪個選項表示循環神經網路

以下哪個選項表示循環神經網路

發布時間:2023-06-08 16:03:34

⑴ 入門 | 一文簡述循環神經網路

入門 | 一文簡述循環神經網路

本文簡要介紹了什麼是循環神經網路及其運行原理,並給出了一個 RNN 實現示例。

什麼是循環神經網路(RNN)?它們如何運行?可以用在哪裡呢?本文試圖回答上述這些問題,還展示了一個 RNN 實現 demo,你可以根據自己的需要進行擴展。

循環神經網路架構

基礎知識。Python、CNN 知識是必備的。了解 CNN 的相關知識,是為了與 RNN 進行對比:RNN 為什麼以及在哪些地方比 CNN 更好。

我們首先從「循環」(Recurrent)這個詞說起。為什麼將其稱為循環?循環的意思是:

經常或重復出現

將這類神經網路稱為循環神經網路是因為它對一組序列輸入重復進行同樣的操作。本文後續部分將討論這種操作的意義。

我們為什麼需要 RNN?

也許你現在想的是,已經有像卷積網路這樣表現非常出色的網路了,為什麼還需要其他類型的網路呢?有一個需要用到 RNN 的特殊例子。為了解釋 RNN,你首先需要了解序列的相關知識,我們先來講一下序列。

序列是相互依賴的(有限或無限)數據流,比如時間序列數據、信息性的字元串、對話等。在對話中,一個句子可能有一個意思,但是整體的對話可能又是完全不同的意思。股市數據這樣的時間序列數據也是,單個數據表示當前價格,但是全天的數據會有不一樣的變化,促使我們作出買進或賣出的決定。

當輸入數據具有依賴性且是序列模式時,CNN 的結果一般都不太好。CNN 的前一個輸入和下一個輸入之間沒有任何關聯。所以所有的輸出都是獨立的。CNN 接受輸入,然後基於訓練好的模型輸出。如果你運行了 100 個不同的輸入,它們中的任何一個輸出都不會受之前輸出的影響。但想一下如果是文本生成或文本翻譯呢?所有生成的單詞與之前生成的單詞都是獨立的(有些情況下與之後的單詞也是獨立的,這里暫不討論)。所以你需要有一些基於之前輸出的偏向。這就是需要 RNN 的地方。RNN 對之前發生在數據序列中的事是有一定記憶的。這有助於系統獲取上下文。理論上講,RNN 有無限的記憶,這意味著它們有無限回顧的能力。通過回顧可以了解所有之前的輸入。但從實際操作中看,它只能回顧最後幾步。

本文僅為了與人類大體相關聯,而不會做任何決定。本文只是基於之前關於該項目的知識做出了自己的判斷(我甚至尚未理解人類大腦的 0.1%)。

何時使用 RNN?

RNN 可用於許多不同的地方。下面是 RNN 應用最多的領域。

1. 語言建模和文本生成

給出一個詞語序列,試著預測下一個詞語的可能性。這在翻譯任務中是很有用的,因為最有可能的句子將是可能性最高的單片語成的句子。

2. 機器翻譯

將文本內容從一種語言翻譯成其他語言使用了一種或幾種形式的 RNN。所有日常使用的實用系統都用了某種高級版本的 RNN。

3. 語音識別

基於輸入的聲波預測語音片段,從而確定詞語。

4. 生成圖像描述

RNN 一個非常廣泛的應用是理解圖像中發生了什麼,從而做出合理的描述。這是 CNN 和 RNN 相結合的作用。CNN 做圖像分割,RNN 用分割後的數據重建描述。這種應用雖然基本,但可能性是無窮的。

5. 視頻標記

可以通過一幀一幀地標記視頻進行視頻搜索。

深入挖掘

本文按照以下主題進行。每一部分都是基於之前的部分進行的,所以不要跳著讀。

前饋網路循環網路循環神經元基於時間的反向傳播(BPTT)RNN 實現

前饋網路入門

前饋網路通過在網路的每個節點上做出的一系列操作傳遞信息。前饋網路每次通過每個層直接向後傳遞信息。這與其他循環神經網路不同。一般而言,前饋網路接受一個輸入並據此產生輸出,這也是大多數監督學習的步驟,輸出結果可能是一個分類結果。它的行為與 CNN 類似。輸出可以是以貓狗等作為標簽的類別。

前饋網路是基於一系列預先標注過的數據訓練的。訓練階段的目的是減少前饋網路猜類別時的誤差。一旦訓練完成,我們就可以用訓練後的權重對新批次的數據進行分類。

一個典型的前饋網路架構

還有一件事要注意。在前饋網路中,無論在測試階段展示給分類器的圖像是什麼,都不會改變權重,所以也不會影響第二個決策。這是前饋網路和循環網路之間一個非常大的不同。

與循環網路不同,前饋網路在測試時不會記得之前的輸入數據。它們始終是取決於時間點的。它們只會在訓練階段記得歷史輸入數據。

循環網路

也就是說,循環網路不僅將當前的輸入樣例作為網路輸入,還將它們之前感知到的一並作為輸入。

我們試著建立了一個多層感知器。從簡單的角度講,它有一個輸入層、一個具備特定激活函數的隱藏層,最終可以得到輸出。

多層感知器架構示例

如果在上述示例中的層數增加了,輸入層也接收輸入。那麼第一個隱藏層將激活傳遞到下一個隱藏層上,依此類推。最後到達輸出層。每一個隱藏層都有自己的權重和偏置項。現在問題變成了我們可以輸入到隱藏層嗎?

每一層都有自己的權重(W)、偏置項(B)和激活函數(F)。這些層的行為不同,合並它們從技術層面上講也極具挑戰性。為了合並它們,我們將所有層的權重和偏置項替換成相同的值。如下圖所示:

現在我們就可以將所有層合並在一起了。所有的隱藏層都可以結合在一個循環層中。所以看起來就像下圖:

我們在每一步都會向隱藏層提供輸入。現在一個循環神經元存儲了所有之前步的輸入,並將這些信息和當前步的輸入合並。因此,它還捕獲到一些當前數據步和之前步的相關性信息。t-1 步的決策影響到第 t 步做的決策。這很像人類在生活中做決策的方式。我們將當前數據和近期數據結合起來,幫助解決手頭的特定問題。這個例子很簡單,但從原則上講這與人類的決策能力是一致的。這讓我非常想知道我們作為人類是否真的很智能,或者說我們是否有非常高級的神經網路模型。我們做出的決策只是對生活中收集到的數據進行訓練。那麼一旦有了能夠在合理時間段內存儲和計算數據的先進模型和系統時,是否可以數字化大腦呢?所以當我們有了比大腦更好更快的模型(基於數百萬人的數據訓練出的)時,會發生什麼?

另一篇文章(https://deeplearning4j.org/lstm.html)的有趣觀點:人總是被自己的行為所困擾。

我們用一個例子來闡述上面的解釋,這個例子是預測一系列字母後的下一個字母。想像一個有 8 個字母的單詞 namaskar。

namaskar(合十禮):印度表示尊重的傳統問候或姿勢,將手掌合起置於面前或胸前鞠躬。

如果我們在向網路輸入 7 個字母後試著找出第 8 個字母,會發生什麼呢?隱藏層會經歷 8 次迭代。如果展開網路的話就是一個 8 層的網路,每一層對應一個字母。所以你可以想像一個普通的神經網路被重復了多次。展開的次數與它記得多久之前的數據是直接相關的。

循環神經網路的運作原理

循環神經元

這里我們將更深入地了解負責決策的實際神經元。以之前提到的 namaskar 為例,在給出前 7 個字母後,試著找出第 8 個字母。輸入數據的完整詞彙表是 {n,a,m,s,k,r}。在真實世界中單詞或句子都會更復雜。為了簡化問題,我們用的是下面這個簡單的詞彙表。

在上圖中,隱藏層或 RNN 塊在當前輸入和之前的狀態中應用了公式。在本例中,namaste 的字母 n 前面什麼都沒有。所以我們直接使用當前信息推斷,並移動到下一個字母 a。在推斷字母 a 的過程中,隱藏層應用了上述公式結合當前推斷 a 的信息與前面推斷 n 的信息。輸入在網路中傳遞的每一個狀態都是一個時間步或一步,所以時間步 t 的輸入是 a,時間步 t-1 的輸入就是 n。將公式同時應用於 n 和 a 後,就得到了一個新狀態。

用於當前狀態的公式如下所示:

h_t 是新狀態,h_t-1 是前一個狀態。x_t 是時間 t 時的輸入。在對之前的時間步應用了相同的公式後,我們已經能感知到之前的輸入了。我們將檢查 7 個這樣的輸入,它們在每一步的權重和函數都是相同的。

現在試著以簡單的方式定義 f()。我們使用 tanh 激活函數。通過矩陣 W_hh 定義權重,通過矩陣 W_xh 定義輸入。公式如下所示:

上例只將最後一步作為記憶,因此只與最後一步的數據合並。為了提升網路的記憶能力,並在記憶中保留較長的序列,我們必須在方程中添加更多的狀態,如 h_t-2、h_t-3 等。最後輸出可以按測試階段的計算方式進行計算:

其中,y_t 是輸出。對輸出與實際輸出進行對比,然後計算出誤差值。網路通過反向傳播誤差來更新權重,進行學習。本文後續部分會對反向傳播進行討論。

基於時間的反向傳播演算法(BPTT)

本節默認你已經了解了反向傳播概念。如果需要對反向傳播進行深入了解,請參閱鏈接:?http://cs231n.github.io/optimization-2/?。

現在我們了解了 RNN 是如何實際運作的,但是在實際工作中如何訓練 RNN 呢?該如何決定每個連接的權重呢?如何初始化這些隱藏單元的權重呢?循環網路的目的是要准確地對序列輸入進行分類。這要靠誤差值的反向傳播和梯度下降來實現。但是前饋網路中使用的標准反向傳播無法在此應用。

與有向無環的前饋網路不同,RNN 是循環圖,這也是問題所在。在前饋網路中可以計算出之前層的誤差導數。但 RNN 的層級排列與前饋網路並不相同。

答案就在之前討論過的內容中。我們需要展開網路。展開網路使其看起來像前饋網路就可以了。

展開 RNN

在每個時間步取出 RNN 的隱藏單元並復制。時間步中的每一次復制就像前饋網路中的一層。在時間步 t+1 中每個時間步 t 層與所有可能的層連接。因此我們對權重進行隨機初始化,展開網路,然後在隱藏層中通過反向傳播優化權重。通過向最低層傳遞參數完成初始化。這些參數作為反向傳播的一部分也得到了優化。

展開網路的結果是,現在每一層的權重都不同,因此最終會得到不同程度的優化。無法保證基於權重計算出的誤差是相等的。所以每一次運行結束時每一層的權重都不同。這是我們絕對不希望看到的。最簡單的解決辦法是以某種方式將所有層的誤差合並到一起。可以對誤差值取平均或者求和。通過這種方式,我們可以在所有時間步中使用一層來保持相同的權重。

RNN 實現

本文試著用 Keras 模型實現 RNN。我們試著根據給定的文本預測下一個序列。

代碼地址:?https://gist.github.com/.git?

該模型是 Yash Katariya 建的。我對該模型做了一些細微的改動以適合本文的要求。

⑵ 循環神經網路(RNN)簡介

循環神經網路英文名稱為 ( Recurrent Neural Network, RNN ),其通過使用帶自反饋的神經元,能夠處理任意長度的 時序 數據。

給定輸入時序序列

式中, 表示一段時序數據, 為時間長度

以一段英文段落為例,其時序數據可以表示為:

若是一段視頻,將其每一幀通過CNN網路處理得到相應的編碼向量

循環神經網路通過以下公式更新隱藏層的活性值

循環神經網路圖示

RNN的基本模型如下圖所示,為便於理解,圖中將RNN的模型展開,按照時序方向對其前向傳播流程進行介紹

RNN的基本模型

利用數學表達式整個過程可以變得更加清晰,RNN的前向傳播公式如下:

將上述過程整合到一個RNN cell中,可以表示為如下圖所示的過程:

RNN的前向傳播示意圖

缺陷:

沒有利用到模型後續的信息,可以通過雙向RNN網路進行優化

RNN主要有兩種計算梯度的方式:隨時間反向傳播(BPTT)和實時循環學習法(RTRL)演算法

本文中主要介紹隨時間反向傳播的方法 ( BackPropagation Through Time

RNN的損失函數與任務有關,對於同步的序列對序列任務,其loss可以用交叉熵公式表示

然後通過BPTT演算法便可以進行梯度的反向傳播計算

梯度爆炸的解決方法:梯度修剪

梯度消失的解決方法:增加長程依賴 LSTM,GRU

GRU的基本思路:增加相關門(Relate Gate)和更新門(Update Gate),進而使得RNN單元具有記憶能力

首先從數學角度對GRU的前向傳播過程進行介紹,具體公式如下:

公式中各變數的含義:

將上述數學公式轉化為圖像,可得

GRU Cell的前向傳播流程

LSTM意為長短時記憶網路 (Long Short-Term Memory Network,LSTM) ,可以有效地解決簡單神經網路的梯度消失和爆炸問題

在LSTM中,與GRU主要有兩點不同

同樣,先從數學公式入手,對LSTM的前向傳播過程進行了解

基於數學公式的過程,可將LSTM CELL的前向傳播過程總結為(圖片借用於nndl):

LSTM Cell的前向傳播示意圖

從上圖中可以看出,LSTM在前向傳播的過程中傳輸了兩個狀態:內部狀態 以及外部狀態 ,在整個傳播過程中 外部狀態(隱狀態) 每個時刻都會被重寫,因此可以看作一種 短時記憶 ,而 內部狀態 可以在某個時刻捕捉一些關鍵信息,並將此信息保存一段時間間隔,可以看作一種 長時記憶 (長的短時記憶)

此外,在LSTM網路初始化訓練的時候,需要手動將遺忘門的數值設置的大一些,否則在參數初始化的時候,遺忘門的數據會被初始化為一個很小的值,前一時刻的內部狀態 大部分都會丟失,這樣網路很難獲取到長距離的依賴信息,並且相鄰時間間隔的梯度會非常小,導致 梯度彌散 問題,因此遺忘門的 偏置變數 的初始值 一般很大,取 1或2

將 設置為1即可,但是長度非常的大的時候會造成記憶單元的飽和,降低性能

三個門不僅依賴於 和 ,也依賴於

將兩者合並為一個門,即:

首先,我們要理解什麼是深層的RNN,對於單個的RNN cell,若將其在時間維度上展開,其深度與時間維度的長度成正比,但若將一個RNN cell看作為單個從 的映射函數,則單個cell實際上是很淺顯的一層,因此深層循環神經網路要做的就是把多個RNN cell組合起來,換句話說,就是增加從輸入 到輸出 的路徑,使得網路的深度更深。

如何增加從輸入 到輸出 的路徑呢?兩種途徑:

堆疊循環神經網路示意圖

將網路帶入到實際應用場景中:假如我們要翻譯一段句子

在這里,is和are實際上是由後面的Lucy和they所決定的,而這種單向的按照時序進行傳播的方式沒有利用到後面的信息。因此誕生了雙向循環網路

雙向循環神經網路示意圖

雙向循環神經網路實際上就是簡單的雙層循環神經網路,只不過第二層網路的傳播方式為按時序的逆向傳播,其傳播公式為:

⑶ DNN、RNN、CNN分別是什麼意思

DNN(深度神經網路),是深度學習的基礎。

DNN可以理解為有很多隱藏層的神經網路。這個很多其實也沒有什麼度量標准, 多層神經網路和深度神經網路DNN其實也是指的一個東西,當然,DNN有時也叫做多層感知機(Multi-Layer perceptron,MLP)。

從DNN按不同層的位置劃分,DNN內部的神經網路層可以分為三類,輸入層,隱藏層和輸出層,如下圖示例,一般來說第一層是輸出層,最後一層是輸出層,而中間的層數都是隱藏層。

CNN(卷積神經網路),是一種前饋型的神經網路,目前深度學習技術領域中非常具有代表性的神經網路之一。

CNN在大型圖像處理方面有出色的表現,目前已經被大范圍使用到圖像分類、定位等領域中。相比於其他神經網路結構,卷積神經網路需要的參數相對較少,使的其能夠廣泛應用。

RNN(循環神經網路),一類用於處理序列數據的神經網路,RNN最大的不同之處就是在層之間的神經元之間也建立的權連接。

從廣義上來說,DNN被認為包含了CNN、RNN這些具體的變種形式。在實際應用中,深度神經網路DNN融合了多種已知的結構,包含卷積層或LSTM單元,特指全連接的神經元結構,並不包含卷積單元或時間上的關聯。

⑷ 循環神經網路

花書中關於RNN的內容記錄於 https://www.jianshu.com/p/206090600f13 。

在前饋神經網路中,信息的傳遞是單向的,這種限制雖然使得網路變得更容易學習,但在一定程度上也減弱了神經網路模型的能力。在生物神經網路中,神經元之間的連接關系要復雜的多。 前饋神經網路可以看作是一個復雜的函數,每次輸入都是獨立的,即網路的輸出只依賴於當前的輸入。但是在很多現實任務中,網路的輸入不僅和當前時刻的輸入相關,也和其過去一段時間的輸出相關 。因此,前饋網路難以處理時序數據,比如視頻、語音、文本等。時序數據的長度一般是不固定的,而前饋神經網路要求輸入和輸出的維數都是固定的,不能任意改變。因此,當處理這一類和時序相關的問題時,就需要一種能力更強的模型。

循環神經網路(Recurrent Neural Network,RNN)是一類具有短期記憶能力的神經網路。在循環神經網路中,神經元不但可以接受其它神經元的信息,也可以接受自身的信息,形成具有環路的網路結構。 和前饋神經網路相比,循環神經網路更加符合生物神經網路的結構。循環神經網路已經被廣泛應用在語音識別、語言模型以及自然語言生成等任務上。循環神經網路的參數學習可以通過 隨時間反向傳播演算法 來學習。

為了處理這些時序數據並利用其歷史信息,我們需要讓網路具有短期記憶能力。而前饋網路是一個靜態網路,不具備這種記憶能力。

一種簡單的利用歷史信息的方法是建立一個額外的延時單元,用來存儲網路的歷史信息(可以包括輸入、輸出、隱狀態等)。比較有代表性的模型是延時神經網路。

延時神經網路是在前饋網路中的非輸出層都添加一個延時器,記錄最近幾次神經元的輸出。在第 個時刻,第 層神經元和第 層神經元的最近 次輸出相關,即:

延時神經網路在時間維度上共享權值,以降低參數數量。因此對於序列輸入來講,延時神經網路就相當於卷積神經網路

自回歸模型(Autoregressive Model,AR) 是統計學上常用的一類時間序列模型,用一個變數 的歷史信息來預測自己:

其中 為超參數, 為參數, 為第 個時刻的雜訊,方差 和時間無關。

有外部輸入的非線性自回歸模型(Nonlinear Autoregressive with ExogenousInputs Model,NARX) 是自回歸模型的擴展,在每個時刻 都有一個外部輸入 ,產生一個輸出 。NARX通過一個延時器記錄最近幾次的外部輸入和輸出,第 個時刻的輸出 為:

其中 表示非線性函數,可以是一個前饋網路, 和 為超參數。

循環神經網路通過使用帶自反饋的神經元,能夠處理任意長度的時序數據。

給定一個輸入序列 ,循環神經網路通過下面
公式更新帶反饋邊的隱藏層的活性值 :

其中 , 為一個非線性函數,也可以是一個前饋網路。

從數學上講,上式可以看成一個動力系統。動力系統(Dynamical System)是一個數學上的概念,指 系統狀態按照一定的規律隨時間變化的系統 。具體地講,動力系統是使用一個函數來描述一個給定空間(如某個物理系統的狀態空間)中所有點隨時間的變化情況。因此, 隱藏層的活性值 在很多文獻上也稱為狀態(State)或隱狀態(Hidden States) 。理論上,循環神經網路可以近似任意的非線性動力系統。

簡單循環網路(Simple Recurrent Network,SRN)是一個非常簡單的循環神經網路,只有一個隱藏層的神經網路。

在一個兩層的前饋神經網路中,連接存在相鄰的層與層之間,隱藏層的節點之間是無連接的。而 簡單循環網路增加了從隱藏層到隱藏層的反饋連接

假設在時刻 時,網路的輸入為 ,隱藏層狀態(即隱藏層神經元活性值) 不僅和當前時刻的輸入 相關,也和上一個時刻的隱藏層狀態 相關:

其中 為隱藏層的凈輸入, 是非線性激活函數,通常為Logistic函數或Tanh函數, 為狀態-狀態權重矩陣, 為狀態-輸入權重矩陣, 為偏置。上面兩式也經常直接寫為:

如果我們把每個時刻的狀態都看作是前饋神經網路的一層的話,循環神經網路可以看作是在時間維度上權值共享的神經網路 。下圖給出了按時間展開的循環神經網路。

由於循環神經網路具有短期記憶能力,相當於存儲裝置,因此其計算能力十分強大。 前饋神經網路可以模擬任何連續函數,而循環神經網路可以模擬任何程序。

定義一個完全連接的循環神經網路,其輸入為 ,輸出為 :

其中 為隱狀態, 為非線性激活函數, 和 為網路參數。

這樣一個完全連接的循環神經網路可以近似解決所有的可計算問題

循環神經網路可以應用到很多不同類型的機器學習任務。根據這些任務的特點可以分為以下幾種模式: 序列到類別模式、同步的序列到序列模式、非同步的序列到序列模式

序列到類別模式主要用於序列數據的分類問題:輸入為序列,輸出為類別。比如在文本分類中,輸入數據為單詞的序列,輸出為該文本的類別。

假設一個樣本 為一個長度為 的序列,輸出為一個類別 。我們可以將樣本 按不同時刻輸入到循環神經網路中,並得到不同時刻的隱藏狀態 。我們可以將 看作整個序列的最終表示(或特徵),並輸入給分類器 進行分類:

其中 可以是簡單的線性分類器(比如Logistic 回歸)或復雜的分類器(比如多層前饋神經網路)

除了將最後時刻的狀態作為序列表示之外,我們還可以對整個序列的所有狀態進行平均,並用這個平均狀態來作為整個序列的表示:

同步的序列到序列模式 主要用於序列標注(Sequence Labeling)任務,即每一時刻都有輸入和輸出,輸入序列和輸出序列的長度相同 。比如詞性標注(Partof-Speech Tagging)中,每一個單詞都需要標注其對應的詞性標簽。

輸入為序列 ,輸出為序列 。樣本 按不同時刻輸入到循環神經網路中,並得到不同時刻的隱狀態 。每個時刻的隱狀態 代表當前和歷史的信息,並輸入給分類器 得到當前時刻的標簽 。

非同步的序列到序列模式也稱為 編碼器-解碼器(Encoder-Decoder)模型,即輸入序列和輸出序列不需要有嚴格的對應關系,也不需要保持相同的長度。 比如在機器翻譯中,輸入為源語言的單詞序列,輸出為目標語言的單詞序列。

在非同步的序列到序列模式中,輸入為長度為 的序列 ,輸出為長度為 的序列 。經常通過 先編碼後解碼 的方式來實現。先將樣本 按不同時刻輸入到一個循環神經網路(編碼器)中,並得到其編碼 。然後再使用另一個循環神經網路(解碼器)中,得到輸出序列 。為了建立輸出序列之間的依賴關系,在解碼器中通常使用非線性的自回歸模型。

其中 分別為用作編碼器和解碼器的循環神經網路, 為分類器, 為預測輸出 的向量表示。

循環神經網路的參數可以通過梯度下降方法來進行學習。給定一個訓練樣本 ,其中 為長度是 的輸入序列, 是長度為 的標簽序列。即在每個時刻 ,都有一個監督信息 ,我們定義時刻 的損失函數為:

其中 為第 時刻的輸出, 為可微分的損失函數,比如交叉熵。那麼整個序列上損失函數為:

整個序列的損失函數 關於參數 的梯度為:

即每個時刻損失 對參數 的偏導數之和。

循環神經網路中存在一個遞歸調用的函數 ,因此其計算參數梯度的方式和前饋神經網路不太相同。在循環神經網路中主要有兩種計算梯度的方式: 隨時間反向傳播(BPTT)和實時循環學習(RTRL)演算法。

隨時間反向傳播(Backpropagation Through Time,BPTT) 演算法的主要思想是通過類似前饋神經網路的錯誤反向傳播演算法來進行計算梯度。

BPTT演算法將循環神經網路看作是一個展開的多層前饋網路,其中「每一層」對應循環網路中的「每個時刻」。在「展開」的前饋網路中,所有層的參數是共享的,因此參數的真實梯度是將所有「展開層」的參數梯度之和

因為參數 和隱藏層在每個時刻 的凈輸入 有關,因此第 時刻的損失函數 關於參數 的梯度為:

其中 表示「直接」偏導數,即公式 中保持 不變,對 求偏導數,得到:

其中 為第 時刻隱狀態的第 維; 除了第 個值為 外,其餘都為 的行向量。

定義誤差項 為第 時刻的損失對第 時刻隱藏神經層的凈輸入 的導數,則:

從而:

寫成矩陣形式為:

由此得到整個序列的損失函數 關於參數 的梯度:

同理可得, 關於權重 和偏置 的梯度為:

在BPTT演算法中,參數的梯度需要在一個完整的「前向」計算和「反向」計算後才能得到並進行參數更新。如下圖所示。

與反向傳播的BPTT演算法不同的是,實時循環學習(Real-Time Recurrent Learning)是通過前向傳播的方式來計算梯度。

假設循環神經網路中第 時刻的狀態 為:

其關於參數 的偏導數為:

RTRL演算法從第1 個時刻開始,除了計算循環神經網路的隱狀態之外,還依次前向計算偏導數 。

兩種學習演算法比較:

RTRL演算法和BPTT演算法都是基於梯度下降的演算法,分別通過前向模式和反向模式應用鏈式法則來計算梯度。 在循環神經網路中,一般網路輸出維度遠低於輸入維度,因此BPTT演算法的計算量會更小,但BPTT演算法需要保存所有時刻的中間梯度,空間復雜度較高。RTRL演算法不需要梯度回傳,因此非常適合於需要在線學習或無限序列的任務中

循環神經網路在學習過程中的主要問題是由於 梯度消失或爆炸問題 ,很難建模長時間間隔(Long Range)的狀態之間的依賴關系。

在BPTT演算法中,我們有:

如果定義 ,則:

若 ,當 時, ,會造成系統不穩定,稱為梯度爆炸問題;相反,若 ,當 時, ,會出現和深度前饋神經網路類似的梯度消失問題。

雖然簡單循環網路理論上可以建立長時間間隔的狀態之間的依賴關系,但是由於梯度爆炸或消失問題,實際上只能學習到短期的依賴關系。這樣,如果t時刻的輸出 依賴於 時刻的輸入 ,當間隔 比較大時,簡單神經網路很難建模這種長距離的依賴關系,稱為 長程依賴問題(Long-Term dependencies Problem)

一般而言,循環網路的梯度爆炸問題比較容易解決,一般 通過權重衰減或梯度截斷來避免。 權重衰減是通過給參數增加 或 范數的正則化項來限制參數的取值范圍,從而使得 。梯度截斷是另一種有效的啟發式方法,當梯度的模大於一定閾值時,就將它截斷成為一個較小的數。

梯度消失是循環網路的主要問題。除了使用一些優化技巧外,更有效的方式就是改變模型,比如讓 ,同時使用 ,即:

其中 是一個非線性函數, 為參數。

上式中, 和 之間為線性依賴關系,且權重系數為1,這樣就不存在梯度爆炸或消失問題。但是,這種改變也丟失了神經元在反饋邊上的非線性激活的性質,因此也降低了模型的表示能力。

為了避免這個缺點,我們可以採用一種更加有效的改進策略:

這樣 和 之間為既有線性關系,也有非線性關系,並且可以緩解梯度消失問題。但這種改進依然存在兩個問題:

為了解決這兩個問題,可以通過引入 門控機制 來進一步改進模型。

為了改善循環神經網路的長程依賴問題,一種非常好的解決方案是引入門控機制來控制信息的累積速度,包括 有選擇地加入新的信息,並有選擇地遺忘之前累積的信息 。這一類網路可以稱為基於門控的循環神經網路(Gated RNN)。本節中,主要介紹兩種基於門控的循環神經網路: 長短期記憶網路和門控循環單元網路。

長短期記憶(Long Short-Term Memory,LSTM)網路 是循環神經網路的一個變體,可以有效地解決簡單循環神經網路的梯度爆炸或消失問題。

在 基礎上,LSTM網路主要改進在以下兩個方面:

其中 和 三個門(gate)來控制信息傳遞的路徑; 為向量元素乘積; 為上一時刻的記憶單元; 是通過非線性函數得到的候選狀態:

在每個時刻 ,LSTM網路的內部狀態 記錄了到當前時刻為止的歷史信息。

在數字電路中,門(Gate)為一個二值變數{0, 1},0代表關閉狀態,不許任何信息通過;1代表開放狀態,允許所有信息通過。LSTM網路中的「門」是一種「軟」門,取值在(0, 1) 之間,表示 以一定的比例運行信息通過 。LSTM網路中三個門的作用為:

(1)遺忘門 控制上一個時刻的內部狀態 需要遺忘多少信息。
(2)輸入門 控制當前時刻的候選狀態 有多少信息需要保存。
(3)輸出門

⑸ 循環神經網路(RNN)淺析

RNN是兩種神經網路模型的縮寫,一種是遞歸神經網路(Recursive Neural Network),一種是循環神經網路(Recurrent Neural Network)。雖然這兩種神經網路有著千絲萬縷的聯系,但是本文主要討論的是第二種神經網路模型——循環神經網路(Recurrent Neural Network)。

循環神經網路是指一個隨著時間的推移,重復發生的結構。在自然語言處理(NLP),語音圖像等多個領域均有非常廣泛的應用。RNN網路和其他網路最大的不同就在於RNN能夠實現某種「記憶功能」,是進行時間序列分析時最好的選擇。如同人類能夠憑借自己過往的記憶更好地認識這個世界一樣。RNN也實現了類似於人腦的這一機制,對所處理過的信息留存有一定的記憶,而不像其他類型的神經網路並不能對處理過的信息留存記憶。

循環神經網路的原理並不十分復雜,本節主要從原理上分析RNN的結構和功能,不涉及RNN的數學推導和證明,整個網路只有簡單的輸入輸出和網路狀態參數。一個典型的RNN神經網路如圖所示:

由上圖可以看出:一個典型的RNN網路包含一個輸入x,一個輸出h和一個神經網路單元A。和普通的神經網路不同的是,RNN網路的神經網路單元A不僅僅與輸入和輸出存在聯系,其與自身也存在一個迴路。這種網路結構就揭示了RNN的實質:上一個時刻的網路狀態信息將會作用於下一個時刻的網路狀態。如果上圖的網路結構仍不夠清晰,RNN網路還能夠以時間序列展開成如下形式:

等號右邊是RNN的展開形式。由於RNN一般用來處理序列信息,因此下文說明時都以時間序列來舉例,解釋。等號右邊的等價RNN網路中最初始的輸入是x0,輸出是h0,這代表著0時刻RNN網路的輸入為x0,輸出為h0,網路神經元在0時刻的狀態保存在A中。當下一個時刻1到來時,此時網路神經元的狀態不僅僅由1時刻的輸入x1決定,也由0時刻的神經元狀態決定。以後的情況都以此類推,直到時間序列的末尾t時刻。

上面的過程可以用一個簡單的例子來論證:假設現在有一句話「I want to play basketball」,由於自然語言本身就是一個時間序列,較早的語言會與較後的語言存在某種聯系,例如剛才的句子中「play」這個動詞意味著後面一定會有一個名詞,而這個名詞具體是什麼可能需要更遙遠的語境來決定,因此一句話也可以作為RNN的輸入。回到剛才的那句話,這句話中的5個單詞是以時序出現的,我們現在將這五個單詞編碼後依次輸入到RNN中。首先是單詞「I」,它作為時序上第一個出現的單詞被用作x0輸入,擁有一個h0輸出,並且改變了初始神經元A的狀態。單詞「want」作為時序上第二個出現的單詞作為x1輸入,這時RNN的輸出和神經元狀態將不僅僅由x1決定,也將由上一時刻的神經元狀態或者說上一時刻的輸入x0決定。之後的情況以此類推,直到上述句子輸入到最後一個單詞「basketball」。

接下來我們需要關注RNN的神經元結構:

上圖依然是一個RNN神經網路的時序展開模型,中間t時刻的網路模型揭示了RNN的結構。可以看到,原始的RNN網路的內部結構非常簡單。神經元A在t時刻的狀態僅僅是t-1時刻神經元狀態與t時刻網路輸入的雙曲正切函數的值,這個值不僅僅作為該時刻網路的輸出,也作為該時刻網路的狀態被傳入到下一個時刻的網路狀態中,這個過程叫做RNN的正向傳播(forward propagation)。註:雙曲正切函數的解析式如下:

雙曲正切函數的求導如下:

雙曲正切函數的圖像如下所示:

這里就帶來一個問題:為什麼RNN網路的激活函數要選用雙曲正切而不是sigmod呢?(RNN的激活函數除了雙曲正切,RELU函數也用的非常多)原因在於RNN網路在求解時涉及時間序列上的大量求導運算,使用sigmod函數容易出現梯度消失,且sigmod的導數形式較為復雜。事實上,即使使用雙曲正切函數,傳統的RNN網路依然存在梯度消失問題,無法「記憶」長時間序列上的信息,這個bug直到LSTM上引入了單元狀態後才算較好地解決。

這一節主要介紹與RNN相關的數學推導,由於RNN是一個時序模型,因此其求解過程可能和一般的神經網路不太相同。首先需要介紹一下RNN完整的結構圖,上一節給出的RNN結構圖省去了很多內部參數,僅僅作為一個概念模型給出。

上圖表明了RNN網路的完整拓撲結構,從圖中我們可以看到RNN網路中的參數情況。在這里我們只分析t時刻網路的行為與數學推導。t時刻網路迎來一個輸入xt,網路此時刻的神經元狀態st用如下式子表達:

t時刻的網路狀態st不僅僅要輸入到下一個時刻t+1的網路狀態中去,還要作為該時刻的網路輸出。當然,st不能直接輸出,在輸出之前還要再乘上一個系數V,而且為了誤差逆傳播時的方便通常還要對輸出進行歸一化處理,也就是對輸出進行softmax化。因此,t時刻網路的輸出ot表達為如下形式:

為了表達方便,筆者將上述兩個公式做如下變換:

以上,就是RNN網路的數學表達了,接下來我們需要求解這個模型。在論述具體解法之前首先需要明確兩個問題:優化目標函數是什麼?待優化的量是什麼?

只有在明確了這兩個問題之後才能對模型進行具體的推導和求解。關於第一個問題,筆者選取模型的損失函數作為優化目標;關於第二個問題,我們從RNN的結構圖中不難發現:只要我們得到了模型的U,V,W這三個參數就能完全確定模型的狀態。因此該優化問題的優化變數就是RNN的這三個參數。順便說一句,RNN模型的U,V,W三個參數是全局共享的,也就是說不同時刻的模型參數是完全一致的,這個特性使RNN得參數變得稍微少了一些。

不做過多的討論,RNN的損失函數選用交叉熵(Cross Entropy),這是機器學習中使用最廣泛的損失函數之一了,其通常的表達式如下所示:

上面式子是交叉熵的標量形式,y_i是真實的標簽值,y_i*是模型給出的預測值,最外面之所以有一個累加符號是因為模型輸出的一般都是一個多維的向量,只有把n維損失都加和才能得到真實的損失值。交叉熵在應用於RNN時需要做一些改變:首先,RNN的輸出是向量形式,沒有必要將所有維度都加在一起,直接把損失值用向量表達就可以了;其次,由於RNN模型處理的是序列問題,因此其模型損失不能只是一個時刻的損失,應該包含全部N個時刻的損失。

故RNN模型在t時刻的損失函數寫成如下形式:

全部N個時刻的損失函數(全局損失)表達為如下形式:

需要說明的是:yt是t時刻輸入的真實標簽值,ot為模型的預測值,N代表全部N個時刻。下文中為了書寫方便,將Loss簡記為L。在結束本小節之前,最後補充一個softmax函數的求導公式:

由於RNN模型與時間序列有關,因此不能直接使用BP(back propagation)演算法。針對RNN問題的特殊情況,提出了BPTT演算法。BPTT的全稱是「隨時間變化的反向傳播演算法」(back propagation through time)。這個方法的基礎仍然是常規的鏈式求導法則,接下來開始具體推導。雖然RNN的全局損失是與全部N個時刻有關的,但為了簡單筆者在推導時只關注t時刻的損失函數。

首先求出t時刻下損失函數關於o_t*的微分:

求出損失函數關於參數V的微分:

因此,全局損失關於參數V的微分為:

求出t時刻的損失函數關於關於st*的微分:

求出t時刻的損失函數關於s_t-1*的微分:

求出t時刻損失函數關於參數U的偏微分。注意:由於是時間序列模型,因此t時刻關於U的微分與前t-1個時刻都有關,在具體計算時可以限定最遠回溯到前n個時刻,但在推導時需要將前t-1個時刻全部帶入:

因此,全局損失關於U的偏微分為:

求t時刻損失函數關於參數W的偏微分,和上面相同的道理,在這里仍然要計算全部前t-1時刻的情況:

因此,全局損失關於參數W的微分結果為:

至此,全局損失函數關於三個主要參數的微分都已經得到了。整理如下:

接下來進一步化簡上述微分表達式,化簡的主要方向為t時刻的損失函數關於ot的微分以及關於st*的微分。已知t時刻損失函數的表達式,求關於ot的微分:

softmax函數求導:

因此:

又因為:

且:

有了上面的數學推導,我們可以得到全局損失關於U,V,W三個參數的梯度公式:

由於參數U和W的微分公式不僅僅與t時刻有關,還與前面的t-1個時刻都有關,因此無法寫出直接的計算公式。不過上面已經給出了t時刻的損失函數關於s_t-1的微分遞推公式,想來求解這個式子也是十分簡單的,在這里就不贅述了。

以上就是關於BPTT演算法的全部數學推導。從最終結果可以看出三個公式的偏微分結果非常簡單,在具體的優化過程中可以直接帶入進行計算。對於這種優化問題來說,最常用的方法就是梯度下降法。針對本文涉及的RNN問題,可以構造出三個參數的梯度更新公式:

依靠上述梯度更新公式就能夠迭代求解三個參數,直到三個參數的值發生收斂。

這是筆者第一次嘗試推導RNN的數學模型,在推導過程中遇到了非常多的bug。非常感謝互聯網上的一些公開資料和博客,給了我非常大的幫助和指引。接下來筆者將嘗試實現一個單隱層的RNN模型用於實現一個語義預測模型。

⑹ 循環神經網路

為什麼卷積神經網路不會出現嚴重的數值問題呢?
卷積神經網路中每一層的權重矩陣 W 是不同的,並且在初始化時它們是獨立同分布的,因此可以相互抵消,在多層之後一般不會出現嚴重的數值問題。
循環神經網路採用 ReLu 激活函數,只有當 W 的取值在單位矩陣附近時才能取得比較好的效果,因此需要將 W 初始化為單位矩陣。

Seq2Seq 模型最基礎的解碼方法是貪心法,即選取一種度量標准後,每次都在當前狀態下選擇最佳的一個結果,直到結束。貪心法的計算代價低,適合作為基準結果與其他方法相比較。貪心法獲得的是一個局部最優解,由於實際問題的復雜性,該方法往往不能取得最好的結果。
集束搜索: 是一種啟發式演算法,會保存 beam size 個當前的較佳選擇,然後解碼時每一步根據保存的選則進行下一步擴展和排序,接著選擇前 b 個進行保存,循環迭代,知道結束時選擇最佳的一個作為解碼的結果。 b 往往選擇一個適中的范圍,以 8-12 為佳。

Seq2Seq 模型引入注意力機制是為了解決什麼問題?為什麼選用了雙向的循環神經網路模型?
編碼時輸入序列的全部信息壓縮到了一個向量中,隨著序列增長,句子越前面的詞的信息丟失越嚴重。同時,Seq2Seq 模型的輸出序列中,常常會損失部分輸入序列信息,這是解碼時,當前詞及對應的源語言詞的上下文信息和位置信息在編解碼過程中丟失了。 引入注意力機制,解決上述問題 。使用雙向的循環神經網路進行建模,可以獲取前後文的信息。

⑺ 幾種常見的循環神經網路結構RNN、LSTM、GRU

傳統文本處理任務的方法中一般將TF-IDF向量作為特徵輸入。顯而易見,這樣的表示實際上丟失了輸入的文本序列中每個單詞的順序。在神經網路的建模過程中,一般的前饋神經網路,如卷積神經網路,通常接受一個定長的向量作為輸入。卷積神經網路對文本數據建模時,輸入變長的字元串或者單詞串,然後通過滑動窗口加池化的方式將原先的輸入轉換成一個固定長度的向量表示,這樣做可以捕捉到原文本中的一些局部特徵,但是兩個單詞之間的長距離依賴關系還是很難被學習到。
循環神經網路卻能很好地處理文本數據變長並且有序的輸入序列。它模擬了人閱讀一篇文章的順序,從前到後閱讀文章中的每一個單詞,將前面閱讀到的有用信息編碼到狀態變數中去,從而擁有了一定的記憶能力,可以更好地理解之後的文本。
其網路結構如下圖所示:

由圖可見,t是時刻,x是輸入層,s是隱藏層,o是輸出層,矩陣W就是隱藏層上一次的值作為這一次的輸入的權重。

如果反復把式 2 帶入到式 1,將得到:

其中f和g為激活函數,U為輸入層到隱含層的權重矩陣,W為隱含層從上一時刻到下一時刻狀態轉移的權重矩陣。在文本分類任務中,f可以選取Tanh函數或者ReLU函數,g可以採用Softmax函數。

通過最小化損失誤差(即輸出的y與真實類別之間的距離),我們可以不斷訓練網路,使得得到的循環神經網路可以准確地預測文本所屬的類別,達到分類目的。相比於卷積神經網路等前饋神經網路,循環神經網路由於具備對序列順序信息的刻畫能力,往往能得到更准確的結果。

RNN的訓練演算法為:BPTT
BPTT的基本原理和BP演算法是一樣的,同樣是三步:
1.前向計算每個神經元的輸出值;
2.反向計算每個神經元的誤差項值,它是誤差函數E對神經元j的加權輸入的偏導數;
3.計算每個權重的梯度。
最後再用隨機梯度下降演算法更新權重。
具體參考: https://www.jianshu.com/p/39a99c88a565
最後由鏈式法則得到下面以雅可比矩陣來表達的每個權重的梯度:

由於預測的誤差是沿著神經網路的每一層反向傳播的,因此當雅克比矩陣的最大特徵值大於1時,隨著離輸出越來越遠,每層的梯度大小會呈指數增長,導致梯度爆炸;反之,若雅克比矩陣的最大特徵值小於1,梯度的大小會呈指數縮小,產生梯度消失。對於普通的前饋網路來說,梯度消失意味著無法通過加深網路層次來改善神經網路的預測效果,因為無論如何加深網路,只有靠近輸出的若干層才真正起到學習的作用。 這使得循環神經網路模型很難學習到輸入序列中的長距離依賴關系

關於RNN梯度下降的詳細推導可以參考: https://zhuanlan.hu.com/p/44163528

梯度爆炸的問題可以通過梯度裁剪來緩解,即當梯度的範式大於某個給定值時,對梯度進行等比收縮。而梯度消失問題相對比較棘手,需要對模型本身進行改進。深度殘差網路是對前饋神經網路的改進,通過殘差學習的方式緩解了梯度消失的現象,從而使得我們能夠學習到更深層的網路表示;而對於循環神經網路來說,長短時記憶模型及其變種門控循環單元等模型通過加入門控機制,很大程度上彌補了梯度消失所帶來的損失。

LSTM的網路機構圖如下所示:

與傳統的循環神經網路相比,LSTM仍然是基於xt和ht−1來計算ht,只不過對內部的結構進行了更加精心的設計,加入了輸入門it 、遺忘門ft以及輸出門ot三個門和一個內部記憶單元ct。輸入門控制當前計算的新狀態以多大程度更新到記憶單元中;遺忘門控制前一步記憶單元中的信息有多大程度被遺忘掉;輸出門控制當前的輸出有多大程度上取決於當前的記憶單元。

在經典的LSTM模型中,第t層的更新計算公式為

其中it是通過輸入xt和上一步的隱含層輸出ht−1進行線性變換,再經過激活函數σ得到的。輸入門it的結果是向量,其中每個元素是0到1之間的實數,用於控制各維度流過閥門的信息量;Wi 、Ui兩個矩陣和向量bi為輸入門的參數,是在訓練過程中需要學習得到的。遺忘門ft和輸出門ot的計算方式與輸入門類似,它們有各自的參數W、U和b。與傳統的循環神經網路不同的是,從上一個記憶單元的狀態ct−1到當前的狀態ct的轉移不一定完全取決於激活函數計算得到的狀態,還由輸入門和遺忘門來共同控制。

在一個訓練好的網路中,當輸入的序列中沒有重要信息時,LSTM的遺忘門的值接近於1,輸入門的值接近於0,此時過去的記憶會被保存,從而實現了長期記憶功能;當輸入的序列中出現了重要的信息時,LSTM應當把其存入記憶中,此時其輸入門的值會接近於1;當輸入的序列中出現了重要信息,且該信息意味著之前的記憶不再重要時,輸入門的值接近1,而遺忘門的值接近於0,這樣舊的記憶被遺忘,新的重要信息被記憶。經過這樣的設計,整個網路更容易學習到序列之間的長期依賴。

GRU是在LSTM上進行簡化而得到的,GRU的網路結構如下所示:

Zt代表更新門,更新門的作用類似於LSTM中的遺忘門和輸入門,它能決定要丟棄哪些信息和要添加哪些新信息。
Rt代表重置門,重置門用於決定丟棄先前信息的程度。

要注意的是,h只是一個變數,因此在每個時刻,包括最後的線性組合,h都是在用以前的自己和當前的備選答案更新自己。舉例來說,這一個變數好比一杯酒,每次我們要把一部分酒倒出去,並把倒出去的酒和新加入的原料混合,然後在倒回來,這里的reset控制的就是要倒出去的,並且混合好之後再倒回來的酒的比例,而update控制的則是用多大的比例混合新原料和倒出來的之前調制好的酒。同理,也可以以此理解LSTM,LSTM的遺忘門功能上和reset相似,而輸入門與update相似,不同之處在於LSTM還控制了當前狀態的exposure,也就是輸出門的功能,這是GRU所沒有的。

1.百面機器學習
2. https://zhuanlan.hu.com/p/45649187
3. https://www.jianshu.com/p/39a99c88a565

⑻ CNN(卷積神經網路)、RNN(循環神經網路)、DNN(深度神經網路)的內部網路結構有什麼區別

如下:

1、DNN:存在著一個問題——無法對時間序列上的變化進行建模。然而,樣本出現的時間順序對於自然語言處理、語音識別、手寫體識別等應用非常重要。對了適應這種需求,就出現了另一種神經網路結構——循環神經網路RNN。

2、CNN:每層神經元的信號只能向上一層傳播,樣本的處理在各個時刻獨立,因此又被稱為前向神經網路。

3、RNN:神經元的輸出可以在下一個時間戳直接作用到自身,即第i層神經元在m時刻的輸入,除了(i-1)層神經元在該時刻的輸出外,還包括其自身在(m-1)時刻的輸出!

介紹

神經網路技術起源於上世紀五、六十年代,當時叫感知機(perceptron),擁有輸入層、輸出層和一個隱含層。輸入的特徵向量通過隱含層變換達到輸出層,在輸出層得到分類結果。早期感知機的推動者是Rosenblatt。

在實際應用中,所謂的深度神經網路DNN,往往融合了多種已知的結構,包括卷積層或是LSTM單元。

⑼ 簡述神經網路的分類,試列舉常用神經的類型。

神經網路老派螞是一種通用機器學習模型,是一套特定的演算法集,在機器學習領域掀起了一場變革,本身就是普通函數的逼近,可以應用到任何機器學習輸入到輸出的復雜映射問題。

一般來說,神經網路架構可分為3類:

1、前饋神經網路:侍埋是最常見的類型,第一層為輸入,最後一層為輸出。如果有多個隱藏層,則稱為「深度」神經網路。它能夠計算出一系列事件間相似轉變的變化,每層神經元的活動是下一層的非線性函數。

閱讀全文

與以下哪個選項表示循環神經網路相關的資料

熱點內容
徐州第二屆網路安全攻防大賽 瀏覽:237
怎麼設置網路開通 瀏覽:255
大學生校園網路安全主題班會 瀏覽:479
網路汽車報價哪個最接近實際價 瀏覽:150
電腦安裝路由器可以連手機網路 瀏覽:806
手機用玖樂網路不好 瀏覽:862
移動機頂盒沒有無線網路選項了 瀏覽:617
蘋果網路支付買不了怎麼辦 瀏覽:710
網路安全宣傳周貴陽公安 瀏覽:801
飛行模式無線網路 瀏覽:21
被拉黑連不了網路怎麼辦 瀏覽:170
貓復位後沒有網路怎麼辦 瀏覽:440
電力監控系統網路安全管理體系 瀏覽:57
網路共享如何操作 瀏覽:559
中國電信通用網路密碼 瀏覽:458
手機在人群中網路很差是什麼原因 瀏覽:278
如何看待網路寶寶 瀏覽:112
哪個網站可以查看網路參數 瀏覽:393
海信小聚顯示網路未連接 瀏覽:242
蘋果電腦軟體怎麼設置無線網路 瀏覽:167

友情鏈接