正則化(Regularization)
成都創(chuàng)新互聯(lián)是專業(yè)的洪湖網(wǎng)站建設(shè)公司,洪湖接單;提供成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司,網(wǎng)頁設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行洪湖網(wǎng)站開發(fā)網(wǎng)頁制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來合作!
機(jī)器學(xué)習(xí)中幾乎都可以看到損失函數(shù)后面會添加一個(gè)額外項(xiàng),常用的額外項(xiàng)一般有兩種,一般英文稱作 ?1-norm 和 ?2-norm ,中文稱作 L1正則化 和 L2正則化 ,或者 L1范數(shù) 和 L2范數(shù) 。
L1正則化和L2正則化可以看做是損失函數(shù)的懲罰項(xiàng)。所謂『懲罰』是指對損失函數(shù)中的某些參數(shù)做一些限制。對于線性回歸模型,使用L1正則化的模型建叫做Lasso回歸,使用L2正則化的模型叫做Ridge回歸(嶺回歸)。下圖是Python中Lasso回歸的損失函數(shù),式中加號后面一項(xiàng)α||w||1即為L1正則化項(xiàng)。
下圖是Python中Ridge回歸的損失函數(shù),式中加號后面一項(xiàng)α||w||22即為L2正則化項(xiàng)。
一般回歸分析中回歸w表示特征的系數(shù),從上式可以看到正則化項(xiàng)是對系數(shù)做了處理(限制)。 L1正則化和L2正則化的說明如下:
L1正則化是指權(quán)值向量w中各個(gè)元素的 絕對值之和 ,通常表示為||w||1
L2正則化是指權(quán)值向量w中各個(gè)元素的 平方和然后再求平方根 (可以看到Ridge回歸的L2正則化項(xiàng)有平方符號),通常表示為||w||2
一般都會在正則化項(xiàng)之前添加一個(gè)系數(shù),Python中用α表示,一些文章也用λ表示。這個(gè)系數(shù)需要用戶指定。
那添加L1和L2正則化有什么用? 下面是L1正則化和L2正則化的作用 ,這些表述可以在很多文章中找到。
L1正則化可以產(chǎn)生稀疏權(quán)值矩陣,即產(chǎn)生一個(gè)稀疏模型,可以用于特征選擇
L2正則化可以防止模型過擬合(overfitting);一定程度上,L1也可以防止過擬合
稀疏模型與特征選擇
上面提到L1正則化有助于生成一個(gè)稀疏權(quán)值矩陣,進(jìn)而可以用于特征選擇。為什么要生成一個(gè)稀疏矩陣?
稀疏矩陣指的是很多元素為0,只有少數(shù)元素是非零值的矩陣,即得到的線性回歸模型的大部分系數(shù)都是0.
通常機(jī)器學(xué)習(xí)中特征數(shù)量很多,例如文本處理時(shí),如果將一個(gè)詞組(term)作為一個(gè)特征,那么特征數(shù)量會達(dá)到上萬個(gè)(bigram)。在預(yù)測或分類時(shí),那么多特征顯然難以選擇,但是如果代入這些特征得到的模型是一個(gè)稀疏模型,表示只有少數(shù)特征對這個(gè)模型有貢獻(xiàn),絕大部分特征是沒有貢獻(xiàn)的,或者貢獻(xiàn)微?。ㄒ?yàn)樗鼈兦懊娴南禂?shù)是0或者是很小的值,即使去掉對模型也沒有什么影響),此時(shí)我們就可以只關(guān)注系數(shù)是非零值的特征。這就是稀疏模型與特征選擇的關(guān)系。
L1和L2正則化的直觀理解
這部分內(nèi)容將解釋 為什么L1正則化可以產(chǎn)生稀疏模型(L1是怎么讓系數(shù)等于零的) ,以及 為什么L2正則化可以防止過擬合 。
L1正則化和特征選擇
假設(shè)有如下帶L1正則化的損失函數(shù):
J=J0+α∑w|w|(1)
其中J0是原始的損失函數(shù),加號后面的一項(xiàng)是L1正則化項(xiàng),α是正則化系數(shù)。注意到L1正則化是權(quán)值的 絕對值之和 ,J是帶有絕對值符號的函數(shù),因此J是不完全可微的。機(jī)器學(xué)習(xí)的任務(wù)就是要通過一些方法(比如梯度下降)求出損失函數(shù)的最小值。當(dāng)我們在原始損失函數(shù)J0后添加L1正則化項(xiàng)時(shí),相當(dāng)于對J0做了一個(gè)約束。令L=α∑w|w|,則J=J0+L,此時(shí)我們的任務(wù)變成 在L約束下求出J0取最小值的解 ??紤]二維的情況,即只有兩個(gè)權(quán)值w1和w2,此時(shí)L=|w1|+|w2|對于梯度下降法,求解J0的過程可以畫出等值線,同時(shí)L1正則化的函數(shù)L也可以在w1w2的二維平面上畫出來。如下圖:
圖1? L1正則化
圖中等值線是J0的等值線,黑色方形是L函數(shù)的圖形。在圖中,當(dāng)J0等值線與L圖形首次相交的地方就是最優(yōu)解。上圖中J0與L在L的一個(gè)頂點(diǎn)處相交,這個(gè)頂點(diǎn)就是最優(yōu)解。注意到這個(gè)頂點(diǎn)的值是(w1,w2)=(0,w)??梢灾庇^想象,因?yàn)長函數(shù)有很多『突出的角』(二維情況下四個(gè),多維情況下更多),J0與這些角接觸的機(jī)率會遠(yuǎn)大于與L其它部位接觸的機(jī)率,而在這些角上,會有很多權(quán)值等于0,這就是為什么L1正則化可以產(chǎn)生稀疏模型,進(jìn)而可以用于特征選擇。
而正則化前面的系數(shù)α,可以控制L圖形的大小。α越小,L的圖形越大(上圖中的黑色方框);α越大,L的圖形就越小,可以小到黑色方框只超出原點(diǎn)范圍一點(diǎn)點(diǎn),這是最優(yōu)點(diǎn)的值(w1,w2)=(0,w)中的w可以取到很小的值。
類似,假設(shè)有如下帶L2正則化的損失函數(shù):
J=J0+α∑ww2(2)
同樣可以畫出他們在二維平面上的圖形,如下:
圖2? L2正則化
二維平面下L2正則化的函數(shù)圖形是個(gè)圓,與方形相比,被磨去了棱角。因此J0與L相交時(shí)使得w1或w2等于零的機(jī)率小了許多,這就是為什么L2正則化不具有稀疏性的原因。
L2正則化和過擬合
擬合過程中通常都傾向于讓權(quán)值盡可能小,最后構(gòu)造一個(gè)所有參數(shù)都比較小的模型。因?yàn)橐话阏J(rèn)為參數(shù)值小的模型比較簡單,能適應(yīng)不同的數(shù)據(jù)集,也在一定程度上避免了過擬合現(xiàn)象??梢栽O(shè)想一下對于一個(gè)線性回歸方程,若參數(shù)很大,那么只要數(shù)據(jù)偏移一點(diǎn)點(diǎn),就會對結(jié)果造成很大的影響;但如果參數(shù)足夠小,數(shù)據(jù)偏移得多一點(diǎn)也不會對結(jié)果造成什么影響,專業(yè)一點(diǎn)的說法是『抗擾動能力強(qiáng)』。
那為什么L2正則化可以獲得值很小的參數(shù)?
以線性回歸中的梯度下降法為例。假設(shè)要求的參數(shù)為θ,hθ(x)是我們的假設(shè)函數(shù),那么線性回歸的代價(jià)函數(shù)如下:
J(θ)=12m∑i=1m(hθ(x(i))?y(i))(3)
那么在梯度下降法中,最終用于迭代計(jì)算參數(shù)θ的迭代式為:
θj:=θj?α1m∑i=1m(hθ(x(i))?y(i))x(i)j(4)
其中α是learning rate. 上式是沒有添加L2正則化項(xiàng)的迭代公式,如果在原始代價(jià)函數(shù)之后添加L2正則化,則迭代公式會變成下面的樣子:
θj:=θj(1?αλm)?α1m∑i=1m(hθ(x(i))?y(i))x(i)j(5)
其中 λ就是正則化參數(shù) 。從上式可以看到,與未添加L2正則化的迭代公式相比,每一次迭代,θj都要先乘以一個(gè)小于1的因子,從而使得θj不斷減小,因此總得來看,θ是不斷減小的。
最開始也提到L1正則化一定程度上也可以防止過擬合。之前做了解釋,當(dāng)L1的正則化系數(shù)很小時(shí),得到的最優(yōu)解會很小,可以達(dá)到和L2正則化類似的效果。
正則化參數(shù)的選擇
L1正則化參數(shù)
通常越大的λ可以讓代價(jià)函數(shù)在參數(shù)為0時(shí)取到最小值。下面是一個(gè)簡單的例子,這個(gè)例子來自 Quora上的問答 。為了方便敘述,一些符號跟這篇帖子的符號保持一致。
假設(shè)有如下帶L1正則化項(xiàng)的代價(jià)函數(shù):
F(x)=f(x)+λ||x||1
其中x是要估計(jì)的參數(shù),相當(dāng)于上文中提到的w以及θ. 注意到L1正則化在某些位置是不可導(dǎo)的,當(dāng)λ足夠大時(shí)可以使得F(x)在x=0時(shí)取到最小值。如下圖:
圖3 L1正則化參數(shù)的選擇
分別取λ=0.5和λ=2,可以看到越大的λ越容易使F(x)在x=0時(shí)取到最小值。
L2正則化參數(shù)
從公式5可以看到,λ越大,θj衰減得越快。另一個(gè)理解可以參考圖2,λ越大,L2圓的半徑越小,最后求得代價(jià)函數(shù)最值時(shí)各參數(shù)也會變得很小。
Reference
過擬合的解釋:
正則化的解釋:
正則化的解釋:
正則化的數(shù)學(xué)解釋(一些圖來源于這里):
原文參考:blog.csdn.net/jinping_shi/article/details/52433975
從零開始用Python構(gòu)建神經(jīng)網(wǎng)絡(luò)
動機(jī):為了更加深入的理解深度學(xué)習(xí),我們將使用 python 語言從頭搭建一個(gè)神經(jīng)網(wǎng)絡(luò),而不是使用像 Tensorflow 那樣的封裝好的框架。我認(rèn)為理解神經(jīng)網(wǎng)絡(luò)的內(nèi)部工作原理,對數(shù)據(jù)科學(xué)家來說至關(guān)重要。
這篇文章的內(nèi)容是我的所學(xué),希望也能對你有所幫助。
神經(jīng)網(wǎng)絡(luò)是什么?
介紹神經(jīng)網(wǎng)絡(luò)的文章大多數(shù)都會將它和大腦進(jìn)行類比。如果你沒有深入研究過大腦與神經(jīng)網(wǎng)絡(luò)的類比,那么將神經(jīng)網(wǎng)絡(luò)解釋為一種將給定輸入映射為期望輸出的數(shù)學(xué)關(guān)系會更容易理解。
神經(jīng)網(wǎng)絡(luò)包括以下組成部分
? 一個(gè)輸入層,x
? 任意數(shù)量的隱藏層
? 一個(gè)輸出層,?
? 每層之間有一組權(quán)值和偏置,W and b
? 為隱藏層選擇一種激活函數(shù),σ。在教程中我們使用 Sigmoid 激活函數(shù)
下圖展示了 2 層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)(注意:我們在計(jì)算網(wǎng)絡(luò)層數(shù)時(shí)通常排除輸入層)
2 層神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)
用 Python 可以很容易的構(gòu)建神經(jīng)網(wǎng)絡(luò)類
訓(xùn)練神經(jīng)網(wǎng)絡(luò)
這個(gè)網(wǎng)絡(luò)的輸出 ? 為:
你可能會注意到,在上面的等式中,輸出 ? 是 W 和 b 函數(shù)。
因此 W 和 b 的值影響預(yù)測的準(zhǔn)確率. 所以根據(jù)輸入數(shù)據(jù)對 W 和 b 調(diào)優(yōu)的過程就被成為訓(xùn)練神經(jīng)網(wǎng)絡(luò)。
每步訓(xùn)練迭代包含以下兩個(gè)部分:
? 計(jì)算預(yù)測結(jié)果 ?,這一步稱為前向傳播
? 更新 W 和 b,,這一步成為反向傳播
下面的順序圖展示了這個(gè)過程:
前向傳播
正如我們在上圖中看到的,前向傳播只是簡單的計(jì)算。對于一個(gè)基本的 2 層網(wǎng)絡(luò)來說,它的輸出是這樣的:
我們在 NeuralNetwork 類中增加一個(gè)計(jì)算前向傳播的函數(shù)。為了簡單起見我們假設(shè)偏置 b 為0:
但是我們還需要一個(gè)方法來評估預(yù)測結(jié)果的好壞(即預(yù)測值和真實(shí)值的誤差)。這就要用到損失函數(shù)。
損失函數(shù)
常用的損失函數(shù)有很多種,根據(jù)模型的需求來選擇。在本教程中,我們使用誤差平方和作為損失函數(shù)。
誤差平方和是求每個(gè)預(yù)測值和真實(shí)值之間的誤差再求和,這個(gè)誤差是他們的差值求平方以便我們觀察誤差的絕對值。
訓(xùn)練的目標(biāo)是找到一組 W 和 b,使得損失函數(shù)最好小,也即預(yù)測值和真實(shí)值之間的距離最小。
反向傳播
我們已經(jīng)度量出了預(yù)測的誤差(損失),現(xiàn)在需要找到一種方法來傳播誤差,并以此更新權(quán)值和偏置。
為了知道如何適當(dāng)?shù)恼{(diào)整權(quán)值和偏置,我們需要知道損失函數(shù)對權(quán)值 W 和偏置 b 的導(dǎo)數(shù)。
回想微積分中的概念,函數(shù)的導(dǎo)數(shù)就是函數(shù)的斜率。
梯度下降法
如果我們已經(jīng)求出了導(dǎo)數(shù),我們就可以通過增加或減少導(dǎo)數(shù)值來更新權(quán)值 W 和偏置 b(參考上圖)。這種方式被稱為梯度下降法。
但是我們不能直接計(jì)算損失函數(shù)對權(quán)值和偏置的導(dǎo)數(shù),因?yàn)樵趽p失函數(shù)的等式中并沒有顯式的包含他們。因此,我們需要運(yùn)用鏈?zhǔn)角髮?dǎo)發(fā)在來幫助計(jì)算導(dǎo)數(shù)。
鏈?zhǔn)椒▌t用于計(jì)算損失函數(shù)對 W 和 b 的導(dǎo)數(shù)。注意,為了簡單起見。我們只展示了假設(shè)網(wǎng)絡(luò)只有 1 層的偏導(dǎo)數(shù)。
這雖然很簡陋,但是我們依然能得到想要的結(jié)果—損失函數(shù)對權(quán)值 W 的導(dǎo)數(shù)(斜率),因此我們可以相應(yīng)的調(diào)整權(quán)值。
現(xiàn)在我們將反向傳播算法的函數(shù)添加到 Python 代碼中
為了更深入的理解微積分原理和反向傳播中的鏈?zhǔn)角髮?dǎo)法則,我強(qiáng)烈推薦 3Blue1Brown 的如下教程:
Youtube:
整合并完成一個(gè)實(shí)例
既然我們已經(jīng)有了包括前向傳播和反向傳播的完整 Python 代碼,那么就將其應(yīng)用到一個(gè)例子上看看它是如何工作的吧。
神經(jīng)網(wǎng)絡(luò)可以通過學(xué)習(xí)得到函數(shù)的權(quán)重。而我們僅靠觀察是不太可能得到函數(shù)的權(quán)重的。
讓我們訓(xùn)練神經(jīng)網(wǎng)絡(luò)進(jìn)行 1500 次迭代,看看會發(fā)生什么。 注意觀察下面每次迭代的損失函數(shù),我們可以清楚地看到損失函數(shù)單調(diào)遞減到最小值。這與我們之前介紹的梯度下降法一致。
讓我們看看經(jīng)過 1500 次迭代后的神經(jīng)網(wǎng)絡(luò)的最終預(yù)測結(jié)果:
經(jīng)過 1500 次迭代訓(xùn)練后的預(yù)測結(jié)果
我們成功了!我們應(yīng)用前向和方向傳播算法成功的訓(xùn)練了神經(jīng)網(wǎng)絡(luò)并且預(yù)測結(jié)果收斂于真實(shí)值。
注意預(yù)測值和真實(shí)值之間存在細(xì)微的誤差是允許的。這樣可以防止模型過擬合并且使得神經(jīng)網(wǎng)絡(luò)對于未知數(shù)據(jù)有著更強(qiáng)的泛化能力。
下一步是什么?
幸運(yùn)的是我們的學(xué)習(xí)之旅還沒有結(jié)束,仍然有很多關(guān)于神經(jīng)網(wǎng)絡(luò)和深度學(xué)習(xí)的內(nèi)容需要學(xué)習(xí)。例如:
? 除了 Sigmoid 以外,還可以用哪些激活函數(shù)
? 在訓(xùn)練網(wǎng)絡(luò)的時(shí)候應(yīng)用學(xué)習(xí)率
? 在面對圖像分類任務(wù)的時(shí)候使用卷積神經(jīng)網(wǎng)絡(luò)
我很快會寫更多關(guān)于這個(gè)主題的內(nèi)容,敬請期待!
最后的想法
我自己也從零開始寫了很多神經(jīng)網(wǎng)絡(luò)的代碼
雖然可以使用諸如 Tensorflow 和 Keras 這樣的深度學(xué)習(xí)框架方便的搭建深層網(wǎng)絡(luò)而不需要完全理解其內(nèi)部工作原理。但是我覺得對于有追求的數(shù)據(jù)科學(xué)家來說,理解內(nèi)部原理是非常有益的。
這種練習(xí)對我自己來說已成成為重要的時(shí)間投入,希望也能對你有所幫助
raw_input獲取的輸入是字符串,不能直接用np.array,需要用split進(jìn)行切分,然后強(qiáng)制轉(zhuǎn)化成數(shù)值類型,才能用plot函數(shù)
我把你的代碼稍微修改了一下,可能不太漂亮,不過能運(yùn)行了
x=[1,2,3]
a = raw_input('function')
a = a.split(' ')#依空格對字符串a(chǎn)進(jìn)行切分,如果是用逗號分隔,則改成a.split(',')
b = []
for i in range(len(a)):#把切分好的字符強(qiáng)制轉(zhuǎn)化成int類型,如果是小數(shù),將int改為float
b.append(int(a[i]))
plt.plot(x, b, label='x', color="green", linewidth=1)
??很多計(jì)算機(jī)視覺尤其是生成模型的相關(guān)論文中經(jīng)常會提到一個(gè)現(xiàn)象: “使用 損失函數(shù)會產(chǎn)生模糊的圖像”。大多論文中雖然給出了相關(guān)的對比實(shí)驗(yàn)結(jié)果加以佐證,但是如何用較通俗的方式來解釋這個(gè)現(xiàn)象呢?
??首先來看看 損失函數(shù)的定義 (Squared L2 Norm) :
???? ?? ?? ?? ??
???? ?? ?? ?? ??
??其中 代表樣本數(shù), 代表真實(shí)數(shù)據(jù), 為重建數(shù)據(jù)。現(xiàn)在我們從概率的角度來解釋這一現(xiàn)象。
??生成模型中經(jīng)常提到一個(gè)概念,采樣,即Sampling。那么到底什么是采樣?為啥要sample from distribution?
??假如我們有一批具有某種共同特點(diǎn)的數(shù)據(jù),它們符合同一個(gè)但是未知的分布。比如說下圖的 ?,F(xiàn)在我們想要去估計(jì)這個(gè)分布(或者說去擬合這個(gè)函數(shù))。
其中 表示由 參數(shù)化的關(guān)于輸入 的函數(shù)(預(yù)測函數(shù))。要優(yōu)化這個(gè)公式,意味著我們需要知道對于每一個(gè) ,其對應(yīng)的函數(shù)值 ( fully specified )。顯然,我們并不知道函數(shù) 各處的函數(shù)值。那么上式該如何優(yōu)化?
??采樣(Sampling)為我們提供了一種解決方法。所謂采樣就是去收集許多成對的輸入-輸出( , ), 。如果有足夠多并且具有代表性的采樣,我們就能通過離散的方式來近似上式的優(yōu)化過程,即通過這些離散的樣本來學(xué)習(xí)這些樣本所在的分布。這些所謂的樣本(許多的輸入輸出數(shù)據(jù)組合)就構(gòu)成了我們的訓(xùn)練集。
??此外需要強(qiáng)調(diào)的一點(diǎn)是,這種采樣的方法已經(jīng)在幾乎所有同類問上取得了可靠的結(jié)果。另外這種采樣是十分簡單和通用的,也 正是我們一直在做的事情 。比如圖像描述(Image Caption)問題中,拿到一張圖像和其對應(yīng)的標(biāo)注;再比如語音問題中拿到一段語音和其對應(yīng)的文字,這些其實(shí)都是Sampling。只不過不同的sampling,其包含的噪聲有大有小,反映出數(shù)據(jù)和真實(shí)分布的偏離,也就是最終我們訓(xùn)練集的質(zhì)量差異。
?我們從簡單的一維高斯分布說起
??????????
其中 為歸一化因子, 為高斯分布均值, 代表標(biāo)準(zhǔn)差?,F(xiàn)在從機(jī)器學(xué)習(xí)的角度來理解這個(gè)式子:對于該高斯分布,如果我們確定了 和 ,那這個(gè)分布就確定了。從理論上來說我們就可以從這個(gè)分布中采樣,從概率估計(jì)( PDE )的角度來說,這樣就算達(dá)到了目的。但是實(shí)際應(yīng)用時(shí) 和 往往是不知道的,需要我們?nèi)ゴ_定。由1 知道,估計(jì)參數(shù)之前我們往往會sample一個(gè)訓(xùn)練集。然后根據(jù)這些訓(xùn)練樣本 ,我們就可以得到一個(gè)關(guān)于 的參數(shù)化的,對于真實(shí)參數(shù) 的估計(jì)量 。注意這個(gè)式子是一種一般的寫法,比如這個(gè)參數(shù)化模型可以用神經(jīng)網(wǎng)絡(luò)等等??傊@個(gè)估計(jì)量就是一個(gè)關(guān)于 的函數(shù)。既然都是 的函數(shù),那么我們很容易想到一個(gè)最簡單的估計(jì)量:
??沒錯(cuò)!就是訓(xùn)練集 的統(tǒng)計(jì)均值 。說實(shí)話,也沒那么容易想到...我是看著Ian Goodfellow的花書公式(5.30)打的,上面是這么說的:
?? “A common estimator of the Gaussian mean parameter is known as the sample mean ” .
另外,重要的一點(diǎn)在于,對于高斯分布而言,其樣本均值是真實(shí)均值的一個(gè)無偏估計(jì)。
??所以這里我們可以令 ,代進(jìn)上面的那個(gè)高斯公式。假設(shè)我們?nèi)?biāo)準(zhǔn)差為1,公式可以簡化為:
???????????
對兩邊取對數(shù),可以得到:
????????????
注意,我們得到了和 損失函數(shù)相同的優(yōu)化目標(biāo)??偨Y(jié)一下就是:
??可以放一張經(jīng)典的圖:
??回顧下上面的討論,我們實(shí)際上相當(dāng)于做了一個(gè)假定:這一批數(shù)據(jù)都是Sample自同一個(gè)高斯分布。這個(gè)高斯分布的均值是樣本均值,標(biāo)準(zhǔn)差為1。注意,在極大似然估計(jì)的框架下假設(shè)高斯分布是一個(gè)很常用的套路,因?yàn)楦咚狗植际撬蟹植贾徐兀ú淮_定度)最大的分布,也就是說高斯分布本身注入了最少的先驗(yàn)知識。
??那說了這么多, 損失函數(shù)和圖像模糊到底有什么關(guān)系呢?我們來考慮一個(gè)例子,來看看生活中真實(shí)的數(shù)據(jù)是啥樣的。
??【假如我們在Google圖片中搜索一個(gè)詞“Car”,會得到很多結(jié)果。這里面包括了各種顏色和類型的Car,甚至能搜到車模(哪個(gè)車模?)...換句話說,根據(jù)一個(gè)簡單的詞Car,有很多種生成圖像的方式,不同方式生成的圖像可能具有相同的概率(比如我們看到賓利或者汽車總動員都會想到Car)。進(jìn)一步,我們可以認(rèn)為,在所有和Car有關(guān)的圖像構(gòu)成的真實(shí)分布上,有許多個(gè)峰值,比如跑車是一個(gè)峰,車模是一個(gè)峰,等等。對于這種圖像分布,我們稱之為:多模態(tài) (Multimodal) ?!?/p>
注:這里其實(shí)還是不是很明白Multimodal的意思,Ian說的Multi-modal是說很多任務(wù)對于同一個(gè)輸入,對應(yīng)著多個(gè)正確的輸出。那么那些不屬于Multimodal呢?很多圖像去噪任務(wù),輸入噪聲圖像,輸出去噪圖像,算不算Multimodal呢?還是說生活中的圖像都是multimodal??
??所以問題就出現(xiàn)了。假如我們用 (或者 )作為損失函數(shù),其潛在的假設(shè)是我們采集到的樣本是都來在同一個(gè)高斯分布。但是生活中的實(shí)際圖像,由于具有多種特征,大部分圖像分布的流形都不只有一個(gè)峰。如果我們強(qiáng)行用一個(gè)單峰的高斯分布,去擬合一個(gè)多模態(tài)的數(shù)據(jù)分布,會產(chǎn)生什么樣的結(jié)果呢?
??我們舉一個(gè)兩個(gè)峰的分布(bimodal distribution)作為例子。假如我們的數(shù)據(jù)集是由兩種明顯不同類型的數(shù)據(jù)構(gòu)成的,表現(xiàn)在數(shù)據(jù)分布上有兩個(gè)峰值。因?yàn)? 損失函數(shù)需要減小生成分布和數(shù)據(jù)集經(jīng)驗(yàn)分布(雙峰分布)直接的差距,而生成分布具有兩種類型,我們的模型會盡力去“滿足”這兩個(gè)子分布,最后得到的優(yōu)化結(jié)果如下圖所示,即一個(gè)位于雙峰之間的高斯分布。直觀上說,這是由于模型位于中間位置時(shí),總體的距離最小。
??擴(kuò)展到實(shí)際應(yīng)用上就是說,當(dāng)我們在使用 損失訓(xùn)練出來的分布中采樣時(shí),雖然采集到的樣本屬于數(shù)據(jù)集真實(shí)分布的幾率很低,但是由于處于中間位置,會被大量采集出來。故我們最終得到的生成樣本實(shí)質(zhì)上是兩種模式(mode)的數(shù)據(jù)集采集的樣本的平均的效果,故產(chǎn)生了模糊圖像。
??有許多 loss的替代品可以用于緩解這一現(xiàn)象。如GAN loss,甚至 loss都會取得相對sharp的結(jié)果。從直觀上說,對于同一個(gè)輸入,GAN loss不會平均所有可能的Sample,而是隨機(jī)拿出一個(gè)Sample作為生成的樣本。(這一現(xiàn)象有沒有理論一點(diǎn)的解釋?GAN loss為什么可以實(shí)現(xiàn)這種操作?)
在2017年的一篇論文 The Unreasonable Effectiveness of Texture Transfer for Single Image Super-resolution 中,作者也提到了在優(yōu)化MSE時(shí)由于"regression-to-the-mean"問題,導(dǎo)致預(yù)測結(jié)果損失高頻信息的情況。
不寫出y=f(x)這樣的表達(dá)式,由隱函數(shù)的等式直接繪制圖像,以x2+y2+xy=1的圖像為例,使用sympy間接調(diào)用matplotlib工具的代碼和該二次曲線圖像如下(注意python里的乘冪符號是**而不是^,還有,python的sympy工具箱的等式不是a==b,而是a-b或者Eq(a,b),這幾點(diǎn)和matlab的區(qū)別很大)
直接在命令提示行的里面運(yùn)行代碼的效果
from sympy import *;
x,y=symbols('x y');
plotting.plot_implicit(x**2+y**2+x*y-1);
平滑函數(shù)。
交叉熵?fù)p失函數(shù),也稱為對數(shù)損失或者logistic損失。當(dāng)模型產(chǎn)生了預(yù)測值之后,將對類別的預(yù)測概率與真實(shí)值(由0或1組成)進(jìn)行不比較,計(jì)算所產(chǎn)生的損失,然后基于此損失設(shè)置對數(shù)形式的懲罰項(xiàng)。
在神經(jīng)網(wǎng)絡(luò)中,所使用的Softmax函數(shù)是連續(xù)可導(dǎo)函數(shù),這使得可以計(jì)算出損失函數(shù)相對于神經(jīng)網(wǎng)絡(luò)中每個(gè)權(quán)重的導(dǎo)數(shù)(在《機(jī)器學(xué)習(xí)數(shù)學(xué)基礎(chǔ)》中有對此的完整推導(dǎo)過程和案例,這樣就可以相應(yīng)地調(diào)整模型的權(quán)重以最小化損失函數(shù)。
擴(kuò)展資料:
注意事項(xiàng):
當(dāng)預(yù)測類別為二分類時(shí),交叉熵?fù)p失函數(shù)的計(jì)算公式如下圖,其中y是真實(shí)類別(值為0或1),p是預(yù)測類別的概率(值為0~1之間的小數(shù))。
計(jì)算二分類的交叉熵?fù)p失函數(shù)的python代碼如下圖,其中esp是一個(gè)極小值,第五行代碼clip的目的是保證預(yù)測概率的值在0~1之間,輸出的損失值數(shù)組求和后,就是損失函數(shù)最后的返回值。
參考資料來源:百度百科-交叉熵
參考資料來源:百度百科-損失函數(shù)