一、深度学习背景与人工神经网络
- 一、基礎知識
- 二、神經網絡
- 2.1 神經網絡的結構:
- 2.2 為什么神經網絡在分類問題中的效果比較好:
- 2.3 BP算法
一、基礎知識
線性分類器:
工業界有很多算法完成分類的問題,比如線性分類器,輸入一張32x32x3的矩陣,利用f(wx+b)得到屬于不同類別的得分向量,
方便演示,x列向量只選了4個值,w為3x4的矩陣,偏置項是為了讓分類線可以上下平移,更好的分類,我們希望正確類別的得分比較高。
兩種理解方式:
1. 空間劃分
可以把w看成三個行向量,因為每個行都控制著不同類別的得分,三行w分別對應不同的直線。當我們確定了w和b之后,會確定一條直線,相當于對平面進行了一個劃分。
不同的w和b對應空間中不同的超平面,對平面做區域劃分,在不同區域內,屬于不同的類。
2. 模板匹配
將每一行w看成每個類別的模板,
對同一個輸入x,用不同的模板去匹配它,看哪個模板的匹配度最高。
損失函數:
損失函數是衡量預測和真實值的差別的,隨機初始化一組w之后,會根據最小化損失函數的方法來優化w,使得損失函數最小。
不同的損失函數,對應不同的評估手段,不同的手段都能體現模型的學習能力,比如hingeloss,或softmax。
Hinge 損失
正確的得分比錯誤的得分大于delta的時候,不做懲罰,如果兩者的差小于delta,則利用兩者的差+delta作為損失值。
交叉熵損失
為什么可以用交叉熵損失函數來衡量網絡?
熵的本質是信息量的期望值,H(p)=∑pi×H(pi)H(p)=∑pi×H(pi),現在有關于樣本集的兩個分布p和q,其中p為真實分布,q為預測分布,比如深度學習的手寫體識別,預測得到的屬于每類的概率為q(0)=0.0,q(1)=0.1,q(2)=0.1,q(3)=0.8,q(4)=0,…q(0)=0.0,q(1)=0.1,q(2)=0.1,q(3)=0.8,q(4)=0,…,q是真實的分布。最后肯定會選擇概率最大的3作為輸出,而真實分布為p(0)=0,p(1)=0,p(2)=0,p(3)=1,p(4)=0...p(0)=0,p(1)=0,p(2)=0,p(3)=1,p(4)=0...,于是,我們想做的就是讓p和q的分布盡可能一樣。
概率論或信息論中,利用KL散度(相對熵)來衡量兩個分布間的距離,且是非對稱的,也就是D(P||Q)≠D(Q||P)D(P||Q)≠D(Q||P),信息論中,也用D(P||Q)D(P||Q)來衡量利用概率分布Q來擬合真實分布P的時候,產生的信息損耗。當KL散度的值越大,表示兩個概率分布的差距越大,KL散度和交叉熵的關系如下:
KL散度:
DKL=∑pilogpiqiDKL=∑pilogpiqi交叉熵(CH):
交叉熵=熵+KL散度
而H(pi)H(pi)是一個真實分布的期望,因此與訓練無關,是一個常數項,所以將原本的最小化相對熵,轉化為最小化交叉熵,
一般情況,我們希望將得分函數轉化為分為某一類的概率,多分類情況下利用softmax來完成。
softmax:某個類別的得分的指數值,和所有得分的指數值的比值
為什么用指數,因為指數可以避免負值的出現。
Si=eVi∑jeVjSi=eVi∑jeVj
softmax可以將不同的得分函數轉化為屬于該類的概率值,轉化之后,概率之和為1。
eVieVi表示某個類別的線性得分函數,SiSi表示屬于該類的概率輸出,由于log變換不會影響函數的單調性,故對SiSi進行log變換,我們希望SiSi越大越好,即對應正確類別的相對概率越大越好,所以對SiSi前面加一個負號,來表示損失函數,這就稱為交叉熵損失函數。
交叉熵損失函數:
Li=?log(eVi∑eVj)Li=?log(eVi∑eVj)對上式進行進一步處理,約掉指數:
Li=?logeVi?log∑jeVj=?Vj+log∑jeVjLi=?logeVi?log∑jeVj=?Vj+log∑jeVj
假設線性輸出為:
計算損失函數:
損失函數越小越好
二、神經網絡
2.1 神經網絡的結構:
由輸入+隱層+輸出來構成
從邏輯回歸到神經元感知器:
已最簡單的結構來剖析神經網絡:感知器
線性輸出:
z=θ0+θ1+θ2z=θ0+θ1+θ2
經過sigmoid映射到0~1的范圍內的概率:
a=g(z)=11+e?za=g(z)=11+e?z
利用閾值0.5作為判定是正類還是負類
添加少量的隱藏層:
2.2 為什么神經網絡在分類問題中的效果比較好:
LR或SVM是線性分類器,是利用一條決策邊界,去將正負樣本區分開
對于非線性可以的情況:
SVM會用核函數來升維,但是做不了可視化,無法看到升維之后的樣本是什么樣子的,維度很高,無法判斷哪些特征有用,不可控性高。
如何用線性分類器做非線性分類——GBDT或kernel SVM,但是這些方法對劃分的準確率卻沒有那么高。
神經網絡如果劃分線性不可分的數據:
左圖兩類樣本點的分割,線性分類器實現不了,右圖是利用兩條直線,將空間區分成了兩部分,求兩個直線的交集即可。
神經元完成邏輯與:
如果X1=0,X2=0,經過sigmoid之后,輸出p->0;
如果X1=0,X2=1,那么-10經過sigmoid之后,p結果仍然接近于0
如果X1=1,X2=0,那么-10經過sigmoid之后,p結果仍然接近于0
如果X1=1,X2=1,那么10經過sigmoid之后,p結果接近于1
所以,感知器可以完成and的操作,當兩個輸入都為1的時候,輸出才為1
神經元完成邏輯或:
只要有1出現,那么輸出都為1
神經網絡如何完成非線性的分類:
構建多個線性分類器,利用and操作來截出一個多邊形區域。找到三個綠色的區域,對綠色區域進行一個or操作,就可以得到所有的綠色區域。
利用神經網絡可以做任意的劃分
多加一個神經元,可以多一條線,多加一層,可以多加一個or操作,多層可以實現異或問題。
神經網絡的結構:
如果不添加非線性的激活函數的話,相當于線性變換的堆疊,還是沒有逼近任何非線性信號的能力。
沒有必要去深扣每個神經元到底在提取什么信號
2.3 BP算法
正向傳播:求損失
反向傳播:回傳誤差,根據誤差信號修正每層的權重
前面的所有層都要對最后的預測負責,所以要將誤差一層一層的往前傳,更新每個神經元的參數。
以3層感知器為例:
標準答案是[d1,d2,…,dL](回歸利用L2損失)
求函數的最小值,一般用一階的方式來求解,二階的Hessian矩陣存儲所需內存很大,難以實現。
SGD最小化誤差函數:
復合函數f(g(h(x)))f(g(h(x)))的導數,是鏈式法則,也就是h′(x)?g(h(x))?f′(g(h(x)))h′(x)?g(h(x))?f′(g(h(x))),需要一步步往前推導,得到f對x的偏導。
BP算法的示例:
希望找到合適的w和b,使得結果為0.01和0.99。
前向傳播計算誤差:
反向傳播計算梯度:
前向傳播計算損失
計算對w5的更新
計算對w1的更新
w1對Etotal都會起作用,也就是Etotal=Etotal1+Etotal2,是一個求和的過程。
反向傳播是將誤差對該權值的梯度回傳,利用該梯度進行權重的更新。
總結
以上是生活随笔為你收集整理的一、深度学习背景与人工神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2021年汇算清缴怎么操作
- 下一篇: 三、深度学习框架Tensorflow