機器學習(一):梯度下降、神經網絡、BP神經網絡


      這幾天圍繞論文A Neural Probability Language Model 看了一些周邊資料,如神經網絡、梯度下降算法,然后順便又延伸溫習了一下線性代數、概率論以及求導。總的來說,學到不少知識。下面是一些筆記概要。

一、 神經網絡

      神經網絡我之前聽過無數次,但是沒有正兒八經研究過。形象一點來說,神經網絡就是人們模仿生物神經元去搭建的一個系統。人們創建它也是為了能解決一些其他方法難以解決的問題。

      對於單一的神經元而言,當生物刺激強度達到一定程度,其就會被激發,然后做出一系列的反應。模仿這個過程,就有了下面這張圖:

clip_image001[4]

clip_image002[4]

      其中X可以看作是一系列的刺激因素,而W可以看作各個刺激因素所對應的權值。計算各個刺激因素的加權和就可以作為我們總的刺激強度了。注意一下,上圖中的X0和Wk0代表了隨機噪聲。得到中的刺激強度之后我們就可以根據這個強度做出一定的反應,這個過程交由圖中的Activation function函數來處理,處理后就獲得了我們最終的結果。

     一般而言,Activation function函數可以有三種(下圖中的a和b可以看做一種):

clip_image003[4]

       至此,神經網絡的最基本結構——單層神經網絡,已經介紹的差不多了。對於神經網絡而言,我們可以利用這樣的簡單的單層神經網絡去組合搭建一個復雜的神經網絡,以實現不同的功能。它可以是這樣的(接受一下參數表示的不同):

clip_image005[4]

將這個圖中的變量以向量的形式表示可以得到下圖:

clip_image007[4]

除了這種相對簡單的多層神經網絡,網絡還可以是這樣的:

clip_image008[4]

這一部分的資料可以參見:

An introduction to neural networks:IBM做的一個科普資料

Introduction to Neural Networks:這個頁面相對更加的規范

以及hagan教授的書籍:Neural_Network_Design

 

 

二、 梯度下降法

      這個方法呢,說起來很簡單。一個很形象的比喻就是說,你站在山坡上想下山,那么如何才能盡快下山(默認速度是恆定的,你也不會摔死)?

你應該會環顧四周,找到當前最陡峭的方向下山吧?這個方向就可以用梯度來計算,這也就是梯度下降法的來源。是不是覺得很簡單,以為自己掌握了?哈哈,還是太年輕了。

      這一部分就不贅述了,給出我學習時候用到的兩個資料:

NG教授的機器學習課程中的第二課(話說,聽完了,我就會了,之前可是看了一大堆資料還是似懂非懂);

機器學習中的數學這個博客也很不錯,看完課程再來看看這個還是有點好處的。

      對了,梯度下降法還有一個變種:隨機梯度下降法。這個才是很多場合下真正使用的方法。

 

三、 梯度下降法和神經網絡的結合

      好了,上面分別介紹完了梯度下降法以及神經網絡,下面就是它們的結合應用了。

我們需要利用樣本數據去訓練我們的神經網絡模型(其實很大程度上就是修改神經網絡里面的參數,如上面看到的權值等等),那么怎么修改呢?我們當時是應該對照我們的目標去做修改,這往往意味着要去最值化一些量,提到最值,是不是跟梯度下降法搭上勾勾了啊。我們可以利用梯度下降法做多輪迭代一步步逼近我們最終的目標。這也就是它們結合的地方。哦,聽說所謂的深度學習也就基本上是這個思路了。瞬間感覺高大上有沒有??

      注意一下,這部分需要用了很多線性代數以及導數的很多知識,自行腦補。我是參考了NG教授機器學習這門課的講義以及 Neural_Network_Design 這本書中的相關內容。

      一個簡單例子:房子價格

      自行學習NG教授機器學習這門課的第二課,講的很好!

      下面的是一個復雜一點的例子。

      我們把多層神經網絡分為三層,輸入層、輸出層以及中間的隱藏層,對於中間隱藏層我們沒有辦法直接去計算梯度,進而修改參數。於是乎就只能利用求導的鏈式規則,從輸出層開始往回計算梯度,從而得以更新參數。這也就是傳說中的BP神經網絡了,我的學習資料是:hagan教授的書籍:Neural_Network_Design。其中有一章節專門將BP神經網絡,講的很好。推導過程稍微有點長,我看完后不知所以,自己又找時間不看書推到了一遍,挺有意思的,哈哈。

      看完后可以再參考這篇文章:Backpropagation。加深自己的理解。

 

四、 A Neural Probability Language Model

      有了上面的基礎知識,再看這篇文章就容易多了。這篇文章的地位很高,文章主要亮點在於:首先,利用詞向量去表示一個詞從而可以獲知不同詞語之間的相似度;其次,搭建神經網絡去做計算(BP神經網絡加上梯度下降法);其三,並行化去做計算,從而可以處理大規模的數據;最后也是最亮的地方在於該方法的實驗結果非常理想!

      這篇博客也有提到:Deep Learning in NLP (一)詞向量和語言模型

      自己感覺對於這篇文章有些細節問題還是沒有理解,比如網絡的輸入是怎么來的?


免責聲明!

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



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