文章部份內容參考自captainbed.nethtml
[TOC]算法
神經網絡三個基礎問題
經過三個基礎問題引入神經網絡很是基礎且重要的三個函數。markdown
神經網絡如何預測的?
神經網絡經過邏輯迴歸函數進行預測,又成預測算法。網絡
⭐️邏輯迴歸函數
神經網絡的預測過程的公式爲
z=dot(w,x)+b。app
其中
w表示網絡中的一系列權值,
x表示輸入的訓練集,
dot(w,x)表示將
w和
x進行向量相乘。b表示閾值[yù zhí],用來影響預測結果。邏輯迴歸函數中,神經網絡預測的是否準確就由
w和
b決定。機器學習
⚠️這裏的
w實際上應該是轉置矩陣
wT,線性代數要求行*列ide
舉三個小例子來理解一下這個公式⬇️函數
- 假設週末即將到來,你據說在你的城市將會有一個音樂節。咱們要預測你是否會決定去參加。音樂節離地鐵挺遠,並且你女友想讓你陪她宅在家裏搞事情,可是天氣預報說音樂節那每天氣特別好。也就是說有3個因素會影響你的決定,這3個因素就能夠看做是3個輸入特徵。那你到底會不會去呢?你的我的喜愛——你對上面3個因素的重視程度——會影響你的決定。這3個重視程度就是3個權重。
- 預測圖片裏有沒有貓也是經過上面的公式。通過訓練的神經網絡會獲得一組與貓相關的權重。當咱們把一張圖片輸入到神經網絡中,圖片數據會與這組權重以及閾值進行運算,結果大於0就是有貓,小於0就是沒有貓。
- 不少網站都會記錄下你平時的瀏覽喜愛,而後把它們做爲權重套入到上面的公式來預測你會購買什麼。
⚠️權重w和偏置b有點相似輸入和輸出之間聯繫的強弱。工具
激活函數——以sigmoid函數爲例
在實際的神經網絡中,咱們不能直接用邏輯迴歸。必需要在邏輯迴歸外面再套上一個激活函數。激活函數很是很是重要,若是沒有激活函數那麼神經網絡的智商永遠高不起來。 激活函數又分好多種,目前只給你們簡單介紹一種叫作sigmoid的激活函數。oop
其公式爲
σ(z)=1+e−z1,圖像以下:
先只介紹它的一個用途——把z映射到[0,1]之間,方便理解預測結果。上圖中的橫座標是z,縱座標咱們用y’來表示,y’就表明了咱們最終的預測結果。從圖像能夠看出,z越大那麼y’就越靠近1,z越小那麼y’就越靠近0。那爲何要把預測結果映射到[0,1]之間呢?由於這樣不只便於神經網絡進行計算,也便於咱們人類進行理解。例如在預測是否有貓的例子中,若是y’是0.8,就說明有80%的機率是有貓的。
預測結果
邏輯迴歸函數和激活函數結合使用,結合上述,預測結果公式以下:
⎩⎪⎪⎨⎪⎪⎧z(i)=dot(wT,x(i))+bσ(z(i))=1+e−z(i)1y^(i)=σ(wTx(i)+b)
其中==
y^(i)是預對於訓練樣本
x(i)的預測結果==。
神經網絡預測的準確嗎
只有可以判斷預測的是否準確,才能不斷改進、優化算法。神經網絡中==損失函數(loss function)負責判斷預測是否準確==。損失函數是機器學習中最爲基礎、最爲重要的一環。
損失函數的做用
損失函數有不少種,但其做用都是用來衡量模型模型預測的好壞,通俗來說就是儘量用一個合理的公式來體現預測與實際數據的差距程度。
換一種學術點的說法,就是衡量兩個分佈之間的距離,一個分佈是原始分佈、正確的分佈(ground truth),而另外一個分佈是預測的分佈、模型擬合的分佈(prediction)。
理解損失函數可以對後續優化工具(梯度降低等)進行分析和理解。損失函數須要具體問題具體分析,不少時候最難的地方就是如何寫出複雜的損失函數。
損失函數舉例
結合初中學過的方差,最容易想到的一個差平方的損失函數公式以下:
L(y^(i),y(i))=21(y^(i)−y(i))2
其中==
y^(i)表示對訓練樣本
x(i)對預測結果,
y(i)表示實際結果==,這個相似方差的差平方公式很是好理解,兩者的差越小,說明預測的越精準,結果也就越小。但實際上==這個公式並不能使用==。
實踐中咱們可能使用的一個損失函數以下:
L(y^(i),y(i))=−(y(i)log(y^(i))+(1−y(i))log(y^(i)))
具體這樣作的數學細節咱們暫且不考慮,但他們的目的是同樣的。
成本函數
針對整個訓練集的損失函數稱爲成本函數(cost function),公式以下:
J(w,b)=m1∑i=1mL(y^(i),y(i))=m1∑i=1m(y(i)log(y^(i))+(1−y(i))log(y^(i)))
該公式其實就是對每一個訓練集的損失函數進行累加並求平均值,==計算結果越大,說明成本越大,即預測越不許確==。
神經網絡如何學習
解決了神經網絡如何預測、預測的是否準確後,下一步天然就是神經網絡如何學習,即如何讓本身的預測變得愈來愈準確。神經網絡的學習就是要告訴電腦,如何改變權重和偏置來控制聯繫的強弱。
損失函數與梯度降低
前文所述,神經網絡預測的是否準確,由
w和
b決定,那麼==「學習」也就是找到合適的
w和
b==,梯度降低算法(gradient descent)就能夠實現這個過程。梯度降低算法會逐步地改變
w和
b的值,使得新的
w和
b逐步讓損失函數的值愈來愈小,從而最終達到預測更加精準的目的。
咱們來整體回顧一下以前學過的公式:
⎩⎪⎪⎨⎪⎪⎧y^(i)=σ(wTx(i)+b)σ(z(i))=1+e−z(i)1J(w,b)=m1∑i=1mL(y^(i),y(i))=m1∑i=1m(y(i)log(y^(i))+(1−y(i))log(y^(i)))
其中輸入的訓練集
x和輸出的實際結果
y都是固定的,因此==損失函數
J(w,b)能夠理解爲一個關於
w和
b的函數==。"學習"也就是找到最合適的
w和
b,使得損失函數最小,即結果最精準。 ⬆️損失函數的數學意義
損失函數的圖像以下:
可見損失函數實際上就像一個漏斗同樣(凸函數),而咱們的目的也就是是的找到那個「漏斗底部」的
w和
b(極值),使得
J(w,b)最小。
梯度降低的原理
梯度降低算法經過梯度降低,逐步更新
w和
b使得逐步逼近最小值,過程以下:
爲方便理解,咱們先假設損失函數只有一個參數
w且
w是一個實數(實際上
w是一個向量),咱們經過下列公式改變
w的值:
w′=w−r∗dw
w′是新的
w的值,
dw是損失函數
J關於
w的偏導數,即關於
w的斜率。
r是一個參數用來表示學習率(learning rate)。
⬇️數學意義 因爲
J是一個凸函數,即單調函數,因此其關於
w的偏導數必定大於0,且單調性與
J保持一致,值還必定比
J小,咱們就能夠利用其這些數學特性來使得它逐步減少逼近
J的極值,
r用來調節速率,當
r過大時
w′也有可能變爲負值,此時就說明「學習過頭了」。若是
r不合適,
w的值可能一直在最小值附近來回跳。因此說==找到一個合適的
r的值對梯度降低很是重要==。 ⬆️看不懂去翻翻高數課本,凸函數的性質。因而可知爲何說算法崗都是調參俠,由於參數過重要了。
更進一步的原理強烈推薦看一下這個視頻。