LSTM原理介紹及Keras調用接口


一、LSTM原理介紹

        RNN雖然理論上也能循環處理長序列,但是由於其結構簡單,單元里面只是一個基於tanh激活函數的前饋網絡在循環,對於長序列中的哪些信息需要記憶、哪些序列需要忘記,RNN是無法處理的。序列越長,較早的信息就應該忘記,由新的信息來代替,因為上下文語境意境發生了變化,既然RNN無法處理該忘記的信息,那么RNN就不能應用倒長序列中。

  而LSTM之所以能夠處理長的序列,是因為它通過刻意的設計來處理長期依賴問題,記住該記住的信息、忘記該忘記的信息是 LSTM 的默認行為,而非需要付出很大代價才能獲得的能力。LSTM主要通過三個門來進行控制:

1)遺忘門

        遺忘門就是隨着語境的變化,忘記掉前面的需要忘記的信,遺忘門的輸出是一個sigmoid函數,取值范圍為0~1之間,與上一時刻的細胞狀態進行按位相乘,0代表該位的信息徹底忘掉,1代表該位的信息完全保留:

2) 輸入門

      遺忘門說的是上一個細胞狀態的哪些信息需要忘記,而輸入門要看的是新的細胞狀態的信息哪些需要補充盡量,輸入門也是sigmoid函數,取值范圍為0~1之間,是與當前的細胞狀態按位相乘:

  接着新舊狀態就可以合並一起了,形成最終新的細胞狀態:

  

3)輸出門

       最終的細胞狀態加上tanh函數就是輸出,然后輸出門同上是一個sigmoid的0~1取值,作用於輸出,選擇哪些信息可以輸出:

 

 參考連接https://www.jianshu.com/p/9dc9f41f0b29

 

二、LSTM函數介紹(Keras)

keras.layers.LSTM(units, activation='tanh', recurrent_activation='hard_sigmoid', use_bias=True, kernel_initializer='glorot_uniform', recurrent_initializer='orthogonal', bias_initializer='zeros', unit_forget_bias=True, kernel_regularizer=None, recurrent_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, recurrent_constraint=None, bias_constraint=None, dropout=0.0, recurrent_dropout=0.0, implementation=1, return_sequences=False, return_state=False, go_backwards=False, stateful=False, unroll=False)

參數

  • units: 正整數,也叫隱藏層,表示的是每個lstm單元里面前饋神經網絡的輸出維度,每一個門的計算都有一個前饋網絡層
  • activation: 要使用的激活函數 ,如果傳入 None,則不使用激活函數 (即 線性激活:a(x) = x)。
  • recurrent_activation: 用於循環時間步的激活函數 。默認分段線性近似 sigmoid (hard_sigmoid)。 如果傳入 None,則不使用激活函數 (即 線性激活:a(x) = x)。
  • use_bias: 布爾值,該層是否使用偏置向量。
  • kernel_initializerkernel 權值矩陣的初始化器, 用於輸入的線性轉換。
  • recurrent_initializerrecurrent_kernel 權值矩陣 的初始化器,用於循環層狀態的線性轉換 。
  • bias_initializer:偏置向量的初始化器 .
  • unit_forget_bias: 布爾值。 如果為 True,初始化時,將忘記門的偏置加 1。 將其設置為 True 同時還會強制 bias_initializer="zeros"。 這個建議來自 。
  • kernel_regularizer: 運用到 kernel 權值矩陣的正則化函數。
  • recurrent_regularizer: 運用到 recurrent_kernel 權值矩陣的正則化函數 。
  • bias_regularizer: 運用到偏置向量的正則化函數 。
  • activity_regularizer: 運用到層輸出(它的激活值)的正則化函數。
  • kernel_constraint: 運用到 kernel 權值矩陣的約束函數。
  • recurrent_constraint: 運用到 recurrent_kernel 權值矩陣的約束函數。
  • bias_constraint: 運用到偏置向量的約束函數。
  • dropout: 在 0 和 1 之間的浮點數。 單元的丟棄比例,用於輸入的線性轉換。
  • recurrent_dropout: 在 0 和 1 之間的浮點數。 單元的丟棄比例,用於循環層狀態的線性轉換。
  • implementation: 實現模式,1 或 2。 模式 1 將把它的操作結構化為更多的小的點積和加法操作, 而模式 2 將把它們分批到更少,更大的操作中。 這些模式在不同的硬件和不同的應用中具有不同的性能配置文件。
  • return_sequences: 布爾值。是返回輸出序列中的最后一個輸出,還是全部序列,True的話返回全部序列,False返回最后一個輸出,默認為False
  • return_state: 布爾值。除了輸出之外是否返回最后一個狀態。
  • go_backwards: 布爾值 (默認 False)。 如果為 True,則向后處理輸入序列並返回相反的序列。
  • stateful: 布爾值 (默認 False)。 如果為 True,則本批次中索引 i 處的每個樣品的最后狀態,將用作下一批次中索引 i 樣品的初始狀態
  • unroll: 布爾值 (默認 False)。 如果為 True,則網絡將展開,否則將使用符號循環。 展開可以加速 RNN,但它往往會占用更多的內存。 展開只適用於短序列。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM