『壹』 神經網路,什麼過擬合,什麼是欠擬合
欠擬合是指模型不能在訓練集上獲得足夠低的誤差。而過擬合是指訓練誤差和測試誤差之間的差距太大。
通過調整模型的容量(capacity),我們可以控制模型是否偏向於過擬合或者欠擬合。通俗地,模型的容量是指其擬合各種函數的能力。容量低的模型可能很難擬合訓練集。容量高的模型可能會過擬合,因為記住了不適用於測試集的訓練集性質。
『貳』 神經網路,什麼過擬合,什麼是欠擬合
欠擬合是指模型不能在訓練集上獲得足夠低的誤差。而過擬合是指訓練誤差和測試誤差之間的差距太大。
相關介紹:
人工神經網路(ANN)或聯結主義系統是受構成動物大腦的生物神經網路的啟發但不完全相同的計算系統。這種系統通過例子來「學習」執行任務,而不用特定於任務的規則進行編程。
例如,在圖像識別中,人工神經網路可能會通過分析一些圖像樣本來學習識別包含貓的圖像,這些圖像被手工標記為「貓」或「不是貓」,並使用結果識別在其他圖像中的貓。
他們這樣做是在沒有貓的任何先驗知識的情況下進行的,例如,它們有毛皮,尾巴,胡須和類似貓的臉。相反,人工神經網路會自動從它們處理的學習材料中生成識別特徵。
人工神經網路是基於稱為人工神經元的連接單元或節點所構成的集合,這些單元或節點鬆散地模擬生物大腦中的神經元。像生物大腦中的突觸一樣,每個連接可以將信號從一個人工神經元傳輸到另一個人工神經元。接收信號的人工神經元可以對其進行處理,然後向與之相連的附加人造神經元發出信號。
『叄』 請問大神:函數擬合神經網路(fitnet)是BP神經網路嗎在線等待中。
是BP神經網路,是一個只有一個隱含層的的BP神經網路。
tansig和purelin作為傳遞函數
另外需要指出的是,在建立的神經網路中,權重和閾值是歸一化後的參數使用的權重和閾值,歸一化的過程是在fitnet()函數中進行的。
具體的問題可以使用下面的代碼來加深理解。
clear
clc
[x,t] = simplefit_dataset;
net = fitnet(10);
net = train(net,x,t);
y = net(x); %x為輸入,t為輸出
%獲取模型參數
w1= net.iw{1,1};
b1=net.b{1};
w2 = net.lw{2,1};
b2=net.b{2};
%%%查看網路的傳遞函數
ss=net.layers{1}.transferFcn;
sw=net.layers{2}.transferFcn;
x1=mapminmax(x); %x1為原始數據歸一化後的輸入數據
[t1,ps]=mapminmax(t); %t1為原始數據歸一化後的輸出數據
t11=w2*(tansig(w1*x1+b1))+b2; %t11為神經網路求取的歸一化輸出數據
t12=mapminmax('reverse',t11,ps); %t12為使用模型參數並且反歸一化後的輸出數據
『肆』 神經網路:欠擬合和過擬合
以我們前面講述的線性回歸為例,比如我們在訓練集上訓練出最優的模型,但是當我們將其使用到測試集時,測試的誤差很大,我們該怎麼辦?
我們一般採取的措施主要包括以下6種:
增加訓練樣本的數目(該方法適用於過擬合現象時,解決高方差。一般都是有效的,但是代價較大,如果下面的方法有效,可以優先採用下面的方式);
嘗試減少特徵的數量(該方法適用於過擬合現象時,解決高方差);
嘗試獲得更多的特徵(該方法適用於欠擬合現象時,解決高偏差);
嘗試增加多項式特徵(該方法適用於欠擬合現象時,解決高偏差);
嘗試減小正則化程度λ(該方法適用於欠擬合現象時,解決高偏差);
嘗試增加正則化程度λ(該方法適用於過擬合現象時,解決高方差);
上面的方法不是隨機選擇,是在合適的情況下(過擬合和欠擬合)選擇合適的方法,對於怎麼判斷一個模型是過擬合還是欠擬合,我們會在下面給出一些機器學習診斷法。
如何對一個假設進行評估?
我們前面在講述線性回歸和邏輯回歸時,只是注重針對訓練數據集訓練出一個最優的參數,但是我們訓練處的模型對於測試集的性能好壞我們沒有進行判斷,我們只是訓練的模型使得損失函數最小,我們前面也討論過,在訓練數據集上損失函數最小並不能代表對於給定的測試數據,測試數據的評估非常准確,比如過擬合現象發生時,那我們如何評價一個假設的好壞呢?
主要的方法包括兩種:
1.對於簡答的模型,我們可以採用將hθ(x)的圖像畫出,來判斷模型的好壞,但是這種方法對於特徵變數不是一個時,這種方法很難實現或者不可能實現。例如我們曾經看到過這樣的圖像,可以通過hθ(x)的圖像明顯可以看出,該假設存在著過擬合現象。
2.另一種評估假設的方法為:將原來的數據集分為訓練集和測試集,一般我們是從原來的數據集中隨機選取(保證訓練集和測試集中都含有各種類型的數據)70%的數據作為訓練集,剩下的30%的樣本作為測試集。同時這種將原來數據集劃分為訓練集和測試集的方法可以用於幫助特徵選擇、多項式次數的選擇以及正則化參數的選擇等。數據集劃分的過程如下:
以上面數據集為例,選取前7個為訓練集,後3個為測試集。用前7個數據集做訓練訓練出一個最優的模型,評價這個訓練出的模型的好壞可以使用測試集來進行判斷,判斷的標准可以使用測試集的損失函數來進行定量的衡量。
對於回歸問題,測試集的損失函數計算公式如下:
Jtest(θ)=12mtest∑i=1mtest(hθ(x(i)test)−y(i)test)2
而對於分類問題,測試集的損失函數計算公式如下:
這種測量方式,如果測試樣本損失函數很大,則代表訓練出的模型泛化能力不好。
對於分類問題,還有另外一種測量的方式,稱為誤分類率,它對於每一個測試樣本進行計算,計算的公式如下:
error=1mtest∑i=1mtesterr(hθ(x(i)test),y(i)))
其中,
模型的選擇和交叉驗證集:
上述我們是在模型選擇好了之後進行訓練的,也就是上述我們都是確定了假設進行訓練的,但是我們怎麼對模型進行選擇呢,這一節我們來討論一下模型的選擇,以及和交叉驗證集的關系。
模型選擇主要包括以下內容:1.怎樣選擇正確的特徵來構造學習演算法?2.怎樣選擇學習演算法中正則化參數λ?等問題。
首先我們結合一個例子來引出模型的選擇和驗證集:
例如我們有上面十個模型,我們對於給定的數據集選擇哪種模型呢?按照我們上面討論的將數據集劃分為訓練集和測試集,使用訓練集對上述模型進行訓練,然後使用測試集來進行選擇最佳的模型,比如最優的為第五個模型,但是這並不能衡量這個模型的泛化能力,因為測試集已經用於選擇最優的模型,這個模型對於其他未知數據的泛化能力還是未知的。
所以針對上述問題我們可以將數據集劃分為訓練集、交叉驗證集和測試集。一般情況下,訓練集占總樣本的60%,交叉驗證集佔20%,測試集佔20%。其中訓練集用於訓練,交叉驗證集用於選擇最優的模型,測試集用於測試模型的泛化能力。
模型選擇方法為:
1. 使用訓練集訓練10個模型;
2. 用10個模型分別對交叉驗證集計算出交叉驗證誤差(代價函數的值),其中計算公式為:
3. 選取交叉驗證誤差最小的模型作為選擇的模型;
4. 用測試集對選擇出的模型計算泛化能力(測試樣本的損失函數),計算公式如上文中討論的一樣。
假設對診斷偏差和方差(即過擬合還是欠擬合)的影響
利用上述方法學習到的演算法性能不好一般會有兩種情況:
1.會出現過擬合,也就是所謂的方差很大;
2.會出現欠擬合,也就是所謂的偏差很大;
首先應該確定演算法性能的不好,是由哪種原因造成的,然後針對不同的情況採取不同的改進策略,可以有效的改進當前的演算法。下面我們來講述一下怎麼判斷是過擬合還是欠擬合。
以下面例子為例,來進行討論:
我們可以通過繪制出訓練集的代價函數和交叉驗證驗證集的代價函數與方次d的關系來進行判斷是上述哪種情況的一種:
對於訓練集,當d較小時,模型的擬合程度不是很好,所以訓練樣本集的代價函數比較大;隨著d的增加,模型的擬合程度不斷提高,代價函數不斷的減小;
對於交叉驗證集,由於d比較小時,模型的擬合程度不是很好,對於新來的樣本預測結果會偏差很大,所以交叉驗證集的代價函數在初始階段會很大,而隨著d的增加會出現一個比較好的方次d,使得模型的擬合程度最佳,同時對於新來的樣本泛化能力很強,所以會有一個代價函數最小的點出現(該轉折點即是模型開始由欠擬合轉向過擬合的點),隨後隨著d的增加,由於過擬合,會存在對新的樣本預測結果不良的現象,所以代價函數會逐漸增大。
當我們繪制出上述曲線時,我們就可以判斷出什麼時候是過擬合什麼時候欠擬合,判斷的標准如下:
1. 當訓練誤差與交叉驗證集誤差接近時,並且都很大時,該模型高偏差(欠擬合);
2. 當訓練誤差遠小於驗證集誤差時,並且訓練誤差很小時,該模型高方差(過擬合)。
判斷出該模型是過擬合或者欠擬合之後,然後使用上述提到的過擬合和欠擬合的解決方法,對演算法進行改進。
正則化對偏差和方差的影響
我們前面講述過正則化可以有效的處理過擬合現象,但是我們上述所說的處理過擬合是在合適的λ情況下,那麼λ值的大小對模型的性能是怎樣影響的呢?我們採用上述與方次d對性能的影響相同的方式來分析λ的值對性能的影響。
我們首先選擇一系列的λ值,通常λ的選擇是0~10之間呈現二倍關系的值(如:0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,5.26,5.12,10)
構建方式如下:
選擇λ的方法如下:
1.使用訓練集訓練處12個不同程度正則化模型;
2.用12個模型分別對交叉驗證集計算出交叉驗證誤差;
3.選擇得出交叉驗證誤差最小的模型;
4.運用步驟3選出的模型對測試集計算得出推廣誤差
我們同樣可以將訓練集和交叉驗證集模型的代價函數與λ的值繪制在一張圖上。對於訓練集、驗證集和測試集的代價函數計算公式為:
需要注意的是,當計算訓練集、交叉驗證集和測試集誤差時,不計算正則項,然後繪制出訓練集和交叉驗證集代價函數與λ值的關系,如下圖所示:
1. 當λ較小時,訓練誤差較小(過擬合)而交叉驗證集誤差較大;
2. 隨著λ的增加(從過擬合到欠擬合的過程),訓練集誤差逐漸增大(欠擬合),而交叉驗證集誤差則是先減小後增大。
學習曲線
學習曲線也是一種可以判斷演算法是否處於過擬合還是欠擬合的情況,學習曲線是將訓練集誤差和交叉驗證集誤差作為訓練集實例數量(m)的函數繪制的圖像。學習曲先不僅可以幫助我們是不是處於過擬合或者欠擬合,它還可以幫助我們判斷是否為了提高演算法的性能需要我們收集多的數據。
假設我們有100行數據,我們從第一行數據開始,逐漸增加數據進行訓練,得到每次訓練數據的代價函數值。當數據很少時,訓練模型能夠非常完美的擬合很少的數據,但是訓練出的模型卻不能泛化其他的數據,所以當數據很少時,訓練集的代價函數很小,但是交叉驗證集的代價函數很大,隨著樣本的增加,訓練集的代價函數逐漸增大,交叉驗證集的代價函數逐漸減小。繪制的曲線如下圖所示:
1. 如何用學習曲線識別欠擬合:
假設我們的模型處於欠擬合的情況下,擬合曲線如下圖所示:
我們可以看出,無論我們怎樣增加樣本數據,誤差都不會有很大改觀。同時在欠擬合的情況下,會出現隨著樣本的增加,訓練集代價函數和交叉驗證集代價函數都很大的情況,在這種情況下,就沒有必要花費時間在收集數據上了,同時這也是一種判斷模型是過擬合還是欠擬合的方法。
2. 如何使用學習曲線識別過擬合:
假設我們有一個非常高次的多項式模型(比如最高次項達到100次),並且正則化非常小時,從下圖可以看出,當交叉驗證集誤差遠大於訓練集誤差時,往訓練集增加更多數據可以提高模型的效果。
對於過擬合現象時,會出現訓練集代價函數一直都很小(雖然是增加的趨勢),但是驗證集的損失函數會很大(雖然是減小的趨勢),同時訓練集代價函數和驗證集代價函數相差會很大,可以使用這種方法來判斷該模型處於過擬合階段。
對於神經網路我們在討論一下過擬合和欠擬合現象:
使用較小的神經網路,類似於參數較少的情況,容易導致高偏差和欠擬合,但是計算代價小;使用較大的神經網路,類似於參數較多的情況,容易導致高方差和過擬合,雖然計算代價比較大,但是可以通過正則化手段來調整而更加適應數據。
對於 神經網路的模型選擇 :我們一般選擇較大的神經網路並採用正則化處理,而不會選擇較小的神經網路。
對於 神經網路隱藏層的層數選擇 ,一般我們從一層開始逐漸增加層數,為了更好的選擇出最佳的層數,可以針對不同隱藏層層數的神經網路進行訓練,然後選擇交叉驗證集代價函數最小的神經網路。
『伍』 神經網路欠擬合是不是每次輸出結果都一樣,稱為欠擬合,都准確無誤稱為過擬合
欠擬合和過擬合都是沒有明顯界定范圍的詞, 類似於微辣,正常,變態辣一個意思.
和模型和鑒定標准都有關系
『陸』 BP神經網路可以用於擬合函數嗎
可以。
既然是函數擬合,那麼事先就已經有函數表達式了。擬合的只是函數表達式中未知的參數。用神經網路對函數進行擬合,輸出的就是未知參數的高精近似值。
人工神經網路就是模擬人思維的第二種方式。這是一個非線性動力學系統,其特色在於信息的分布式存儲和並行協同處理。雖然單個神經元的結構極其簡單,功能有限,但大量神經元構成的網路系統所能實現的行為卻是極其豐富多彩的。
(6)神經網路擬合擴展閱讀:
如果待定函數是線性,就叫線性擬合或者線性回歸(主要在統計中),否則叫作非線性擬合或者非線性回歸。表達式也可以是分段函數,這種情況下叫作樣條擬合。
一組觀測結果的數字統計與相應數值組的吻合。形象的說,擬合就是把平面上一系列的點,用一條光滑的曲線連接起來。因為這條曲線有無數種可能,從而有各種擬合方法。擬合的曲線一般可以用函數表示,根據這個函數的不同有不同的擬合名字。
在MATLAB中可以用polyfit 來擬合多項式。
擬合以及插值還有逼近是數值分析的三大基礎工具,通俗意義上它們的區別在於:擬合是已知點列,從整體上靠近它們;插值是已知點列並且完全經過點列;逼近是已知曲線,或者點列,通過逼近使得構造的函數無限靠近它們。
『柒』 為什麼神經網路能以任意精度擬合任意復雜度的函數
在開始之前,我們先來看一下維基網路給出的 萬能近似定理(Universal approximation theorem) 描述:
Universal approximation theorem (Hornik et al., 1989;Cybenko, 1989) 定理表明:前饋神經網路,只需具備單層隱含層和有限個神經單元,就能以任意精度擬合任意復雜度的函數。這是個已經被證明的定理。下面我們用一種輕松的方式解釋,為什麼神經網路(理論上)可以擬合任何函數?
看過《神偷奶爸》這部電影的同學都知道,小黃人( Minions )非常喜歡吃香蕉。不過,現在它只有12個蘋果,但它對蘋果不感興趣,想著如果誰能用香蕉換它的蘋果就好了。不經意間,它發現了一個神奇的小屋。
小黃人向神奇小屋的窗戶里放進一個蘋果,神奇小屋什麼也不會給它。小黃人又嘗試向小屋的窗戶里放進5個蘋果,神奇小屋突然吐出16個香蕉!這下小黃人可高興壞了。然後,小黃人又嘗試扔給神奇小屋6個蘋果,神奇小屋又吐出來20個香蕉。
現在,小黃人的12個蘋果用完了,它抱著換來的香蕉想:如果我給它3個蘋果,小屋會吐出來多少香蕉呢?
這是一道小學題(找規律),如何解答?
你可能脫口而出,8個香蕉!!OK,好吧,說明你的智商可以學習AI這么高深的學科了~
如何使用機器學習的步驟解答這道小學生做的題目呢(你可能覺得這是殺雞用了宰牛刀)。
我們使用 變數 x 表示扔給神奇小屋的蘋果數量( 輸入input ),使用 變數 ŷ 表示神奇小屋吐出來的香蕉數量( 輸出Output ),那麼我們就得到了一個 數據集(Data set) :
我們的目標是,構建一個數學 模型(Model) ,使得該模型滿足數據集的隱含規律。即,向模型輸入 x 的值,模型會輸出對應的 ŷ 值。
小學生應該學過一元函數(y = wx + b)。既然是小學題目,那麼使用比較簡單的函數應該就能模擬數據集的規律。所以我們定義了一個一元一次函數模型:
那麼問題來了,我們怎樣才能確定函數的兩個 參數w,b ?
聰明的你可能又會脫口而出,是y = 4x + (-4) !!OK,你再次證明了你的智商已經超過小學生或者初中生。
但是小黃人沒有你那麼聰明,它只能猜。如果w=1, b=0,結果會是怎樣?
很明顯,模型的 輸出(預測)值 y 與實際數據集中的 真實值 ŷ 相差很大。小黃人不滿意,又隨機猜了一次。w=2,b=2,結果又是怎樣呢?
嗯,這次模型的輸出值 y 與數據集中的真實值 ŷ 相差似乎不那麼大了。小黃人就想,這兩個候選模型,哪一個更好呢(更能模擬數據集中的規律)?如何將」更好「量化?
於是,我們引出 損失函數(lost function) 的概念。
將預測值 y 與真實值 ŷ 之間的差值平方和,作為「更好」的一種量化。損失函數越小, 即,預測值與真實值之間的差值越小,說明參數w,b越能模擬數據集中的規律。
有了損失函數,我們來看一看,上面兩個候選模型的損失函數值各是多少。
模型 y = 2x + 2 的損失函數值L(2,2) = 68,小於L(1,0) = 318,所以候選模型y = 2x + 2勝出。
小黃人是一個追求極致的人。損失函數值68雖然小於318,但是它還是很大呀,有沒有其他參數w,b使得損失函數L(w,b)的值比68還小。
所以,我們又引出了 優化器(Optimizer) 的概念。
想辦法找出使得損失函數值L(w,b)最小的參數w,b。由於小黃人沒有學過梯度下降法(一種凸函數優化演算法,不懂也沒關系,現在用不到),所以它只能使用....」隨機嘗試法「。
小黃人從參數w=2,b=2,開始,以步長為1進行隨機嘗試。即,在「加一減一」的范圍內,嘗試坐標點(2,2)周圍的四個點 : (3,2)、(2,3)、(1,2)、(1,1)。結果發現,在點(3,2)處,損失函數值小於其他三個點和原先點處的損失值。
所以,小黃人發現了一個更好的候選模型 y = 3x + 2,其損失函數值為26,比68小的多。小黃人,很興奮,用同樣的方式又開始了嘗試。以此類推,它接著發現了L(3,1) =17、L(3,0) =14 兩個坐標點。然而,在點(3,0)周圍的嘗試,都沒有發現比14更小的損失函數值。
這樣就結束了嗎?
高智商的你,一定能想到,在點(4,-4)處,損失函數值最小:L(4,-4) =0。但是,用上述嘗試方法並不能找到坐標點(4, -4)。
問題出在了哪兒?是初始點選擇的問題。
小黃人發現,如果從坐標點(-2,-4)開始上述方式的嘗試,最終會找到使得損失函數最小的(4,-4)點。如果深入研究,將涉及到最優搜索問題,超出本片文章的范圍。
我們當前只需知道,能夠通過最優方法(如,最小二乘法),找到使得損失函數最小的模型參數w,b。
上面這個故事就是線性回歸??
我們需要給出一個稍微嚴謹點的定義,來說明什麼是線性回歸。下面是《機器學習》(周志華著)中給出的一句話:
將這句話對應到我們的模型中。模型函數 y = 4x - 4 就是句中學得的「線性模型」。然後,在我們的故事中,不是盡可能准確地預測真實值輸出標記,而是百分百預測了真實值輸出標記....損失函數值能夠達到最小0。
其實,沒那麼簡單......我們稍微擴展一下。
有一天,小黃人發現,如果給神奇小屋1個蘋果、2個香蕉、3個梨,神奇小屋就會吐給它一隻貓咪~ 喵喵喵~。真的太神奇了。。。。
這時,模型函數不再是簡單的一元函數,而是三元函數,有三個輸入變數 (x1, x2, x3),和4個參數 (w1, w2, w3, b) 需要優化。我們將這種情況稱之為「 多元線性回歸(multivariate linear regression) 」。其實這是圖像識別的原型模型,我們不再深入探討。
當小黃人發現了神奇小屋交換香蕉的規律後,非常非常高興。它又找來了好多蘋果,准備和神奇小屋交換香蕉。可是....生活就是這樣。在你最得意的時候,往往會給你澆一盆涼水。
(注,這里將之前的數據集調整了一下,由x=1,5,6改為x=1,2,3。方便畫圖啦)
小黃人又嘗試給神奇小屋4個和5個蘋果,結果分別得到9個和10個香蕉。似乎哪裡有點不對??!如果按照之前發現的規律,應該分別得到12和20個香蕉呀。小黃人,百思不得其解。
這時,神奇小屋吐出來一張紙條,上面寫著:如果你扔進來的蘋果太多,我給你的香蕉將會減少。小黃人,有點郁悶。
如果按照之前一元函數的方式建模,將會得到如下函數模型。
你可能比小黃人聰明多了,一眼就看出來上面的模型函數好像不太合適。損失函數永遠取不到最小值0。
如果模型函數是這樣就好了,那麼對應的損失函數值將會取到最小值0。可是,這好像是兩個模型函數。一山不容二虎,能不能將這兩個函數合成一個函數。
這時,你又脫口而出,分段函數!!事實證明,你的智商已經達到高中生水平。
當 x < 3 時,s1 等於1,s2 等於0,函數 y = 4x - 4;
當 x >= 3 時,s1 等於0,s2 等於1,函數 y=1x + 5;
這才是完美的組合函數。
那麼,問題又來了。s1和s2是什麼?怎麼確定?
如果把s2看成函數,那麼理想情況下,應該是這樣的階躍函數。
然而階躍函數具有不連續、不光滑等不太好的性質。
這時,小黃人悠悠地說,我好像見過一個跟這個函數有點像的連續函數,叫Sigmoid函數。
看到這個Sigmoid函數後,你很生氣。對著小黃人說:人笨就少說話,這個函數和階躍函數,哪裡相像了,差的也太遠吧!!怎麼看怎麼不像。
小黃人:你給變數t一個參數不就行了,改成σ(1000t)。(摳鼻)
如果不仔細看,幾乎看不出在縱軸0到1之間,有個非常陡峭的曲線。你頓時無語,對小黃人刮目相看。
當 x = 0.1 時,s = σ(100) ≈ 1;
當 x = - 0.1 時,s = σ(100) ≈ 0;
稍微對這個Sigmoid函數做些調整,就能得到我們需要的各種階躍函數。
這樣的話,我們就得到了新的模型函數,y = (4x - 4)σ(-1000x + 3000)+ (1x + 5)σ(1000x - 3000);
如,當 x = 4 時, y = (12) σ(-1000) + (9)σ(1000) = 12*0 + 9*1 = 9,與數據集相符。
在這個過程中,小黃人還是有功勞的,提出了激活函數的概念。
下面我們看一下稍微嚴謹點的邏輯回歸定義。
這一句話就夠了。在第一節中我們已經學習線性回歸模型 y = wx + b。觀察圖,能夠發現,邏輯回歸其實就是在線性回歸的結果上在再使用一次激活函數 y = σ(wx + b)。線性回歸模型 (y = wx + b) 的預測值y可以是一個任意實數{-∞, ∞},而邏輯回歸模型 (y = σ(wx + b)) 的預測值y只能是{0, 1}之間的實數。如果能夠搞明白線性回歸與邏輯回歸的聯系,說明你已經掌握兩者的本質含義。
小黃人想,雖然給的香蕉數量少了些,最起碼小屋吐出來的香蕉比扔進去的蘋果多嘛。於是,小黃人又嘗試向神奇小屋裡扔進去了7個和9個蘋果。
結果,神奇小屋兩次都只返還出來10個香蕉。這下小黃人傻眼了。
雖然小黃人在其他事情上比較笨,但是只要與香蕉相關,它可精明的多。剛剛5個蘋果就能換10個香蕉,現在9個蘋果才能換10個香蕉!!明顯自己吃虧了。但是,它又非常不喜歡吃蘋果,只能強忍怨氣,攢著一股勁,一定要把裡面的規律找出來。
經過之前的套路,機智的你,一定能想到解決辦法。
對,就是這樣。將數據集分成三塊,分別構建線性模型函數,然後利用激活函數,組合起來。
問題再次出現。
當 x < 3 時,s1 = σ(-1000x + 3000) = 1,其他情況為0;
當 x >= 5 時,s3 = σ(1000x - 5000) = 1,其他情況為0;
當 3 <= x < 5 時,s2 = ??
不知道聰明的你有沒有注意到,函數 s1 和 s3 都是以 x 作為未知變數。如果我們轉換一下思路,將 s2 看成是 s1 和 s3的二元函數。即,s2是否等於1或0,由 s1 和 s2 的值決定。
s2 = σ(-1000s1 - 1000s2 + 500)
雖然得到的香蕉數目不再增加,但是這么復雜的問題都能解決掉(使用線性回歸和邏輯回歸相結合,對數據集建模),小黃人還是有點小高興。反正它手裡還有些蘋果,於是它又嘗試向神奇小屋裡丟進去了10、11、12個蘋果。結果...小黃人崩潰了!!
神奇小屋傳出來紙條說:做人不能貪得無厭,要見好就收,知足常樂。小黃人崩潰了。現在只留下一個未被解決的難題----怎麼對數據集進行建模。
即使你很聰明,似乎也只能解決其中的兩步。
取 s1 = σ(-1000x + 3000),即,當 x < 3 時,s1 = 0;
取 s4 = σ(1000x - 9000),即,當 x >= 9 時,s4 = 0;
那麼 s1 和 s2 該如何確定?
根據之前的經驗,你大致可以確定s1和s2應該由s1和s4的值確定。
後續......
假設現在我們有許多數據集,
梳理一下流程
重點來了
免噴聲明:本文借鑒(chao xi) 牛津大學xDeepMind 自然語言處理 公開課