PhotoStock Inc. 搜尋引擎目前使用根據關鍵字的 ElasticSearch 模糊搜尋,僅依賴圖片後設資料,缺乏對圖片內容的理解。為提升搜尋準確度,我們考慮引入機器學習模型。首先,根據現有關鍵字搜尋建立非機器學習基線,以便後續比較。接著,構建根據後設資料的簡單機器學習基線,使用 TF-IDF 向量化和線性模型預測相關性。最後,引入預訓練模型 CLIP 作為更進階的基線,結合圖片和文字資訊進行搜尋。CLIP 能夠計算查詢與圖片、查詢與描述之間的距離,提供更全面的相關性評分。建立基線後,透過學習曲線分析,觀察模型訓練過程中的損失變化,及早發現過擬合或欠擬合等問題。此外,殘差分析則幫助我們深入理解模型預測誤差,找出系統性偏差,並據此調整模型結構或特徵工程,最終提升搜尋引擎的效能。
基線解決方案在 PhotoStock Inc. 搜尋引擎的應用
在前面的章節中,我們已經討論了基線模型的重要性以及如何選擇適當的基線模型。在本文中,我們將以 PhotoStock Inc. 為例,探討如何為其搜尋引擎問題建立基線模型。
PhotoStock Inc. 的基線模型建議
對於 PhotoStock Inc. 的搜尋引擎問題,我們提出了三種不同的基線模型方法。
I. 非機器學習(Non-ML)基線模型
目前,PhotoStock Inc. 使用的是根據關鍵字的搜尋引擎,搭配 ElasticSearch 資料函式庫實作模糊搜尋。這種方法不需要訓練模型,且已經佈署到生產環境,因此是一個可靠的基線模型候選方案。然而,它有兩個缺點:首先,它只利用了後設資料(如標籤、描述等),而沒有使用圖片本身;其次,它不容易與新的機器學習(ML)流程整合以進行比較。儘管如此,將其作為基線模型仍然非常有用,因為它可以讓我們比較 ML 模型與非 ML 解決方案的效能。
II. 簡單的機器學習(ML)基線模型
參考前面的例子,我們可以使用一個簡單的 ML 模型作為基線。這個模型不會使用圖片,而是僅僅依賴後設資料。它可以直接使用查詢和後設資料作為原始輸入,透過簡單的詞頻-逆檔案頻率(TF-IDF)向量化器轉換為特徵,然後使用一個簡單的線性模型來預測相關性得分。這種方法實作和訓練都相對容易,其簡單性有助於早期除錯和理解問題。
III. 預訓練模型作為基線
最後,我們可以使用預訓練模型作為基線。針對 PhotoStock Inc. 的問題,我們需要一個能夠統一視覺和文字領域的解決方案,而 CLIP(https://openai.com/research/clip)是目前最著名的選擇之一。CLIP 於 2021 年發布,並在多個任務中表現出色。為了使其適用於我們的場景,我們可以直接使用 CLIP 對查詢和圖片對的輸出作為相關性得分。這種方法不依賴後設資料和文字描述,因此可以與前面的方法結合,或者進一步發展為使用雙元件評分,例如:
relevancy_score = distance(query, image) + distance(query, description)
兩個距離都可以使用 CLIP 計算,一個使用文字和圖片編碼器,另一個僅使用文字編碼器。作為第一步,我們可以完全避免任何訓練。在後續步驟中,我們可以開始對模型或其元件進行微調,以適應我們的資料集。
#### 內容解密:
在這個程式碼範例中,我們定義了一個相關性得分的計算公式。這個公式結合了查詢與圖片之間的距離,以及查詢與描述之間的距離。這兩個距離都是透過 CLIP 模型計算得出,分別使用了 CLIP 的影像編碼器和文字編碼器。這種方法允許我們在不依賴額外後設資料的情況下,利用 CLIP 的強大功能來評估查詢與圖片之間的相關性。
下一步:錯誤分析
一旦我們組裝了初始的構建塊,包括收集第一個資料集、選擇指標、定義評估程式以及訓練基線模型,我們就準備好開始迭代調整過程。錯誤分析就像針一樣,引導著系統的迭代更新。它幫助我們瞭解訓練階段的錯誤動態(學習曲線分析)和預測階段後的錯誤分佈(殘差分析)。透過分析這些錯誤,我們可以識別出改進機器學習(ML)系統的共同點、趨勢和模式。接下來的章節將探討錯誤分析的關鍵階段和型別,並提供例項來說明這些概念。
錯誤分析:機器學習系統的關鍵步驟
錯誤分析是機器學習(ML)系統設計中常被忽略的一環,但它卻是提升系統效能的關鍵。透過深入分析錯誤,開發者可以找出系統的弱點並提出改進方案。本章將探討錯誤分析的重要性以及學習曲線分析的方法。
學習曲線分析
學習曲線分析是評估模型學習過程的一種方法,透過繪製和分析學習曲線,可以瞭解模型的訓練表現與訓練資料量之間的關係。學習曲線分析主要回答兩個問題:
- 模型是否收斂?
- 是否避免了欠擬合或過擬合的問題?
如果這兩個問題的答案都是「否」,則無需進行進一步的分析。
什麼是學習曲線?
學習曲線原本是行為心理學中的概念,用於展示個體或動物的學習進展。在機器學習中,學習曲線是一種圖形表示,顯示所選指標與特定數值屬性(如迭代次數、資料集大小或模型複雜度)之間的關係。
學習曲線的三種主要屬性:
迭代次數:這種曲線描繪了損失或指標在訓練過程中的演變,有助於檢查模型的收斂性。例如,在神經網路中,迭代次數可以是訓練的輪數(epochs)。
模型複雜度:這型別的學習曲線顯示了模型的效能如何隨著其複雜度的變化而變化。隨著模型複雜度的增加,它可能更好地擬合訓練資料,但可能會在未見資料上表現不佳。模型複雜度的引數包括樹的深度、特徵數量和神經網路的層數。
資料集大小:這類別學習曲線揭示了訓練資料集中的樣本數量如何影響模型的效能。它有助於判斷模型是否能從更多資料中受益。
過擬合與欠擬合
過擬合發生在模型在訓練資料上表現良好,但在未見資料上表現不佳的情況下,通常是由於模型過度專注於訓練資料中的細節和模式,而這些並未出現在新資料中。
欠擬合則發生在模型過於簡單,未能捕捉特徵與目標變數之間的重要關係,導致在訓練資料和新資料上都表現不佳。
兩者都與偏差-變異數權衡(bias-variance tradeoff)密切相關,即模型的複雜度與輸入資料量之間的平衡。模型的容量越大,偏差越小,但過擬合的風險越高。反之,降低變異數需要降低複雜度,從而導致偏差增加。
損失曲線
損失曲線(或稱為收斂曲線)是根據學習迭代次數繪製的,顯示了演算法在任務中投入的學習努力越多,其改程式度。它繪製了損失(或指標)在縱軸上與訓練迭代次數(或輪數)在橫軸上的關係。
隨著模型的訓練,損失應該減少,理想情況下形成向下的斜率。與其他學習曲線不同,根據迭代次數的損失曲線只需要一次訓練執行,因此即使對於大型資料集,其追蹤也是可行的。
# 簡單的神經網路訓練範例
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# 模擬資料
X_train = np.random.rand(100, 10)
y_train = np.random.rand(100, 1)
# 定義模型
model = Sequential([
Dense(64, activation='relu', input_shape=(10,)),
Dense(1)
])
model.compile(optimizer='adam', loss='mean_squared_error')
# 訓練模型並儲存歷史記錄
history = model.fit(X_train, y_train, epochs=200, verbose=0)
# 繪製損失曲線
plt.plot(history.history['loss'])
plt.title('模型損失')
plt.ylabel('損失')
plt.xlabel('輪數')
plt.show()
內容解密:
- 首先,我們模擬了一個簡單的訓練資料集
X_train和對應的標籤y_train。 - 使用 Keras API 定義了一個簡單的神經網路模型,包含一個具有 64 個單元的隱藏層和一個輸出層。
- 編譯模型時,我們選擇了 Adam 最佳化器和均方誤差(MSE)作為損失函式。
- 在訓練過程中,我們儲存了訓練歷史記錄,包括每個輪數的損失值。
- 最後,我們繪製了損失曲線,用於觀察模型的收斂情況。
透過觀察損失曲線,我們可以及早發現訓練過程中的問題,例如損失值是否如預期般下降,或是否存在過擬合或欠擬合的跡象。這有助於我們調整模型結構或超引數,以提升模型的整體效能。
學習曲線分析在錯誤分析中的重要性
在機器學習(ML)模型的開發過程中,學習曲線分析是一項至關重要的工具,用於評估模型的訓練效果和診斷潛在問題。透過對損失曲線(loss curves)的觀察和分析,可以揭示模型訓練過程中的各種異常模式,並據此採取相應的除錯措施。
解讀損失曲線
損失曲線是模型在訓練過程中損失值隨訓練迭代次數變化的圖形表示。理想情況下,損失值應該隨著訓練的進行而平穩下降,直至收斂到一個令人滿意的水平。然而,在實際應用中,損失曲線可能會出現多種異常模式,這些模式往往指示了模型訓練中的問題。
模式1:損失值震盪
當損失曲線出現震盪,即損失值不收斂反而持續波動時(見圖9.3),可能的原因包括:
- 檢查特徵與目標變數之間是否存在相關性,或樣本與標籤是否正確傳遞給模型。
- 降低學習率,以防止模型引數在引數空間中劇烈震盪。
- 縮減資料集規模至單一批次或少量樣本(例如10-100個樣本),檢查模型是否能夠過擬合這些資料。
- 從較簡單的模型開始,逐步增加複雜度,並檢查每次改進是否優於基準模型或規則基線模型。
模式2:損失值爆炸或趨向NaN
當損失值突然爆炸或趨向非數值(NaN)(見圖9.4),通常指示計算過程中存在問題,例如梯度爆炸、數學運算錯誤(如除以零、對負數取對數)或資料中存在NaN值。可能的解決方案包括:
- 使用梯度裁剪(gradient clipping)技術。
- 降低學習率。
- 採用不同的權重初始化方法。
- 檢查資料預處理步驟是否正確。
模式3:損失下降但評估指標停滯
如果模型的損失值持續下降,但所使用的評估指標卻停滯不前(見圖9.5),這可能意味著所選的評估指標不適合當前問題,或指標的實作存在錯誤。尤其是在分類別任務中,使用包含特定閾值的指標時容易出現這種情況。
模式4:訓練曲線收斂但損失值異常
當訓練曲線看似正常收斂,但損失值卻異常時,可能需要進行完整性檢查,例如在單一批次上執行單元測試,以斷言損失值是否在預期範圍內。這種異常往往與資料的尺度變換(如影像或分割掩碼的歸一化)有關。
實踐中的教訓
在實際工作中,模型的離線測試表現與實際佈署後的表現可能存在差異。以下是從一個反垃圾訊息和反詐騙系統的改進案例中學到的經驗:
選擇適當的評估指標:在離線測試中使用符合實際需求的評估指標至關重要。例如,在詐騙檢測中,使用於特定回憶率下的特異度(specificity at defined recall)比精確率(precision)更為合適,因為精確率對類別敏感,而詐騙案例的回憶率難以完全評估。
效能評估的全面性:僅依賴點估計(point estimate)進行效能評估可能不足以反映真實情況。考慮到實際應用中的偏差,即使是微小的偏差也可能導致大量誤分類別事件。
自定義損失函式和指標層級:有時,預設的損失函式和評估指標無法滿足特定業務需求,需要設計自定義的損失函式和多層次的評估指標體系。
總之,錯誤分析是機器學習開發流程中的關鍵環節,而學習曲線分析則是錯誤分析的重要工具。透過深入理解和正確解讀損失曲線,可以有效地診斷和解決模型訓練中的各種問題,從而提升模型的效能和實際應用價值。
此圖示說明瞭根據損失曲線的不同異常模式採取相應的除錯措施的流程。
學習曲線分析與殘差分析在模型調校中的重要性
在機器學習(ML)模型的開發過程中,學習曲線分析和殘差分析是兩個至關重要的步驟。前者幫助我們評估模型的擬合程度和泛化能力,而後者則讓我們深入瞭解模型的預測誤差,從而進行有針對性的改進。
學習曲線分析
學習曲線分析是評估模型效能隨訓練資料量或模型複雜度變化的工具。它主要分為三種型別:迭代次數學習曲線、模型複雜度學習曲線和樣本數量學習曲線。
迭代次數學習曲線
迭代次數學習曲線(Epoch-wise Learning Curve)用於觀察模型在訓練集和驗證集上的損失或評估指標隨訓練迭代次數的變化。當訓練損失持續下降而驗證損失開始上升時,表明模型可能存在過擬合(Overfitting)問題,需要透過正則化或簡化模型結構來解決。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title PhotoStock搜尋引擎基線模型與錯誤分析
package "機器學習流程" {
package "資料處理" {
component [資料收集] as collect
component [資料清洗] as clean
component [特徵工程] as feature
}
package "模型訓練" {
component [模型選擇] as select
component [超參數調優] as tune
component [交叉驗證] as cv
}
package "評估部署" {
component [模型評估] as eval
component [模型部署] as deploy
component [監控維護] as monitor
}
}
collect --> clean : 原始資料
clean --> feature : 乾淨資料
feature --> select : 特徵向量
select --> tune : 基礎模型
tune --> cv : 最佳參數
cv --> eval : 訓練模型
eval --> deploy : 驗證模型
deploy --> monitor : 生產模型
note right of feature
特徵工程包含:
- 特徵選擇
- 特徵轉換
- 降維處理
end note
note right of eval
評估指標:
- 準確率/召回率
- F1 Score
- AUC-ROC
end note
@enduml
模型複雜度學習曲線
模型複雜度學習曲線(Model-wise Learning Curve)透過調整模型的複雜度(如神經網路的層數或決策樹的深度),觀察對應的訓練和驗證指標。這有助於找到最佳的模型複雜度,以平衡偏差和變異數。
樣本數量學習曲線
樣本數量學習曲線(Sample-wise Learning Curve)則關注於改變訓練資料的數量,觀察對模型效能的影響。這不僅可以預測增加資料是否能提升模型效能,還能判斷當前模型的瓶頸是資料量還是模型本身。
雙重下降現象
近年來,深度學習領域出現了一種有趣的現象——雙重下降(Double Descent)。在某些情況下,隨著模型複雜度或資料量的增加,模型的測試誤差會先減小,然後增大,最後再減小。這個現象挑戰了傳統的偏差-變異數權衡理論,並對現代深度學習模型的設計和調校提出了新的挑戰。
殘差分析
殘差分析(Residual Analysis)是深入瞭解模型預測誤差的重要工具。透過計算預測值與真實值之間的差異(殘差),我們可以發現模型的系統性錯誤或偏差。殘差分析不僅適用於迴歸問題,也可以擴充套件到其他型別的機器學習任務中,用於評估模型的預測準確性和可靠性。
內容解密:
- 殘差定義:殘差是指模型預測值與實際觀測值之間的差異,公式為
residual_i = y_pred_i - y_true_i。 - 殘差作用:透過分析殘差,可以識別模型的偏誤,進而指導模型的改進,如特徵工程或模型結構調整。
- 殘差應用:殘差分析不僅限於迴歸任務,也可以應用於分類別等其他任務,以評估模型的預測效能。
殘差分析的重要性與實踐方法
在機器學習領域中,模型的評估與改進是至關重要的環節。殘差分析(Residual Analysis)作為一種強大的診斷工具,能夠幫助我們深入瞭解模型的表現,找出錯誤模式,並據此改進系統。
殘差的基本概念
殘差是指模型預測值與真實值之間的差異。在迴歸和分類別任務中,殘差通常被用來評估模型的準確性。然而,殘差的應用並不僅限於這兩類別任務。在搜尋引擎、影像分割等領域,我們同樣可以透過計算殘差來評估模型的表現。
舉例來說,在搜尋引擎中,真實標籤通常是從搜尋查詢到前N個最相關檔案或產品的對映。為了計算殘差,我們可以測量模型預測的排名與每個專案真實排名之間的差異。
殘差分析的目標
進行殘差分析的主要目的是識別模型錯誤中的模式,從而找到改進系統的方向。與整體誤差通常由單一數值(如損失或指標)表示不同,殘差分析深入研究預測值與真實值之間的原始差異,提供對模型表現更細緻的診斷。
殘差分析的其他主要目的包括:
- 驗證模型假設:檢查殘差是否符合正態分佈、模型的預測是否有偏差等。
- 檢測指標變化的來源:找出哪些資料樣本在不同模型下表現出不同的殘差模式。
- 確保殘差的公平性:評估模型是否對所有樣本一視同仁,殘差的分佈是否在不同群體間保持一致。
- 進行最壞情況和最佳情況分析:分析具有最大殘差的樣本之間是否有共同點,以及如何改進模型以更好地處理這些情況。
- 檢查邊緣情況:評估模型在極端情況下(如最短或最長的歷史記錄、最低或最高價格的專案等)的表現。
模型假設的驗證
在訓練模型時,我們通常會對其預測結果、偏差和殘差分佈做出先驗假設。驗證這些假設有助於確保我們選擇了正確的模型、收集了足夠的資料並設計了合適的特徵。如果假設檢查揭示了意外的模式,可能會促使我們探索替代方案。
線性迴歸假設範例
假設我們使用簡單的線性迴歸來解決需求預測問題,我們會做出以下假設:
- 線性關係:預測變數(x)與目標變數(y)之間的關係是線性的。
- 嚴格外生性:殘差應為零均值。
- 正態性:殘差假設為正態分佈。
- 同方差性:殘差的方差對於任何x值都是相同的。
- 獨立性:殘差誤差項應該是獨立的。
透過繪製殘差的四種不同圖表(殘差vs.擬合值、正態分位數-分位數圖、尺度-位置圖等),我們可以檢查這些假設是否成立,並診斷潛在的問題,如非線性關係、殘差偏差、異方差性等。
結語
殘差分析是機器學習模型評估與改進中的關鍵步驟。透過深入分析殘差,我們可以更好地理解模型的強項和弱點,並據此採取針對性的改進措施。無論是在模型的早期開發階段還是在後期的維護過程中,殘差分析都能夠提供寶貴的見解,幫助我們開發更準確、更穩健的機器學習系統。
殘差分析在機器學習中的重要性
在機器學習(ML)中,殘差分析是一項關鍵技術,用於評估模型的有效性和改進模型的表現。殘差是指觀測值與模型預測值之間的差異。瞭解殘差的特性有助於我們改進模型、收集更多資料或調整訓練流程。
殘差診斷圖表的重要性
診斷圖表是殘差分析的核心工具。這些圖表包括:
- 殘差 vs. 擬合值:用於檢查模型是否滿足線性和同方差性假設。
- 殘差的正態 Q-Q 圖:用於檢查殘差是否服從正態分佈。
- 尺度化的殘差 vs. 擬合值:檢查是否存在異方差性問題。
- 殘差 vs. 槓桿:用於識別對迴歸結果有顯著影響的資料點。
注意力圖在文字轉語音(TTS)系統中的應用
在TTS任務中,注意力機制用於將文字字元與音訊幀對齊。注意力圖是一種視覺化工具,用於展示音訊幀(x軸)和字元(y軸)之間的啟用對映。理想情況下,注意力矩陣應呈現近對角線模式,以反映文字順序與音訊進展之間的一致性。
強制注意力矩陣呈現近對角線模式
為了實作這一目標,可以採用**引導注意力(Guided Attention)**技術。當注意力矩陣偏離對角線時,透過新增輔助損失函式進行懲罰,不僅加速了訓練過程,還引導模型朝著符合基本假設的有意義解發展。
殘差分佈的分析
當模型的假設不滿足時,需要調整訓練流程、收集更多資料或探索替代模型和損失函式。殘差分佈的異常可能指示:
- 目標變數的分佈問題:例如,收入、銷售額等變數通常服從對數正態分佈,此時需要對目標變數進行對數變換。
- 非單調依賴關係:當目標變數與特徵之間的關係非單調時,可以嘗試使用能夠捕捉非單調依賴的模型,或建立新的特徵以簡化模型。
殘差公平性的考量
在機器學習中,公平性是指個體樣本對損失或評估指標的貢獻是否均等。殘差分佈的公平性分析鼓勵我們採用更全面的模型評估方法,而不僅僅依賴單一數值指標。
公平性例項分析
假設有兩個模型都將平均絕對誤差(MAE)降低了20%。然而,第一個模型在所有樣本上均勻地減少了絕對殘差,而第二個模型則大幅改善了一半樣本的指標,同時降低了另一半樣本的表現。在這種情況下,第二個模型的殘差分佈被視為不公平的。