(萬字干貨)如何訓(xùn)練優(yōu)化“AI神經(jīng)網(wǎng)絡(luò)”模型?

0 評論 2260 瀏覽 21 收藏 40 分鐘

在上一篇文章中,我們詳細(xì)介紹了神經(jīng)網(wǎng)絡(luò)的基本概念和原理,神經(jīng)網(wǎng)絡(luò)的優(yōu)勢和應(yīng)用場景,以及神經(jīng)網(wǎng)絡(luò)的產(chǎn)品案例:網(wǎng)易有道AI翻譯。如果想了解神經(jīng)網(wǎng)絡(luò)的更多詳情,可以翻閱我之前寫的《8000字干貨說清楚AI產(chǎn)品經(jīng)理必修的“神經(jīng)網(wǎng)絡(luò)” 》

在了解神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)和原理后,我產(chǎn)生了進(jìn)一步的好奇,明明就是一些抽象的數(shù)學(xué)模型卻可以實現(xiàn)類似人腦的智慧,神經(jīng)網(wǎng)絡(luò)是如何通過數(shù)據(jù)訓(xùn)練來實現(xiàn)這樣奇妙的效果呢?本篇就以這個問題作為切入點來展開說說。

本篇為大家揭曉,AI如此“神機妙算”的背后,也是需要經(jīng)歷一段訓(xùn)練過程的,如何訓(xùn)練AI神經(jīng)網(wǎng)絡(luò)?又如何識別訓(xùn)練過程是有效的?

在這個碎片化學(xué)習(xí)的環(huán)境中,也許已經(jīng)很少有人可以沉下心來看完一篇長文了,但我還是希望你可以堅持看完,相信會給你帶來不一樣的,更深厚的收獲。
照例,開篇提供本篇文章結(jié)構(gòu)導(dǎo)圖,方便大家在閱讀前總攬全局,有大致的畫面框架。

一、AI神經(jīng)網(wǎng)絡(luò)需要被訓(xùn)練后,才能派上用場

看過上一篇文章的朋友會知道,神經(jīng)網(wǎng)絡(luò)中有兩個主要部分,:結(jié)構(gòu)和權(quán)重。結(jié)構(gòu)包括神經(jīng)元及其連接, 權(quán)重是一些數(shù)字,是連接神經(jīng)元之間的參數(shù)。

它們可以微調(diào)神經(jīng)元中的數(shù)學(xué)運算方式,從而得到一個輸出。如果神經(jīng)網(wǎng)絡(luò)犯了錯誤,也就是說輸出的結(jié)果和預(yù)期不符,這通常意味著權(quán)重沒有正確調(diào)整,我們需要更新它們,以便它們下次做出更好的預(yù)測。

聽起來是不是覺得很簡單,其實這背后的訓(xùn)練過程是很復(fù)雜的,我這樣說只是為了好理解一些。但我們畢竟是在討論AI領(lǐng)域的知識,內(nèi)容中無法避免會遇到一些專業(yè)詞匯,于是乎,后面講到了我再逐一解釋吧。

神經(jīng)網(wǎng)絡(luò)中的權(quán)重決定了不同神經(jīng)元之間的連接強度,為神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)找到最佳權(quán)重的過程稱為優(yōu)化。

神經(jīng)網(wǎng)絡(luò)作為一種模型,想讓它真正有“神機妙算”的本領(lǐng),就需要我們用大量的數(shù)據(jù)去訓(xùn)練它,未被訓(xùn)練過的模型往往容易給出很多的錯誤答案,這也是為什么市面上那么多AI模型,需要被數(shù)據(jù)大量訓(xùn)練后才能真正面市了。

接下來,我們可以再追問一步,計算機是如何通過數(shù)據(jù)訓(xùn)練并優(yōu)化神經(jīng)網(wǎng)絡(luò)的呢?

提到訓(xùn)練神經(jīng)網(wǎng)絡(luò),我們就離不開被數(shù)學(xué)支配的現(xiàn)實,神經(jīng)網(wǎng)絡(luò)的每一個神經(jīng)元中都裝著數(shù)學(xué)模型,若以非線性函數(shù)來舉例解釋神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程,些許復(fù)雜了,也不易理解。

還是以線性回歸為例吧,畢竟本篇的重點不是在數(shù)學(xué)模型上,而是說清楚神經(jīng)網(wǎng)絡(luò)是如何訓(xùn)練和優(yōu)化的。

所以,我們以線性回歸為例,來聊聊神經(jīng)網(wǎng)絡(luò)的訓(xùn)練優(yōu)化策略。

二、以線性回歸為例的訓(xùn)練優(yōu)化策略

線性回歸是一種統(tǒng)計學(xué)方法,用于研究兩個或多個變量之間的關(guān)系。它基于一個假設(shè),即觀察到的數(shù)據(jù)點可以通過一條直線(在二維空間中)或一個超平面(在多維空間中)進(jìn)行最佳擬合。

線性回歸的目標(biāo)是找到這條直線或超平面的參數(shù),使得預(yù)測值與實際觀測值之間的誤差最小化。

基于線性回歸的概念和特點,我們可以發(fā)現(xiàn),在機器學(xué)習(xí)領(lǐng)域,線性回歸可以用來做數(shù)據(jù)預(yù)測。通過擬合數(shù)據(jù)點的最佳直線,我們可以預(yù)測連續(xù)值的結(jié)果。

比如,我們想要知道一家度假村的游客人數(shù)和氣溫之間有什么關(guān)系,我們需要知道過去的數(shù)據(jù),根據(jù)歷史數(shù)據(jù)找到和數(shù)據(jù)最擬合的公式,假設(shè)這個公式可視化為一條折線圖,可以直觀表示兩個數(shù)據(jù)之間的關(guān)系。

得出預(yù)測線后,我們就可以據(jù)此來預(yù)測未來日子里,不同氣溫下會有多少游客量,幫助預(yù)測明年在不同季節(jié)時,提前準(zhǔn)備承載游客量的應(yīng)對方案,從而幫助度假村提高整體運營效益。

我們回想一下,圖中的折線是如何畫出來的?也就是說,計算機是如何知道這條折線可以最佳擬合游客人數(shù)和氣溫之間的關(guān)系呢?

這就是線性回歸在背后起到的關(guān)鍵作用。

剛開始,計算機畫一條隨機的直線, 這條直線大概率就是不準(zhǔn)的。所以計算機就需要計算這條直線和每個數(shù)據(jù)點之間的距離, 全部加起來, 量化直線上的數(shù)據(jù)和真實數(shù)據(jù)之間的差距。

下一步,已知差距就要減少差距,線性回歸的目標(biāo)是調(diào)整直線, 使誤差盡可能小, 我們通過歷史數(shù)據(jù)訓(xùn)練它,希望這條線符合訓(xùn)練數(shù)據(jù)。

最后,通過數(shù)據(jù)訓(xùn)練后,得出的直線被稱為最佳擬合線, 我們可以用這條直線, 預(yù)測在任何溫度下都會有多少游客出現(xiàn)。于是,你就看到計算機生成出了一條符合游客人數(shù)和氣溫之間關(guān)系的直線圖了。

在現(xiàn)實中,數(shù)據(jù)關(guān)系往往沒有那么簡單,游客的人數(shù)并不是只和氣溫有關(guān),為了預(yù)測更準(zhǔn)確的結(jié)果, 我們可能需要考慮兩個以上的特性。

比如說, 加上節(jié)假日特征后,可視化圖表會從2D圖變成3D圖,,我們的最佳擬合線更像是一個最佳擬合平面。如果我們再增加第四個特性, 比如是否下雨, 那么預(yù)測模型的圖表將會變得更加復(fù)雜,那就難以直觀可視化呈現(xiàn)清楚了。

所以,當(dāng)我們考慮更多的特性時,需要在圖中添加更多的維度,優(yōu)化問題會變得更復(fù)雜,擬合訓(xùn)練數(shù)據(jù)變得更加困難。

這時候,就是神經(jīng)網(wǎng)絡(luò)派上用場的地方了,通過將許多簡單神經(jīng)元和權(quán)重連接在一起,神經(jīng)網(wǎng)絡(luò)可以學(xué)習(xí)解決復(fù)雜的問題,最佳擬合線變成了一個奇怪的多維函數(shù)。

現(xiàn)實中,當(dāng)我們面臨復(fù)雜預(yù)測時,人工智能往往比普通人發(fā)揮得更好。比如,預(yù)測天氣。

三、用損失函數(shù)來表示誤差

了解了訓(xùn)練數(shù)據(jù)的優(yōu)化策略后,不如我們再好奇一點,進(jìn)一步追問下去,計算機是如何知道自己預(yù)測的數(shù)據(jù)和實際數(shù)據(jù)有差距呢?知道差距后又是如何減少差距,讓輸出的預(yù)測結(jié)果和實際結(jié)果最符合呢?

預(yù)測值和實際值之間的差距我們可以稱作誤差,計算機要想知道預(yù)測值與實際值之間是否產(chǎn)生誤差,還知道誤差有多大,就需要損失函數(shù)派上用場了。

神經(jīng)網(wǎng)絡(luò)中的損失函數(shù)是一種衡量模型預(yù)測結(jié)果與實際結(jié)果之間差距的方法。在訓(xùn)練神經(jīng)網(wǎng)絡(luò)時,我們的目標(biāo)是最小化損失函數(shù)以使模型更好地擬合數(shù)據(jù),從而實現(xiàn)更準(zhǔn)確的預(yù)期結(jié)果。

常見的損失函數(shù)有均方誤差(MSE)、絕對值誤差(MAE)、交叉熵?fù)p失(Cross-Entropy Loss)、Hinge損失(Hinge Loss)、對數(shù)損失(Log Loss)、Huber損失(Huber Loss)、平均絕對誤差(Mean Absolute Error,簡稱MAE)等。

這些損失函數(shù)在不同場景下有各自的優(yōu)勢和適用性,選擇合適的損失函數(shù)對于提高模型的性能至關(guān)重要。在實際應(yīng)用中,我們可以根據(jù)數(shù)據(jù)的特點和任務(wù)需求來選擇合適的損失函數(shù)。

以均方誤差(MSE)為例,均方誤差是預(yù)測值與真實值之間差值的平方和的平均值。具體來說,如果我們有n個預(yù)測值和對應(yīng)的實際值,MSE的計算公式就是:

MSE = (1/n) * Σ(yi – ?i)^2

其中,y_i表示實際值,?_i表示預(yù)測值,n表示樣本數(shù)量,Σ表示求和。

在均方誤差(MSE)的結(jié)果中,MSE越小,模型擬合效果越好,說明預(yù)測模型的準(zhǔn)確性越高。相反,如果MSE的值較大,那么預(yù)測模型的準(zhǔn)確性就相對較低。

因此,在實際應(yīng)用中,我們通常希望MSE的值盡可能小,以獲得更好的預(yù)測效果。

任何一個模型都有其適用的邊界,均方誤差也不例外。均方誤差(MSE)適用于連續(xù)型數(shù)據(jù),尤其是回歸問題。既然知道均方誤差在回歸問題上比較有效,我們也有必要先對回歸問題有個大概的了解。

在統(tǒng)計學(xué)和機器學(xué)習(xí)領(lǐng)域中,回歸問題常用于預(yù)測一個連續(xù)變量的值基于其他相關(guān)變量的影響,建立一個模型,通過分析已知的自變量和因變量的數(shù)據(jù),來理解它們之間的關(guān)系。

本文第二段“以線性回歸為例的訓(xùn)練優(yōu)化策略”中提到的線性回歸指的就是自變量和因變量之間存在線性關(guān)系的情況。

回歸問題在現(xiàn)實生活中有著廣泛的應(yīng)用,如預(yù)測房價,預(yù)測股票價格,又或者僅僅預(yù)測度假村游客人數(shù)和氣溫高低的關(guān)系等。

通過對大量歷史數(shù)據(jù)的分析和建模,我們可以為這些實際問題提供有價值的預(yù)測結(jié)果。當(dāng)然,前提是數(shù)據(jù)的質(zhì)量是優(yōu)質(zhì)的,模型的選擇是匹配的。

綜上所述,我們通過損失函數(shù)來表示模型預(yù)測的誤差,以均方誤差為例,MSE用于表示某個線性回歸模型預(yù)測的準(zhǔn)確率。

接第二段中度假村的例子,如果首次MSE的值為10,通過多次調(diào)整后,最后一次MSE的值為0.1,MSE從10降到了1,則說明調(diào)整后的預(yù)測模型變得更準(zhǔn)確了。

然而,我們不能僅從MSE的值來決定一個模型的好壞。這是因為,在不同的應(yīng)用場景中,我們對于模型的預(yù)測精度要求是不同的。

例如,在某些對預(yù)測精度要求極高的場景中,即使MSE的值只有0.01,我們也可能認(rèn)為這個模型的效果不好,而在一些對預(yù)測精度要求較低的場景中,即使MSE的值達(dá)到了0.1,我們也可能認(rèn)為這個模型的效果已經(jīng)足夠好。

值得注意的是:即使是標(biāo)準(zhǔn)化的AI模型,在實際運用中,也需要具體問題具體分析,切不可無腦照搬,采用什么模型,首要的就是先清楚待解決的問題是什么,只用清楚了問題的本質(zhì)才能找對適合的模型,這節(jié)奏,是不是有點拿著AI方案進(jìn)行私人訂制那味兒了?

四、用反向傳播來減少誤差

上段說到,損失函數(shù)可以優(yōu)化AI模型預(yù)測的準(zhǔn)確性,這話不全對。因為,僅僅是損失函數(shù),只是起到了一半的作用,需要完成另外一半,才可以真正達(dá)成模型的訓(xùn)練調(diào)優(yōu)。

這另外一半,就是反向傳播(Back Propagation),也被稱為反向訓(xùn)練或反向?qū)W習(xí),是一種重要的機器學(xué)習(xí)算法。

它的核心思想是通過計算網(wǎng)絡(luò)的輸出誤差并將其反向傳播到神經(jīng)網(wǎng)絡(luò)之前的每一層,從而更新原神經(jīng)網(wǎng)絡(luò)中的權(quán)重和偏置,以使得神經(jīng)網(wǎng)絡(luò)的預(yù)測結(jié)果更接近于真實的目標(biāo)值。

正如我們前幾篇文章中所了解到的,在神經(jīng)網(wǎng)絡(luò)中,每一層的神經(jīng)元都會對輸入數(shù)據(jù)進(jìn)行一系列的處理和變換,然后將處理后的結(jié)果傳遞給下一層。

這個過程可以被視為一個信息的傳遞過程,而在這個過程中,網(wǎng)絡(luò)的權(quán)重和偏置起著關(guān)鍵的作用。

然而,由于神經(jīng)網(wǎng)絡(luò)的復(fù)雜性,我們很難直接通過數(shù)學(xué)公式計算出神經(jīng)網(wǎng)絡(luò)的最優(yōu)權(quán)重和偏置。因此,我們需要使用一種迭代的方法來逐步優(yōu)化這些參數(shù),這就是反向傳播算法的思想起源。

所以說,為了訓(xùn)練優(yōu)化神經(jīng)網(wǎng)絡(luò),在損失函數(shù)得出誤差值后,反向傳播算法會將結(jié)果反饋給神經(jīng)網(wǎng)絡(luò)前幾層的神經(jīng)元并促其調(diào)整,一些神經(jīng)元的計算可能比其他神經(jīng)元的計算更容易造成錯誤,,權(quán)重會調(diào)整得多一些,錯誤少的就調(diào)整得少一些,層層幾次反饋和調(diào)整后,就可以讓計算機得出比之前更準(zhǔn)確的預(yù)測結(jié)果,神經(jīng)網(wǎng)絡(luò)模型也因此得到訓(xùn)練和優(yōu)化。

以上,就是反向傳播工作的基本原理了。不如,我們再往下追問一步,反向傳播算法是如何改變原神經(jīng)網(wǎng)絡(luò)的權(quán)重和偏置呢?

我們已知,反向傳播的基本思想是從輸出層開始,逐層向前計算每個神經(jīng)元對損失函數(shù)的負(fù)貢獻(xiàn)(即梯度),這其中的“梯度”,便可以更新神經(jīng)網(wǎng)絡(luò)的權(quán)重和偏置,從而獲得較低的損失函數(shù)值。

所以,我們還需要弄清楚兩個問題:1.梯度是什么?2.梯度是如何更新權(quán)重和偏置的?

簡而言之,梯度就是一個函數(shù)在某一點上的斜率或變化率。更具體地說,它表示的是函數(shù)輸出值關(guān)于輸入值的變化情況。這個梯度告訴我們,如果我們想減小損失函數(shù)的值,應(yīng)該如何調(diào)整網(wǎng)絡(luò)的權(quán)重。所以,我們需要先計算梯度,再更新網(wǎng)絡(luò)的權(quán)重。

在反向傳播算法中,梯度的計算分為前向傳播和反向傳播兩個階段。

在前向傳播階段,網(wǎng)絡(luò)首先將輸入數(shù)據(jù)傳遞到輸出層,然后逐層向前計算每一層的輸出和損失函數(shù)的值。

在這個過程中,每個神經(jīng)元都會根據(jù)其前一層的輸出和激活函數(shù)來計算自己的輸出,并將這個輸出傳遞給下一層。同時,每個神經(jīng)元還會計算其輸入與輸出之間的誤差,這個誤差會隨著數(shù)據(jù)在網(wǎng)絡(luò)中的傳播而被累積起來。

在前向傳播完成后,反向傳播階段開始計算梯度。

從輸出層開始,每個神經(jīng)元都會根據(jù)其輸出誤差和激活函數(shù)的導(dǎo)數(shù)來計算其在反向傳播過程中對損失函數(shù)的貢獻(xiàn)。

然后,這些梯度信息會逐層向后傳播,直到傳回輸入層。這樣,我們就可以得到每個參數(shù)對于損失函數(shù)的貢獻(xiàn),即參數(shù)的梯度。

為了計算梯度,我們需要用到鏈?zhǔn)椒▌t(Chain Rule)。

鏈?zhǔn)椒▌t是微積分中的一個基本法則,它描述了復(fù)合函數(shù)的導(dǎo)數(shù)是如何分解為簡單函數(shù)的導(dǎo)數(shù)之積的。

在反向傳播中,我們可以將整個神經(jīng)網(wǎng)絡(luò)看作是一個復(fù)合函數(shù),其中每個神經(jīng)元都是一個簡單函數(shù)。

通過鏈?zhǔn)椒▌t,我們可以計算出損失函數(shù)關(guān)于每個權(quán)重的偏導(dǎo)數(shù)(即梯度),然后用這些梯度去更新網(wǎng)絡(luò)的權(quán)重。

得出了梯度后,計算機又是如何借助梯度來更新權(quán)重和偏置的呢?

俗話說,用魔法打敗魔法,算法應(yīng)對算法,所以我們需要借助一些優(yōu)化算法來更新梯度,從而實現(xiàn)權(quán)重和偏置的有效優(yōu)化。

常見的優(yōu)化算法有梯度下降法、隨機梯度下降法(SGD)、Adam這三種。

以梯度下降法為例,展開說一下其實現(xiàn)原理。

梯度下降法是一種在機器學(xué)習(xí)和深度學(xué)習(xí)中常用的優(yōu)化算法。它的核心思想是沿著目標(biāo)函數(shù)的梯度負(fù)方向進(jìn)行迭代,從而找到使目標(biāo)函數(shù)取得最小值的點。

為了形象地解釋這一過程,我們可以將其比喻為一個登山者在攀登一座陡峭的山峰。

假設(shè)這座山峰就是我們的目標(biāo)函數(shù),我們希望找到一個最低的位置(即目標(biāo)函數(shù)的最小值)。然而,這座山是如此陡峭,以至于我們無法一眼就看到最低點在哪里。因此,我們需要借助一些工具來幫助我們找到這個位置。

最開始,我們需要確定一個初始位置,這個初始位置可以是一個隨機選擇的值,也可以是之前的迭代結(jié)果。然后,我們需要開始攀登。在每一步攀登中,我們都會測量當(dāng)前的海拔高度,這就是我們計算目標(biāo)函數(shù)值的過程。

接下來,我們需要判斷當(dāng)前的位置是否已經(jīng)足夠接近最低點。為了實現(xiàn)這一點,我們需要觀察并測量當(dāng)前位置附近的地形變化。在這座山的腳下到最高點之間,地形變化是逐漸減小的。

我們可以將這種地形變化稱為梯度。梯度的方向就是山坡最陡峭的地方,也就是我們下一步需要前進(jìn)的方向。通過不斷地測量梯度并朝相反的方向前進(jìn),我們可以逐漸降低海拔高度,從而更接近最低點。

在爬山過程中,我們還需要考慮一個重要的因素:步長。

步長過大可能導(dǎo)致我們跳過最低點,步長過小則可能導(dǎo)致我們陷入局部最低點而無法到達(dá)全局最低點。

因此,在梯度下降法中,我們需要根據(jù)實際情況調(diào)整步長大小,以便更快地找到目標(biāo)函數(shù)的最小值。

以登山為例,梯度下降法就像是一場尋找最低點的攀登之旅。通過測量梯度并沿著梯度的負(fù)方向前進(jìn),我們可以逐步降低目標(biāo)函數(shù)值,最終找到全局最優(yōu)解。

此刻,我們再來試著回答這個問題:梯度是如何更新權(quán)重和偏置的?

我們可以先定義一個損失函數(shù),這個函數(shù)用于衡量神經(jīng)網(wǎng)絡(luò)預(yù)測結(jié)果與真實結(jié)果之間的差距,就像剛開始找山峰的初始點。然后,我們通過反向傳播算法計算出損失函數(shù)對每個權(quán)重和偏置的梯度。

接下來,需要設(shè)定一個學(xué)習(xí)率,這個學(xué)習(xí)率決定了我們每次更新參數(shù)時移動的步長。一般來說,學(xué)習(xí)率不能設(shè)置得太大,否則可能會導(dǎo)致算法在最小值點附近震蕩不前;也不能設(shè)置得太小,否則算法收斂速度會非常慢。

最后,我們就可以根據(jù)計算出的梯度和學(xué)習(xí)率來更新神經(jīng)網(wǎng)絡(luò)的權(quán)重和偏置了。

具體來說,對于每個權(quán)重和偏置,我們將其當(dāng)前值減去學(xué)習(xí)率乘以對應(yīng)的梯度,得到新的值。這樣,通過多次迭代,我們就能逐步找到使損失函數(shù)最小的參數(shù)值。

在這一系列的過程中,梯度便實現(xiàn)了對神經(jīng)網(wǎng)絡(luò)權(quán)重和偏置的優(yōu)化。而反向傳播算法也因借助梯度的幫助,減少了神經(jīng)網(wǎng)絡(luò)模型對預(yù)測結(jié)果的誤差。

最終,我們從表象結(jié)果看來,AI的模型經(jīng)過訓(xùn)練優(yōu)化后,預(yù)測的準(zhǔn)確率變得越來越高。

五、神經(jīng)網(wǎng)絡(luò)的數(shù)據(jù)擬合問題

有時, 反向傳播在使神經(jīng)網(wǎng)絡(luò)適合于某些數(shù)據(jù)方面做得太好了, 在大數(shù)據(jù)集中產(chǎn)生了很多巧合的關(guān)系,這些關(guān)系可能并不是真實世界中的因果關(guān)系,而是由于數(shù)據(jù)集的特點或者訓(xùn)練過程中的隨機性所導(dǎo)致的。

比如,“香蕉和火災(zāi)”。根據(jù)數(shù)據(jù)顯示,當(dāng)香蕉價格上漲時,火災(zāi)的發(fā)生率也會隨之上升。

然而,這并不意味著香蕉和火災(zāi)之間存在因果關(guān)系。實際上,這兩個事件之間并沒有必然的聯(lián)系。這就是一個典型的大數(shù)據(jù)中無因果關(guān)系但是數(shù)據(jù)顯示有關(guān)系的巧合例子。

所以,即使我們訓(xùn)練出了AI模型,但結(jié)果并不一定如你所愿,搞不好還會鬧出笑話,我們還需要關(guān)注AI中的數(shù)據(jù)擬合問題。

數(shù)據(jù)擬合問題可以分為過擬合與欠擬合,每個問題的發(fā)生背后都有著不同的原因,也需要不同的解決方法。

當(dāng)然,關(guān)于數(shù)據(jù)擬合問題也可以有其他不同的分類,本文主要還是就過擬合與欠擬合展開介紹。

1. 過擬合(Overfitting)

過擬合是指模型在訓(xùn)練數(shù)據(jù)上表現(xiàn)得非常好,但是在新的、未見過的數(shù)據(jù)上表現(xiàn)不佳。

這通常是因為模型過于復(fù)雜,學(xué)習(xí)到了訓(xùn)練數(shù)據(jù)中的噪聲和不具代表性的特征,過于依賴訓(xùn)練數(shù)據(jù)中的細(xì)節(jié),忽略了數(shù)據(jù)的一般規(guī)律。

為了更好理解過擬合問題在實際應(yīng)用中的影響,假設(shè)我們用一個數(shù)學(xué)模型來預(yù)測學(xué)生的成績。

在數(shù)據(jù)訓(xùn)練中,我們可以從歷史數(shù)據(jù)中發(fā)現(xiàn),學(xué)生的身高和成績之間存在一定的正相關(guān)關(guān)系。于是我們訓(xùn)練了一個簡單的線性回歸模型,將身高作為自變量,成績作為因變量。經(jīng)過訓(xùn)練,我們發(fā)現(xiàn)這個模型在訓(xùn)練集上的表現(xiàn)非常出色,預(yù)測成績與實際成績高度一致。

但有基本常識的我們即使不預(yù)測數(shù)據(jù)都會知道,學(xué)生的成績和身高之間并不會產(chǎn)生直接的相關(guān)關(guān)系。所以,當(dāng)我們將這個模型應(yīng)用到新的學(xué)生數(shù)據(jù)上時,會發(fā)現(xiàn)預(yù)測的準(zhǔn)確性大幅下降,甚至可能出現(xiàn)完全錯誤的預(yù)測。

在這個例子中,我們的線性回歸模型可能過于復(fù)雜,過分強調(diào)了身高對學(xué)生成績的影響,而忽略了其他潛在的影響因素,如學(xué)習(xí)態(tài)度、努力程度等。

因此,當(dāng)面對新的學(xué)生數(shù)據(jù)時,由于這些數(shù)據(jù)中可能包含與訓(xùn)練數(shù)據(jù)不同的特征分布,模型的預(yù)測性能就大打折扣。所以,我們在數(shù)據(jù)訓(xùn)練的過程中,需要識別數(shù)據(jù)是否過擬合,來避免后續(xù)問題。

為了識別過擬合現(xiàn)象,我們通常會將數(shù)據(jù)集分為訓(xùn)練集、驗證集和測試集。

訓(xùn)練集用于訓(xùn)練模型,驗證集用于調(diào)整模型參數(shù)以獲得最佳的性能,而測試集則用于評估模型在未知數(shù)據(jù)上的表現(xiàn)。通過對比模型在這三個數(shù)據(jù)集上的表現(xiàn),我們可以判斷模型是否存在過擬合問題。

那么,出現(xiàn)了過擬合問題時,我們該如何解決呢?

為了解決過擬合問題,我們可以增加數(shù)據(jù)量、簡化模型、正則化或交叉驗證等方法來解決。

【增加數(shù)據(jù)量】

顧名思義就是引入更多的數(shù)據(jù),幫助模型更好地捕捉到潛在的模式,從而減少過擬合的風(fēng)險。然而,在實際應(yīng)用中,獲取大量高質(zhì)量數(shù)據(jù)可能會有一些不現(xiàn)實。

【簡化模型】

就是選擇較少的參數(shù)或者較簡單的模型結(jié)構(gòu)來減小模型復(fù)雜度,例如減少神經(jīng)網(wǎng)絡(luò)中的隱藏層的數(shù)量或節(jié)點數(shù)。這個辦法可以降低模型對訓(xùn)練數(shù)據(jù)的依賴,從而減少過擬合的風(fēng)險。但是,過于簡化的模型可能會損失一些有用的信息,影響模型的性能。

【正則化】

正則化是通過向模型的損失函數(shù)添加額外的項,來限制模型參數(shù)的大小,防止其過度膨脹。常用的正則化技術(shù)包括L1正則化和L2正則化。L1正則化傾向于使一些參數(shù)變?yōu)榱?,從而實現(xiàn)特征選擇。而L2正則化通過懲罰參數(shù)的平方值,使得參數(shù)變得更為均勻。正則化可以幫助我們在保持模型性能的同時,降低過擬合的風(fēng)險。

【交叉驗證】

交叉驗證是一種評估模型泛化能力的有效方法。它將數(shù)據(jù)集劃分為多個子集,然后使用不同的子集進(jìn)行訓(xùn)練和驗證,最后將各個子集的結(jié)果綜合起來得到最終的評估指標(biāo)。交叉驗證可以幫助我們發(fā)現(xiàn)過擬合問題,并選擇合適的模型參數(shù)。

2.欠擬合(Underfitting)

欠擬合是指神經(jīng)網(wǎng)絡(luò)在訓(xùn)練數(shù)據(jù)和新數(shù)據(jù)上都表現(xiàn)不佳的現(xiàn)象。這通常是因為模型過于簡單,無法捕捉到數(shù)據(jù)中的關(guān)鍵特征和規(guī)律。

例如,如果我們使用一個只有一層的神經(jīng)網(wǎng)絡(luò)來擬合復(fù)雜的非線性關(guān)系,那么模型很可能無法準(zhǔn)確地捕捉到數(shù)據(jù)中的模式,導(dǎo)致訓(xùn)練和測試效果都不理想。就像一個小學(xué)生去解大學(xué)微積分的題目,大概率是給不出正確答案的。

我們繼續(xù)以預(yù)測學(xué)生成績?yōu)槔?,來具體解釋一下欠擬合現(xiàn)象。

假設(shè)我們有一份學(xué)生的成績數(shù)據(jù)集,但是這次我們的模型過于簡單,只考慮了學(xué)習(xí)時間,而沒有考慮其他可能影響成績的因素,例如學(xué)生的先前知識水平、家庭背景、課程難度、考試形式等。

那么我們的模型就可能會出現(xiàn)數(shù)據(jù)欠擬合的問題,那么我們就無法僅僅通過學(xué)習(xí)時間,來準(zhǔn)確預(yù)測學(xué)生成績。

我們在數(shù)據(jù)訓(xùn)練的過程中,又該如何識別數(shù)據(jù)欠擬合?其實,欠擬合的主要表現(xiàn)包括高偏差和低方差。

【高偏差】

欠擬合模型的預(yù)測結(jié)果與真實值之間存在較大的差距,即模型無法準(zhǔn)確地估計出數(shù)據(jù)的均值。這通常是由于模型過于簡單,無法捕捉到數(shù)據(jù)中的復(fù)雜關(guān)系所導(dǎo)致的。

例如,在回歸問題中,如果采用線性回歸模型來處理非線性關(guān)系的數(shù)據(jù),那么模型就無法準(zhǔn)確地描述這種關(guān)系,從而導(dǎo)致預(yù)測結(jié)果偏離實際值。

【低方差】

欠擬合模型對訓(xùn)練數(shù)據(jù)的誤差較小,但在測試數(shù)據(jù)上的誤差較大。這是因為欠擬合模型過于簡單,不能很好地泛化到新的數(shù)據(jù)上。換句話說,雖然欠擬合模型在訓(xùn)練數(shù)據(jù)上的表現(xiàn)不錯,但在未知數(shù)據(jù)上可能表現(xiàn)得非常糟糕。

我們再深挖一點,為什么會出現(xiàn)欠擬合問題?

欠擬合問題產(chǎn)生的原因也有多種,通常發(fā)生在以下情況:

  • 模型復(fù)雜度不足: 使用過于簡單的模型,例如線性模型去擬合非線性關(guān)系的數(shù)據(jù)。
  • 特征不足: 數(shù)據(jù)中的重要特征未被考慮,導(dǎo)致模型無法準(zhǔn)確地預(yù)測目標(biāo)變量。
  • 訓(xùn)練不足:模型在訓(xùn)練集上沒有足夠的迭代學(xué)習(xí),未能很好地適應(yīng)數(shù)據(jù)。
  • 噪聲干擾: 數(shù)據(jù)中的噪聲干擾過大,模型過于敏感,難以區(qū)分真實信號和噪聲。
  • 樣本量不足: 訓(xùn)練數(shù)據(jù)量過小,難以捕捉整體數(shù)據(jù)分布。

欠擬合是我們在訓(xùn)練數(shù)據(jù)時,必須要關(guān)注的問題,因為它可能導(dǎo)致模型在實際應(yīng)用中的性能不佳,到最后讓團(tuán)隊之前的努力付諸東流。

那么,出現(xiàn)了欠擬合問題時,我們該如何解決呢?

當(dāng)我們知道欠擬合問題的原因之后,解決該問題的關(guān)鍵是增加模型的復(fù)雜性,以便計算機更好地捕捉數(shù)據(jù)中的關(guān)系和特征。同時,還需要注意避免過擬合,以免過度復(fù)雜導(dǎo)致泛化性能下降。

為了解決欠擬合問題,我們可以通過增加模型復(fù)雜度、增加更多的特征、降低正則化參數(shù)或增加訓(xùn)練數(shù)據(jù)等方法來解決。

【增加模型復(fù)雜度】

如果模型過于簡單,無法捕捉數(shù)據(jù)中的復(fù)雜模式,可以考慮使用更復(fù)雜的模型,如增加更多的層或節(jié)點,引入更多的特征或改變模型的結(jié)構(gòu),使其能夠更好地捕捉數(shù)據(jù)中的復(fù)雜關(guān)系。例如,可以嘗試使用多項式回歸、支持向量機等更復(fù)雜的模型來解決非線性問題,或者在神經(jīng)網(wǎng)絡(luò)中,增加隱藏層的數(shù)量或節(jié)點的數(shù)量。

【增加更多的特征】

我們可以通過增加更多的特征來使模型變得更加復(fù)雜,從而更好地擬合數(shù)據(jù)。這些特征可以是現(xiàn)有的特征的線性或非線性組合,也可以是新的、從其他數(shù)據(jù)源得到的特征。在學(xué)生考試成績的例子中,可以考慮加入更多可能影響成績的因素,如家庭背景、學(xué)生興趣等。

【降低正則化參數(shù)】

正則化是一種防止過擬合的方法,但在某些情況下,過度的正則化可能導(dǎo)致欠擬合。因此,可以適當(dāng)降低正則化參數(shù),以允許模型更靈活地適應(yīng)訓(xùn)練數(shù)據(jù)。

【增加訓(xùn)練數(shù)據(jù)】

欠擬合通常與訓(xùn)練數(shù)據(jù)量不足有關(guān)。通過收集更多的訓(xùn)練數(shù)據(jù),可以提高模型的學(xué)習(xí)能力和泛化能力,從而減輕欠擬合現(xiàn)象。

所以,當(dāng)我們知道了如何通過數(shù)據(jù)來訓(xùn)練神經(jīng)網(wǎng)絡(luò)之后,還需要關(guān)注在訓(xùn)練過程中出現(xiàn)的數(shù)據(jù)擬合問題,也可以理解成AI訓(xùn)練中也需要過程監(jiān)督吧。

當(dāng)我們發(fā)現(xiàn)數(shù)據(jù)過擬合時,需要借助增加數(shù)據(jù)量、簡化模型、正則化或交叉驗證等方法來解決。當(dāng)我們發(fā)現(xiàn)數(shù)據(jù)欠擬合時,可以借助增加模型復(fù)雜度、增加更多的特征、降低正則化參數(shù)或增加訓(xùn)練數(shù)據(jù)等方法來解決。

六、全文總結(jié)

如果你看到此處,足以說明你對AI也有著非一般的興趣和熱情,我在此送上真誠的感謝。如果你和我一樣,也對AI模型是如何訓(xùn)練優(yōu)化的背后原理感興趣,相信這篇文章會給你帶來幫助。

在最后,我就本文做一個簡單的總結(jié),如果你沒有第一時間全部理解,根據(jù)總結(jié)也可以帶走一些收獲。

神經(jīng)網(wǎng)絡(luò)是AI的核心,其真正發(fā)揮作用之前需要經(jīng)過充分的訓(xùn)練。本文討論了對神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程及相關(guān)優(yōu)化策略,并深入探討神經(jīng)網(wǎng)絡(luò)中的數(shù)據(jù)擬合問題。

與人類學(xué)習(xí)一樣,神經(jīng)網(wǎng)絡(luò)需要通過大量的數(shù)據(jù)輸入進(jìn)行學(xué)習(xí),以適應(yīng)特定任務(wù)。在訓(xùn)練的過程中,我們以線性回歸為例,通過優(yōu)化策略來提高模型的性能。

在訓(xùn)練優(yōu)化過程中,我們使用損失函數(shù)來表示模型的預(yù)測與實際結(jié)果之間的誤差。這個誤差越小,模型的性能就越好。通過調(diào)整模型的參數(shù),我們試圖最小化損失函數(shù),使得模型的預(yù)測更加準(zhǔn)確。

損失函數(shù)的引入使得我們能夠量化模型的誤差,從而為優(yōu)化提供方向。通過梯度下降等方法,我們可以找到使損失函數(shù)最小化的參數(shù)值,進(jìn)而提高模型的準(zhǔn)確性。這一過程中,反向傳播起到了關(guān)鍵作用。

反向傳播通過計算損失函數(shù)對模型參數(shù)的梯度,實現(xiàn)了誤差的反向傳遞。這意味著我們可以根據(jù)誤差的方向來更新模型的參數(shù),使得模型逐漸趨向最優(yōu)。

然而,即使經(jīng)過精心的訓(xùn)練,神經(jīng)網(wǎng)絡(luò)在處理數(shù)據(jù)時仍然可能面臨擬合問題。數(shù)據(jù)擬合問題表現(xiàn)為過擬合和欠擬合,面對不同的問題,我們也需要有不同的解決方法。

神經(jīng)網(wǎng)絡(luò)的訓(xùn)練過程是一個復(fù)雜而精細(xì)的過程,通過本篇,希望各位看官可以理解和巧妙運用這些概念和方法,也可以更好地利用神經(jīng)網(wǎng)絡(luò)來解決實際問題。

《孫子·謀攻篇》有云,“知彼知己,百戰(zhàn)不殆;不知彼而知己,一勝一負(fù);不知彼不知己,每戰(zhàn)必殆?!?/p>

知是成事的前提。在此引用,不是要把AI當(dāng)作敵人,而是要知AI,懂AI,而后才能有效和AI共處,在AI的助力下做出更有價值的事情。

我們都是浩瀚星河中的一粒,在AI的浪潮中簇?fù)碇靶?。AI到底是什么,是我們必須要弄清楚的課題。

本文由 @果釀 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)作者許可,禁止轉(zhuǎn)載。

題圖來自 Unsplash,基于CC0協(xié)議。

該文觀點僅代表作者本人,人人都是產(chǎn)品經(jīng)理平臺僅提供信息存儲空間服務(wù)。

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 目前還沒評論,等你發(fā)揮!