13.2 模型擬合度概念介紹與欠擬合模型的結構調整策略

13.2_0001.png
13.2_0002.png
13.2_0003.png
13.2_0004.png
13.2_0005.png
13.2_0006.png
13.2_0007.png
13.2_0008.png
13.2_0009.png
13.2_0010.png
13.2_0011.png
13.2_0012.png
13.2_0013.png
13.2_0014.png
13.2_0015.png
13.2_0016.png
13.2_0017.png
13.2_0018.png
13.2_0019.png
13.2_0020.png
13.2_0021.png
13.2_0022.png
13.2_0023.png
13.2_0024.png
13.2_0025.png
13.2_0026.png
13.2_0027.png
13.2_0028.png
13.2_0029.png
13.2_0030.png
13.2_0031.png
13.2_0032.png
13.2_0033.png
  • 誤區(qū):損失函數(shù)從始至終都不變炕置,梯度下降迭代過程就是“從山頂走到山腳”兆沙,一步步找到最小值欧芽;
  • 問題:為何迭代過程中損失函數(shù)下降,但模型評估指標卻出現(xiàn)波動葛圃。

我們通過手動實例進行說明千扔。首先創(chuàng)建一組數(shù)據(jù)如下:

x y
1 2
3 5
6 4
8 3

我們使用y=wx方程對其進行擬合,并以SSE作為損失函數(shù)库正。假設我們使用小批量梯度下降曲楚,每次帶入兩條數(shù)據(jù)進行損失函數(shù)計算,第一次帶入前兩條數(shù)據(jù)褥符、第二次帶入后兩條數(shù)據(jù)龙誊,則第一輪epoch的第一次迭代過程中損失函數(shù)如下:

\begin{align} SSE_{(1)} & = (2-1*w)^2 + (5-3*w)^2 \\ & = w^2-4w+4+9w^2-30w+25 \\ & = 10w^2-34w+29 \end{align}

據(jù)此可以算得當前梯度公式如下:

1692543705323.png

迭代過程我們要求每一次迭代損失函數(shù)都降低,但通過觀察上述過程不難發(fā)現(xiàn)喷楣,第一輪epoch迭代第一次時趟大,SSE_1能夠順利降低,但SSE_2SSE并不一定铣焊,同理逊朽,第一輪epoch迭代第二次時,SSE_2能夠順利降低曲伊,但SSE_1SSE并不一定叽讳。雖然我們相信數(shù)據(jù)整體特性應該保持一致,大概率來說其中一個損失函數(shù)減少坟募,其他損失函數(shù)也會減少岛蚤,但畢竟方程不同,這其中確實也存在著一定的不確定性懈糯。我們可以通過以下代碼進行實驗涤妒。

# SSE1損失函數(shù)計算函數(shù)
def loss_sse1(x):
    loss1 = 10 * x * x - 34 * x + 29
    return loss1

# SSE2損失函數(shù)計算函數(shù)
def loss_sse2(x):
    loss2 = 100 * x * x - 96 * x + 25
    return loss2

# SSE損失函數(shù)計算函數(shù)
def loss_sse(x):
    loss = 110 * x * x - 100 * x + 54
    return loss

# SSE1的梯度計算函數(shù)
def g1(x):
    grad1 = 20 * x - 34
    return grad1

# SSE2的梯度計算函數(shù)
def g2(x):
    grad2 = 200 * x - 96
    return grad2


# 定義核心參數(shù)
w = 0                      # w的初始取值
lr = 0.01                  # 模型學習率
num_epochs = 20            # 迭代輪數(shù)

# 創(chuàng)建空列表容器
w_l = [0]                  # w迭代過程取值
loss_l = []                # 整體SSE取值
loss1_l = []               # SSE1取值
loss2_l = []               # SSE2取值


for i in range(num_epochs):
    loss_l.append(loss_sse(w))         # 每一輪迭代開始前計算整體SSE
    loss1_l.append(loss_sse1(w))       # 每一輪第一次迭代開始前計算SSE1
    w -= lr * g1(w)                    # 每一輪的第一次迭代
    w_l.append(w)                      # 每一輪第一次迭代后儲存w
    loss1_l.append(loss_sse1(w))       # 每一輪第一次迭代后計算SSE1
    loss2_l.append(loss_sse2(w))       # 每一輪第二次迭代開始前計算SSE2
    w -= lr * g2(w)                    # 每一輪第二次迭代
    w_l.append(w)                      # 每一輪第二次迭代后儲存w
    loss2_l.append(loss_sse2(w))       # 每一輪第二次迭代后計算SSE2

loss_l.append(loss_sse(w))             # 訓練完成后存儲最終w

# 繪圖部分
# 查看整體SSE變化情況
plt.subplot(311)
plt.plot(list(range(num_epochs+1)), loss_l)
# 查看SSE1變化情況
plt.subplot(312)
plt.plot(list(range(num_epochs*2)), loss1_l)
# 查看SSE2變化情況
plt.subplot(313)
plt.plot(list(range(num_epochs*2)), loss2_l)
1692543801640.png

??從上述結果能夠看出,每一輪的內部兩次迭代赚哗,對于SSE1和SSE2來說都是降低的届腐,但每一輪之間SSE1和SSE2都會出現(xiàn)波動铁坎,原因也是因為其他的損失函數(shù)計算出來的w不一定能有效幫助當前損失函數(shù)降低取值蜂奸,當然整體SSE也是在波動中趨于穩(wěn)定的犁苏。由此我們就能夠明白為何在模型訓練過程中,明明應該“整體向好”扩所,但不管是損失函數(shù)還是模型指標围详,都可能出現(xiàn)波動的情況。

??當然祖屏,除了上面所說的助赞,由于小批量梯度下降每次帶入的數(shù)據(jù)不同從而導致?lián)p失函數(shù)不同進而導致模型結果波動以外,還有一種可能也會導致模型結果波動袁勺,那就是目標函數(shù)和模型評估指標不一致雹食。這種情況在分類問題中非常常見,常見的分類問題中損失函數(shù)是交叉熵損失函數(shù)期丰,代表極大似然估計的概率值群叶,而模型評估指標是準確率,代表最終預測準確的個數(shù)占比钝荡,而在實際建模過程中街立,確實有可能存在極大似然估計概率值增加但準確率不變甚至降低的情況(犧牲了某條數(shù)據(jù)的判別結果但換來了其他很多條數(shù)據(jù)的極大似然估計概率值大幅提升),從而導致訓練過程模型評估指標波動埠通。

關于小批量梯度下降算法捕捉局部規(guī)律的討論:
??其實帶入部分數(shù)據(jù)還是帶入全部數(shù)據(jù)赎离,其實都是相對的。在小批量梯度下降中端辱,某一次迭代雖然是帶入了全部訓練數(shù)據(jù)集的一部分梁剔,但如果我們把這部分數(shù)據(jù)看成全部,就相當于是帶入了全部數(shù)據(jù)進行訓練舞蔽。所有的訓練都是為了捕捉規(guī)律荣病,因此我們可以把某一次迭代看成是模型在捕捉這一部分數(shù)據(jù)的“全部規(guī)律”,但由于這部分數(shù)據(jù)只是所有訓練數(shù)據(jù)的一部分喷鸽,因此模型還只是捕捉了局部規(guī)律众雷。從這個角度來說,小批量梯度下降是希望通過捕捉一個個“小批”數(shù)據(jù)的局部規(guī)律最終構成整個數(shù)據(jù)集的整體規(guī)律做祝。

關于小批量梯度下降算法有效性的討論:
??而為何通過捕捉局部規(guī)律最后能夠更好的把握整體規(guī)律呢砾省?從實際運算結果來看是因為小批量梯度下降能夠跨越局部最小值點,而根本原因則是對于某些“小批”數(shù)據(jù)來說混槐,由于局部規(guī)律和整體規(guī)律存在差異性编兄,整體的局部最小值點對于當前“小批”數(shù)據(jù)來說根本就不是局部最小值點(畢竟不同數(shù)據(jù)的損失函數(shù)不同),因此帶入該“小批”數(shù)據(jù)時候就有可能直接跨越該點声登,也就是說狠鸳,小批量梯度下降無法跨越小批數(shù)據(jù)對應的損失函數(shù)的最小值點揣苏,但在下降的過程中卻有可能偶然幫助整體損失函數(shù)跨越最小值點,這就是借助隨機性解決問題的典型件舵。

隨機性其實是把雙刃劍:
??當我們借助隨機性解決問題的時候卸察,同樣也會面臨隨機性帶來的麻煩,由于一旦開始隨機铅祸,整個迭代過程都會變得不可控坑质,此后我們只能通過各種方法將這個隨機過程盡可能按照我們的意愿執(zhí)行,這也就是一系列的優(yōu)化方法的由來临梗。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末涡扼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子盟庞,更是在濱河造成了極大的恐慌吃沪,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件什猖,死亡現(xiàn)場離奇詭異票彪,居然都是意外死亡,警方通過查閱死者的電腦和手機卸伞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門抹镊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人荤傲,你說我怎么就攤上這事垮耳。” “怎么了遂黍?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵终佛,是天一觀的道長。 經常有香客問我雾家,道長铃彰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任芯咧,我火速辦了婚禮牙捉,結果婚禮上,老公的妹妹穿的比我還像新娘敬飒。我一直安慰自己邪铲,他們只是感情好,可當我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布无拗。 她就那樣靜靜地躺著带到,像睡著了一般。 火紅的嫁衣襯著肌膚如雪英染。 梳的紋絲不亂的頭發(fā)上揽惹,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天被饿,我揣著相機與錄音,去河邊找鬼搪搏。 笑死狭握,一個胖子當著我的面吹牛,可吹牛的內容都是我干的慕嚷。 我是一名探鬼主播哥牍,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼喝检!你這毒婦竟也來了?” 一聲冷哼從身側響起撼泛,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤挠说,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后愿题,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體损俭,經...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年潘酗,在試婚紗的時候發(fā)現(xiàn)自己被綠了杆兵。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡仔夺,死狀恐怖琐脏,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情缸兔,我是刑警寧澤日裙,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站惰蜜,受9級特大地震影響昂拂,放射性物質發(fā)生泄漏。R本人自食惡果不足惜抛猖,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一格侯、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧财著,春花似錦联四、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至驮履,卻和暖如春鱼辙,著一層夾襖步出監(jiān)牢的瞬間廉嚼,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工倒戏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留怠噪,地道東北人。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓杜跷,卻偏偏與公主長得像傍念,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子葛闷,可洞房花燭夜當晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內容