教你用ANNs,RNNs和LATMs構建“私人助理”

全文共3390字,預計學習時長7分鐘

clipboard.png

你是否曾幻想過擁有一個私人助理,可以回答你的任何問題或者能夠與你交談?幸好有機器學習與深度神經網絡,使得這一夢想不再遙遠。想想蘋果的Siri和亞馬遜的Alexa的神奇功能吧!

但也不要太激動,因爲在接下來文章中要創建的並不是一個無所不能的人工智能,而僅僅是一個簡單的聊天機器。它被輸入了一些問題和相應的答案,人們向它提問時,它可以回答是或不是。

它與Siri或Alexa的功能相差甚遠,但它充分說明了即使使用非常簡單的深度神經網絡結構,也能獲得驚人的結果。本文將學習人工神經網絡、深度學習、遞歸神經網絡和長短時記憶網絡的知識。

在學習關於神經網絡的有趣知識前,可以先仔細觀察下面的圖片。裏面有兩幅圖:左邊是一輛在馬路上行駛的校車,右邊是一個普通的客廳。圖畫下面分別標有註解。

clipboard.png

兩幅不同的圖片附以人工標註的文字說明。
clipboard.png

人工神經網絡

爲了構建用於創建聊天機器人的神經網絡模型,將要使用一個非常流行的用於神經網絡的Python庫—Keras。但是,在進一步研究之前,首先必須瞭解什麼是人工神經網絡。

人工神經網絡是一種機器學習模型,它試圖模仿人腦的功能。而人腦的結構是由大量互相連接的神經元組成的,因而得名“人工神經網絡”。

感知器

最簡單的人工神經網絡是由單個神經元組成的,它的名字聽起來跟《星際迷航》裏的感知器很相似。1957年,弗蘭克·羅森布拉特發明了感知器,它由一個神經元組成,對輸入信號進行加權(生物神經元中的輸入信號口成爲樹突),應用於數學函數公式,最後輸出結果(信號輸出口稱之爲軸突)。此處不對可應用功能作詳細討論。

clipboard.png

上圖爲一個神經元,左邊是信號輸入口,將每個權重相乘。神經元將一個函數應用於輸入值,最終輸出結果。

這些單一的神經元可以堆疊在一起,形成任意大小的層,有順序地放在一起,從而使得神經網絡達到更深層。

當神經網絡以這種方式構建時,不屬於輸入層或者輸出層的神經元被認爲是隱藏層的一部分。用它們的名字來描述一下人工神經網絡的主要特徵之一吧,它們基本上都是黑盒模型;儘管理解發生的事情背後的數學原理,並且對黑盒子裏發生的事情有一種直覺,但若取一個隱藏層的輸出並試圖理解它,人們很可能會絞盡腦汁卻得不到任何結果。

儘管如此,隱藏層仍然能夠生成許多我們意想不到的結果。因此,沒有人抱怨其缺乏可解釋性。

![clipboard.png](/img/bVbvQkY)

上圖是一個更大的神經網絡圖,由許多單一的神經元和層組成:一個輸入層、兩個隱藏層和一個輸出層。

關於神經網絡的結構以及如何訓練它們的討論已經有二十多年的歷史了。那麼,是什麼導致了現在對人工神經網絡和深度學習大驚小怪和大肆宣傳呢?這個問題的答案就在下面,但我們首先需要理解什麼是深度學習。

什麼是深度學習?

深度學習,顧名思義,就是使用很多層來逐步從提供給神經網絡的數據中提取更高層次的特徵。就是這麼簡單,使用多個隱藏層來提高神經模型的性能。

瞭解這一點之後,上面問題的答案就很簡單了:那就是規模。在過去的20年間,可用數據量以及數據存儲和處理的機器(也就是計算機)的性能呈指數級增長,從而使得人們能夠創建更大、更深層次的神經網絡來訓練模型。

世界最頂尖的深度學習專家之一吳恩達在這個視頻中對此作了詳細的闡述。他展示了一張類似於下圖的圖像,並用它解釋了擁有更多數據訓練模型的好處,以及大型神經網絡相對於其他機器學習模型的優勢。

clipboard.png

上圖展示了隨着訓練數據的增加各個算法性能的逐步優化。

對於傳統機器學習算法來說(線性或邏輯迴歸、SMVs和隨機森林等),隨着訓練模型數據的增加,性能會持續增加至某一點,之後維持在該水平。達到該點時,模型似乎不知道該如何處理額外數據了,因而無法通過增加數據量來提高性能。

然而,對於神經網絡來說就不存在這種情況了。如果數據質量較高,那麼,性能總會隨着數據量的增加而增強,而且其增長速度取決於網絡規模大小。因此,若想獲得最優性能,則需要處於綠線上(也就是代表神經網絡的線)x軸方向(即更大數據量)的某個位置。

除此之外,還有一些算法上的改進也推動了深度學習和人工神經網絡崛起,但最主要原因還是規模:計算規模和數據規模。

該領域的另一位重要人物傑夫•迪恩(谷歌深度學習的發起者之一)對深度學習也曾提出過他的見解:

當你聽到“深度學習”這個術語時,將它想象成一個巨大的深度神經網絡。“深”通常指的是圖層的數量,是媒體常用的術語。我通常將它們看做是深度神經網絡。

在談到深度學習時,他強調了神經網絡的可擴展性,這表明隨着數據的增多和模型的增大,性能會逐步優化,而正如上文所述這反過來又需要更多的計算訓練。

好的,明白了。可是,神經網絡是如何學習的呢?

或許你已經猜到了答案,那就是:通過數據學習。

還記得在單個感知器中乘以輸入的權重嗎?這些權重也包含在連接兩個不同神經元的任何邊中。這意味着在一個更大的神經網絡的圖像中,它們存在於每一條黑邊上,獲取一個神經元的輸出,乘以該權重,然後將其傳送給另一個與該邊相連神經元作爲新的輸入。

![clipboard.png](/img/bVbvQk5)

這是一幅神經網絡圖,包含兩個隱藏層和位於每層之間的權重。

訓練神經網絡時(訓練神經網絡是一種機器語言表達,意爲‘使其學習’),輸入一組已知數據(機器語言稱之爲標籤數據),讓它預測已知的關於這些數據的特徵(比如一個圖像代表了一隻狗還是一隻貓),然後將預測結果與實際結果進行比較。

在這一過程中,神經網絡會出錯,但它會調整神經元之間所連接的權重以減少出錯的次數。正因爲如此,如上文所述,如果不斷增加輸入量,性能在大多數情況下都會隨之提升。

clipboard.png

從序列數據——循環神經網絡中學習

既然已經知道了人工神經網絡和深度學習,並且對神經網絡如何學習有了大致的瞭解,那讓接下來看看用來構建聊天機器人的網絡類型:循環神經網絡(簡稱RNNs)。

遞歸神經網絡是一種特殊的神經網絡,它能有效地處理序列數據。這類數據包括時間序列(特定時段內某些參數值的列表),文本文檔(可以看作是一組單詞序列),以及錄音文檔(可以看作音頻序列)。

遞歸神經網絡工作的方式是通過獲取每個神經元的輸出信號,再將其作爲新的輸入反饋給它。這樣一來,它不僅能夠在每個時間段接收新信息,而且還可以將這些新信息添加到以前輸出的加權版本中。這使得神經元對之前的輸入有了“記憶”,因爲它們通過反饋給神經元的輸出來進行量化。

clipboard.png

這是一個遞歸神經元,其輸出數據乘以一個權值後重新輸入。

細胞內是上一階段輸入的函數,成爲記憶細胞。

遞歸神經網絡現存的問題是,隨着時間的推移,越來越多的新數據被輸入,神經網絡在這些新數據和激活函數的轉換以及權重乘法之間不斷被稀釋,於是開始“忘記”以前看到的數據。這意味着它們只有良好的短期記憶,但卻記住不久前發生的事情(即在過去時間段中看到的數據)。

我們需要某種長期記憶,而這正是長短期記憶網絡(LSTMs)所提供的。

clipboard.png

增強記憶-長短期記憶網絡

長短期記憶網絡(LSTMs)是遞歸神經網絡的一種變體,它解決了遞歸神經網絡的長期記憶問題。本文將通過簡要介紹它們如何工作來作爲這篇文章的結尾。

長短期記憶網絡的細胞結構比一般的遞歸神經元更爲複雜,這使其能夠更好地調節如何從不同的輸入源學習或遺忘。

clipboard.png

這是一個長短期記憶網絡的細胞。請不要把注意力放在藍色的圓圈和方框上,可以看到它的結構比普通的遞歸神經網絡細胞要複雜得多,因而本文將不作討論。

長短期記憶網絡神經元通過合併細胞狀態和三個不同的門(輸入門、遺忘門和輸出門)來進行工作。這要感謝顯式門控機制,使得細胞在每個時間段中可以決定如何處理狀態向量:讀取、編寫或刪除。通過輸入門,細胞可以決定是否更新其狀態。通過遺忘門,細胞可以清除其內存。通過輸出門,細胞可以決定輸出信息是否有效。

長短期記憶網絡還緩和了梯度爆炸和消失,但這就是另一個新的問題了。

就是這樣!現在對這些不同類型的神經網絡如何工作有了初步的瞭解,可以將其用於首個深度學習項目了!

神經網絡真的很神奇。哦對了,還記得這張照片嗎?

clipboard.png

爲了證明深度神經網絡很厲害,我們不得不承認對圖片的文字描述來源撒了謊。

在這篇文章的開頭說這些文字描述是人工標註的,然而,事實是這些描述每張圖片上所能看到的內容的短文本實際上是由人工神經網絡輸出的。

很瘋狂吧?請盡情體驗人工智能的神奇之處!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章