論文:An Adversarial Approach to Hard Triplet Generation
石屏ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為創(chuàng)新互聯(lián)公司的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
ReID問題中都是根據(jù)圖像embedding之間的特征距離來判斷相似度,但是平常訓(xùn)練都是根據(jù)訓(xùn)練集的ID做監(jiān)督,用softmax進(jìn)行分類。而Triplet loss能夠直接對(duì)圖像的特征進(jìn)行監(jiān)督,更有利于學(xué)到好的embedding。
損失函數(shù):
hard triplets指的是找到minibatch中 最大的一對(duì)三元組,即找到 最大的和 最小的。
但是這樣直接的方式不一定能找出具有代表性的三元組,會(huì)對(duì)網(wǎng)絡(luò)的收斂(convergence)造成問題。
三元組損失函數(shù)對(duì)于三元組的選擇非常敏感,經(jīng)常會(huì)有難以收斂和局部最優(yōu)的問題,為此 [1] 提出了 Coupled Cluster Loss ,使得訓(xùn)練階段更加穩(wěn)定,網(wǎng)絡(luò)收斂的更加快。
特征提取網(wǎng)絡(luò) 的輸出 ,對(duì)于三元組 ,傳統(tǒng)方法的損失函數(shù)是: ,其中 是 距離。
給出一個(gè)生成器 ,通過這個(gè)生成器生成一個(gè)新的sample , 的目的是使得正樣本之間距離增大,負(fù)樣本之間距離減小,目的是為了生成更harder的sample.
通過降低以下loss來訓(xùn)練 :
隨后固定學(xué)習(xí)過的 ,接著訓(xùn)練 :
但是光靠上面的方法并不夠有效,因?yàn)闆]有限制的情況下, 會(huì)任意操縱(arbitrarily manipulate) 生成的特征向量。打個(gè)比方說, 可能隨意輸出一個(gè)向量,使得 非常小,但是這個(gè)對(duì)于訓(xùn)練來說沒有意義。為了限制 ,需要他輸出的向量不改變?cè)鞠蛄康臉?biāo)簽。
給出一個(gè)判別器 ,對(duì)于每個(gè)特征向量, 能將其分成(K+1)類,K表示真實(shí)存在的類別,+1代表fake類別。通過降低以下loss來訓(xùn)練 :
其中前半部分讓 分辨 生成的特征向量的標(biāo)簽
表示softmax loss,后半部分讓 分辨 生成的特征向量。
表示fake類別。
之前提到 應(yīng)該保留住輸入的特征向量的標(biāo)簽。因此文章中提出下面的loss:
與之前的公式(2) 結(jié)合,通過降低以下loss來訓(xùn)練 :
其中classification(5)確保了 能夠正確分類
首先,basic model同時(shí)降低softmax loss和triplet loss。隨后 被加入到basic model。
softmax 和similarity loss在之前的研究中有被結(jié)合起來,但是他們之間的關(guān)系并沒有被深入的進(jìn)行研究。
在特征向量空間(feature embedding space)中,所有相同類別的數(shù)據(jù)坐標(biāo)經(jīng)過 規(guī)范化后應(yīng)該是在一個(gè)單位超球面(unit hyper sphere)上,圖2中的decision boundary將不同類別的數(shù)據(jù)分成K個(gè)類別,這種結(jié)構(gòu)能加速收斂并達(dá)到理想化(optimal)的結(jié)果。但是傳統(tǒng)的softmax loss不能很好兼容基于特征距離(distance-based)的similarity loss。如圖3(b)中。由于偏置b的存在,decision boundary不能夠通過原點(diǎn),因此在 規(guī)范化后,不同類別的點(diǎn)可能會(huì)重合。這將導(dǎo)致類間距離(inter-class)的縮小,影響特征向量的效果。因此文章中提出了一個(gè)沒有偏執(zhí)b的softmax loss。如圖3(b)所示,這種無偏置softmax損失的所有決策邊界都通過原點(diǎn),并且決策區(qū)域是錐形的,其頂點(diǎn)位于原點(diǎn)。因此,同一類的樣本在單位超球面上具有單獨(dú)的投影,這確保了來自不同類別的示例之間的長的類間距離(inter-class)。
給定一個(gè)訓(xùn)練三元組 其中 為anchor圖片 的類別。無偏置的softmax定義為:
其中 表示CNN網(wǎng)絡(luò)的輸出特征向量。隨后網(wǎng)絡(luò) 通過縮小 來訓(xùn)練(SGD)。
圖4左邊部分所示, 的輸入是L維的特征向量,這個(gè)向量是網(wǎng)絡(luò) 的輸出,同時(shí) 的輸出具有相同的維度。 包含4個(gè)全連接層,前兩個(gè)降維,后兩個(gè)升維,每一層后面跟了BatchNormalization和ReLU。最后的輸出是輸入向量和輸出向量的對(duì)應(yīng)位置相加。
另外,判別器 接受 產(chǎn)生的L維特征向量,并將其分成K+1類。 也有4個(gè)全連接層,前三個(gè)后面跟了BatchNormalization和ReLU,最后一個(gè)跟的softmax。(怎么感覺 接受的是應(yīng)該是 產(chǎn)生的?)
文章中使用的優(yōu)化器是SGD,學(xué)習(xí)率 ,步驟在Section 3中介紹。
此外,文章中嘗試構(gòu)建一個(gè)更強(qiáng)大的提取器 ,允許HTG從細(xì)粒度的局部細(xì)節(jié)創(chuàng)建更hard三元組,因此視覺識(shí)別模型可以用更難的三元組示例挑戰(zhàn)變得更加魯棒。
實(shí)際上,局部特征在許多細(xì)粒度的視覺識(shí)別任務(wù)中起著關(guān)鍵作用。用于圖像分類的典型深度神經(jīng)網(wǎng)絡(luò)擅長提取高級(jí)全局特征,但常常缺少局部細(xì)節(jié)的特征。這可能會(huì)限制HTG探索本地細(xì)節(jié)以創(chuàng)建更難的triplets。例如,在沒有本地細(xì)節(jié)的情況下,HTG無法生成能夠識(shí)別不同車輛的大多數(shù)有辨別力的部分的三元組,例如徽標(biāo),燈光和天窗。
為了解決這個(gè)問題,文章中介紹了一種更加關(guān)注局部特征的關(guān)鍵點(diǎn)圖。例如ResNet-18包含了4個(gè)連續(xù)的卷積塊,在最后一個(gè)卷積塊后面跟著一個(gè)全連接層作為全局特征 .對(duì)于卷積塊 來說,他的輸出特征圖可以表示為 .隨后我們加一個(gè)局部分支叫做keypoint bolck,它具有類似于卷積塊的結(jié)構(gòu),用于本地化關(guān)鍵點(diǎn)的分布,這些關(guān)鍵點(diǎn)可以關(guān)注最具辨別力的部分以創(chuàng)建更難的三元組。高級(jí)語義特征映射是稀疏的(不太明白這里),我們假設(shè)關(guān)鍵點(diǎn)層的每個(gè)通道對(duì)應(yīng)于特定類型的關(guān)鍵點(diǎn),因此我們?cè)陉P(guān)鍵點(diǎn)層的輸出特征上應(yīng)用通道層面(channel-wise)softmax來估計(jì)不同圖像位置上關(guān)鍵點(diǎn)的密度:
是clock-l的輸出特征圖在通道c及位置(i,j)上的的點(diǎn)。
block-l局部特征 :
文章中提取了bolck-3和block-4的特征,和全劇特征concat后作為最后的輸出特征。
備注:這部分沒有看的很明白,我理解的大概意思是在網(wǎng)絡(luò)的中間層先做一個(gè)softmax,最后和全局特征的softmax concat起來。
可以
最近項(xiàng)目中涉及基于Gradient Boosting Regression 算法擬合時(shí)間序列曲線的內(nèi)容,利用python機(jī)器學(xué)習(xí)包?scikit-learn 中的GradientBoostingRegressor完成
因此就學(xué)習(xí)了下Gradient Boosting算法,在這里分享下我的理解
Boosting 算法簡介
Boosting算法,我理解的就是兩個(gè)思想:
1)“三個(gè)臭皮匠頂個(gè)諸葛亮”,一堆弱分類器的組合就可以成為一個(gè)強(qiáng)分類器;
2)“知錯(cuò)能改,善莫大焉”,不斷地在錯(cuò)誤中學(xué)習(xí),迭代來降低犯錯(cuò)概率
當(dāng)然,要理解好Boosting的思想,首先還是從弱學(xué)習(xí)算法和強(qiáng)學(xué)習(xí)算法來引入:
1)強(qiáng)學(xué)習(xí)算法:存在一個(gè)多項(xiàng)式時(shí)間的學(xué)習(xí)算法以識(shí)別一組概念,且識(shí)別的正確率很高;
2)弱學(xué)習(xí)算法:識(shí)別一組概念的正確率僅比隨機(jī)猜測(cè)略好;
Kearns Valiant證明了弱學(xué)習(xí)算法與強(qiáng)學(xué)習(xí)算法的等價(jià)問題,如果兩者等價(jià),只需找到一個(gè)比隨機(jī)猜測(cè)略好的學(xué)習(xí)算法,就可以將其提升為強(qiáng)學(xué)習(xí)算法。
那么是怎么實(shí)現(xiàn)“知錯(cuò)就改”的呢?
Boosting算法,通過一系列的迭代來優(yōu)化分類結(jié)果,每迭代一次引入一個(gè)弱分類器,來克服現(xiàn)在已經(jīng)存在的弱分類器組合的shortcomings
在Adaboost算法中,這個(gè)shortcomings的表征就是權(quán)值高的樣本點(diǎn)
而在Gradient Boosting算法中,這個(gè)shortcomings的表征就是梯度
無論是Adaboost還是Gradient Boosting,都是通過這個(gè)shortcomings來告訴學(xué)習(xí)器怎么去提升模型,也就是“Boosting”這個(gè)名字的由來吧
Adaboost算法
Adaboost是由Freund 和 Schapire在1997年提出的,在整個(gè)訓(xùn)練集上維護(hù)一個(gè)分布權(quán)值向量W,用賦予權(quán)重的訓(xùn)練集通過弱分類算法產(chǎn)生分類假設(shè)(基學(xué)習(xí)器)y(x),然后計(jì)算錯(cuò)誤率,用得到的錯(cuò)誤率去更新分布權(quán)值向量w,對(duì)錯(cuò)誤分類的樣本分配更大的權(quán)值,正確分類的樣本賦予更小的權(quán)值。每次更新后用相同的弱分類算法產(chǎn)生新的分類假設(shè),這些分類假設(shè)的序列構(gòu)成多分類器。對(duì)這些多分類器用加權(quán)的方法進(jìn)行聯(lián)合,最后得到?jīng)Q策結(jié)果。
其結(jié)構(gòu)如下圖所示:
前一個(gè)學(xué)習(xí)器改變權(quán)重w,然后再經(jīng)過下一個(gè)學(xué)習(xí)器,最終所有的學(xué)習(xí)器共同組成最后的學(xué)習(xí)器。
如果一個(gè)樣本在前一個(gè)學(xué)習(xí)器中被誤分,那么它所對(duì)應(yīng)的權(quán)重會(huì)被加重,相應(yīng)地,被正確分類的樣本的權(quán)重會(huì)降低。
這里主要涉及到兩個(gè)權(quán)重的計(jì)算問題:
1)樣本的權(quán)值
1 沒有先驗(yàn)知識(shí)的情況下,初始的分布應(yīng)為等概分布,樣本數(shù)目為n,權(quán)值為1/n
2 每一次的迭代更新權(quán)值,提高分錯(cuò)樣本的權(quán)重
2)弱學(xué)習(xí)器的權(quán)值
1 最后的強(qiáng)學(xué)習(xí)器是通過多個(gè)基學(xué)習(xí)器通過權(quán)值組合得到的。
2 通過權(quán)值體現(xiàn)不同基學(xué)習(xí)器的影響,正確率高的基學(xué)習(xí)器權(quán)重高。實(shí)際上是分類誤差的一個(gè)函數(shù)
Gradient Boosting
和Adaboost不同,Gradient Boosting 在迭代的時(shí)候選擇梯度下降的方向來保證最后的結(jié)果最好。
損失函數(shù)用來描述模型的“靠譜”程度,假設(shè)模型沒有過擬合,損失函數(shù)越大,模型的錯(cuò)誤率越高
如果我們的模型能夠讓損失函數(shù)持續(xù)的下降,則說明我們的模型在不停的改進(jìn),而最好的方式就是讓損失函數(shù)在其梯度方向上下降。
下面這個(gè)流程圖是Gradient Boosting的經(jīng)典圖了,數(shù)學(xué)推導(dǎo)并不復(fù)雜,只要理解了Boosting的思想,不難看懂
這里是直接對(duì)模型的函數(shù)進(jìn)行更新,利用了參數(shù)可加性推廣到函數(shù)空間。
訓(xùn)練F0-Fm一共m個(gè)基學(xué)習(xí)器,沿著梯度下降的方向不斷更新ρm和am
GradientBoostingRegressor實(shí)現(xiàn)
python中的scikit-learn包提供了很方便的GradientBoostingRegressor和GBDT的函數(shù)接口,可以很方便的調(diào)用函數(shù)就可以完成模型的訓(xùn)練和預(yù)測(cè)
GradientBoostingRegressor函數(shù)的參數(shù)如下:
class sklearn.ensemble.GradientBoostingRegressor(loss='ls', learning_rate=0.1, n_estimators=100, subsample=1.0, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_depth=3, init=None, random_state=None, max_features=None, alpha=0.9, verbose=0, max_leaf_nodes=None, warm_start=False, presort='auto')[source]?
loss: 選擇損失函數(shù),默認(rèn)值為ls(least squres)
learning_rate: 學(xué)習(xí)率,模型是0.1
n_estimators: 弱學(xué)習(xí)器的數(shù)目,默認(rèn)值100
max_depth: 每一個(gè)學(xué)習(xí)器的最大深度,限制回歸樹的節(jié)點(diǎn)數(shù)目,默認(rèn)為3
min_samples_split: 可以劃分為內(nèi)部節(jié)點(diǎn)的最小樣本數(shù),默認(rèn)為2
min_samples_leaf: 葉節(jié)點(diǎn)所需的最小樣本數(shù),默認(rèn)為1
……
可以參考
官方文檔里帶了一個(gè)很好的例子,以500個(gè)弱學(xué)習(xí)器,最小平方誤差的梯度提升模型,做波士頓房價(jià)預(yù)測(cè),代碼和結(jié)果如下:
1 import numpy as np 2 import matplotlib.pyplot as plt 3 ?4 from sklearn import ensemble 5 from sklearn import datasets 6 from sklearn.utils import shuffle 7 from sklearn.metrics import mean_squared_error 8 ?9 ###############################################################################10 # Load data11 boston = datasets.load_boston()12 X, y = shuffle(boston.data, boston.target, random_state=13)13 X = X.astype(np.float32)14 offset = int(X.shape[0] * 0.9)15 X_train, y_train = X[:offset], y[:offset]16 X_test, y_test = X[offset:], y[offset:]17 18 ###############################################################################19 # Fit regression model20 params = {'n_estimators': 500, 'max_depth': 4, 'min_samples_split': 1,21 ? ? ? ? ? 'learning_rate': 0.01, 'loss': 'ls'}22 clf = ensemble.GradientBoostingRegressor(**params)23 24 clf.fit(X_train, y_train)25 mse = mean_squared_error(y_test, clf.predict(X_test))26 print("MSE: %.4f" % mse)27 28 ###############################################################################29 # Plot training deviance30 31 # compute test set deviance32 test_score = np.zeros((params['n_estimators'],), dtype=np.float64)33 34 for i, y_pred in enumerate(clf.staged_predict(X_test)):35 ? ? test_score[i] = clf.loss_(y_test, y_pred)36 37 plt.figure(figsize=(12, 6))38 plt.subplot(1, 2, 1)39 plt.title('Deviance')40 plt.plot(np.arange(params['n_estimators']) + 1, clf.train_score_, 'b-',41 ? ? ? ? ?label='Training Set Deviance')42 plt.plot(np.arange(params['n_estimators']) + 1, test_score, 'r-',43 ? ? ? ? ?label='Test Set Deviance')44 plt.legend(loc='upper right')45 plt.xlabel('Boosting Iterations')46 plt.ylabel('Deviance')47 48 ###############################################################################49 # Plot feature importance50 feature_importance = clf.feature_importances_51 # make importances relative to max importance52 feature_importance = 100.0 * (feature_importance / feature_importance.max())53 sorted_idx = np.argsort(feature_importance)54 pos = np.arange(sorted_idx.shape[0]) + .555 plt.subplot(1, 2, 2)56 plt.barh(pos, feature_importance[sorted_idx], align='center')57 plt.yticks(pos, boston.feature_names[sorted_idx])58 plt.xlabel('Relative Importance')59 plt.title('Variable Importance')60 plt.show()
可以發(fā)現(xiàn),如果要用Gradient Boosting 算法的話,在sklearn包里調(diào)用還是非常方便的,幾行代碼即可完成,大部分的工作應(yīng)該是在特征提取上。
感覺目前做數(shù)據(jù)挖掘的工作,特征設(shè)計(jì)是最重要的,據(jù)說現(xiàn)在kaggle競(jìng)賽基本是GBDT的天下,優(yōu)劣其實(shí)還是特征上,感覺做項(xiàng)目也是,不斷的在研究數(shù)據(jù)中培養(yǎng)對(duì)數(shù)據(jù)的敏感度。
從零開始用Python構(gòu)建神經(jīng)網(wǎng)絡(luò)
動(dòng)機(jī):為了更加深入的理解深度學(xué)習(xí),我們將使用 python 語言從頭搭建一個(gè)神經(jīng)網(wǎng)絡(luò),而不是使用像 Tensorflow 那樣的封裝好的框架。我認(rèn)為理解神經(jīng)網(wǎng)絡(luò)的內(nèi)部工作原理,對(duì)數(shù)據(jù)科學(xué)家來說至關(guān)重要。
這篇文章的內(nèi)容是我的所學(xué),希望也能對(duì)你有所幫助。
神經(jīng)網(wǎng)絡(luò)是什么?
介紹神經(jīng)網(wǎng)絡(luò)的文章大多數(shù)都會(huì)將它和大腦進(jìn)行類比。如果你沒有深入研究過大腦與神經(jīng)網(wǎng)絡(luò)的類比,那么將神經(jīng)網(wǎng)絡(luò)解釋為一種將給定輸入映射為期望輸出的數(shù)學(xué)關(guān)系會(huì)更容易理解。
神經(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)(注意:我們?cè)谟?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ò)的輸出 ? 為:
你可能會(huì)注意到,在上面的等式中,輸出 ? 是 W 和 b 函數(shù)。
因此 W 和 b 的值影響預(yù)測(cè)的準(zhǔn)確率. 所以根據(jù)輸入數(shù)據(jù)對(duì) W 和 b 調(diào)優(yōu)的過程就被成為訓(xùn)練神經(jīng)網(wǎng)絡(luò)。
每步訓(xùn)練迭代包含以下兩個(gè)部分:
? 計(jì)算預(yù)測(cè)結(jié)果 ?,這一步稱為前向傳播
? 更新 W 和 b,,這一步成為反向傳播
下面的順序圖展示了這個(gè)過程:
前向傳播
正如我們?cè)谏蠄D中看到的,前向傳播只是簡單的計(jì)算。對(duì)于一個(gè)基本的 2 層網(wǎng)絡(luò)來說,它的輸出是這樣的:
我們?cè)?NeuralNetwork 類中增加一個(gè)計(jì)算前向傳播的函數(shù)。為了簡單起見我們假設(shè)偏置 b 為0:
但是我們還需要一個(gè)方法來評(píng)估預(yù)測(cè)結(jié)果的好壞(即預(yù)測(cè)值和真實(shí)值的誤差)。這就要用到損失函數(shù)。
損失函數(shù)
常用的損失函數(shù)有很多種,根據(jù)模型的需求來選擇。在本教程中,我們使用誤差平方和作為損失函數(shù)。
誤差平方和是求每個(gè)預(yù)測(cè)值和真實(shí)值之間的誤差再求和,這個(gè)誤差是他們的差值求平方以便我們觀察誤差的絕對(duì)值。
訓(xùn)練的目標(biāo)是找到一組 W 和 b,使得損失函數(shù)最好小,也即預(yù)測(cè)值和真實(shí)值之間的距離最小。
反向傳播
我們已經(jīng)度量出了預(yù)測(cè)的誤差(損失),現(xiàn)在需要找到一種方法來傳播誤差,并以此更新權(quán)值和偏置。
為了知道如何適當(dāng)?shù)恼{(diào)整權(quán)值和偏置,我們需要知道損失函數(shù)對(duì)權(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ù)對(duì)權(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ù)對(duì) W 和 b 的導(dǎo)數(shù)。注意,為了簡單起見。我們只展示了假設(shè)網(wǎng)絡(luò)只有 1 層的偏導(dǎo)數(shù)。
這雖然很簡陋,但是我們依然能得到想要的結(jié)果—損失函數(shù)對(duì)權(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 次迭代,看看會(huì)發(fā)生什么。 注意觀察下面每次迭代的損失函數(shù),我們可以清楚地看到損失函數(shù)單調(diào)遞減到最小值。這與我們之前介紹的梯度下降法一致。
讓我們看看經(jīng)過 1500 次迭代后的神經(jīng)網(wǎng)絡(luò)的最終預(yù)測(cè)結(jié)果:
經(jīng)過 1500 次迭代訓(xùn)練后的預(yù)測(cè)結(jié)果
我們成功了!我們應(yīng)用前向和方向傳播算法成功的訓(xùn)練了神經(jīng)網(wǎng)絡(luò)并且預(yù)測(cè)結(jié)果收斂于真實(shí)值。
注意預(yù)測(cè)值和真實(shí)值之間存在細(xì)微的誤差是允許的。這樣可以防止模型過擬合并且使得神經(jīng)網(wǎng)絡(luò)對(duì)于未知數(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í)率
? 在面對(duì)圖像分類任務(wù)的時(shí)候使用卷積神經(jīng)網(wǎng)絡(luò)
我很快會(huì)寫更多關(guān)于這個(gè)主題的內(nèi)容,敬請(qǐng)期待!
最后的想法
我自己也從零開始寫了很多神經(jīng)網(wǎng)絡(luò)的代碼
雖然可以使用諸如 Tensorflow 和 Keras 這樣的深度學(xué)習(xí)框架方便的搭建深層網(wǎng)絡(luò)而不需要完全理解其內(nèi)部工作原理。但是我覺得對(duì)于有追求的數(shù)據(jù)科學(xué)家來說,理解內(nèi)部原理是非常有益的。
這種練習(xí)對(duì)我自己來說已成成為重要的時(shí)間投入,希望也能對(duì)你有所幫助
標(biāo)題名稱:對(duì)抗損失函數(shù)python的簡單介紹
當(dāng)前路徑:http://chinadenli.net/article46/hddihg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作、App開發(fā)、動(dòng)態(tài)網(wǎng)站、網(wǎng)站營銷、網(wǎng)站維護(hù)、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)