深度學習總結(21)

超越基于常識的基準

除了不同的評估方法,你還應該了解的是利用基于常識的基準。訓練深度學習模型,你聽不到也看不到。你無法觀察流形學習過程,它發生在數千維空間中,即使投影到三維空間中,你也無法解釋它。唯一的反饋信號就是驗證指標。在開始處理一個數據集之前,你總是應該選擇一個簡單的基準,并努力去超越它。如果跨過了這道門檻,你就知道你的方向對了—模型正在使用輸入數據中的信息做出具有泛化能力的預測,你可以繼續做下去。這個基準既可以是隨機分類器的性能,也可以是你能想到的最簡單的非機器學習方法的性能。

比如對于MNIST數字分類示例,一個簡單的基準是驗證精度大于0.1(隨機分類器)?;對于IMDB示例,基準可以是驗證精度大于0.5。對于路透社示例,由于類別不均衡,因此基準約為0.18~0.19。對于一個二分類問題,如果90%的樣本屬于類別A,10%的樣本屬于類別B,那么一個總是預測類別A的分類器就已經達到了0.9的驗證精度,你需要做得比這更好。在面對一個全新的問題時,你需要設定一個可以參考的基于常識的基準,這很重要。如果無法超越簡單的解決方案,那么你的模型毫無價值—也許你用錯了模型,也許你的問題根本不能用機器學習方法來解決。這時應該重新思考解決問題的思路。

模型評估的注意事項

數據代表性(data representativeness)?。訓練集和測試集應該都能夠代表當前數據。假設你要對數字圖像進行分類,而初始樣本是按類別排序的,如果你將前80%作為訓練集,剩余20%作為測試集,那么會導致訓練集中只包含類別0~7,而測試集中只包含類別8和9。這個錯誤看起來很可笑,但非常常見。因此,將數據劃分為訓練集和測試集之前,通常應該隨機打亂數據。時間箭頭(the arrow of time)?。如果想根據過去預測未來(比如明日天氣、股票走勢等)?,那么在劃分數據前不應該隨機打亂數據,因為這么做會造成時間泄露(temporal leak)?:模型將在未來數據上得到有效訓練。對于這種情況,應該始終確保測試集中所有數據的時間都晚于訓練數據。

數據冗余(redundancy in your data)?。如果某些數據點出現了兩次(這對于現實世界的數據來說十分常見)?,那么打亂數據并劃分成訓練集和驗證集,將導致訓練集和驗證集之間出現冗余。從效果上看,你將在部分訓練數據上評估模型,這是極其糟糕的。一定要確保訓練集和驗證集之間沒有交集。有了評估模型性能的可靠方法,你就可以監控機器學習的核心矛盾—優化與泛化之間的矛盾,以及欠擬合與過擬合之間的矛盾。

改進模型擬合

為了實現完美的擬合,你必須首先實現過擬合。由于事先并不知道界線在哪里,因此你必須穿過界線才能找到它。在開始處理一個問題時,你的初始目標是構建一個具有一定泛化能力并且能夠過擬合的模型。得到這樣一個模型之后,你的重點將是通過降低過擬合來提高泛化能力。在這一階段,你會遇到以下3種常見問題。訓練不開始:訓練損失不隨著時間的推移而減小。訓練開始得很好,但模型沒有真正泛化:模型無法超越基于常識的基準。訓練損失和驗證損失都隨著時間的推移而減小,模型可以超越基準,但似乎無法過擬合,這表示模型仍然處于欠擬合狀態。我們來看一下如何解決這些問題,從而抵達機器學習項目的第一個重要里程碑:得到一個具有一定泛化能力(可以超越簡單的基準)并且能夠過擬合的模型。

調節關鍵的梯度下降參數

有時訓練不開始,或者過早停止。損失保持不變。這個問題總是可以解決的—請記住,對隨機數據也可以擬合一個模型。即使你的問題毫無意義,也應該可以訓練出一個模型,不過模型可能只是記住了訓練數據。出現這種情況時,問題總是出在梯度下降過程的配置:優化器、模型權重初始值的分布、學習率或批量大小。所有這些參數都是相互依賴的,因此,保持其他參數不變,調節學習率和批量大小通常就足夠了。我們來看一個具體的例子。

(train_images, train_labels), _ = mnist.load_data()
train_images = train_images.reshape((60000, 28 * 28))
train_images = train_images.astype("float32") / 255model = keras.Sequential([layers.Dense(512, activation="relu"),layers.Dense(10, activation="softmax")
])
model.compile(optimizer=keras.optimizers.RMSprop(1.),loss="sparse_categorical_crossentropy",metrics=["accuracy"])
model.fit(train_images, train_labels,epochs=10,batch_size=128,validation_split=0.2)

這個模型的訓練精度和驗證精度很快就達到了30%~40%,但無法超出這個范圍。下面我們試著把學習率降低到一個更合理的值1e-2。

代碼清單 使用更合理的學習率訓練同一個模型

model = keras.Sequential([layers.Dense(512, activation="relu"),layers.Dense(10, activation="softmax")
])
model.compile(optimizer=keras.optimizers.RMSprop(1e-2),loss="sparse_categorical_crossentropy",metrics=["accuracy"])
model.fit(train_images, train_labels,epochs=10,batch_size=128,validation_split=0.2)

現在模型可以正常訓練了。如果你自己的模型出現類似的問題,那么可以嘗試以下做法。降低或提高學習率。學習率過大,可能會導致權重更新大大超出正常擬合的范圍,就像前面的例子一樣。學習率過小,則可能導致訓練過于緩慢,以至于幾乎停止。增加批量大小。如果批量包含更多樣本,那么梯度將包含更多信息且噪聲更少(方差更小)?。最終,你會找到一個能夠開始訓練的配置。

利用更好的架構預設

你有了一個能夠擬合的模型,但由于某些原因,驗證指標根本沒有提高。這些指標一直與隨機分類器相同,也就是說,模型雖然能夠訓練,但并沒有泛化能力。這是怎么回事?這也許是你在機器學習中可能遇到的最糟糕的情況。這表示你的方法從根本上就是錯誤的,而且可能很難判斷問題出在哪里。下面給出一些提示。

首先,你使用的輸入數據可能沒有包含足夠的信息來預測目標。也就是說,這個問題是無法解決的。試圖擬合一個標簽被打亂的MNIST模型,它就屬于這種情況:模型可以訓練得很好,但驗證精度停留在10%,因為這樣的數據集顯然是不可能泛化的。其次,你使用的模型類型可能不適合解決當前問題。你會在第10章看到,對于一個時間序列預測問題的示例,密集連接架構的性能無法超越簡單的基準,而更加合適的循環架構則能夠很好地泛化。模型能夠對問題做出正確的假設,這是實現泛化的關鍵,你應該利用正確的架構預設。

提高模型容量

如果你成功得到了一個能夠擬合的模型,驗證指標正在下降,而且模型似乎具有一定的泛化能力,那么恭喜你:你就快要成功了。接下來,你需要讓模型過擬合。考慮下面這個小模型,它是在MNIST上訓練的一個簡單的logistic回歸模型。

model = keras.Sequential([layers.Dense(10, activation="softmax")])
model.compile(optimizer="rmsprop",loss="sparse_categorical_crossentropy",metrics=["accuracy"])
history_small_model = model.fit(train_images, train_labels,epochs=20,batch_size=128,validation_split=0.2)
import matplotlib.pyplot as plt
val_loss = history_small_model.history["val_loss"]
epochs = range(1, 21)
plt.plot(epochs, val_loss, "b--",label="Validation loss")
plt.title("Effect of insufficient model capacity on validation loss")
plt.xlabel("Epochs")
plt.ylabel("Loss")
plt.legend()

模型得到的損失曲線。

在這里插入圖片描述

驗證指標似乎保持不變,或者改進得非常緩慢,而不是達到峰值后扭轉方向。驗證損失達到了0.26,然后就保持不變。你可以擬合模型,但無法實現過擬合,即使在訓練數據上多次迭代之后也無法實現。在你的職業生涯中,你可能會經常遇到類似的曲線。請記住,任何情況下應該都可以實現過擬合。與訓練損失不下降的問題一樣,這個問題也總是可以解決的。如果無法實現過擬合,可能是因為模型的表示能力(representational power)存在問題:你需要一個容量(capacity)更大的模型,也就是一個能夠存儲更多信息的模型。若要提高模型的表示能力,你可以添加更多的層、使用更大的層(擁有更多參數的層)?,或者使用更適合當前問題的層類型(也就是更好的架構預設)?。我們嘗試訓練一個更大的模型,它有兩個中間層,每層有96個單元。

model = keras.Sequential([layers.Dense(96, activation="relu"),layers.Dense(96, activation="relu"),layers.Dense(10, activation="softmax"),
])
model.compile(optimizer="rmsprop",loss="sparse_categorical_crossentropy",metrics=["accuracy"])
history_large_model = model.fit(train_images, train_labels,epochs=20,batch_size=128,validation_split=0.2)

現在驗證曲線看起來正是它應有的樣子:模型很快擬合,并在8輪之后開始過擬合

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/77475.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/77475.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/77475.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

接口自動化測試(二)

一、接口測試流程:接口文檔、用例編寫 拿到接口文檔——編寫接口用例以及評審——進行接口測試——工具/自動化框架進行自動化用例覆蓋(70%)——輸出測試報告 自動化的目的一般是為了回歸 第一件事情:理解需求,學會看接口文檔 只需要找到我…

Linux上位機開發實踐(以MCU小系統入門嵌入式電路)

【 聲明:版權所有,歡迎轉載,請勿用于商業用途。 聯系信箱:feixiaoxing 163.com】 一直都主張嵌入式軟件工程師,也要會做一點電路設計的工作。哪怕自己做的是嵌入式linux上層開發,一個會硬件設計&#xff0c…

瀏覽器的存儲機制 - Storage

瀏覽器的存儲機制 - Storage 前言一、核心概念與區別二、常用 API1、存儲數據(setItem(key, value))2、 獲取數據(getItem(key))3、刪除單個數據(removeItem(key))4、清空所有數據(clear()&…

考研單詞筆記 2025.04.18

chance n機會,風險,冒險,可能性,巧合,意外a偶然的,意外的 opportunity n機會,時機 crisis n危機,危急關頭 the economic crisis 經濟危機 danger n危險,可能性&#…

第三方API——Spring Boot 集成阿里云短信發送功能

目錄 一. 創建阿里云OSS服務并獲取密鑰,開通短信服務 1.1 注冊阿里云服務器 1.2 開通短信服務 1.3 創建對象存儲OSS服務 1.4 RAM用戶授權短信權限 1.5 新增用戶并授權用戶短信權限 1.6 獲取 AccessKey ID 和 AccessKey Secret 二. 創建項目集成短信發送 2.1…

b站PC網頁版視頻播放頁油猴小插件制作

文章目錄 前言需求分析實施觀察頁面起始渲染編碼效果展示 總結 前言 新手上路,歡迎指導 需求分析 想要一個簡約干凈的界面,需要去除推薦欄和廣告部分. 想要自由調節視頻播放速率,需要在視頻控制欄加一個輸入框控制視頻倍速 實施 觀察頁面起始渲染 因為要使用MutationObse…

暢游Diffusion數字人(27):解讀字節跳動提出主題定制視頻生成技術Phantom

暢游Diffusion數字人(0):專欄文章導航 前言:主題定制視頻生成,特別是zero-shot主題定制視頻生成,一直是當前領域的一個難點,之前的方法效果很差。字節跳動提出了一個技術主題定制視頻生成技術Phantom,效果相比于之前的技術進步非常顯著。這篇博客詳細解讀一下這一工作。 …

ESP8266簡單介紹

ESP8266模塊圖如下 ESP8266的工作模式有三種 ESP8266支持STA、AP、STAAP三種工作模式 ①STA模式 (ESP充當設備與路由器相連) ②AP模式 (ESP充當路由器) ③APSTA(上述兩種模式兼具) AT指令介紹 使用安…

DeepSeek-R3、GPT-4o 與 Claude-3.5-Sonnet 全面對比:性能、應用場景與技術解析

隨著大模型技術的迅猛發展,國產模型正逐漸嶄露頭角,尤其是DeepSeek-R3的發布,更是在AI技術社區中引起廣泛關注。而與此同時,國際領先的GPT-4o和Claude-3.5-Sonnet也在不斷迭代升級,持續刷新業界對AI能力的認知。下文將…

城市街拍暗色電影膠片風格Lr調色教程,手機濾鏡PS+Lightroom預設下載!

調色介紹 城市街拍暗色電影膠片風格 Lr 調色,是借助 Adobe Lightroom 軟件,為城市街拍的人像或場景照片賦予獨特視覺風格的后期處理方式。旨在模擬電影膠片質感,營造出充滿故事感與藝術感的暗色氛圍,讓照片仿佛截取于某部充滿張力…

數字后端設計 (一):數字電路設計的「前后端」到底是什么?

—— 想象你在做一道菜——前端設計是寫菜譜,后端設計是進廚房真正炒菜。這篇文章幫你搞懂「芯片設計」里這兩個階段到底在干嘛。 1. 前端設計——寫一份「理想化」的菜譜 任務:用代碼描述芯片的功能。例子:你要做一個自動計算“112”的芯片…

網站301搬家后谷歌一直不收錄新頁面怎么辦?

當網站因更換域名或架構調整啟用301重定向后,許多站長發現谷歌遲遲不收錄新頁面,甚至流量大幅下滑。 例如,301跳轉設置錯誤可能導致權重傳遞失效,而新站內容與原站高度重復則可能被谷歌判定為“低價值頁面”。 即使技術層面無誤&a…

WiFi“管家”------hostapd的工作流程

目錄 1. 啟動與初始化 1.1 解析命令行參數 1.2 讀取配置文件 1.3 創建接口和 BSS 數據結構 1.4 初始化驅動程序 2. 認證和關聯處理 2.1 監聽認證請求 2.2 處理認證請求 2.3 處理關聯請求 3. 數據轉發 3.1 接收客戶端數據 3.2 轉發數據 4. 斷開連接處理 4.1 處理客…

YOLOv2 快速入門與核心概念:更快、更準的目標檢測利器

今天,我們就來聊聊 YOLO 系列的第二代—— YOLOv2,看看它是如何在速度的基礎上,進一步提升檢測精度的。 目標檢測的重要性:讓機器“看懂”世界 想象一下,自動駕駛汽車需要實時識別道路上的車輛、行人、交通標志&…

[蒼穹外賣 | 項目日記] 第三天

前言 實現了新增菜品接口實現了菜品分頁查詢接口實現了刪除菜品接口實現了根據id查詢菜品接口實現了修改菜品接口 今日收獲: 今日的這幾個接口其實和之前寫的對員工的操作是一樣的,都是一整套Curd操作,所以今天在技術層面上并沒有…

Go語言入門到入土——三、處理并返回異常

Go語言入門到入土——三、處理并返回異常 文章目錄 Go語言入門到入土——三、處理并返回異常1. 在greetings.go中添加異常處理代碼2. 在hello.go中添加日志記錄代碼3. 運行 1. 在greetings.go中添加異常處理代碼 處理空輸入的異常,代碼如下: package g…

創維E900V20C-國科GK6323V100C-rtl8822cs-安卓9.0-短接強刷卡刷固件包

創維E900V20C/創維E900V20D-國科GK6323V100C-安卓9.0-強刷卡刷固件包 創維E900V20C 刷機說明: 1、用個老款4G,2.0的U盤,fat32,2048塊單分區格式化, 5個文件復制到根目錄,插盒子靠網口U口&…

視頻分析設備平臺EasyCVR安防視頻管理系統,打造電石生產智能視頻監控新體系

一、背景介紹 電石生產中的出爐工序是整個生產流程中最為繁重且危險的環節。在開堵爐眼的過程中,電石極易發生飛濺現象,尤其在進行吹氧操作時,人員灼傷的風險極高。鑒于此,該工序正逐步由傳統的人工操作模式向智能化方向轉變。然…

Verilog的整數除法

1、可變系數除法實現----利用除法的本質 timescale 1ns / 1ps // // Company: // Engineer: // // Create Date: 2025/04/15 13:45:39 // Design Name: // Module Name: divide_1 // Project Name: // Target Devices: // Tool Versions: // Description: // // Depe…

UniApp + Cursor + Devbox 全欄平臺開發教程:從0到完整項目打造

本文基于B站熱門教程《一口氣學會小程序 / App / H5開發:UniApp教程 + Cursor + Devbox》,https://www.bilibili.com/video/BV1W7QZYMEus/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=a1428945043b2df41c1896acb90d942a,進行全面擴展…