Python與人工神經網路(8) 改進神經網路

2021-07-29 17:42:58 字數 1145 閱讀 3408

話說,有沒有人想過這些引數是怎麼來的。其實我猜作者寫到這部分的時候也應該很蛋疼,因為他說是試出來的,目前這個領域的研究並沒有特別好的成果,多半靠經驗和試驗,作者就此傳授了一些經驗給我們:

學習速率引數η:

所以學習速率,就是在隨機梯度下降演算法中下降的快慢,我們來看乙個示例圖:

假設這個曲面就是成本函式,我們就在這個曲面內需要隨機梯度下降,如果步子很小,那會非常穩妥,c會一直下降,直到最低點附近,但是代價就是訓練速度很慢。如果步子太大,很容易一步就從這邊越過了谷底,跨到了對面。所以在試的過程中,可以採取每次減少多少倍的方式,比如第一次是5,第二次是0.5,監測成本函式變化,如果訓練的前幾個週期穩步減小,那就差不多了,然後進行微調。

不過這麼看,應該是前面的週期用大一點的η值,後面的週期用小一點的η值比較靠譜,在以後的章節我們會提到。

訓練週期:

訓練週期我之前在說過度擬合的時候有提到過,就是得監測識別率,如果開始停滯不前,就可以停了。不過這裡一般不會一旦識別率不上公升了就停止訓練,會先觀察個多少週期,比如10或者15,最後的訓練週期原始加上這個觀察期的。

正則化引數:

首先採用沒有正則化的神經網路確定出η值,然後再來試λ值。針對這個問題,作者給的建議是從1開始,然後選取十倍的速率,增大或者減小,到差不多之後微調。

隨機抽取計算梯度的個數:

這裡可能需要補課,因為之前我沒提到,就是為什麼要隨機抽取n個去算梯度,而不是乙個個,一步乙個腳印的算呢?因為numpy矩陣求和賊快,而用迴圈算n次賊慢呀。所以這個引數跟η一樣,選小了,訓練就會比較慢,而選大了,可能訓練乙個週期才更新個三五次w值和b值,反饋不夠明顯。所以這方面的權衡,還是得自己去比較。作者在書裡面說,他選個10,就是瞎選的( ╯□╰ )。

最後的最後,在確定這些引數的時候,一定不要用全部的資料試,用少量的就可以了,提高試驗的速度。第二是一硬要用驗證資料集,不要使用測試資料集,這個原因在講過度擬合的那期說過,就不贅述了。

神經網路基礎與人工神經網路

神經網路方面的研究很早就已出現,今天 神經網路 已是乙個相當大的 多學科交叉的學科領域。神經網路中最基本的成分是神經元模型。上圖中每個圓圈都是乙個神經元,每條線表示神經元之間的連線。我們可以看到,上面的神經元被分成了多層,層與層之間的神經元有連線,而層內之間的神經元沒有連線。為了理解神經網路,我們應...

人工神經網路 多層神經網路

模型原型 sklearn.neural network.mlpclassifier hidden layer sizes 100,activation relu algorithm adam alpha 0.0001,batch size auto learning rate constant le...

人工神經網路

人工神經網路 artificial neural network,ann 通過對大量歷史資料的計算來建立分類和 模型。神經網路的學習就是通過迭代演算法對權值逐步修改優化的過程。學習的目標是通過修改權值是訓練樣本集中所有樣本都能被正確分類。人工神經元用於模擬生物神經元,人工神經元可以看作乙個多輸入 單...