AI应用开发基础傻瓜书系列3-损失函数
Copyright ? Microsoft Corporation. All rights reserved.
 適用于License版權(quán)許可
 更多微軟人工智能學(xué)習(xí)資源,請(qǐng)見(jiàn)微軟人工智能教育與學(xué)習(xí)共建社區(qū)
- Content
- 01.0-神經(jīng)網(wǎng)絡(luò)的基本工作原理
- 01.1-基本數(shù)學(xué)導(dǎo)數(shù)公式
- 01.2-Python-Numpy庫(kù)的點(diǎn)滴
- 02.0-反向傳播與梯度下降
- 02.1-線(xiàn)性反向傳播
- 02.2-非線(xiàn)性反向傳播
- 02.3-梯度下降
- 03.0-損失函數(shù)
- 03.1-均方差損失函數(shù)
- 03.2-交叉熵?fù)p失函數(shù)
- 04.0-單入單出單層-單變量線(xiàn)性回歸
- 04.1-最小二乘法
- 04.2-梯度下降法
- 04.3-神經(jīng)網(wǎng)絡(luò)法
- 04.4-梯度下降的三種形式
- 04.5-實(shí)現(xiàn)邏輯非門(mén)
- 05.0-多入單出單層-多變量線(xiàn)性回歸
- 05.1-正規(guī)方程法
- 05.2-神經(jīng)網(wǎng)絡(luò)法
- 05.3-樣本特征數(shù)據(jù)的歸一化
- 05.4-歸一化的后遺癥
- 05.5-正確的推理方法
- 05.6-歸一化標(biāo)簽值
- 06.0-多入多出單層神經(jīng)網(wǎng)絡(luò)-多變量線(xiàn)性分類(lèi)
- 06.1-二分類(lèi)原理
- 06.2-線(xiàn)性二分類(lèi)實(shí)現(xiàn)
- 06.3-線(xiàn)性二分類(lèi)結(jié)果可視化
- 06.4-多分類(lèi)原理
- 06.5-線(xiàn)性多分類(lèi)實(shí)現(xiàn)
- 06.6-線(xiàn)性多分類(lèi)結(jié)果可視化
- 07.0-激活函數(shù)
- 07.1-擠壓型激活函數(shù)
- 07.2-半線(xiàn)性激活函數(shù)
- 07.3-用雙曲正切函數(shù)分類(lèi)
- 07.4-實(shí)現(xiàn)邏輯與門(mén)和或門(mén)
- 08.0-單入單出雙層-萬(wàn)能近似定理
- 08.1-雙層擬合網(wǎng)絡(luò)的原理
- 08.2-雙層擬合網(wǎng)絡(luò)的實(shí)現(xiàn)
- 09.0-多入多出雙層-雙變量非線(xiàn)性分類(lèi)
- 09.1-實(shí)現(xiàn)邏輯異或門(mén)
- 09.2-理解二分類(lèi)的工作原理
- 09.3-非線(xiàn)性多分類(lèi)
- 09.4-理解多分類(lèi)的工作原理
- 10.0-調(diào)參與優(yōu)化
- 10.1-權(quán)重矩陣初始化
- 10.2-參數(shù)調(diào)優(yōu)
- 10.3-搜索最優(yōu)學(xué)習(xí)率
- 10.4-梯度下降優(yōu)化算法
- 10.5-自適應(yīng)學(xué)習(xí)率算法
- 11.0-深度學(xué)習(xí)基礎(chǔ)
- 11.1-三層神經(jīng)網(wǎng)絡(luò)的實(shí)現(xiàn)
- 11.2-驗(yàn)證與測(cè)試
- 11.3-梯度檢查
- 11.4-手工測(cè)試訓(xùn)練效果
- 11.5-搭建深度神經(jīng)網(wǎng)絡(luò)框架
- 12.0-卷積神經(jīng)網(wǎng)絡(luò)
- 12.1-卷積
- 12.2-池化
- 14.1-神經(jīng)網(wǎng)絡(luò)模型概述
- 14.2-Windows模型的部署
- 14.3-Android模型的部署
第三篇:激活函數(shù)和損失函數(shù)(二)
損失函數(shù)
作用
在有監(jiān)督的學(xué)習(xí)中,需要衡量神經(jīng)網(wǎng)絡(luò)輸出和所預(yù)期的輸出之間的差異大小。這種誤差函數(shù)需要能夠反映出當(dāng)前網(wǎng)絡(luò)輸出和實(shí)際結(jié)果之間一種量化之后的不一致程度,也就是說(shuō)函數(shù)值越大,反映出模型預(yù)測(cè)的結(jié)果越不準(zhǔn)確。
還是拿練槍的Bob做例子,Bob預(yù)期的目標(biāo)是全部命中靶子的中心,但他現(xiàn)在的命中情況是這個(gè)樣子的:
最外圈是1分,之后越向靶子中心分?jǐn)?shù)是2,3,4分,正中靶心可以得5分。
那Bob每次射擊結(jié)果和目標(biāo)之間的差距是多少呢?在這個(gè)例子里面,用得分來(lái)衡量的話(huà),就是說(shuō)Bob得到的反饋結(jié)果從差4分,到差3分,到差2分,到差1分,到差0分,這就是用一種量化的結(jié)果來(lái)表示Bob的射擊結(jié)果和目標(biāo)之間差距的方式。也就是誤差函數(shù)的作用。因?yàn)槭且淮沃挥幸粋€(gè)樣本,所以這里采用的是誤差函數(shù)的稱(chēng)呼。如果一次有多個(gè)樣本,那么就要稱(chēng)呼這樣子衡量不一致程度的函數(shù)就要叫做損失函數(shù)了。
以做線(xiàn)性回歸的實(shí)際值和預(yù)測(cè)值為例,若自變量x是[-2, -1, 0, 1, 2]這樣5個(gè)值,對(duì)應(yīng)的期望值y是[-3, 0, 0, 3, 4]這樣的值,目前預(yù)測(cè)使用的參數(shù)是(w, b) = (2, 1), 那么預(yù)測(cè)得到的值y_ = [-3, -1, 1, 3, 5], 采用均方誤差計(jì)算這個(gè)預(yù)測(cè)和實(shí)際的損失就是∑I=04(y[i]?y_[i])2\sum_{I = 0}^{4}(y[i] - y_\_[i])^{2}∑I=04?(y[i]?y_?[i])2, 也就是3。那么如果采用的參量是(0, 0),預(yù)測(cè)出來(lái)的值是[0, 0, 0, 0, 0],這是一個(gè)顯然錯(cuò)誤的預(yù)測(cè)結(jié)果,此時(shí)的損失大小就是34,3<343 < 343<34, 那么(2, 1)是一組比(0, 0)要合適的參量。
那么常用的損失函數(shù)有哪些呢?
這里先給一些前提,比如神經(jīng)網(wǎng)絡(luò)中的一個(gè)神經(jīng)元:
圖中 z=∑iwi?xi+bi=θTxz = \sum\limits_{i}w_i*x_i+b_i=\theta^Txz=i∑?wi??xi?+bi?=θTx,σ(z)\sigma(z)σ(z)是對(duì)應(yīng)的激活函數(shù),也就是說(shuō),在反向傳播時(shí)梯度的鏈?zhǔn)椒▌t中,
(1)?z?wi=xi\frac{\partial{z}}{\partial{w_i}}=x_i \tag{1}?wi??z?=xi?(1)
(2)?z?bi=1\frac{\partial{z}}{\partial{b_i}}=1 \tag{2}?bi??z?=1(2)
(3)?loss?wi=?loss?σ(z)?σ(z)?z?z?wi=?loss?σ(z)?σ(z)?zxi\frac{\partial{loss}}{\partial{w_i}}=\frac{\partial{loss}}{\partial{\sigma(z)}}\frac{\partial{\sigma(z)}}{\partial{z}}\frac{\partial{z}}{\partial{w_i}}=\frac{\partial{loss}}{\partial{\sigma(z)}}\frac{\partial{\sigma(z)}}{\partial{z}}x_i \tag{3}?wi??loss?=?σ(z)?loss??z?σ(z)??wi??z?=?σ(z)?loss??z?σ(z)?xi?(3)
(4)?loss?bi=?loss?σ(z)?σ(z)?z?z?bi=?loss?σ(z)?σ(z)?z\frac{\partial{loss}}{\partial{b_i}}=\frac{\partial{loss}}{\partial{\sigma(z)}}\frac{\partial{\sigma(z)}}{\partial{z}}\frac{\partial{z}}{\partial{b_i}}=\frac{\partial{loss}}{\partial{\sigma(z)}}\frac{\partial{\sigma(z)}}{\partial{z}} \tag{4}?bi??loss?=?σ(z)?loss??z?σ(z)??bi??z?=?σ(z)?loss??z?σ(z)?(4)
從公式(3),(4)(3),(4)(3),(4)可以看出,梯度計(jì)算中的公共項(xiàng)是?loss?σ(z)?σ(z)?z=?loss?z\frac{\partial{loss}}{\partial{\sigma(z)}}\frac{\partial{\sigma(z)}}{\partial{z}} = \frac{\partial{loss}}{\partial{z}}?σ(z)?loss??z?σ(z)?=?z?loss?。
下面我們來(lái)探討?loss?z\frac{\partial{loss}}{\partial{z}}?z?loss?的影響。由于梯度的計(jì)算和函數(shù)的形式是有關(guān)系的,所以我們會(huì)從常用損失函數(shù)入手來(lái)逐個(gè)說(shuō)明。
常用損失函數(shù)
MSE (均方誤差函數(shù))
該函數(shù)就是最直觀的一個(gè)損失函數(shù)了,計(jì)算預(yù)測(cè)值和真實(shí)值之間的歐式距離。預(yù)測(cè)值和真實(shí)值越接近,兩者的均方差就越小。
-  想法來(lái)源 在給定一些點(diǎn)去擬合直線(xiàn)的時(shí)候(比如上面的例子),常采用最小二乘法,使各個(gè)訓(xùn)練點(diǎn)到擬合直線(xiàn)的距離盡量小。這樣的距離最小在損失函數(shù)中的表現(xiàn)就是預(yù)測(cè)值和真實(shí)值的均方差的和。 
-  函數(shù)形式: loss=12∑i(y[i]?a[i])2loss = \frac{1}{2}\sum_{i}(y[i] - a[i]) ^ 2loss=21?i∑?(y[i]?a[i])2, 其中, aaa是網(wǎng)絡(luò)預(yù)測(cè)所得到的結(jié)果,yyy代表期望得到的結(jié)果,也就是數(shù)據(jù)的標(biāo)簽,iii是樣本的序號(hào)。 
-  反向傳播: 
?loss?z=∑i(y[i]?a[i])??a[i]?z\frac{\partial{loss}}{\partial{z}} = \sum_{i}(y[i] - a[i])*\frac{\partial{a[i]}}{\partial{z}}?z?loss?=i∑?(y[i]?a[i])??z?a[i]?
-  缺點(diǎn): 和?a[i]?z\frac{\partial{a[i]}}{\partial{z}}?z?a[i]?關(guān)系密切,可能會(huì)產(chǎn)生收斂速度緩慢的現(xiàn)象,以下圖為例(激活函數(shù)為sigmoid) 
在激活函數(shù)的兩端,梯度(黃色)都會(huì)趨向于0,采取MSE的方法衡量損失,在aaa趨向于1而yyy是0的情況下,損失loss是1,而梯度會(huì)趨近于0,在誤差很大時(shí)收斂速度也會(huì)非常慢。
在這里我們可以參考activation中關(guān)于sigmoid函數(shù)求導(dǎo)的例子,假定x保持不變,只有一個(gè)輸入的一個(gè)神經(jīng)元,權(quán)重w=ln(9)w = ln(9)w=ln(9), 偏置b=0b = 0b=0,也就是這樣一個(gè)神經(jīng)元:
保持參數(shù)統(tǒng)一不變,也就是學(xué)習(xí)率η=0.2\eta = 0.2η=0.2,目標(biāo)輸出y=0.5y = 0.5y=0.5, 此處輸入x固定不變?yōu)?span id="ze8trgl8bvbq" class="katex--inline">x=1x = 1x=1,采用MSE作為損失函數(shù)計(jì)算,一樣先做公式推導(dǎo),
第一步,計(jì)算當(dāng)前誤差
loss=12(a?y)2=12(0.9?0.5)2=0.08loss = \frac{1}{2}(a - y)^2 = \frac{1}{2}(0.9 - 0.5)^2 = 0.08loss=21?(a?y)2=21?(0.9?0.5)2=0.08
第二步,求出當(dāng)前梯度
grad=(a?y)×?a?z?z?w=(a?y)×a×(1?a)×x=(0.9?0.5)×0.9×(1?0.9)×1=0.036grad = (a - y) \times \frac{\partial{a}}{\partial{z}} \frac{\partial{z}}{\partial{w}} = (a - y) \times a \times (1 - a) \times x = (0.9 - 0.5) \times 0.9 \times (1-0.9) \times 1= 0.036grad=(a?y)×?z?a??w?z?=(a?y)×a×(1?a)×x=(0.9?0.5)×0.9×(1?0.9)×1=0.036
第三步,根據(jù)梯度更新當(dāng)前輸入值
w=w?η×grad=ln(9)?0.2×0.036=2.161w = w - \eta \times grad = ln(9) - 0.2 \times 0.036 = 2.161w=w?η×grad=ln(9)?0.2×0.036=2.161
第四步,計(jì)算當(dāng)前誤差是否小于閾值(此處設(shè)為0.001)
a=11+e?wx=0.8967a = \frac{1}{1 + e^{-wx}} = 0.8967a=1+e?wx1?=0.8967
loss=12(a?y)2=0.07868loss =\frac{1}{2}(a - y)^2 = 0.07868loss=21?(a?y)2=0.07868
第五步,重復(fù)步驟2-4直到誤差小于閾值
作出函數(shù)圖像如圖所示:
可以看到函數(shù)迭代了287次從才收斂到接近0.5的程度,這比單獨(dú)使用sigmoid函數(shù)還要慢了很多。
這個(gè)損失函數(shù)的目的是使得預(yù)測(cè)得到的概率分布和真實(shí)的概率分布盡量的接近。兩個(gè)分布越接近,那么這個(gè)損失函數(shù)得到的函數(shù)值就越小。怎么去衡量?jī)蓚€(gè)分布的接近程度呢?這就要用到香農(nóng)信息論中的內(nèi)容了。兩個(gè)概率分布之間的距離,也叫做KL Divergence,他的定義是這個(gè)形式的,給定離散概率分布P(x), Q(x),這兩個(gè)分布之間的距離是
DKL(P∣∣Q)=?∑iP(i)log(Q(i)P(i))D_{KL}(P || Q) = - \sum_{i}P(i)log(\frac{Q(i)}{P(i)})DKL?(P∣∣Q)=?i∑?P(i)log(P(i)Q(i)?)
試想如果兩個(gè)分布完全相同,那么log(Q(i)P(i))=0log(\frac{Q(i)}{P(i)}) = 0log(P(i)Q(i)?)=0, 也就是兩個(gè)分布之間的距離是零,如果兩個(gè)分布差異很大,比如一個(gè)是P(0)=0.9,P(1)=0.1P(0)=0.9, P(1)=0.1P(0)=0.9,P(1)=0.1,另一個(gè)是Q(0)=0.1,Q(1)=0.9Q(0)=0.1,Q(1)=0.9Q(0)=0.1,Q(1)=0.9,那么這兩個(gè)分布之間的距離就是0.763,如果是Q(0)=0.5,Q(1)=0.5Q(0)=0.5,Q(1)=0.5Q(0)=0.5,Q(1)=0.5,那么距離就是0.160,直覺(jué)上來(lái)說(shuō)兩個(gè)分布越接近那么他們之間的距離就是越小的,具體的理論證明參看《信息論基礎(chǔ)》,不過(guò)為什么要選用這個(gè)作為損失函數(shù)呢?
-  從最大似然角度開(kāi)始說(shuō) 關(guān)于最大似然,請(qǐng)參看 https://www.zhihu.com/question/20447622/answer/161722019 
將神經(jīng)網(wǎng)絡(luò)的參數(shù)作為θ\thetaθ,數(shù)據(jù)的真實(shí)分布是Pdata(y;x)P_{data}(y;x)Pdata?(y;x), 輸入數(shù)據(jù)為xxx,那么在θ\thetaθ固定情況下,神經(jīng)網(wǎng)絡(luò)輸出yyy的概率就是P(y;x,θ)P(y;x, \theta)P(y;x,θ),構(gòu)建似然函數(shù),
L=∑ilog(P(yi;xi,θ))L =\sum_{i}log(P(y_i;x_i, \theta))L=i∑?log(P(yi?;xi?,θ)),
以θ\thetaθ為參數(shù)最大化該似然函數(shù),即θ?=argmaxθL\theta^{*} ={argmax}_{\theta}Lθ?=argmaxθ?L。
真實(shí)分布P(xi)P(x_i)P(xi?)對(duì)于每一個(gè)(i,xi,yi)(i, x_i, y_i)(i,xi?,yi?)來(lái)說(shuō)均是定值,在確定xix_ixi?情況下,輸出是yiy_iyi?的概率是確定的。在一般的情況下,對(duì)于每一個(gè)確定的輸入,輸出某個(gè)類(lèi)別的概率是0或者1,所以可以將真實(shí)概率添加到上述式子中而不改變式子本身的意義:
θ?=argmaxθ∑iPdata(yi;xi)log(P(yi;xi,θ))\theta^{*} ={argmax}_{\theta}\sum_{i}P_{data}(y_i;x_i)log(P(y_i;x_i, \theta)) θ?=argmaxθ?i∑?Pdata?(yi?;xi?)log(P(yi?;xi?,θ))
將DKLD_{KL}DKL?展開(kāi),得到,
DKL(P∣∣Q)=?∑iP(i)log(Q(i)P(i))=∑iP(i)log(P(i))?∑iP(i)log(Q(i))D_{KL}(P || Q) =- \sum_{i}P(i)log(\frac{Q(i)}{P(i)}) = \sum_{i}P(i)log(P(i)) - \sum_{i}P(i)log(Q(i)) DKL?(P∣∣Q)=?i∑?P(i)log(P(i)Q(i)?)=i∑?P(i)log(P(i))?i∑?P(i)log(Q(i))
P(i)P(i)P(i)代表Pdata(yi;xi)P_{data}(y_i;x_i)Pdata?(yi?;xi?), Q(i)Q(i)Q(i)代表P(yi;xi,θ)P(y_i;x_i,\theta)P(yi?;xi?,θ)。
上述右側(cè)式中第一項(xiàng)是和僅真實(shí)分布P(i)P(i)P(i)有關(guān)的,在最小化DKLD_{KL}DKL?過(guò)程中是一個(gè)定值,所以最小化DKLD_{KL}DKL?等價(jià)于最小化?∑iP(i)log(Q(i))-\sum_{i}P(i)log(Q(i))?∑i?P(i)log(Q(i)),也就是在最大化似然函數(shù)。
-  函數(shù)形式(以二分類(lèi)任務(wù)為例): loss=∑iy(xi)log(a(xi))+(1?y(xi))log(1?a(xi))loss = \sum_{i}y(x_i)log(a(x_i)) + (1 - y(x_i))log(1- a(x_i))loss=i∑?y(xi?)log(a(xi?))+(1?y(xi?))log(1?a(xi?)) 其中,y(xi)y(x_i)y(xi?)是真實(shí)分布,a(xi)a(x_i)a(xi?)是神經(jīng)網(wǎng)絡(luò)輸出的概率分布 
-  反向傳播: 
?loss?z=(?y(z)a(z)+1?y(z)1?a(z))??a(z)?z=a(z)?y(z)a(z)(1?y(z))??a(z)?z\frac{\partial{loss}}{\partial{z}} = (-\frac{y(z)}{a(z)} + \frac{1 - y(z)}{1 - a(z)})*\frac{\partial{a(z)}}{\partial{z}} = \frac{a(z) - y(z)}{a(z)(1-y(z))}*\frac{\partial{a(z)}}{\partial{z}}?z?loss?=(?a(z)y(z)?+1?a(z)1?y(z)?)??z?a(z)?=a(z)(1?y(z))a(z)?y(z)???z?a(z)?
在使用sigmoid作為激活函數(shù)情況下,?a(z)?z=a(z)(1?a(z))\frac{\partial{a(z)}}{\partial{z}} = a(z)(1-a(z))?z?a(z)?=a(z)(1?a(z)),也就是說(shuō),sigmoid本身的梯度和分母相互抵消,得到,
?loss?z=a(z)y(z)y(z)(1?a(z))??a(z)?z=a(z)?y(z)\frac{\partial{loss}}{\partial{z}} = \frac{a(z)y(z)}{y(z)(1-a(z))}*\frac{\partial{a(z)}}{\partial{z}} = a(z) - y(z)?z?loss?=y(z)(1?a(z))a(z)y(z)???z?a(z)?=a(z)?y(z)
 在上述反向傳播公式中不再涉及到sigmoid本身的梯度,故不會(huì)受到在誤差很大時(shí)候函數(shù)飽和導(dǎo)致的梯度消失的影響。
 總的說(shuō)來(lái),在使用sigmoid作為激活函數(shù)時(shí),使用交叉熵計(jì)算損失往往比使用均方誤差的結(jié)果要好上一些。但是,這個(gè)也并不是絕對(duì)的,需要具體問(wèn)題具體分析,針對(duì)具體應(yīng)用,有時(shí)需要自行設(shè)計(jì)損失函數(shù)來(lái)達(dá)成目標(biāo)。
參考資料:
https://www.cnblogs.com/alexanderkun/p/8098781.html
https://www.zhihu.com/question/20447622/answer/161722019
《信息論基礎(chǔ)》
點(diǎn)擊這里提交問(wèn)題與建議
 聯(lián)系我們: msraeduhub@microsoft.com
 學(xué)習(xí)了這么多,還沒(méi)過(guò)癮怎么辦?歡迎加入“微軟 AI 應(yīng)用開(kāi)發(fā)實(shí)戰(zhàn)交流群”,跟大家一起暢談AI,答疑解惑。掃描下方二維碼,回復(fù)“申請(qǐng)入群”,即刻邀請(qǐng)你入群。
 
總結(jié)
以上是生活随笔為你收集整理的AI应用开发基础傻瓜书系列3-损失函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
 
                            
                        - 上一篇: 现代软件工程 第八章 【需求分析】练习与
- 下一篇: 现代软件工程 作业汇总
