'「模型解讀」淺析RNN到LSTM'

人工智能 算法 自然語言處理 有三AI 2019-07-21
"

卷積神經網絡使用固定大小的矩陣作為輸入(比如一張圖片),然後輸出一個固定大小的向量(比如不同分類的概率),適合於圖像分類,目標檢測,圖像分割等。但是除了圖像外,還有非常多的信息是非固定長度或者大小的,比如視頻,語音,此時更加適合用來處理這些時序信號的網絡就是一些時間序列模型。

常見的時間序列模型包括RNN,LSTM等,今天簡單說一說。

作者 | 言有三

編輯 | 言有三


1 RNN

我們通常所說的RNN實際上有兩種,一種是Recurrent Neural Networks,即循環神經網網絡,一種是Recursive Neural Networks,即遞歸神經網絡

循環神經網絡是首先被提出的,它是一種時間上進行線性遞歸的神經網絡,也就是我們通常所說的RNN。

遞歸神經網絡(recursive neural network)被視為循環神經網絡(recurrent neural network)的推廣,這是一種在結構上進行遞歸的神經網絡,常用於自然語言處理中的序列學習,它的輸入數據本質不一定是時序的,但結構卻往往更加複雜,我們這裡只說循環神經網絡。

一個RNN的結構如下:

"

卷積神經網絡使用固定大小的矩陣作為輸入(比如一張圖片),然後輸出一個固定大小的向量(比如不同分類的概率),適合於圖像分類,目標檢測,圖像分割等。但是除了圖像外,還有非常多的信息是非固定長度或者大小的,比如視頻,語音,此時更加適合用來處理這些時序信號的網絡就是一些時間序列模型。

常見的時間序列模型包括RNN,LSTM等,今天簡單說一說。

作者 | 言有三

編輯 | 言有三


1 RNN

我們通常所說的RNN實際上有兩種,一種是Recurrent Neural Networks,即循環神經網網絡,一種是Recursive Neural Networks,即遞歸神經網絡

循環神經網絡是首先被提出的,它是一種時間上進行線性遞歸的神經網絡,也就是我們通常所說的RNN。

遞歸神經網絡(recursive neural network)被視為循環神經網絡(recurrent neural network)的推廣,這是一種在結構上進行遞歸的神經網絡,常用於自然語言處理中的序列學習,它的輸入數據本質不一定是時序的,但結構卻往往更加複雜,我們這裡只說循環神經網絡。

一個RNN的結構如下:

「模型解讀」淺析RNN到LSTM

左側就是模型的基本結構,右側就是它在時間上進行展開的示意圖。xt是時刻t的輸入,相應的ht,ot分別是對應時刻t的隱藏層和輸出層。

上面我們可以看出,一個RNN的輸入包括了兩個:一個是當前時刻輸入xt,用於實時更新狀態,另一個是上一時刻隱藏層的狀態ht-1,用於記憶狀態,而不同時刻的網絡共用的是同一套參數。

RNN中常用的激活函數是tanh,所以上面的式子寫成公式,就是:

"

卷積神經網絡使用固定大小的矩陣作為輸入(比如一張圖片),然後輸出一個固定大小的向量(比如不同分類的概率),適合於圖像分類,目標檢測,圖像分割等。但是除了圖像外,還有非常多的信息是非固定長度或者大小的,比如視頻,語音,此時更加適合用來處理這些時序信號的網絡就是一些時間序列模型。

常見的時間序列模型包括RNN,LSTM等,今天簡單說一說。

作者 | 言有三

編輯 | 言有三


1 RNN

我們通常所說的RNN實際上有兩種,一種是Recurrent Neural Networks,即循環神經網網絡,一種是Recursive Neural Networks,即遞歸神經網絡

循環神經網絡是首先被提出的,它是一種時間上進行線性遞歸的神經網絡,也就是我們通常所說的RNN。

遞歸神經網絡(recursive neural network)被視為循環神經網絡(recurrent neural network)的推廣,這是一種在結構上進行遞歸的神經網絡,常用於自然語言處理中的序列學習,它的輸入數據本質不一定是時序的,但結構卻往往更加複雜,我們這裡只說循環神經網絡。

一個RNN的結構如下:

「模型解讀」淺析RNN到LSTM

左側就是模型的基本結構,右側就是它在時間上進行展開的示意圖。xt是時刻t的輸入,相應的ht,ot分別是對應時刻t的隱藏層和輸出層。

上面我們可以看出,一個RNN的輸入包括了兩個:一個是當前時刻輸入xt,用於實時更新狀態,另一個是上一時刻隱藏層的狀態ht-1,用於記憶狀態,而不同時刻的網絡共用的是同一套參數。

RNN中常用的激活函數是tanh,所以上面的式子寫成公式,就是:

「模型解讀」淺析RNN到LSTM

w就是要學習的權重,用幾句代碼表示RNN就是。

class RNN: 
def step(self, x):
self.h = np.tanh(np.dot(self.W_hh, self.h) + np.dot(self.W_xh, x)) #更新隱藏層
y = np.dot(self.W_hy, self.h) #得到輸出
return y

普通卷積神經網絡的優化使用的是反向傳播,那麼RNN使用的是什麼呢?最常見的還是反向傳播,不過是帶時序的版本,即BPFT(backpropagation through time),它與BP的原理是完全一樣的,只不過計算過程與時間有關。

與普通的反向傳播算法一樣,它重複地使用鏈式法則,區別在於損失函數不僅依賴於當前時刻的輸出層,也依賴於下一時刻。所以參數W在更新梯度時,必須考慮當前時刻的梯度和下一時刻的梯度,傳播示意圖如下;

"

卷積神經網絡使用固定大小的矩陣作為輸入(比如一張圖片),然後輸出一個固定大小的向量(比如不同分類的概率),適合於圖像分類,目標檢測,圖像分割等。但是除了圖像外,還有非常多的信息是非固定長度或者大小的,比如視頻,語音,此時更加適合用來處理這些時序信號的網絡就是一些時間序列模型。

常見的時間序列模型包括RNN,LSTM等,今天簡單說一說。

作者 | 言有三

編輯 | 言有三


1 RNN

我們通常所說的RNN實際上有兩種,一種是Recurrent Neural Networks,即循環神經網網絡,一種是Recursive Neural Networks,即遞歸神經網絡

循環神經網絡是首先被提出的,它是一種時間上進行線性遞歸的神經網絡,也就是我們通常所說的RNN。

遞歸神經網絡(recursive neural network)被視為循環神經網絡(recurrent neural network)的推廣,這是一種在結構上進行遞歸的神經網絡,常用於自然語言處理中的序列學習,它的輸入數據本質不一定是時序的,但結構卻往往更加複雜,我們這裡只說循環神經網絡。

一個RNN的結構如下:

「模型解讀」淺析RNN到LSTM

左側就是模型的基本結構,右側就是它在時間上進行展開的示意圖。xt是時刻t的輸入,相應的ht,ot分別是對應時刻t的隱藏層和輸出層。

上面我們可以看出,一個RNN的輸入包括了兩個:一個是當前時刻輸入xt,用於實時更新狀態,另一個是上一時刻隱藏層的狀態ht-1,用於記憶狀態,而不同時刻的網絡共用的是同一套參數。

RNN中常用的激活函數是tanh,所以上面的式子寫成公式,就是:

「模型解讀」淺析RNN到LSTM

w就是要學習的權重,用幾句代碼表示RNN就是。

class RNN: 
def step(self, x):
self.h = np.tanh(np.dot(self.W_hh, self.h) + np.dot(self.W_xh, x)) #更新隱藏層
y = np.dot(self.W_hy, self.h) #得到輸出
return y

普通卷積神經網絡的優化使用的是反向傳播,那麼RNN使用的是什麼呢?最常見的還是反向傳播,不過是帶時序的版本,即BPFT(backpropagation through time),它與BP的原理是完全一樣的,只不過計算過程與時間有關。

與普通的反向傳播算法一樣,它重複地使用鏈式法則,區別在於損失函數不僅依賴於當前時刻的輸出層,也依賴於下一時刻。所以參數W在更新梯度時,必須考慮當前時刻的梯度和下一時刻的梯度,傳播示意圖如下;

「模型解讀」淺析RNN到LSTM

具體的公式我們就不編輯了,大家可以找書看,之所以有後續的LSTM等,就是因為RNN有大問題:因為t時刻的導數會傳播到t-1,t-2,... ,1時刻,這樣就有了連乘的係數。

連乘一直帶來了兩個問題:梯度爆炸和消失。而且,在前向過程中,開始時刻的輸入對後面時刻的影響越來越小,這就是長距離依賴問題。這樣一來,就失去了“記憶”的能力,要知道生物的神經元擁有對過去時序狀態很強的記憶能力。

2 LSTM

前面說的RNN有兩個問題,長短期記憶(Long short-term memory, LSTM)就是要解決這兩個問題,通過引入若干門來解決,相比RNN多了一個狀態cell state。

這個cell state承載著之前所有狀態的信息,每到新的時刻,就有相應的操作來決定捨棄什麼舊的信息以及添加什麼新的信息。這個狀態與隱藏層狀態h不同,在更新過程中,它的更新是緩慢的,而隱藏層狀態h的更新是迅速的。

LSTM的網絡結構圖如下,輸入包括ht-1,xt,輸出ht,狀態為ct-1,ct。

"

卷積神經網絡使用固定大小的矩陣作為輸入(比如一張圖片),然後輸出一個固定大小的向量(比如不同分類的概率),適合於圖像分類,目標檢測,圖像分割等。但是除了圖像外,還有非常多的信息是非固定長度或者大小的,比如視頻,語音,此時更加適合用來處理這些時序信號的網絡就是一些時間序列模型。

常見的時間序列模型包括RNN,LSTM等,今天簡單說一說。

作者 | 言有三

編輯 | 言有三


1 RNN

我們通常所說的RNN實際上有兩種,一種是Recurrent Neural Networks,即循環神經網網絡,一種是Recursive Neural Networks,即遞歸神經網絡

循環神經網絡是首先被提出的,它是一種時間上進行線性遞歸的神經網絡,也就是我們通常所說的RNN。

遞歸神經網絡(recursive neural network)被視為循環神經網絡(recurrent neural network)的推廣,這是一種在結構上進行遞歸的神經網絡,常用於自然語言處理中的序列學習,它的輸入數據本質不一定是時序的,但結構卻往往更加複雜,我們這裡只說循環神經網絡。

一個RNN的結構如下:

「模型解讀」淺析RNN到LSTM

左側就是模型的基本結構,右側就是它在時間上進行展開的示意圖。xt是時刻t的輸入,相應的ht,ot分別是對應時刻t的隱藏層和輸出層。

上面我們可以看出,一個RNN的輸入包括了兩個:一個是當前時刻輸入xt,用於實時更新狀態,另一個是上一時刻隱藏層的狀態ht-1,用於記憶狀態,而不同時刻的網絡共用的是同一套參數。

RNN中常用的激活函數是tanh,所以上面的式子寫成公式,就是:

「模型解讀」淺析RNN到LSTM

w就是要學習的權重,用幾句代碼表示RNN就是。

class RNN: 
def step(self, x):
self.h = np.tanh(np.dot(self.W_hh, self.h) + np.dot(self.W_xh, x)) #更新隱藏層
y = np.dot(self.W_hy, self.h) #得到輸出
return y

普通卷積神經網絡的優化使用的是反向傳播,那麼RNN使用的是什麼呢?最常見的還是反向傳播,不過是帶時序的版本,即BPFT(backpropagation through time),它與BP的原理是完全一樣的,只不過計算過程與時間有關。

與普通的反向傳播算法一樣,它重複地使用鏈式法則,區別在於損失函數不僅依賴於當前時刻的輸出層,也依賴於下一時刻。所以參數W在更新梯度時,必須考慮當前時刻的梯度和下一時刻的梯度,傳播示意圖如下;

「模型解讀」淺析RNN到LSTM

具體的公式我們就不編輯了,大家可以找書看,之所以有後續的LSTM等,就是因為RNN有大問題:因為t時刻的導數會傳播到t-1,t-2,... ,1時刻,這樣就有了連乘的係數。

連乘一直帶來了兩個問題:梯度爆炸和消失。而且,在前向過程中,開始時刻的輸入對後面時刻的影響越來越小,這就是長距離依賴問題。這樣一來,就失去了“記憶”的能力,要知道生物的神經元擁有對過去時序狀態很強的記憶能力。

2 LSTM

前面說的RNN有兩個問題,長短期記憶(Long short-term memory, LSTM)就是要解決這兩個問題,通過引入若干門來解決,相比RNN多了一個狀態cell state。

這個cell state承載著之前所有狀態的信息,每到新的時刻,就有相應的操作來決定捨棄什麼舊的信息以及添加什麼新的信息。這個狀態與隱藏層狀態h不同,在更新過程中,它的更新是緩慢的,而隱藏層狀態h的更新是迅速的。

LSTM的網絡結構圖如下,輸入包括ht-1,xt,輸出ht,狀態為ct-1,ct。

「模型解讀」淺析RNN到LSTM

2.1 遺忘門與遺忘階段

遺忘門決定了要從上一個狀態中捨棄什麼信息,它輸入上一狀態的輸出ht-1、當前狀態輸入信息xt到一個Sigmoid函數中,產生一個介於0到1之間的數值,與上一個時刻的狀態ct-1相乘之後來確定捨棄(保留)多少信息。0 表示“完全捨棄”,1 表示“完全保留”,這個階段完成了對上一個節點cell state進行選擇性忘記,遺忘門和它的輸出公式如下:

"

卷積神經網絡使用固定大小的矩陣作為輸入(比如一張圖片),然後輸出一個固定大小的向量(比如不同分類的概率),適合於圖像分類,目標檢測,圖像分割等。但是除了圖像外,還有非常多的信息是非固定長度或者大小的,比如視頻,語音,此時更加適合用來處理這些時序信號的網絡就是一些時間序列模型。

常見的時間序列模型包括RNN,LSTM等,今天簡單說一說。

作者 | 言有三

編輯 | 言有三


1 RNN

我們通常所說的RNN實際上有兩種,一種是Recurrent Neural Networks,即循環神經網網絡,一種是Recursive Neural Networks,即遞歸神經網絡

循環神經網絡是首先被提出的,它是一種時間上進行線性遞歸的神經網絡,也就是我們通常所說的RNN。

遞歸神經網絡(recursive neural network)被視為循環神經網絡(recurrent neural network)的推廣,這是一種在結構上進行遞歸的神經網絡,常用於自然語言處理中的序列學習,它的輸入數據本質不一定是時序的,但結構卻往往更加複雜,我們這裡只說循環神經網絡。

一個RNN的結構如下:

「模型解讀」淺析RNN到LSTM

左側就是模型的基本結構,右側就是它在時間上進行展開的示意圖。xt是時刻t的輸入,相應的ht,ot分別是對應時刻t的隱藏層和輸出層。

上面我們可以看出,一個RNN的輸入包括了兩個:一個是當前時刻輸入xt,用於實時更新狀態,另一個是上一時刻隱藏層的狀態ht-1,用於記憶狀態,而不同時刻的網絡共用的是同一套參數。

RNN中常用的激活函數是tanh,所以上面的式子寫成公式,就是:

「模型解讀」淺析RNN到LSTM

w就是要學習的權重,用幾句代碼表示RNN就是。

class RNN: 
def step(self, x):
self.h = np.tanh(np.dot(self.W_hh, self.h) + np.dot(self.W_xh, x)) #更新隱藏層
y = np.dot(self.W_hy, self.h) #得到輸出
return y

普通卷積神經網絡的優化使用的是反向傳播,那麼RNN使用的是什麼呢?最常見的還是反向傳播,不過是帶時序的版本,即BPFT(backpropagation through time),它與BP的原理是完全一樣的,只不過計算過程與時間有關。

與普通的反向傳播算法一樣,它重複地使用鏈式法則,區別在於損失函數不僅依賴於當前時刻的輸出層,也依賴於下一時刻。所以參數W在更新梯度時,必須考慮當前時刻的梯度和下一時刻的梯度,傳播示意圖如下;

「模型解讀」淺析RNN到LSTM

具體的公式我們就不編輯了,大家可以找書看,之所以有後續的LSTM等,就是因為RNN有大問題:因為t時刻的導數會傳播到t-1,t-2,... ,1時刻,這樣就有了連乘的係數。

連乘一直帶來了兩個問題:梯度爆炸和消失。而且,在前向過程中,開始時刻的輸入對後面時刻的影響越來越小,這就是長距離依賴問題。這樣一來,就失去了“記憶”的能力,要知道生物的神經元擁有對過去時序狀態很強的記憶能力。

2 LSTM

前面說的RNN有兩個問題,長短期記憶(Long short-term memory, LSTM)就是要解決這兩個問題,通過引入若干門來解決,相比RNN多了一個狀態cell state。

這個cell state承載著之前所有狀態的信息,每到新的時刻,就有相應的操作來決定捨棄什麼舊的信息以及添加什麼新的信息。這個狀態與隱藏層狀態h不同,在更新過程中,它的更新是緩慢的,而隱藏層狀態h的更新是迅速的。

LSTM的網絡結構圖如下,輸入包括ht-1,xt,輸出ht,狀態為ct-1,ct。

「模型解讀」淺析RNN到LSTM

2.1 遺忘門與遺忘階段

遺忘門決定了要從上一個狀態中捨棄什麼信息,它輸入上一狀態的輸出ht-1、當前狀態輸入信息xt到一個Sigmoid函數中,產生一個介於0到1之間的數值,與上一個時刻的狀態ct-1相乘之後來確定捨棄(保留)多少信息。0 表示“完全捨棄”,1 表示“完全保留”,這個階段完成了對上一個節點cell state進行選擇性忘記,遺忘門和它的輸出公式如下:

「模型解讀」淺析RNN到LSTM

2.2 輸入門與選擇記憶階段

選擇記憶階段,也就是對輸入有選擇性地進行“記憶”,重要的記錄下來,不重要的少記一些,它決定了要往當前狀態中保存什麼新的信息。它輸入上一狀態的輸出ht-1、當前輸入信息xt到一個Sigmoid函數中,產生一個介於0到1之間的數值it來確定需要保留多少的新信息。

“候選新信息”則通過輸入上一狀態的輸出、當前狀態輸入信息和一個tanh激活函數生成。有了遺忘門和輸入門之後,就得到了完整的下一時刻的狀態Ct,它將用於產生下一狀態的隱藏層ht,也就是當前單元的輸出。

"

卷積神經網絡使用固定大小的矩陣作為輸入(比如一張圖片),然後輸出一個固定大小的向量(比如不同分類的概率),適合於圖像分類,目標檢測,圖像分割等。但是除了圖像外,還有非常多的信息是非固定長度或者大小的,比如視頻,語音,此時更加適合用來處理這些時序信號的網絡就是一些時間序列模型。

常見的時間序列模型包括RNN,LSTM等,今天簡單說一說。

作者 | 言有三

編輯 | 言有三


1 RNN

我們通常所說的RNN實際上有兩種,一種是Recurrent Neural Networks,即循環神經網網絡,一種是Recursive Neural Networks,即遞歸神經網絡

循環神經網絡是首先被提出的,它是一種時間上進行線性遞歸的神經網絡,也就是我們通常所說的RNN。

遞歸神經網絡(recursive neural network)被視為循環神經網絡(recurrent neural network)的推廣,這是一種在結構上進行遞歸的神經網絡,常用於自然語言處理中的序列學習,它的輸入數據本質不一定是時序的,但結構卻往往更加複雜,我們這裡只說循環神經網絡。

一個RNN的結構如下:

「模型解讀」淺析RNN到LSTM

左側就是模型的基本結構,右側就是它在時間上進行展開的示意圖。xt是時刻t的輸入,相應的ht,ot分別是對應時刻t的隱藏層和輸出層。

上面我們可以看出,一個RNN的輸入包括了兩個:一個是當前時刻輸入xt,用於實時更新狀態,另一個是上一時刻隱藏層的狀態ht-1,用於記憶狀態,而不同時刻的網絡共用的是同一套參數。

RNN中常用的激活函數是tanh,所以上面的式子寫成公式,就是:

「模型解讀」淺析RNN到LSTM

w就是要學習的權重,用幾句代碼表示RNN就是。

class RNN: 
def step(self, x):
self.h = np.tanh(np.dot(self.W_hh, self.h) + np.dot(self.W_xh, x)) #更新隱藏層
y = np.dot(self.W_hy, self.h) #得到輸出
return y

普通卷積神經網絡的優化使用的是反向傳播,那麼RNN使用的是什麼呢?最常見的還是反向傳播,不過是帶時序的版本,即BPFT(backpropagation through time),它與BP的原理是完全一樣的,只不過計算過程與時間有關。

與普通的反向傳播算法一樣,它重複地使用鏈式法則,區別在於損失函數不僅依賴於當前時刻的輸出層,也依賴於下一時刻。所以參數W在更新梯度時,必須考慮當前時刻的梯度和下一時刻的梯度,傳播示意圖如下;

「模型解讀」淺析RNN到LSTM

具體的公式我們就不編輯了,大家可以找書看,之所以有後續的LSTM等,就是因為RNN有大問題:因為t時刻的導數會傳播到t-1,t-2,... ,1時刻,這樣就有了連乘的係數。

連乘一直帶來了兩個問題:梯度爆炸和消失。而且,在前向過程中,開始時刻的輸入對後面時刻的影響越來越小,這就是長距離依賴問題。這樣一來,就失去了“記憶”的能力,要知道生物的神經元擁有對過去時序狀態很強的記憶能力。

2 LSTM

前面說的RNN有兩個問題,長短期記憶(Long short-term memory, LSTM)就是要解決這兩個問題,通過引入若干門來解決,相比RNN多了一個狀態cell state。

這個cell state承載著之前所有狀態的信息,每到新的時刻,就有相應的操作來決定捨棄什麼舊的信息以及添加什麼新的信息。這個狀態與隱藏層狀態h不同,在更新過程中,它的更新是緩慢的,而隱藏層狀態h的更新是迅速的。

LSTM的網絡結構圖如下,輸入包括ht-1,xt,輸出ht,狀態為ct-1,ct。

「模型解讀」淺析RNN到LSTM

2.1 遺忘門與遺忘階段

遺忘門決定了要從上一個狀態中捨棄什麼信息,它輸入上一狀態的輸出ht-1、當前狀態輸入信息xt到一個Sigmoid函數中,產生一個介於0到1之間的數值,與上一個時刻的狀態ct-1相乘之後來確定捨棄(保留)多少信息。0 表示“完全捨棄”,1 表示“完全保留”,這個階段完成了對上一個節點cell state進行選擇性忘記,遺忘門和它的輸出公式如下:

「模型解讀」淺析RNN到LSTM

2.2 輸入門與選擇記憶階段

選擇記憶階段,也就是對輸入有選擇性地進行“記憶”,重要的記錄下來,不重要的少記一些,它決定了要往當前狀態中保存什麼新的信息。它輸入上一狀態的輸出ht-1、當前輸入信息xt到一個Sigmoid函數中,產生一個介於0到1之間的數值it來確定需要保留多少的新信息。

“候選新信息”則通過輸入上一狀態的輸出、當前狀態輸入信息和一個tanh激活函數生成。有了遺忘門和輸入門之後,就得到了完整的下一時刻的狀態Ct,它將用於產生下一狀態的隱藏層ht,也就是當前單元的輸出。

「模型解讀」淺析RNN到LSTM

"

卷積神經網絡使用固定大小的矩陣作為輸入(比如一張圖片),然後輸出一個固定大小的向量(比如不同分類的概率),適合於圖像分類,目標檢測,圖像分割等。但是除了圖像外,還有非常多的信息是非固定長度或者大小的,比如視頻,語音,此時更加適合用來處理這些時序信號的網絡就是一些時間序列模型。

常見的時間序列模型包括RNN,LSTM等,今天簡單說一說。

作者 | 言有三

編輯 | 言有三


1 RNN

我們通常所說的RNN實際上有兩種,一種是Recurrent Neural Networks,即循環神經網網絡,一種是Recursive Neural Networks,即遞歸神經網絡

循環神經網絡是首先被提出的,它是一種時間上進行線性遞歸的神經網絡,也就是我們通常所說的RNN。

遞歸神經網絡(recursive neural network)被視為循環神經網絡(recurrent neural network)的推廣,這是一種在結構上進行遞歸的神經網絡,常用於自然語言處理中的序列學習,它的輸入數據本質不一定是時序的,但結構卻往往更加複雜,我們這裡只說循環神經網絡。

一個RNN的結構如下:

「模型解讀」淺析RNN到LSTM

左側就是模型的基本結構,右側就是它在時間上進行展開的示意圖。xt是時刻t的輸入,相應的ht,ot分別是對應時刻t的隱藏層和輸出層。

上面我們可以看出,一個RNN的輸入包括了兩個:一個是當前時刻輸入xt,用於實時更新狀態,另一個是上一時刻隱藏層的狀態ht-1,用於記憶狀態,而不同時刻的網絡共用的是同一套參數。

RNN中常用的激活函數是tanh,所以上面的式子寫成公式,就是:

「模型解讀」淺析RNN到LSTM

w就是要學習的權重,用幾句代碼表示RNN就是。

class RNN: 
def step(self, x):
self.h = np.tanh(np.dot(self.W_hh, self.h) + np.dot(self.W_xh, x)) #更新隱藏層
y = np.dot(self.W_hy, self.h) #得到輸出
return y

普通卷積神經網絡的優化使用的是反向傳播,那麼RNN使用的是什麼呢?最常見的還是反向傳播,不過是帶時序的版本,即BPFT(backpropagation through time),它與BP的原理是完全一樣的,只不過計算過程與時間有關。

與普通的反向傳播算法一樣,它重複地使用鏈式法則,區別在於損失函數不僅依賴於當前時刻的輸出層,也依賴於下一時刻。所以參數W在更新梯度時,必須考慮當前時刻的梯度和下一時刻的梯度,傳播示意圖如下;

「模型解讀」淺析RNN到LSTM

具體的公式我們就不編輯了,大家可以找書看,之所以有後續的LSTM等,就是因為RNN有大問題:因為t時刻的導數會傳播到t-1,t-2,... ,1時刻,這樣就有了連乘的係數。

連乘一直帶來了兩個問題:梯度爆炸和消失。而且,在前向過程中,開始時刻的輸入對後面時刻的影響越來越小,這就是長距離依賴問題。這樣一來,就失去了“記憶”的能力,要知道生物的神經元擁有對過去時序狀態很強的記憶能力。

2 LSTM

前面說的RNN有兩個問題,長短期記憶(Long short-term memory, LSTM)就是要解決這兩個問題,通過引入若干門來解決,相比RNN多了一個狀態cell state。

這個cell state承載著之前所有狀態的信息,每到新的時刻,就有相應的操作來決定捨棄什麼舊的信息以及添加什麼新的信息。這個狀態與隱藏層狀態h不同,在更新過程中,它的更新是緩慢的,而隱藏層狀態h的更新是迅速的。

LSTM的網絡結構圖如下,輸入包括ht-1,xt,輸出ht,狀態為ct-1,ct。

「模型解讀」淺析RNN到LSTM

2.1 遺忘門與遺忘階段

遺忘門決定了要從上一個狀態中捨棄什麼信息,它輸入上一狀態的輸出ht-1、當前狀態輸入信息xt到一個Sigmoid函數中,產生一個介於0到1之間的數值,與上一個時刻的狀態ct-1相乘之後來確定捨棄(保留)多少信息。0 表示“完全捨棄”,1 表示“完全保留”,這個階段完成了對上一個節點cell state進行選擇性忘記,遺忘門和它的輸出公式如下:

「模型解讀」淺析RNN到LSTM

2.2 輸入門與選擇記憶階段

選擇記憶階段,也就是對輸入有選擇性地進行“記憶”,重要的記錄下來,不重要的少記一些,它決定了要往當前狀態中保存什麼新的信息。它輸入上一狀態的輸出ht-1、當前輸入信息xt到一個Sigmoid函數中,產生一個介於0到1之間的數值it來確定需要保留多少的新信息。

“候選新信息”則通過輸入上一狀態的輸出、當前狀態輸入信息和一個tanh激活函數生成。有了遺忘門和輸入門之後,就得到了完整的下一時刻的狀態Ct,它將用於產生下一狀態的隱藏層ht,也就是當前單元的輸出。

「模型解讀」淺析RNN到LSTM

「模型解讀」淺析RNN到LSTM

"

卷積神經網絡使用固定大小的矩陣作為輸入(比如一張圖片),然後輸出一個固定大小的向量(比如不同分類的概率),適合於圖像分類,目標檢測,圖像分割等。但是除了圖像外,還有非常多的信息是非固定長度或者大小的,比如視頻,語音,此時更加適合用來處理這些時序信號的網絡就是一些時間序列模型。

常見的時間序列模型包括RNN,LSTM等,今天簡單說一說。

作者 | 言有三

編輯 | 言有三


1 RNN

我們通常所說的RNN實際上有兩種,一種是Recurrent Neural Networks,即循環神經網網絡,一種是Recursive Neural Networks,即遞歸神經網絡

循環神經網絡是首先被提出的,它是一種時間上進行線性遞歸的神經網絡,也就是我們通常所說的RNN。

遞歸神經網絡(recursive neural network)被視為循環神經網絡(recurrent neural network)的推廣,這是一種在結構上進行遞歸的神經網絡,常用於自然語言處理中的序列學習,它的輸入數據本質不一定是時序的,但結構卻往往更加複雜,我們這裡只說循環神經網絡。

一個RNN的結構如下:

「模型解讀」淺析RNN到LSTM

左側就是模型的基本結構,右側就是它在時間上進行展開的示意圖。xt是時刻t的輸入,相應的ht,ot分別是對應時刻t的隱藏層和輸出層。

上面我們可以看出,一個RNN的輸入包括了兩個:一個是當前時刻輸入xt,用於實時更新狀態,另一個是上一時刻隱藏層的狀態ht-1,用於記憶狀態,而不同時刻的網絡共用的是同一套參數。

RNN中常用的激活函數是tanh,所以上面的式子寫成公式,就是:

「模型解讀」淺析RNN到LSTM

w就是要學習的權重,用幾句代碼表示RNN就是。

class RNN: 
def step(self, x):
self.h = np.tanh(np.dot(self.W_hh, self.h) + np.dot(self.W_xh, x)) #更新隱藏層
y = np.dot(self.W_hy, self.h) #得到輸出
return y

普通卷積神經網絡的優化使用的是反向傳播,那麼RNN使用的是什麼呢?最常見的還是反向傳播,不過是帶時序的版本,即BPFT(backpropagation through time),它與BP的原理是完全一樣的,只不過計算過程與時間有關。

與普通的反向傳播算法一樣,它重複地使用鏈式法則,區別在於損失函數不僅依賴於當前時刻的輸出層,也依賴於下一時刻。所以參數W在更新梯度時,必須考慮當前時刻的梯度和下一時刻的梯度,傳播示意圖如下;

「模型解讀」淺析RNN到LSTM

具體的公式我們就不編輯了,大家可以找書看,之所以有後續的LSTM等,就是因為RNN有大問題:因為t時刻的導數會傳播到t-1,t-2,... ,1時刻,這樣就有了連乘的係數。

連乘一直帶來了兩個問題:梯度爆炸和消失。而且,在前向過程中,開始時刻的輸入對後面時刻的影響越來越小,這就是長距離依賴問題。這樣一來,就失去了“記憶”的能力,要知道生物的神經元擁有對過去時序狀態很強的記憶能力。

2 LSTM

前面說的RNN有兩個問題,長短期記憶(Long short-term memory, LSTM)就是要解決這兩個問題,通過引入若干門來解決,相比RNN多了一個狀態cell state。

這個cell state承載著之前所有狀態的信息,每到新的時刻,就有相應的操作來決定捨棄什麼舊的信息以及添加什麼新的信息。這個狀態與隱藏層狀態h不同,在更新過程中,它的更新是緩慢的,而隱藏層狀態h的更新是迅速的。

LSTM的網絡結構圖如下,輸入包括ht-1,xt,輸出ht,狀態為ct-1,ct。

「模型解讀」淺析RNN到LSTM

2.1 遺忘門與遺忘階段

遺忘門決定了要從上一個狀態中捨棄什麼信息,它輸入上一狀態的輸出ht-1、當前狀態輸入信息xt到一個Sigmoid函數中,產生一個介於0到1之間的數值,與上一個時刻的狀態ct-1相乘之後來確定捨棄(保留)多少信息。0 表示“完全捨棄”,1 表示“完全保留”,這個階段完成了對上一個節點cell state進行選擇性忘記,遺忘門和它的輸出公式如下:

「模型解讀」淺析RNN到LSTM

2.2 輸入門與選擇記憶階段

選擇記憶階段,也就是對輸入有選擇性地進行“記憶”,重要的記錄下來,不重要的少記一些,它決定了要往當前狀態中保存什麼新的信息。它輸入上一狀態的輸出ht-1、當前輸入信息xt到一個Sigmoid函數中,產生一個介於0到1之間的數值it來確定需要保留多少的新信息。

“候選新信息”則通過輸入上一狀態的輸出、當前狀態輸入信息和一個tanh激活函數生成。有了遺忘門和輸入門之後,就得到了完整的下一時刻的狀態Ct,它將用於產生下一狀態的隱藏層ht,也就是當前單元的輸出。

「模型解讀」淺析RNN到LSTM

「模型解讀」淺析RNN到LSTM

「模型解讀」淺析RNN到LSTM

2.3 輸出門與輸出階段

輸出門決定了要從cell state中輸出什麼信息。與之前類似,會先有一個Sigmoid函數產生一個介於0到1之間的數值Ot來確定我們需要輸出多少cell state中的信息。cell state的信息在與Ot相乘時首先會經過一個tanh層進行“激活”,得到的就是這個LSTM block的輸出信息ht。

"

卷積神經網絡使用固定大小的矩陣作為輸入(比如一張圖片),然後輸出一個固定大小的向量(比如不同分類的概率),適合於圖像分類,目標檢測,圖像分割等。但是除了圖像外,還有非常多的信息是非固定長度或者大小的,比如視頻,語音,此時更加適合用來處理這些時序信號的網絡就是一些時間序列模型。

常見的時間序列模型包括RNN,LSTM等,今天簡單說一說。

作者 | 言有三

編輯 | 言有三


1 RNN

我們通常所說的RNN實際上有兩種,一種是Recurrent Neural Networks,即循環神經網網絡,一種是Recursive Neural Networks,即遞歸神經網絡

循環神經網絡是首先被提出的,它是一種時間上進行線性遞歸的神經網絡,也就是我們通常所說的RNN。

遞歸神經網絡(recursive neural network)被視為循環神經網絡(recurrent neural network)的推廣,這是一種在結構上進行遞歸的神經網絡,常用於自然語言處理中的序列學習,它的輸入數據本質不一定是時序的,但結構卻往往更加複雜,我們這裡只說循環神經網絡。

一個RNN的結構如下:

「模型解讀」淺析RNN到LSTM

左側就是模型的基本結構,右側就是它在時間上進行展開的示意圖。xt是時刻t的輸入,相應的ht,ot分別是對應時刻t的隱藏層和輸出層。

上面我們可以看出,一個RNN的輸入包括了兩個:一個是當前時刻輸入xt,用於實時更新狀態,另一個是上一時刻隱藏層的狀態ht-1,用於記憶狀態,而不同時刻的網絡共用的是同一套參數。

RNN中常用的激活函數是tanh,所以上面的式子寫成公式,就是:

「模型解讀」淺析RNN到LSTM

w就是要學習的權重,用幾句代碼表示RNN就是。

class RNN: 
def step(self, x):
self.h = np.tanh(np.dot(self.W_hh, self.h) + np.dot(self.W_xh, x)) #更新隱藏層
y = np.dot(self.W_hy, self.h) #得到輸出
return y

普通卷積神經網絡的優化使用的是反向傳播,那麼RNN使用的是什麼呢?最常見的還是反向傳播,不過是帶時序的版本,即BPFT(backpropagation through time),它與BP的原理是完全一樣的,只不過計算過程與時間有關。

與普通的反向傳播算法一樣,它重複地使用鏈式法則,區別在於損失函數不僅依賴於當前時刻的輸出層,也依賴於下一時刻。所以參數W在更新梯度時,必須考慮當前時刻的梯度和下一時刻的梯度,傳播示意圖如下;

「模型解讀」淺析RNN到LSTM

具體的公式我們就不編輯了,大家可以找書看,之所以有後續的LSTM等,就是因為RNN有大問題:因為t時刻的導數會傳播到t-1,t-2,... ,1時刻,這樣就有了連乘的係數。

連乘一直帶來了兩個問題:梯度爆炸和消失。而且,在前向過程中,開始時刻的輸入對後面時刻的影響越來越小,這就是長距離依賴問題。這樣一來,就失去了“記憶”的能力,要知道生物的神經元擁有對過去時序狀態很強的記憶能力。

2 LSTM

前面說的RNN有兩個問題,長短期記憶(Long short-term memory, LSTM)就是要解決這兩個問題,通過引入若干門來解決,相比RNN多了一個狀態cell state。

這個cell state承載著之前所有狀態的信息,每到新的時刻,就有相應的操作來決定捨棄什麼舊的信息以及添加什麼新的信息。這個狀態與隱藏層狀態h不同,在更新過程中,它的更新是緩慢的,而隱藏層狀態h的更新是迅速的。

LSTM的網絡結構圖如下,輸入包括ht-1,xt,輸出ht,狀態為ct-1,ct。

「模型解讀」淺析RNN到LSTM

2.1 遺忘門與遺忘階段

遺忘門決定了要從上一個狀態中捨棄什麼信息,它輸入上一狀態的輸出ht-1、當前狀態輸入信息xt到一個Sigmoid函數中,產生一個介於0到1之間的數值,與上一個時刻的狀態ct-1相乘之後來確定捨棄(保留)多少信息。0 表示“完全捨棄”,1 表示“完全保留”,這個階段完成了對上一個節點cell state進行選擇性忘記,遺忘門和它的輸出公式如下:

「模型解讀」淺析RNN到LSTM

2.2 輸入門與選擇記憶階段

選擇記憶階段,也就是對輸入有選擇性地進行“記憶”,重要的記錄下來,不重要的少記一些,它決定了要往當前狀態中保存什麼新的信息。它輸入上一狀態的輸出ht-1、當前輸入信息xt到一個Sigmoid函數中,產生一個介於0到1之間的數值it來確定需要保留多少的新信息。

“候選新信息”則通過輸入上一狀態的輸出、當前狀態輸入信息和一個tanh激活函數生成。有了遺忘門和輸入門之後,就得到了完整的下一時刻的狀態Ct,它將用於產生下一狀態的隱藏層ht,也就是當前單元的輸出。

「模型解讀」淺析RNN到LSTM

「模型解讀」淺析RNN到LSTM

「模型解讀」淺析RNN到LSTM

2.3 輸出門與輸出階段

輸出門決定了要從cell state中輸出什麼信息。與之前類似,會先有一個Sigmoid函數產生一個介於0到1之間的數值Ot來確定我們需要輸出多少cell state中的信息。cell state的信息在與Ot相乘時首先會經過一個tanh層進行“激活”,得到的就是這個LSTM block的輸出信息ht。

「模型解讀」淺析RNN到LSTM

以上就是LSTM的基本原理,它通過門控狀態來對信息進行選擇性的記憶,滿足了需要長時間記憶信息和遺忘信息的需求。

當然,隨之而來的就是大量的參數,因此後續就有了GRU。另外,RNN和LSTM不止有單向的,還有雙向的,這些就留給讀者自己去學習了。

總結

時序模型在語音,視頻以及自然語言處理等領域有不可替代的作用,雖然相比普通的CNN,模型的複雜度和訓練難度都增加了不少,但是在進階之路上也是需要好好掌握的。

更多模型解讀,請移步有三AI知識星球

"

卷積神經網絡使用固定大小的矩陣作為輸入(比如一張圖片),然後輸出一個固定大小的向量(比如不同分類的概率),適合於圖像分類,目標檢測,圖像分割等。但是除了圖像外,還有非常多的信息是非固定長度或者大小的,比如視頻,語音,此時更加適合用來處理這些時序信號的網絡就是一些時間序列模型。

常見的時間序列模型包括RNN,LSTM等,今天簡單說一說。

作者 | 言有三

編輯 | 言有三


1 RNN

我們通常所說的RNN實際上有兩種,一種是Recurrent Neural Networks,即循環神經網網絡,一種是Recursive Neural Networks,即遞歸神經網絡

循環神經網絡是首先被提出的,它是一種時間上進行線性遞歸的神經網絡,也就是我們通常所說的RNN。

遞歸神經網絡(recursive neural network)被視為循環神經網絡(recurrent neural network)的推廣,這是一種在結構上進行遞歸的神經網絡,常用於自然語言處理中的序列學習,它的輸入數據本質不一定是時序的,但結構卻往往更加複雜,我們這裡只說循環神經網絡。

一個RNN的結構如下:

「模型解讀」淺析RNN到LSTM

左側就是模型的基本結構,右側就是它在時間上進行展開的示意圖。xt是時刻t的輸入,相應的ht,ot分別是對應時刻t的隱藏層和輸出層。

上面我們可以看出,一個RNN的輸入包括了兩個:一個是當前時刻輸入xt,用於實時更新狀態,另一個是上一時刻隱藏層的狀態ht-1,用於記憶狀態,而不同時刻的網絡共用的是同一套參數。

RNN中常用的激活函數是tanh,所以上面的式子寫成公式,就是:

「模型解讀」淺析RNN到LSTM

w就是要學習的權重,用幾句代碼表示RNN就是。

class RNN: 
def step(self, x):
self.h = np.tanh(np.dot(self.W_hh, self.h) + np.dot(self.W_xh, x)) #更新隱藏層
y = np.dot(self.W_hy, self.h) #得到輸出
return y

普通卷積神經網絡的優化使用的是反向傳播,那麼RNN使用的是什麼呢?最常見的還是反向傳播,不過是帶時序的版本,即BPFT(backpropagation through time),它與BP的原理是完全一樣的,只不過計算過程與時間有關。

與普通的反向傳播算法一樣,它重複地使用鏈式法則,區別在於損失函數不僅依賴於當前時刻的輸出層,也依賴於下一時刻。所以參數W在更新梯度時,必須考慮當前時刻的梯度和下一時刻的梯度,傳播示意圖如下;

「模型解讀」淺析RNN到LSTM

具體的公式我們就不編輯了,大家可以找書看,之所以有後續的LSTM等,就是因為RNN有大問題:因為t時刻的導數會傳播到t-1,t-2,... ,1時刻,這樣就有了連乘的係數。

連乘一直帶來了兩個問題:梯度爆炸和消失。而且,在前向過程中,開始時刻的輸入對後面時刻的影響越來越小,這就是長距離依賴問題。這樣一來,就失去了“記憶”的能力,要知道生物的神經元擁有對過去時序狀態很強的記憶能力。

2 LSTM

前面說的RNN有兩個問題,長短期記憶(Long short-term memory, LSTM)就是要解決這兩個問題,通過引入若干門來解決,相比RNN多了一個狀態cell state。

這個cell state承載著之前所有狀態的信息,每到新的時刻,就有相應的操作來決定捨棄什麼舊的信息以及添加什麼新的信息。這個狀態與隱藏層狀態h不同,在更新過程中,它的更新是緩慢的,而隱藏層狀態h的更新是迅速的。

LSTM的網絡結構圖如下,輸入包括ht-1,xt,輸出ht,狀態為ct-1,ct。

「模型解讀」淺析RNN到LSTM

2.1 遺忘門與遺忘階段

遺忘門決定了要從上一個狀態中捨棄什麼信息,它輸入上一狀態的輸出ht-1、當前狀態輸入信息xt到一個Sigmoid函數中,產生一個介於0到1之間的數值,與上一個時刻的狀態ct-1相乘之後來確定捨棄(保留)多少信息。0 表示“完全捨棄”,1 表示“完全保留”,這個階段完成了對上一個節點cell state進行選擇性忘記,遺忘門和它的輸出公式如下:

「模型解讀」淺析RNN到LSTM

2.2 輸入門與選擇記憶階段

選擇記憶階段,也就是對輸入有選擇性地進行“記憶”,重要的記錄下來,不重要的少記一些,它決定了要往當前狀態中保存什麼新的信息。它輸入上一狀態的輸出ht-1、當前輸入信息xt到一個Sigmoid函數中,產生一個介於0到1之間的數值it來確定需要保留多少的新信息。

“候選新信息”則通過輸入上一狀態的輸出、當前狀態輸入信息和一個tanh激活函數生成。有了遺忘門和輸入門之後,就得到了完整的下一時刻的狀態Ct,它將用於產生下一狀態的隱藏層ht,也就是當前單元的輸出。

「模型解讀」淺析RNN到LSTM

「模型解讀」淺析RNN到LSTM

「模型解讀」淺析RNN到LSTM

2.3 輸出門與輸出階段

輸出門決定了要從cell state中輸出什麼信息。與之前類似,會先有一個Sigmoid函數產生一個介於0到1之間的數值Ot來確定我們需要輸出多少cell state中的信息。cell state的信息在與Ot相乘時首先會經過一個tanh層進行“激活”,得到的就是這個LSTM block的輸出信息ht。

「模型解讀」淺析RNN到LSTM

以上就是LSTM的基本原理,它通過門控狀態來對信息進行選擇性的記憶,滿足了需要長時間記憶信息和遺忘信息的需求。

當然,隨之而來的就是大量的參數,因此後續就有了GRU。另外,RNN和LSTM不止有單向的,還有雙向的,這些就留給讀者自己去學習了。

總結

時序模型在語音,視頻以及自然語言處理等領域有不可替代的作用,雖然相比普通的CNN,模型的複雜度和訓練難度都增加了不少,但是在進階之路上也是需要好好掌握的。

更多模型解讀,請移步有三AI知識星球

「模型解讀」淺析RNN到LSTM

"

相關推薦

推薦中...