大模型算法面試筆記——常用優化器SGD,Momentum,Adagrad,RMSProp,Adam

常用參數:ttt-步數,α\alphaα-學習率,θ\thetaθ-參數,f(θ)f(\theta)f(θ)-目標函數,gtg_tgt?-梯度,β1\beta_1β1?-一階矩衰減系數,通常取0.9,β2\beta_2β2?-二階矩,mtm_tmt?-均值,vtv_tvt?-方差,m^t\hat{m}_tm^t?-mtm_tmt?偏置矯正,v^t\hat{v}_tv^t?-vtv_tvt?偏置矯正。

  • 梯度下降(BGD):最簡單的迭代求解算法,選取開始點θ0\theta_0θ0?,對t=1,...,Tt=1,...,Tt=1,...,Tθt=θt?1?ηgt?1\theta_t=\theta_{t-1}-\eta g_{t-1}θt?=θt?1??ηgt?1?,其中η\etaη是學習率。

  • 隨機梯度下降(SGD):由于有nnn個樣本時,為了減少計算量,所以SGD在時間ttt隨機選取一個樣本tit_iti?來近似f(x)f(x)f(x),SGD的下降方向是對真實梯度方向的無偏估計。

  • 批量梯度下降(MBGD):為了充分利用GPU多核,計算批量的梯度,也是一個無偏的近似,但降低了方差。

  • 動量法(Momentum):為增加收斂的穩定性,并緩解陷入局部最優,動量法使用平滑過的梯度對權重更新:θt=θt?1?ηvt\theta_t=\theta_{t-1}-\eta v_tθt?=θt?1??ηvt?,它用一個動量vtv_tvt?累加了過去的梯度,其中gtg_tgt?為當前梯度:
    vt=βvt?1+(1?β)?gtv_t=\beta v_{t-1}+(1-\beta)·g_tvt?=βvt?1?+(1?β)?gt?

  • Adagrad:對于不同的參數,有時需要更新的幅度相差較大,此時不同參數就需要不同的學習率,Adagrad采用的方法是,將歷史梯度的平方和累加起來,為學習率添加一個分母項Gt+?\sqrt{G_t+\epsilon}Gt?+??,其中Gt=Gt?1+gt2G_t = G_{t-1}+g_t^2Gt?=Gt?1?+gt2?,因此,參數更新公式就變成:
    θt=θt?1?ηGt+??gt\theta_t=\theta_{t-1}-\frac{\eta}{\sqrt{G_t+\epsilon}}·g_tθt?=θt?1??Gt?+??η??gt?
    如此可見,對于梯度一直很大的參數,其對應的學習率就會變小,而如果參數的梯度很大,學習率相對就更大一點,實現了一定程度上的自動調整。此方法比較適合處理悉數數據,因為稀疏特征的參數更新少,學習率會較大,實現更快收斂,而缺點是累積梯度會隨時間增大,導致學習率越來越小甚至接近0,可能導致后期收斂太慢。

  • RMSProp:和Adagrad類似,對累積平方梯度上做改進:Gt=λGt?1+(1?λ)?gt2G_t=\lambda G_{t-1}+(1-\lambda)·g_t^2Gt?=λGt?1?+(1?λ)?gt2?,參數更新公式相同。

  • Adam:結合了動量法和Adagrad,動態調整每個參數的學習率,同時利用梯度的一階矩(動量)和二階矩(自適應學習率,也可以理解為轉動慣量)加速收斂。具體分為四步:
    計算梯度的一階距估計:
    mt=β1?mt?1+(1?β1)?gtm_t=\beta_1·m_{t-1}+(1-\beta_1)·g_tmt?=β1??mt?1?+(1?β1?)?gt?
    計算梯度的二階矩估計:
    vt=β2?vt?1+(1?β2)?gt2v_t=\beta_2·v_{t-1}+(1-\beta_2)·g_t^2vt?=β2??vt?1?+(1?β2?)?gt2?
    這樣設計的原因是,展開式中,當t為無窮大時,歷史梯度項權重系數和為1,此為數學依據:
    mt=(1?β1)(gt+β1gt?1+β12gt?2+β13gt?3+...)m_t=(1-\beta_1)(g_t+\beta_1g_{t-1}+\beta_1^2g_{t-2}+\beta_1^3g_{t-3}+...)mt?=(1?β1?)(gt?+β1?gt?1?+β12?gt?2?+β13?gt?3?+...)
    ∑i=0∞β1i=11?β1\sum_{i=0}^{\infin}\beta^i_1=\frac{1}{1-\beta_1}i=0?β1i?=1?β1?1?
    由于初始項受初始值為0的影響較大,所以進行偏差修正,同理,這樣設計的原因是有限項等比數列和公式∑i=0tβ1i=1?β1t1?β1\sum_{i=0}^{t}\beta^i_1=\frac{1-\beta_1^t}{1-\beta_1}i=0t?β1i?=1?β1?1?β1t??
    mt^=mt1?β1t,vt^=vt1?β2t\hat{m_t}=\frac{m_t}{1-\beta_1^t},\hat{v_t}=\frac{v_t}{1-\beta_2^t}mt?^?=1?β1t?mt??,vt?^?=1?β2t?vt?? 例如,當t=1t=1t=1時:m^1=m11?β11=(1?β1)g11?β1=g1\hat{m}_1=\frac{m_1}{1-\beta_1^1}=\frac{(1-\beta_1)g_1}{1-\beta_1}=g_1m^1?=1?β11?m1??=1?β1?(1?β1?)g1??=g1?
    最后進行參數更新:
    θ=θt?1?ηv^t+??m^t\theta=\theta_{t-1}-\frac{\eta}{\sqrt{\hat{v}_t}+\epsilon}·\hat{m}_tθ=θt?1??v^t??+?η??m^t?最后貼一個論文原文算法部分:
    請添加圖片描述

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

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

相關文章

【計算機畢業設計】基于SSM的小型超市管理系統+LW

博主介紹:?全網粉絲3W,csdn特邀作者、CSDN新星計劃導師、Java領域優質創作者,掘金/華為云/阿里云/InfoQ等平臺優質作者、專注于Java技術領域和學生畢業項目實戰,高校老師/講師/同行前輩交流? 技術范圍:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、…

火線、零線、地線

我們可以用 “水流” 來比喻 “電流”,這樣理解起來會很簡單:想象一下你家的電路就像一個 “閉合的水循環系統”:🔥 1. 火線 (Live Wire) - 好比 “進水管的高壓端”作用: 從發電廠或變壓器輸送 高壓電 到你家的插座或…

基于Vue3.0+Express的前后端分離的任務清單管理系統

文章目錄 一、前端 0、項目介紹 0.1 主要功能介紹 0.2 UI展示 1、首頁 2、待辦事項管理 2.1 添加待辦事項 2.2 展示待辦事項 2.3 修改待辦事項 2.4 刪除待辦事項 3、分類管理 3.1 添加分類 3.2 展示分類 3.3 修改分類 3.4 刪除分類 4、團隊成員管理 4.1 展示團隊成員 二、后端 …

基于單片機智能交通燈設計

傳送門 👉👉👉👉其他作品題目速選一覽表 👉👉👉👉其他作品題目功能速覽 概述 隨著城市化進程的加快,城市交通流量日益增大,傳統的固定配時交通燈已難以…

Datawhale AI夏令營——列車信息智能問答——科大訊飛AI大賽(基于結構化數據的用戶意圖理解和知識問答挑戰賽)

前言 坐火車的你,遇到過這樣的場景嗎? 一次又一次查車次信息?趕火車狂奔,找檢票口找到懷疑人生…想查“最早到北京的車”?時刻表翻到眼瞎!列車晚點?新出發時間算到腦殼疼! 我們這次將…

UVA11990 ``Dynamic‘‘ Inversion

UVA11990 Dynamic Inversion題目鏈接題意輸入格式輸出格式分析CDQ分治嵌套(樹狀數組套BST)分塊k-D Tree題目鏈接 UVA11990 Dynamic’’ Inversion 題意 給一個 1~n 的排列A,要求按照某種順序刪除一些數(其他數順序不變&#xff0…

銀河麒麟“安裝器”安裝方法

書接上回:銀河麒麟安裝軟件商店方法-CSDN博客 過了幾天發現當時一不小心把系統自帶的“安裝器”軟件也卸載掉了,導致現在deb文件只能通過命令行安裝,尋思這可不行,就想一下應該怎么安裝。 首先,為了確認一下安裝器的…

計算機畢設分享-基于SpringBoot的健身房管理系統(開題報告+前后端源碼+Lun文+開發文檔+數據庫設計文檔)

基于SpringBoot的健身房管理系統分享一套完整的基于SpringBoot的健身房管理系統畢業設計(開題報告完整前后端源碼Lun文 開發文檔數據庫設計文檔)系統分為三個角色功能如下:用戶功能需求描述管理員功能需求描述教練功能需求描述開題報告系統功…

代碼審計與web安全選擇題1

軟件供應鏈安全的基礎是( )A.完善的需求分析B.源代碼安全C.滲透測試D.軟件測試參考答案:B保證源代碼安全的主要措施包括( )A.開發工具和環境的安全B.代碼安全C.滲透測試D.代碼審計E.軟件的說明文檔完整參考…

python基本數據類型 數據類型轉換 數字 菜鳥教程筆記

python基本數據類型 數據類型轉換 數字 菜鳥教程筆記 1.基本數據類型 Python 中的變量不需要聲明。每個變量在使用前都必須賦值,變量賦值以后該變量才會被創建。 在 Python 中,變量就是變量,它沒有類型,我們所說的"類型"…

USRP X410 X440 5G及未來通信技術的非地面網絡(NTN)

概述 在本白皮書中,我們將介紹NTN的現狀、正處于探索階段的一些新應用,以及最重要的一點,我們需要克服哪些技術挑戰才能讓這個市場充滿活力。最后,我們將概述為實現實用高效的測試,NI圍繞NTN所做的努力,該測…

基于SpringBoot+Vue的電腦維修管理系統(WebSocket實時聊天、Echarts圖形化分析)

“ 🎈系統亮點:WebSocket實時聊天、Echarts圖形化分析”01系統開發工具與環境搭建—前后端分離架構項目架構:B/S架構運行環境:win10/win11、jdk17小程序端:技術:Uniapp;UI庫:colorUI…

2025.7.28總結

今天真有點小煩,工作有些不太順利,我是真沒想到,阻塞我工作開展得竟然是我的主管。當初需求澄清的時候,開發說要申請一個便攜,我當時申請的時候也跟主管說了,需求測試的時候要使用到,但主管要我…

DBA常用數據庫查詢語句

1 數據庫信息 1.1 數據庫概要 select a.name "DB Name",e.global_name "Global Name",c.host_name "Host Name",c.instance_name "Instance Name" ,DECODE(c.logins,RESTRICTED,YES,NO) "Restricted Mode",a.log_mode &quo…

【c++深入系列】:萬字詳解priority_queue(附模擬實現的源碼)

🔥 本文專欄:c 🌸作者主頁:努力努力再努力wz 💪 今日博客勵志語錄: 真正的強大,不是從不跌倒,而是每次跌倒后都能笑著站起來 ★★★ 本文前置知識: 模版 引入 那么pri…

分享一個腳本,從mysql導出數據csv到hdfs臨時目錄

想從mysql導出一個表到csv文件,然后上傳到hdfs,開始使用sqoop,結果各種問題頻出: https://blog.csdn.net/weixin_45357522/article/details/149498030 https://blog.csdn.net/weixin_45357522/article/details/149449413 特別是那…

OpenLayers 綜合案例-區域掩膜

看過的知識不等于學會。唯有用心總結、系統記錄,并通過溫故知新反復實踐,才能真正掌握一二 作為一名摸爬滾打三年的前端開發,開源社區給了我飯碗,我也將所學的知識體系回饋給大家,助你少走彎路! OpenLayers…

30天打牢數模基礎-神經網絡基礎講解

一、代碼說明本代碼基于模擬房價數據集,使用scikit-learn庫中的MLPRegressor(多層感知器回歸)實現神經網絡模型,解決房價預測問題。代碼邏輯清晰,適合數模小白入門,包含數據預處理、模型構建、訓練評估、新…

Linux應用開發基礎知識——LInux學習FreeType編程(七)

目錄 一、使用freetype 顯示一個文字 二、使用 freetype 顯示一行文字 1. 了解笛卡爾坐標系 2. 每個字符的大小可能不同 3. 怎么在指定位置顯示一行文字 4. freetype 的幾個重要數據結構 4.1、FT_Library結構體 4.2、FT_Face結構體 4.3、FT_GlyphSlot結構體 4.4、FT_G…

Kotlin中Flow

Kotlin Flow 深度解析:從原理到實戰一、Flow 核心概念體系1. Flow 的本質與架構Flow 是 Kotlin 協程庫中的異步數據流處理框架,核心特點:響應式編程:基于觀察者模式的數據處理協程集成:無縫融入 Kotlin 協程生態背壓支…