㈠ 神經網路的訓練,究竟在訓練什麼
前面我們已經了解到神經網路進行預測的過程,但是仍然留下許多疑問,比如權重值如何獲得,如何訓練神經網路等,這些問題我們將在本文展開。
權重值也就是前文所提到的小蜘蛛的道具,沒有看過的朋友可以先看看我的上一個博客。
權重值該如何獲得呢?
我們以最簡單的三個神經元的神經網路舉例子:
最左邊的神經元是起點,最右邊的是終點,只有中間的神經元有權重值。
我們先來 離散 的獲得一部分點:
我們可以隱約地看到這些點大約分布在一條直線附近, 我們把這條直線畫出來
那我們如何通過這幾個點來獲得這條紅色的線呢?
這十個已知的點分別是什麼?
第一列表示x軸的坐標,第二列表示y軸的坐標
其實思路就是用最小二乘法,先假設隨便畫一條線
我畫了一條 y=0.1x+0.1 的線如圖所示
顯然我們畫的線差距很大,此時使用最小二乘法,就是每個點到直線的距離加起來,再用梯度下降法來優化!
好的,如果我這么說,肯定和每說一樣,那麼我 一步一步 來
第一個點的坐標是(1, 0.16375502570787515),我們把x=1帶入y=0.1x+0.1這個函數,得到y=0.2
顯然我們正確的y應該是0.163,那麼正確的y,和我們在y=0.1x+0.1得到的y值差距是多大呢?差距是:(0.163-0.2)^2
我們要想辦法減小這個差距
差距是怎麼得到的? 預測值減去真實值再平方 ,用數學語言就是(0.1*1+0.1-0.2)^2 ==> (wx+b-2)^2
就是說我們要對函數 (y - wx+b)^2 獲得的值最小,也就是求這個函數的 最小值 ,高中數學就講到求函數最小值的方法就是 求導 ,這是二元函數,就是高考最喜歡做的題目!!!求導之後畫出導數函數的圖像,然後與0相交的點就是極小值點!大家應該很熟悉這個步驟。
不過
這個函數有w和b兩個未知數,我們的思路是正確的,只是不能通過這種方式獲得最小值,所以這里我們求的是對w和對b的偏導數,( 這里需要微積分學歷 )對w的偏導數就是 2w(wx+b-y) 。對b的偏導數就是 2(wx+b-y) 。
此時我們把第一個點的數據代入 x=1, y=0.163, w=0.1, b=0.1
對w的偏導數等於 0.0326
對b的偏導數等於 0.326
此時,我們設定一個步長,也叫學習率,假設等於0.2吧,
那麼,
我們已經更新了w和b的值,只要重復這個步驟足夠多的次數,那麼就可以得到很接近紅色的線。
其實,這就是神經網路的訓練過程。
先把我們已經有的值傳入網路,網路一開始的權重值是隨機的,傳入網路得到一個預測值,這個預測值會和真實值有一定的差距,那麼我們優化這個差距,讓這個差距變小,其實這就是一個反向傳播的過程,我們用數學計算來更新了w和b的值,那麼下一次傳入網路得到的預測值與真實值之間的距離就會減小,周而復始,這個距離不斷減小,我們就可以得到一個預測能力比較好的w和b,也就是擬合能力比較強的網路,就可以對未知的數據得到較為准確的結果。
㈡ 用最簡單的神經網路做數據分類,展示神經網路訓練過程
本文用簡單的神經網路做數據分類,展示神經網路訓練過程,伏薯方便理解缺鋒者
神經網路模型:Y = w1 x1 + w2 x2 + b
第一步 :生成訓練數據與標簽
第二步 :合並數據並將數據打亂,然後將數據轉換為Paddle框架基知所需要的數據類型
第三步 ,基於Paddle,構建神經網路、定義損失函數和優化器:Y = w1 x1 + w2 x2 + b
第四步 ,構建訓練過程
最後一步 ,繪制訓練結果
㈢ 深度神經網路是如何訓練的
Coursera的Ng機器學習,UFLDL都看過。沒記錯的話Ng的機器學習里是直接給出公式了,雖然你可能知道如何求解,但是即使不知道完成作業也不是問題,只要照著公式寫就行。反正我當時看的時候心裡並沒能比較清楚的明白。我覺得想了解深度學習UFLDL教程 - Ufldl是不錯的。有習題,做完的話確實會對深度學習有更加深刻的理解,但是總還不是很清晰。後來看了Li FeiFei的Stanford University CS231n: Convolutional Neural Networks for Visual Recognition,我的感覺是對CNN的理解有了很大的提升。沉下心來推推公式,多思考,明白了反向傳播本質上是鏈式法則(雖然之前也知道,但是當時還是理解的迷迷糊糊的)。所有的梯度其實都是對最終的loss進行求導得到的,也就是標量對矩陣or向量的求導。當然同時也學到了許多其他的關於cnn的。並且建議你不僅要完成練習,最好能自己也寫一個cnn,這個過程可能會讓你學習到許多更加細節和可能忽略的東西。這樣的網路可以使用中間層構建出多層的抽象,正如我們在布爾線路中做的那樣。例如,如果我們在進行視覺模式識別,那麼在第一層的神經元可能學會識別邊,在第二層的神經元可以在邊的基礎上學會識別出更加復雜的形狀,例如三角形或者矩形。第三層將能夠識別更加復雜的形狀。依此類推。這些多層的抽象看起來能夠賦予深度網路一種學習解決復雜模式識別問題的能力。然後,正如線路的示例中看到的那樣,存在著理論上的研究結果告訴我們深度網路在本質上比淺層網路更加強大。