李宏毅機器學習筆記——梯度下降法

深度學習介紹

基于仿生學的一種自成體系的機器學習算法,包括但不限于圖像識別、語音、文本領域。

梯度下降法

作為深度學習算法種常用的優化算法

梯度下降法,是一種基于搜索的最優化方法,最用是最小化一個損失函數。梯度下降是迭代法的一種,可以用于求解最小二乘問題(線性和非線性都可以)。在求解機器學習算法的模型參數,即無約束優化問題時,梯度下降是最常采用的方法之一,另一種常用的方法是最小二乘法。在求解損失函數的最小值時,可以通過梯度下降法來一步步的迭代求解,得到最小化的損失函數和模型參數值。
當然可以!以下是關于梯度下降法的詳細介紹,使用 LaTeX 格式進行排版,并將希臘字母用美元符號表示:

梯度下降法

梯度下降法(Gradient Descent)是一種用于優化的迭代算法,廣泛應用于機器學習和深度學習中,以最小化損失函數并找到模型的最佳參數。它的基本思想是通過計算損失函數相對于模型參數的梯度(即導數),來更新參數,從而逐步逼近損失函數的最小值。

1. 基本原理

在多維空間中,損失函數可以看作是一個表面,梯度下降法通過以下步驟來尋找最低點:

  1. 初始化參數:隨機選擇初始參數值。
  2. 計算梯度:計算損失函數相對于每個參數的梯度。
  3. 更新參數:根據梯度的方向和學習率(step size)更新參數:
    θ = θ ? α ? J ( θ ) \theta = \theta - \alpha \nabla J(\theta) θ=θ?α?J(θ)
    其中:
    • θ \theta θ 是參數,
    • α \alpha α 是學習率,
    • ? J ( θ ) \nabla J(\theta) ?J(θ) 是損失函數的梯度。
  4. 迭代:重復步驟 2 和 3,直到滿足停止條件(如達到最大迭代次數或損失函數收斂)。
2. 學習率

學習率 α \alpha α 是一個超參數,控制每次更新的步長。選擇合適的學習率非常重要:

  • 過大:可能導致參數更新過頭,無法收斂,甚至發散。
  • 過小:收斂速度慢,可能需要更多的迭代次數。
3. 梯度下降的變種

梯度下降法有幾種不同的變種,適用于不同的場景:

  • 批量梯度下降(Batch Gradient Descent):使用整個訓練集計算梯度,適合小規模數據集,但在大數據集上計算開銷較大。

  • 隨機梯度下降(Stochastic Gradient Descent, SGD):每次只使用一個樣本計算梯度,更新頻繁,收斂速度快,但可能會在最優解附近震蕩。

  • 小批量梯度下降(Mini-batch Gradient Descent):結合了批量和隨機梯度下降的優點,每次使用一小部分樣本進行更新,平衡了計算效率和收斂穩定性。

4. 動量法

為了加速收斂并減少震蕩,動量法(Momentum)引入了“動量”概念,通過考慮過去的梯度來更新參數:

v t = β v t ? 1 + ( 1 ? β ) ? J ( θ ) v_t = \beta v_{t-1} + (1 - \beta) \nabla J(\theta) vt?=βvt?1?+(1?β)?J(θ)
θ = θ ? α v t \theta = \theta - \alpha v_t θ=θ?αvt?

其中:

  • v t v_t vt? 是當前的動量,
  • β \beta β 是動量衰減因子(通常取值在 0.9 到 0.99 之間)。
5. 自適應學習率方法

一些算法通過自適應調整學習率來提高收斂速度:

  • AdaGrad:根據參數的歷史梯度調整學習率,適合稀疏數據。
  • RMSProp:對每個參數使用指數衰減平均來調整學習率,適合非平穩目標。
  • Adam:結合了動量法和 RMSProp 的優點,廣泛應用于深度學習。
6. 應用

梯度下降法在許多機器學習和深度學習任務中都有廣泛應用,包括但不限于:

  • 線性回歸和邏輯回歸
  • 神經網絡的訓練
  • 支持向量機(SVM)
  • 深度學習中的卷積神經網絡(CNN)和循環神經網絡(RNN)

總結

梯度下降法是優化問題中一種重要的工具,尤其在機器學習和深度學習中。通過不斷迭代更新參數,梯度下降法能夠有效地找到損失函數的最小值,從而提高模型的性能。選擇合適的變種和超參數(如學習率)對于成功應用梯度下降法至關重要。

最小二乘法的問題

梯度下降

最小二乘法是一種用于回歸分析的統計方法,旨在通過最小化觀測值與模型預測值之間的平方差來估計模型參數。其核心思想是找到一條最佳擬合線,使得所有數據點到這條線的垂直距離的平方和最小。
在機器學習中,許多算法都需要最大化或最小化一個函數,這個函數被稱為“目標函數”。通常,我們將最小化的一類函數稱為“損失函數”。損失函數能夠根據預測結果衡量模型預測能力的好壞。在求損失函數最小化的過程中,梯度下降法被廣泛應用。

  1. 梯度的概念
    在直線方程中,導數代表斜率;在曲線方程中,導數代表切線的斜率。導數表示參數 θ \theta θ 單位變化時,損失函數相應的變化。通過圖中的點可以發現,該點的導數為負值,因此隨著參數 θ \theta θ 的增加,損失函數減小。導數從某種意義上還可以代表方向,對應著損失函數增大的方向。

import randomif __name__ == '__main__':x = [ i/100. for i in range(100)]y = [3*i+4+random.random()/100. for i in x]w = random.random()b = random.random()for _ in range(5000):for _x,_y in zip(x,y):y_pre  = _x*w+bo = y_pre-_yloss = o**2dw = -2*o*_xdb = -2*ow = w+0.1*dwb = b+0.1*dbprint(w,b,loss)

公式原理

梯度
? J ( θ 0 , θ 1 , … , θ n ) = ( ? J ? θ 0 , ? J ? θ 1 , … , ? J ? θ n ) \nabla J\left(\theta_{0}, \theta_{1}, \ldots, \theta_{n}\right)=\left(\frac{\partial J}{\partial \theta_{0}}, \frac{\partial J}{\partial \theta_{1}}, \ldots, \frac{\partial J}{\partial \theta_{n}}\right) ?J(θ0?,θ1?,,θn?)=(?θ0??J?,?θ1??J?,,?θn??J?)
目標: 使 ∑ i = 1 m ( y ( i ) ? y ^ ( i ) ) 2 \sum_{i=1}^{m}\left(y^{(i)}-\hat{y}^{(i)}\right)^{2} i=1m?(y(i)?y^?(i))2 盡可能的小
y ^ ( i ) = θ 0 + θ 1 X 1 ( i ) + θ 2 X 2 ( i ) + ? + θ n X n ( i ) \hat{y}^{(i)}=\theta_{0}+\theta_{1} X_{1}^{(i)}+\theta_{2} X_{2}^{(i)}+\cdots+\theta_{n} X_{n}^{(i)} y^?(i)=θ0?+θ1?X1(i)?+θ2?X2(i)?+?+θn?Xn(i)?
目標: 使 ∑ i = 1 m ( y ( i ) ? ( θ 0 + θ 1 X 1 ( i ) + θ 2 X 2 ( i ) + ? + θ n X n ( i ) ) ) 2 \sum_{i=1}^{m}\left(y^{(i)}-\left(\theta_{0}+\theta_{1} X_{1}^{(i)}+\theta_{2} X_{2}^{(i)}+\cdots+\theta_{n} X_{n}^{(i)}\right)\right)^{2} i=1m?(y(i)?(θ0?+θ1?X1(i)?+θ2?X2(i)?+?+θn?Xn(i)?))2 盡可能小
? J ( θ ) = [ ? J ? θ 0 ? J ? θ 1 … ? J ? θ 2 ] = [ ∑ i ? 1 m 2 ( y ( i ) ? X ( i ) θ ) ? ( ? 1 ) ∑ i ? 1 m 2 ( y ( i ) ? X ( i ) θ ) ? ( ? X 1 ( i ) ) ∑ i = 1 m 2 ( y ( i ) ? X ( i ) θ ) ? ( ? X 2 ( i ) ) … ∑ i = 1 m 2 ( y ( i ) ? X ( i ) θ ) ? ( ? X n ( i ) ) ] = 2 ? [ ∑ i ? 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? 1 ) ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? X 1 ( i ) ) ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? X 2 ( i ) ) ? ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? X n ( i ) ) ] \nabla J(\theta)=\left[\begin{array}{c} \frac{\partial J}{\partial \theta_{0}} \\ \frac{\partial J}{\partial \theta_{1}} \\ \ldots \\ \frac{\partial J}{\partial \theta_{2}} \end{array}\right]=\left[\begin{array}{c} \sum_{i-1}^{m} 2\left(y^{(i)}-X^{(i)} \theta\right) \cdot(-1) \\ \sum_{i-1}^{m} 2\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{1}^{(i)}\right) \\ \sum_{i=1}^{m} 2\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{2}^{(i)}\right) \\ \ldots \\ \sum_{i=1}^{m} 2\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{n}^{(i)}\right) \end{array}\right]=2 \cdot\left[\begin{array}{c} \sum_{i-1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot(-1) \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{1}^{(i)}\right) \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{2}^{(i)}\right) \\ \cdots \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{n}^{(i)}\right) \end{array}\right] ?J(θ)= ??θ0??J??θ1??J??θ2??J?? ?= ?i?1m?2(y(i)?X(i)θ)?(?1)i?1m?2(y(i)?X(i)θ)?(?X1(i)?)i=1m?2(y(i)?X(i)θ)?(?X2(i)?)i=1m?2(y(i)?X(i)θ)?(?Xn(i)?)? ?=2? ?i?1m?(y(i)?X(i)θ)?(?1)i=1m?(y(i)?X(i)θ)?(?X1(i)?)i=1m?(y(i)?X(i)θ)?(?X2(i)?)?i=1m?(y(i)?X(i)θ)?(?Xn(i)?)? ?
由于目標函數的梯度隨著特征向量的增加會越來越大,這是不合理的,因此我們給它加個系數 1 m \frac{1}{m} m1?
目標: 使 1 m ∑ i = 1 m ( y ( i ) ? y ^ ( i ) ) 2 \frac{1}{m} \sum_{i=1}^{m}\left(y^{(i)}-\hat{y}^{(i)}\right)^{2} m1?i=1m?(y(i)?y^?(i))2 盡可能的小
? J ( θ ) = 2 m [ ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? 1 ) ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? X 1 ( i ) ) ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? X 2 ( i ) ) ? ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? X n ( i ) ) ] = 2 m [ ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? X 0 ( i ) ) ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? X 1 ( i ) ) ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? X 2 ( i ) ) ? ∑ i = 1 m ( y ( i ) ? X ( i ) θ ) ? ( ? X n ( i ) ) ] \nabla J(\theta)=\frac{2}{m}\left[\begin{array}{c} \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot(-1) \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{1}^{(i)}\right) \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{2}^{(i)}\right) \\ \cdots \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{n}^{(i)}\right) \end{array}\right]=\frac{2}{m}\left[\begin{array}{c} \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{0}^{(i)}\right) \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{1}^{(i)}\right) \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{2}^{(i)}\right) \\ \cdots \\ \sum_{i=1}^{m}\left(y^{(i)}-X^{(i)} \theta\right) \cdot\left(-X_{n}^{(i)}\right) \end{array}\right] ?J(θ)=m2? ?i=1m?(y(i)?X(i)θ)?(?1)i=1m?(y(i)?X(i)θ)?(?X1(i)?)i=1m?(y(i)?X(i)θ)?(?X2(i)?)?i=1m?(y(i)?X(i)θ)?(?Xn(i)?)? ?=m2? ?i=1m?(y(i)?X(i)θ)?(?X0(i)?)i=1m?(y(i)?X(i)θ)?(?X1(i)?)i=1m?(y(i)?X(i)θ)?(?X2(i)?)?i=1m?(y(i)?X(i)θ)?(?Xn(i)?)? ?
有時也取 J ( θ ) = 1 2 m ∑ i = 1 m ( y ( i ) ? y ^ ( i ) ) 2 J(\theta)=\frac{1}{2 m} \sum_{i=1}^{m}\left(y^{(i)}-\hat{y}^{(i)}\right)^{2} J(θ)=2m1?i=1m?(y(i)?y^?(i))2

最小二乘法和梯度下降法是機器學習中非常重要的工具。通過最小化損失函數,我們可以有效地訓練模型,使其能夠更好地擬合數據。理解梯度的概念及其在優化過程中的作用,對于掌握機器學習算法的工作原理至關重要。隨著技術的不斷發展,梯度下降法也在不斷演化,出現了許多變種,如隨機梯度下降(SGD)、小批量梯度下降(Mini-batch Gradient Descent)等,這些方法在實際應用中展現出了良好的性能。

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

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

相關文章

day50/60

浙大疏錦行 DAY 50 預訓練模型CBAM模塊 知識點回顧: resnet結構解析CBAM放置位置的思考針對預訓練模型的訓練策略 差異化學習率三階段微調 ps:今日的代碼訓練時長較長,3080ti大概需要40min的訓練時長 作業: 好好理解下resnet18的…

Vue3 之vite.config.js配置

一、示例 import { defineConfig } from vite import vue from vitejs/plugin-vue import path from path // https://vitejs.dev/config/ export default defineConfig({plugins: [vue()],base: ./,build: {assetsDir: static, //指定靜態資源目錄rollupOptions: {input: {mai…

利用Gpu訓練

方法一: 分別對網絡模型,數據(輸入,標注),損失函數調用.cuda() 網絡模型: if torch.cuda.is_available():netnet.cuda() 數據(訓練和測試): if torch.cud…

使用excel中的MATCH函數進行匹配數據

一、背景 在平日處理數據時,經常需要將給定數據按照制定的數據進行排序,數量比較大時,逐個處理有點費事費力且容易出錯,這時可借助excel表格中match函數進行精確匹配。 二、使用match函數–精確排序操作步驟 主要工作步驟&#xf…

SpringCloud系列(41)--SpringCloud Config分布式配置中心簡介

前言:微服務意味著要將單體應用中的業務拆分成一個個子服務,每個服務的粒度相對較小,因此系統中會出現大量的服務,但由于每個服務都需要必要的配置信息才能運行,所以—套集中式的、動態的配置管理設施是必不可少的&…

wireshark介紹和使用

Wireshark 介紹 Wireshark 是一款開源的 網絡協議分析工具(Packet Sniffer),用于捕獲和分析網絡數據包。它支持多種協議解析,適用于網絡調試、安全分析、網絡教學等場景。 官網:https://www.wireshark.org/ 特點&#…

【甲方安全建設】敏感數據檢測工具 Earlybird 安裝使用詳細教程

文章目錄 背景工具介紹安裝方法一、Linux 與 macOS 安裝流程二、Windows 系統安裝流程(一)三、Windows 系統安裝流程(二)四、錯誤處理使用說明模塊與規則機制集成與運維建議結語背景 隨著源代碼泄露、配置誤提交、密碼硬編碼等風險頻發,企業源代碼庫中潛在的敏感信息泄漏…

異步Websocket構建聊天室

目錄 Websocket技術背景 Websockec簡介 實現websocket通信程序 實驗環境: 服務端(阿里云ESC,VPC網絡): 客戶端1(本機): 通信模型: 實現功能邏輯: 源代碼: 服務…

OpenCV CUDA模塊設備層-----反向二值化閾值處理函數thresh_binary_inv_func()

操作系統:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 編程語言:C11 算法描述 OpenCV CUDA 模塊(cudev) 中的一個仿函數(functor)生成器,用于創建一個反向二值化閾值…

【實現一個時間MCP完整技術解析】

🕒 MCP Time Server 完整技術解析:從核心實現到文件架構的深度剖析 目前已上傳npm庫,chan-mcp-time-server,有興趣的可以下載試試 創建時間: 2025年7月2日 🎯 項目概述與架構設計 核心問題定義 AI助手在處理時間相關…

類成員方法命名風格解析:動賓、純動詞與純名詞的選擇之道

在軟件開發的浩瀚代碼海洋中,類成員方法的命名猶如指引開發者的燈塔,其重要性不言而喻。合理的命名不僅能讓代碼 “自我言說”,降低理解成本,還能提升開發效率,促進團隊協作。常見的類成員方法命名風格可歸納為動賓結構…

自己電腦搭建本地服務器并實現公網訪問,內網也能提供互聯網連接使用

如何在本地自己計算機上自建服務器并開啟公網地址提供互聯網服務的詳細教學,一步步操作流程,從本地部署到配置公網IP,最后并附無公網IP內網穿透公網訪問的nat123方案。 要在自用的電腦上搭建本地服務器并實現公網地址的訪問,需要…

如何使用AI改進論文寫作 ---- 引言篇(2)

寫在前面 本篇作為1.0版本的補充優化,記錄本人的研究過程。 在分析了多本論文寫作的相關的書籍之后,我明白了一點,關于論文寫作,永遠是一個熟能生巧的過程,對于人來說,必須多寫才能夠變得熟練,對…

【Java21】在spring boot中使用ScopedValue

文章目錄 0.環境說明1.基礎知識1.1 ScopedValue的特點 2.應用場景2.1 spring web項目中,使用ScopedValue傳遞上下文(全局不可變量)2.2 spring grpc項目中,使用ScopedValue傳遞上下文(全局不可變量) 3.Scope…

第10篇 圖像語義分割和目標檢測介紹

語義分割(Semantic Segmentation)是圖像處理和機器視覺一個重要分支,其目標是精確理解圖像場景與內容。語義分割是在像素級別上的分類,屬于同一類的像素都要被歸為一類,因此語義分割是從像素級別來理解圖像的。如下如所示的照片,屬…

微算法科技(NASDAQ MLGO)基于量子圖像處理的邊緣檢測算法:開拓圖像分析新視野

在當今數字化時代,圖像數據海量增長,邊緣檢測作為圖像處理的關鍵環節,在機器視覺、醫學成像、安防監控等眾多領域有著至關重要的作用。傳統邊緣檢測算法在處理復雜圖像時,面臨計算效率低、精度不足等問題。量子計算的興起&#xf…

SM4密碼算法的C語言實現(帶測試)

一、SM4算法原理 SM4是中國國家密碼管理局于2012年發布的國家商用密碼算法標準,也稱為GB/T 32907-2016。它是一種分組對稱加密算法,采用32輪非線性迭代結構,分組長度和密鑰長度均為128位。SM4算法的設計充分考慮了安全性、高效性和實現簡便性…

【React Native原生項目不能運行npx react-native run-android項目】

運行命令報錯,幫我修復X:\jetbrains-workspace\theme-wallpaper>npx react-native run-android error Android project not found. Are you sure this is a React Native project? If your Android files are located in a non-standard location (e.g. not inside ‘andro…

SPLADE 在稀疏向量搜索中的原理與應用詳解

今天看到Sentence Transformers v5.0 集成了許多稀疏嵌入模型。為了搞清楚什么稀疏嵌入模型以及應用,查到了SPLADE,比較巧合的是在paper reading分享的時候看到有同學分享了一片ACL 2025的工作也是基于SPLADE去做的。下面結合一些資料分享關于SPLADE 在稀…

wpf的Binding之UpdateSourceTrigger

前言 在wpf界面開發中,Binding的源和目標之間可以通過Mode來決定數據的傳遞方向,同時數據傳遞時的觸發條件也是可以有多種情況,多種情況由UpdateSourceTrigger屬性來控制,該屬性有Default、Explicit、LostFocus、PropertyChanged…