1. 程式人生 > >簡單理解LSTM神經網路

簡單理解LSTM神經網路

遞迴神經網路
在傳統神經網路中,模型不會關注上一時刻的處理會有什麼資訊可以用於下一時刻,每一次都只會關注當前時刻的處理。舉個例子來說,我們想對一部影片中每一刻出現的事件進行分類,如果我們知道電影前面的事件資訊,那麼對當前時刻事件的分類就會非常容易。實際上,傳統神經網路沒有記憶功能,所以它對每一刻出現的事件進行分類時不會用到影片已經出現的資訊,那麼有什麼方法可以讓神經網路能夠記住這些資訊呢?答案就是Recurrent Neural Networks(RNNs)遞迴神經網路。

遞迴神經網路的結果與傳統神經網路有一些不同,它帶有一個指向自身的環,用來表示它可以傳遞當前時刻處理的資訊給下一時刻使用,結構如下:


這裡寫圖片描述

其中,Xt為輸入,A為模型處理部分,ht為輸出。

為了更容易地說明遞迴神經網路,我們把上圖展開,得到:


這裡寫圖片描述

這樣的一條鏈狀神經網路代表了一個遞迴神經網路,可以認為它是對相同神經網路的多重複制,每一時刻的神經網路會傳遞資訊給下一時刻。如何理解它呢?假設有這樣一個語言模型,我們要根據句子中已出現的詞預測當前詞是什麼,遞迴神經網路的工作原理如下:

這裡寫圖片描述

其中,W為各類權重,x表示輸入,y表示輸出,h表示隱層處理狀態。

遞迴神經網路因為具有一定的記憶功能,可以被用來解決很多問題,例如:語音識別、語言模型、機器翻譯等。但是它並不能很好地處理長時依賴問題。

長時依賴問題


長時依賴是這樣的一個問題,當預測點與依賴的相關資訊距離比較遠的時候,就難以學到該相關資訊。例如在句子”我出生在法國,……,我會說法語“中,若要預測末尾”法語“,我們需要用到上下文”法國“。理論上,遞迴神經網路是可以處理這樣的問題的,但是實際上,常規的遞迴神經網路並不能很好地解決長時依賴,好的是LSTMs可以很好地解決這個問題。

LSTM 神經網路
Long Short Term Mermory network(LSTM)是一種特殊的RNNs,可以很好地解決長時依賴問題。那麼它與常規神經網路有什麼不同?
首先我們來看RNNs具體一點的結構:


這裡寫圖片描述

所有的遞迴神經網路都是由重複神經網路模組構成的一條鏈,可以看到它的處理層非常簡單,通常是一個單tanh層,通過當前輸入及上一時刻的輸出來得到當前輸出。與神經網路相比,經過簡單地改造,它已經可以利用上一時刻學習到的資訊進行當前時刻的學習了。

LSTM的結構與上面相似,不同的是它的重複模組會比較複雜一點,它有四層結構:


這裡寫圖片描述

其中,處理層出現的符號及表示意思如下:

這裡寫圖片描述

LSTMs的核心思想
理解LSTMs的關鍵就是下面的矩形方框,被稱為memory block(記憶塊),主要包含了三個門(forget gate、input gate、output gate)與一個記憶單元(cell)。方框內上方的那條水平線,被稱為cell state(單元狀態),它就像一個傳送帶,可以控制資訊傳遞給下一時刻。


這裡寫圖片描述

這個矩形方框還可以表示為:

這裡寫圖片描述

這兩個圖可以對應起來看,下圖中心的ct即cell,從下方輸入(ht1,xt)到輸出ht的一條線即為cell state,ftitot分別為遺忘門、輸入門、輸出門,用sigmoid層表示。上圖中的兩個tanh層則分別對應cell的輸入與輸出。

LSTM可以通過門控單元可以對cell新增和刪除資訊。通過門可以有選擇地決定資訊是否通過,它有一個sigmoid神經網路層和一個成對乘法操作組成,如下:


這裡寫圖片描述

該層的輸出是一個介於0到1的數,表示允許資訊通過的多少,0 表示完全不允許通過,1表示允許完全通過。

逐步解析LSTM
LSTM第一步是用來決定什麼資訊可以通過cell state。這個決定由“forget gate”層通過sigmoid來控制,它會根據上一時刻的輸出ht1和當前輸入xt來產生一個0到1 的ft值,來決定是否讓上一時刻學到的資訊Ct1通過或部分通過。如下:


這裡寫圖片描述

舉個例子來說就是,我們在之前的句子中學到了很多東西,一些東西對當前來講是沒用的,可以對它進行選擇性地過濾。

第二步是產生我們需要更新的新資訊。這一步包含兩部分,第一個是一個“input gate”層通過sigmoid來決定哪些值用來更新,第二個是一個tanh層用來生成新的候選值C~t,它作為當前層產生的候選值可能會新增到cell state中。我們會把這兩部分產生的值結合來進行更新。


這裡寫圖片描述

現在我們對老的cell state進行更新,首先,我們將老的cell state乘以ft來忘掉我們不需要的資訊,然後再與itC~t相加,得到了候選值。

一二步結合起來就是丟掉不需要的資訊,新增新資訊的過程:


這裡寫圖片描述

舉個例子就是,在前面的句子中我們儲存的是張三的資訊,現在有了新的李四資訊,我們需要把張三的資訊丟棄掉,然後把李四的資訊儲存下來。

最後一步是決定模型的輸出,首先是通過sigmoid層來得到一個初始輸出,然後使用tanh將
Ct值縮放到-1到1間,再與sigmoid得到的輸出逐對相乘,從而得到模型的輸出。

這裡寫圖片描述

這顯然可以理解,首先sigmoid函式的輸出是不考慮先前時刻學到的資訊的輸出,tanh函式是對先前學到資訊的壓縮處理,起到穩定數值的作用,兩者的結合學習就是遞迴神經網路的學習思想。至於模型是如何學習的,那就是後向傳播誤差學習權重的一個過程了。

上面是對LSTM一個典型結構的理解,當然,它也會有一些結構上的變形,但思想基本不變,這裡也就不多講了。

相關推薦

簡單理解LSTM神經網路

遞迴神經網路 在傳統神經網路中,模型不會關注上一時刻的處理會有什麼資訊可以用於下一時刻,每一次都只會關注當前時刻的處理。舉個例子來說,我們想對一部影片中每一刻出現的事件進行分類,如果我們知道電影前面的事件資訊,那麼對當前時刻事件的分類就會非常容易。實際上,傳統

深入理解LSTM神經網路

LSTM核心思想 LSTM最早由 Hochreiter & Schmidhuber 在1997年提出,設計初衷是希望能夠解決神經網路中的長期依賴問題,讓記住長期資訊成為神經網路的預設行為,而不是需要很大力氣才能學會。 LSTM記憶單元

LSTM 神經網路輸入輸出層

今天終於弄明白,TensorFlow和Keras中LSTM神經網路的輸入輸出層到底應該怎麼設定和連線了。寫個備忘。 https://machinelearningmastery.com/how-to-develop-lstm-models-for-time-series-forecasting/ Stac

Tensorflow: MNIST資料集實現DNN、CNN、LSTM神經網路

最近學了一下tensorflow的基本用法,這裡做一下總結 全連線深度神經網路(FC-DNN) 全連線深度神經網路,每一層的神經元直接都是全連線,並且不共享權值。在普通的分類的問題中表現的不錯,但是對於圖片處理等具有網格形式的資料,最好採用CNN(卷積神經網路),對於序列化資料如NL

LSTM神經網路之前向反向傳播演算法

上篇文章我們已經學習了迴圈神經網路的原理,並指出RNN存在嚴重的梯度爆炸和梯度消失問題,因此很難處理長序列的資料。本篇文章,我們將學習長短期記憶網路(LSTM,Long Short Term Memory),看LSTM解決RNN所帶來的梯度消失和梯度爆炸問題。 1.從RNN到LSTM

Tensorflow(三)訓練一個簡單卷積神經網路

這是吳恩達老師第四課第一週的程式設計練習,題目是分析圖片中手勢得到手所表示的數字。 特別要注意的是,如果你使用的是新版本的tensorflow,很有可能得到的結果和Coursera上的有所不同! 1. 先簡單介紹一個CNN(直接看程式碼的請往下翻) CNN全程是

使用tensorflow:LSTM神經網路預測股票(三)

原始資料處理 有朋友在qq群裡分享了原始資料處理的想法,例如調整origin_data_row引數、新增一些大盤的資料作為新的特徵等。所以這一篇我將原始資料以及原始資料的處理方法寫下來,為方便大家驗證、探

使用tensorflow:LSTM神經網路預測股票(一)

基礎理論知識 關於深度學習和LSTM神經網路在網上有很多內容,這裡不再贅述,只列舉幾個優質的資源: 1. 深度學習入門:https://www.deeplearning.ai 百度前首席科學家吳恩達創立的網站,旨在傳播深度學習的基礎知識。他的視

從控制中的反饋角度理解迴圈神經網路

反饋是控制理論中最經典的思想,PID方法即基於此,下面是PID的結構圖。 下面是PID公式: e =

一個簡單的BP神經網路matlab程式(附函式詳解)

說明:20180604更新2、本人對其中涉及到的函式進行了詳細說明。3、此程式中部分函式的使用方式是高版本Matlab中不推薦的文中給出了當前高版本Matlab中的使用方式,並給出了相關部落格地址,具體如下:4、使用過程中,可能出現的問題5、所需的IRIS資料集具體程式如下:

LSTM神經網路的詳細推導及C++實現

LSTM隱層神經元結構: LSTM隱層神經元詳細結構: //讓程式自己學會是否需要進位,從而學會加法 #include "iostream" #include "math.h" #include "stdlib.h" #in

deeplearning系列(五)實現一個簡單的深度神經網路

1. 深度學習概覽 在淺層神經網路的介紹中,實現了包含一個隱藏層的淺層神經網路,對於這樣的淺層網路,在網路訓練過程中可以通過反向傳播演算法得到較優的網路引數值。然而,因為只有一個隱藏層,限制了模型的表達能力。 在本節中,開始介紹包含多個隱藏層的深度神經網路,

keras 實現簡單卷積神經網路 和 視覺化

from keras.preprocessing.image import ImageDataGenerator from keras.models import Sequential from keras.layers import Conv2D, MaxPooli

pytorch下使用LSTM神經網路寫詩

在pytorch下,以數萬首唐詩為素材,訓練雙層LSTM神經網路,使其能夠以唐詩的方式寫詩。程式碼結構分為四部分,分別為1.model.py,定義了雙層LSTM模型2.data.py,定義了從網上得到的唐詩資料的處理方法3.utlis.py 定義了損失視覺化的函式4.main

LSTM神經網路輸入輸出究竟是怎樣的?

轉自:https://blog.csdn.net/T7SFOKzorD1JAYMSFk4/article/details/78960039 本題節選自《BAT機器學習面試1000題》,1000題系列作為國內首個AI題庫,囊括絕大部分機器學習和深度學習的筆試面試題

PyTorch實現簡單的圖神經網路

基於PyTorch框架實現圖卷積神經網路 專案原始碼參考本人Github. 依賴庫 DGL 0.1.3 PyTorch 0.4.1 networkX 2.2 利用DGL構建圖 # -*- coding: utf-8 -*- """ @Dat

機器學習之簡單三層神經網路實現

import numpy as np #本專案實現簡單神經網路模型 #非線性函式 #前向傳播:直接返回sigmoid啟用函式 #反向傳播:對sigmoid函式求倒數,即x*(1-x) def nonlin(x,deriv=False): if (der

python實現LSTM神經網路模型

''' 用tensorflow實現遞迴迴圈網路(LSTM) ''' from __future__ import print_function import tensorflow as tf from tensorflow.contrib import r

簡單卷積神經網路的tensorboard視覺化

tensorboard是tensorflow官方提供的視覺化工具。可以將模型訓練中的資料彙總、顯示出來。本文是基於tensorflow1.2版本的。這個版本的tensorboard的介面如圖: image.png tensorboard支援8種視覺化,也就是上圖中的8個選項卡,它們分別是

一名工程師對於深度學習的理解神經網路基礎ANN

原文連結 序 讀書期間對於深度學習也有涉及,不過只是皮毛,在這個資料和演算法的時代,也需要更加貼近演算法。於是從一名工程師角度出發,希望通過幾篇文章,將深度學習基礎記錄下來,同時也是對於自己學習的總結和積累。總體思路是ANN-CNN-DNN,中間想起來有什麼忘記的,