日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

[Python人工智能] 七.加速神经网络、激励函数和过拟合

發布時間:2024/6/1 python 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Python人工智能] 七.加速神经网络、激励函数和过拟合 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從本系列文章開始,作者正式開始研究Python深度學習、神經網絡及人工智能相關知識。前六篇文章講解了神經網絡基礎概念、Theano庫的安裝過程及基礎用法、theano實現回歸神經網絡、theano實現分類神經網絡、theano正規化處理,這篇文章講解加速神經網絡訓練的方法,為什么有激勵函數以及過擬合,均是基礎性知識。主要是學習"莫煩大神" 網易云視頻的在線筆記,后面隨著深入會講解具體的項目及應用。基礎性文章和在線筆記,希望對您有所幫助,本系列作者采用一篇基礎一篇代碼的形式講解,也建議大家一步步跟著學習,同時文章中存在錯誤或不足之處,還請海涵~

"莫煩大神" 網易云視頻地址:http://study.163.com/provider/1111519/course.html

同時推薦前面作者另外三個Python系列文章。

從2014年開始,作者主要寫了三個Python系列文章,分別是基礎知識、網絡爬蟲和數據分析。

  • Python基礎知識系列:Pythonj基礎知識學習與提升
  • Python網絡爬蟲系列:Python爬蟲之Selenium+Phantomjs+CasperJS
  • Python數據分析系列:知識圖譜、web數據挖掘及NLP

??

前文參考:
[Python人工智能] 一.神經網絡入門及theano基礎代碼講解
[Python人工智能] 二.theano實現回歸神經網絡分析
[Python人工智能] 三.theano實現分類神經網絡及機器學習基礎
[Python人工智能] 四.神經網絡和深度學習入門知識
[Python人工智能] 五.theano實現神經網絡正規化Regularization處理
[Python人工智能] 六.神經網絡的評價指標、特征標準化和特征選擇

?

PSS:最近參加CSDN2018年博客評選,希望您能投出寶貴的一票。我是59號,Eastmount,楊秀璋。投票地址:https://bss.csdn.net/m/topic/blog_star2018/index


五年來寫了314篇博客,12個專欄,是真的熱愛分享,熱愛CSDN這個平臺,也想幫助更多的人,專欄包括Python、數據挖掘、網絡爬蟲、圖像處理、C#、Android等。現在也當了兩年老師,更是覺得有義務教好每一個學生,讓貴州學子好好寫點代碼,學點技術,"師者,傳到授業解惑也",提前祝大家新年快樂。2019我們攜手共進,為愛而生。

?

一. 為什么需要激勵函數

首先,為什么需要激勵函數(Activation Function)呢?

因為現實并沒有我們想象的美好,激勵函數是為了解決我們日常生活中不能用線性概括的問題而提出,如二分類問題。假設女生越漂亮,喜歡的男生人數越多,這是一個線性方程(Linear)問題,但假設場景發生在校園里,校園里男生人數有限,這就變成了一個非線性問題,并且女生不可能是無線漂亮的。
?


神經網絡中的每個節點接受輸入值,并將輸入值傳遞給下一層,輸入節點會將輸入屬性值直接傳遞給下一層(隱層或輸出層)。在神經網絡中,隱層和輸出層節點的輸入和輸出之間具有函數關系,這個函數稱為激勵函數。

?


首先把整個神經網絡簡化為一個式子:y = W · x
其中,y稱為預測值、W是參數、x稱為輸入值。那么,非線性方程如何描述這個問題呢?我們增加一個AF()函數,如下所示。
?

?

非線性方程:y = AF( W · x )
其中,AF就是所謂的激勵函數。如下所示,常見的激勵函數包括relu(x為-1時值為0,x為1時值為1)、sigmoid、tanh等。這些激勵函數能夠強行將原有線性結構弄彎,使輸出結果具有非線性特征。
Sigmoid函數:是連續、可導、有界,關于原點對稱的增函數,呈S形,具體可用反正切函數arctan或指數函數exp來實現,如f(x)=arctan(x)/(pi/2), f(x)=1/(1+e-x)。
?


我們甚至可以創造自己的激勵函數,但需要保證它們是可以微分的,因為誤差反向傳遞時,只有這些可微分的激勵函數才能把誤差傳遞回去(不太理解)。
?


當使用AF激勵函數,如果神經層只有2-3層時,對于隱藏層使用任意激勵函數都能掰彎直線,而當存在多層神經層時,隨意選擇AF會造成梯度爆炸、梯度消失等問題。
激勵函數選擇:
? 1.少量神經層,多種選擇;
? 2.卷積神經網絡,使用Relu;
? 3.循環神經網絡,使用Relu、Tanh。
?

??

?

?

?

二. 什么是過擬合

實際生活中,機器學習過于自信,甚至自負,在自己的小圈子里非凡,但在大圈子里卻處處碰壁。機器學習中的自負表現在哪些方面呢?
?

??

?

?

?

這條直線是希望機器學習學到的直線。假設藍色直線與所有黃色點的總誤差為10,有時機器過于追求誤差小,它學到的可能是紅色這條虛曲線,它經過了所有的數據點,誤差為1。
?

?

可是,誤差小真的好嗎?當我們拿這個模型預測實際值時,如下圖所示“+”號;這時,藍色誤差幾乎不變,而紅色誤差突然升高,而紅線不能表達除訓練數據以外的數據,這就叫做過擬合。
?


同樣,分類中的過擬合如下圖所示,有黃色兩個“+”號沒有很好的被分隔,這就是過擬合在作怪。

?

?

那么,怎么解決過擬合呢?
方法一:增加數據量
大多數過擬合的原因是數據量太小,如果有成千上萬數據,紅線也會被拉直,沒有這么扭曲,所以增加數據量能在一定程度上解決過擬合問題。

方法二:L1, L2 Regularization
正規化是處理過擬合的常見方法,該方法適合大多數機器學習。
機器學習:y = W · x
其中,W是參數。過擬合中W往往變化太大,為了讓變化不會太大,我們在計算誤差時需要做些手腳。
? ? ?L1:cost = (Wx - real y)^2 + abs(W)
=>L1正規化是預測值與真實值平方,加上W的絕對值

? ? ?L2:cost = (Wx - real y)^2 + (W)^2

=>L2正規化是預測值與真實值平方,加上W的平方
? ? ?L3:加立方,L4:加四次方

由于過度依賴的W會很大,我們在上述L1和L2公式中懲罰了這些大的參數。如果W變化太大,我們讓cost也跟著變大,變成一種懲罰機制,把W自己也考慮進來,從而解決過擬合。

?



方法三:Droput Regularization
該方法是訓練時,隨機忽略一些神經元和連接,神經網絡會變得不完整,用不完整的神經網絡訓練一次,緊接著第二次再隨機訓練,忽略另一部分的神經元和連接,讓每次結果不依賴特定的神經元,Droput從根本上解決過擬合。

?

??

?

?

?

?

?

三. 加速神經網絡

Speed Up neural network training process
如何加速神經網絡訓練呢?

越復雜的神經網絡,越多的數據,我們需要花費在神經網絡上的時間就越多,其原因是計算量太大了,可是往往為了解決復雜的問題、復雜的結構和大數據,又是不可避免的。所以我們需要找一些方法,讓神經網絡變得聰明起來、快起來。

?

??


最簡單方法:SGD(Stochastic Gradient Descent)

?

假設紅色方塊是我們要訓練的數據Data,如果使用普通的訓練方法,需要重復的將整套數據放入神經網絡NN中訓練,這樣消耗的計算資源會很大。我們需要換一種思路,將數據拆分成小批小批的,然后再分批不斷放入NN中計算,這就是SGD的正確打開方式。

?

SGD每次使用批量數據,雖然不能反映整體數據的情況,但在很大程度上加速神經網絡的訓練過程,而且不會丟失太多準確率。

?

??

?

如果還是嫌SGD訓練速度太慢,怎么辦呢?
事實證明,SGD并不是訓練最快的方法,圖中紅線是SGD的訓練過程,時間相對較長,其他途徑可以加速訓練。
?

?

?


方法二:Momentum
大多數其他方法是在更新神經網絡參數時動手腳,如下所示:

?

?

W += - Learning rate * dx

參數W的更新,是將原始W累加上一個負的學習效率(Learning rate)乘以校正值(dx),這種方法可能會讓學習過程曲折無比,看起來就像一個喝醉酒的人回家時搖搖晃晃走了很多彎路,所以我們把這個人從平地上放到斜坡上,只要他往下坡的方向走一點點,由于向下的慣性,他走的彎路也會不自覺的變小 ,稱為Momentum的方法,它的數學形式如下所示。

?

m = b1*m - Learning rate * dx

W += m

?

?

方法三:AdaGrad
該方法是在學習率上動手腳,使得每一個參數的更新都有與眾不同的學習效率,它的作用和Momentum類似,不過不是給喝醉的人安排一個斜坡,而是給喝醉酒的人一雙不好走的鞋子,使得他搖晃走路時,發現腳疼,鞋子變成了走彎路的阻力,逼著他往前直著走,它的數學形式如下。

?

v += dx^2

W += -Learning rate * dx / √v
?

?


方法四:RMSProp
如果把下坡和不好走的鞋子結合起來,是不是就更好呢?我們這就有了RMSProp方法,通過Momentum的慣性原則,加上AdaGrad對錯誤發生了阻力,就合并成如下所示的RMSProp,同時具有兩則優點。

?

?



不過細心的同學可能發現了RMSProp中少了些什么?原來我們是沒有完全合并Momentum,少了Momentum中的“-Learning rate * dx”部分,所以我們會在Adam中補上這種想法。
計算m時有Momentum的下坡屬性,計算v時有AdaGrad的阻力屬性 ,然后再更新參數時,把m和v都考慮進去。實驗證明,大多數使用Adam都能又快又好的達到目標,迅速收斂,所以在加速神經網絡訓練時,一個下坡,一雙破鞋,就能實現。

?





基礎性文章,希望對您有所幫助,推薦大家閱讀莫煩大神的學習視頻,也建議大家一步步跟著學習,同時文章中存在錯誤或不足之處,還請海涵~真是太忙了,有時候擠點時間出來寫文章,才能讓自己放平心態,誰又能寫一輩子博客呢?又有幾個人能做自己喜歡的事情,哎。看到學生也開始寫文章,還是高興的。
(By:Eastmount 2018-06-25 晚上12點
??http://blog.csdn.net/eastmount/?)

?

總結

以上是生活随笔為你收集整理的[Python人工智能] 七.加速神经网络、激励函数和过拟合的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。