最近正在看吳軍博士的一本書《數學之美》,受到了不少啓發,惡補了幾天線性代數和高等數學,趁着本身思路清晰,把本身對人工神經網絡的想法記錄下來,順便推導一下公式。網絡
一場人工智能狂潮正在悄悄的到來,也許要不了多久,各類智能產品將會環繞再咱們的周圍,坐在智能汽車裏,告訴它要去的地方,自動駕駛技術就能夠把你帶到目的地,電視機也有智能芯片,它能懂你的愛好和習慣,自動播放你想要看的節目,諸如此類的場景,正在慢慢的到來。促使這場革命的偏偏是深度學習的發展和計算機硬件水平的提高。函數
深度學習本質上就是多層人工神經網絡,廢話很少說,咱們來看看人工神經網絡。學習
「人工神經網絡」這個名字充滿了科技感,那麼它是用來作什麼的呢?定義出這樣一個網絡是爲了解決什麼問題?其實它就是來解決分類問題的。人天天都在作分類問題,如紅綠燈路口,走仍是不走;今天下雨了,上班是騎車仍是坐公交;晚上是吃火鍋仍是吃麪條……這樣一看,分類問題構成了咱們平常生活的所有。計算機學會作分類問題,就能擁有一些智能了。人工智能
看下面一張圖片,我隨便手寫了幾個數字。圖片
人識別這些數字一眼看過去就知道了,計算機怎麼識別這些數字呢?把每一個數字的圖切塊,轉化爲一個個N維向量,能夠看作是N維空間中的點,這些點就散落在其中。咱們用三維空間來模擬一下:深度學習
咱們在須要在這個立方體上畫出一個特殊的「分界線」就能區分這些數字了,爲了說明這個問題,咱們簡化一下,區分兩個數字0和1,這時候就說到神經網絡了,神經網絡本質上是一個帶權重的有向圖。咱們來怎麼解決這個問題。博客
假設圖片0被向量化成二維向量,用(x1,x2)表示,咱們用AC、AD、BC、BD、CE、CF、DE、DF表示鏈接節點間的權重。數學
加權計算以後:產品
C點的值Yc=x1*AC+x2*BC原理
D點的值Yd=x1*AD+x2*BD
E的值Ye=Yc*CE+Yd*DE
F的值Yf=Yc*CF+Yd*DF
若是Ye和0的偏差比Yf和1的偏差小,那麼圖片就被識別爲了0,識別正確,實際上,不可能權重不可能一次就準確,那麼這時候就須要偏差反向傳播,來調整權重了。
在調整權重以前,咱們仍是看看上面的權重計算都是線性的,在空間中畫的分界線都是線性的,那麼要分類複雜的模型,咱們須要非線性的運算,這時候咱們須要激活函數了。經常使用的激活函數有sigmoid 和tanh
一、sigmoid :
二、tanh
加上了激活函數後,E、F的輸出值分別就變成了:
Ye=f[ f(Yc)*CE+f(Yd)*DE]
Yf=f[ f(Yc)*CF+f(Yd)*DF]
Ye和0、Yf和1須要有計算偏差的方法,咱們定義它損失函數,一般用平方差函數做爲損失函數,平方差函數以下:
公式中a表示Ye或者Yf,y表示0或者1
好了,如今咱們知道計算值Ye、Yf和目標值0、1之間的偏差了,咱們怎麼能最快減少這個偏差呢?這個偏差咱們能夠想象成山腳到山頂的距離,咱們走上山頂須要一個步長,這個步長能夠起個名字,叫學習速率,learning rate。
那麼問題來了,怎麼快速走到山頂,用梯度降低法,走最陡的地方。怎麼找最陡的地方,把山當成一個曲面,求曲率最大的點。
接下來,求出幾個偏導數,就找到了曲率了。
偏差C對CE求偏導數,咱們記爲:
那麼C點和E點的權重應該更新爲:
類推:C對CF、C對DE、C對DF、C對AC、C對AD、C對BC、C對BD求偏導數,就能夠更新全部權重了,這裏會有複合函數,那麼須要用到鏈式法則了。
好了,這就是整個BP神經網絡的構建和訓練過程,有足夠的訓練數據,就能夠訓練一個能夠分類的神經網絡了,語音識別、圖像識別、天然語言處理中的文本分類等等都是這個原理。
快樂源於分享。
此博客乃做者原創, 轉載請註明出處