優化算法 學習記錄

文章目錄

    • 相關資料
  • 優化算法
  • 梯度下降
    • 學習率
    • 牛頓法
  • 隨機梯度下降
  • 小批量隨機梯度下降
  • 動量法
      • 動量法解決上述問題
  • AdaGrad 算法
  • RMSProp算法
  • Adam
  • 學習率調度器
    • 余弦學習率調度
    • 預熱

相關資料

李沐 動手學深度學習

優化算法

優化算法使我們能夠繼續更新模型參數,并使損失函數的值最小化。優化算法的性能直接影響模型的訓練效率。

優化問題中大多數目標函數都很復雜,沒有解析解。相反,必須使用數值優化算法。

  • 優化與深度學習之間的關系
    • 優化和深度學習的目標是根本不同的。前者關注的是最小化目標,后者則關注在給定有限數量的情況下尋找合適的模型。
    • 訓練誤差和泛化誤差通常不同:由于優化算法的目標函數通常是基于訓練數據集的損失函數,因此優化的目標是減少訓練誤差。但是,深度學習(或更廣義地說,統計推斷)的目標是減少泛化誤差。為了實現后者,除了使用優化算法來減少訓練誤差之外,我們還需要注意過擬合。
  • 深度學習中使用優化的挑戰
    • 這里關注局部最小值、鞍點和梯度消失
      • 鞍點:saddle point, 函數的所有梯度都消失但不是全局最小值也不是局部最小值的任何位置。較高維度的鞍點可能會更加隱蔽。
        在這里插入圖片描述
      • 梯度消失。假設我們想最小化函數 f ( x ) = t a n h ( x ) f(x) = tanh(x) f(x)=tanh(x)
        ,然后我們恰好從 x=4 開始。正如我們所看到的那樣,f 的梯度接近零。更具體地說, f ′ ( x ) = 1 ? t a n h 2 ( x ) f^{'}(x) = 1 - tanh^2(x) f(x)=1?tanh2(x),因此 f ′ ( 4 ) = 0.0013 f^{'}(4) = 0.0013 f(4)=0.0013.
        在這里插入圖片描述

懲罰的概念
![[1702058539688.png]]

梯度下降

在凸問題背景下設計和分析算法是非常有啟發性的。
凸優化的入門,以及凸目標函數上非常簡單的隨機梯度下降算法的證明。
為什么梯度下降算法可以優化目標函數?
在這里插入圖片描述

學習率

學習率(learning rate)決定目標函數能否收斂到局部最小值,以及何時收斂到最小值。

牛頓法

在這里插入圖片描述
在這里插入圖片描述

隨機梯度下降

目標函數通常是訓練數據集中每個樣本的損失函數的平均值。

給定 n 個樣本的訓練數據集,我們假設 f i ( x ) f_i(x) fi?(x)是關于索引 i i i 的訓練樣本的損失函數,其中 X X X 是參數向量。然后我們得到目標函數 在這里插入圖片描述
X X X的目標函數的梯度計算為
在這里插入圖片描述

其中 μ \mu μ是學習率。我們可以看到,每次迭代的計算代價從梯度下降的 O ( n ) O(n) O(n)降至常數 O ( 1 ) O(1) O(1).

小批量隨機梯度下降

動量法

這個動量法似乎不是針對學習率的改變。而是針對每個 x i x_{i} xi? 的值。
在這里插入圖片描述
動量法可以解決變量之間梯度變化不一致導致的一些問題:
在這里插入圖片描述
在這里插入圖片描述
在這里插入圖片描述

動量法解決上述問題

在這里插入圖片描述

AdaGrad 算法

在AdaGrad算法中,我們允許每個坐標有單獨的學習率。
在這里插入圖片描述
在這里插入圖片描述

然而,在深度學習中,我們可能希望更慢地降低學習率。 這引出了許多AdaGrad算法的變體。
優化算法本身會根據梯度調節其實際的學習率。
在這里插入圖片描述

RMSProp算法

以RMSProp算法作為將速率調度與坐標自適應學習率分離的簡單修復方法。
在這里插入圖片描述

在這里插入圖片描述

Adam

在這里插入圖片描述
在這里插入圖片描述

學習率調度器

多項式衰減
分段常數表

余弦學習率調度

它所依據的觀點是:我們可能不想在一開始就太大地降低學習率,而且可能希望最終能用非常小的學習率來“改進”解決方案。
在這里插入圖片描述

預熱

在某些情況下,初始化參數不足以得到良好的解。 這對某些高級網絡設計來說尤其棘手,可能導致不穩定的優化結果。 對此,一方面,我們可以選擇一個足夠小的學習率, 從而防止一開始發散,然而這樣進展太緩慢。 另一方面,較高的學習率最初就會導致發散。

解決這種困境的一個相當簡單的解決方法是使用預熱期,在此期間學習率將增加至初始最大值,然后冷卻直到優化過程結束

class CosineScheduler:def __init__(self, max_update, base_lr=0.01, final_lr=0,warmup_steps=0, warmup_begin_lr=0):self.base_lr_orig = base_lrself.max_update = max_updateself.final_lr = final_lrself.warmup_steps = warmup_stepsself.warmup_begin_lr = warmup_begin_lrself.max_steps = self.max_update - self.warmup_stepsdef get_warmup_lr(self, epoch):increase = (self.base_lr_orig - self.warmup_begin_lr) \* float(epoch) / float(self.warmup_steps)return self.warmup_begin_lr + increasedef __call__(self, epoch):if epoch < self.warmup_steps:return self.get_warmup_lr(epoch)if epoch <= self.max_update:self.base_lr = self.final_lr + (self.base_lr_orig - self.final_lr) * (1 + math.cos(math.pi * (epoch - self.warmup_steps) / self.max_steps)) / 2return self.base_lrscheduler = CosineScheduler(max_update=20, base_lr=0.3, final_lr=0.01)
d2l.plot(torch.arange(num_epochs), [scheduler(t) for t in range(num_epochs)])scheduler = CosineScheduler(20, warmup_steps=5, base_lr=0.3, final_lr=0.01)
d2l.plot(torch.arange(num_epochs), [scheduler(t) for t in range(num_epochs)])

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

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

相關文章

Elasticsearch:使用 Elasticsearch 向量搜索及 RAG 來實現 Chatbot

Elasticsearch 的向量搜索為我們的語義搜索提供了可能。而在人工智能的動態格局中&#xff0c;檢索增強生成&#xff08;Retrieval Augmented Generation - RAG&#xff09;已經成為游戲規則的改變者&#xff0c;徹底改變了我們生成文本和與文本交互的方式。 RAG 使用大型語言模…

Android TextView 超出省略失效 解決方法

解決方法 我是在使用 ConstraintLayout 嵌套 LinearLayout 水平方向&#xff0c;TextView 又使用layout_weight&#xff08;權重&#xff09;情況下出現這種問題&#xff0c;最后將layout_width從 0dp 改為 1dp 得以解決。 <androidx.constraintlayout.widget.ConstraintLa…

MongoDB的刪除文檔、查詢文檔語句

本文主要介紹MongoDB的刪除文檔、查詢文檔命令語句。 目錄 MongoDB刪除文檔MongoDB查詢文檔 MongoDB刪除文檔 MongoDB是一種基于文檔的NoSQL數據庫&#xff0c;它使用BSON格式存儲文檔。刪除文檔是MongoDB數據庫中的常見操作之一。 下面是MongoDB刪除文檔的詳細介紹和示例&am…

當年為什么選擇計算機?

確切的來說不是遠的計算機&#xff0c;高考那會計算機很熱門&#xff0c;根本考不上&#xff01;學習了一個和計算機關系很密切的專業&#xff0c;編程搞得好&#xff0c;才能找到好工作&#xff0c;才能有飯吃&#xff01;記得當年我還跑去武漢大學的計算機課堂和人家一起聽課…

導入自定義模塊出現紅色波浪線,但是能正常執行

問題描述&#xff1a; 導入自己定義的模塊時&#xff0c;出現紅色波浪線&#xff0c;可以繼續執行 解決&#xff1a; 在存放當前執行文件的文件夾右鍵&#xff0c;然后將其設置為sources root即可 結果&#xff1a;

基于深度學習yolov5實現安全帽人體識別工地安全識別系統-反光衣識別系統

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 實現安全帽人體識別工地安全識別系統需要使用深度學習技術&#xff0c;特別是YOLOv5算法。下面是對基于YOLOv5實現安…

帶你真正理解web地圖切片規則

很多時候我們即使做完了項目還是對切片規則一知半解&#xff0c;只知道照著例子寫代碼&#xff0c;不理解WMTSCapabilities文件中參數的具體含義&#xff0c;也無法理解切片規則是如何產生的&#xff0c;不知道經緯度切圖和平面切圖的差別是啥&#xff0c;等等種種疑問&#xf…

Leetcode 39 組合總和

題意理解&#xff1a; 一個 無重復元素 的整數數組 candidates 和一個目標整數 target 從candidates 取數字&#xff0c;使其和 target &#xff0c;有多少種組合&#xff08;candidates 中的 同一個 數字可以 無限制重復被選取&#xff09; 這道題和之前一道組合的區別&am…

Vue學習筆記-Vue3中setup函數注意點

setup編寫示例 <script> import {reactive} from vue export default {name: "DemoVue",props:[xxx,yy,...],setup(props,context){const data reactive({......})//setup必須有返回值return {data,}} } </script>setup執行的時機 在beforeCreate()之…

【51單片機系列】74HC595實現對LED點陣的控制

本文是關于LED點陣的使用&#xff0c;使用74HC595模塊實現對LED點陣的控制。 文章目錄 一、8x8LED點陣的原理1.1 LED點陣顯示原理1.2 LED點陣內部結構圖1.3 開發板上的LED點陣原理圖1.4 74HC595芯片 二、使用74HC595模塊實現流水燈效果三、 使用74HC595模塊控制LED點陣對角線亮…

python基于DeeplabV3Plus開發構建手機屏幕表面缺陷圖像分割識別系統

Deeplab是圖像分割領域非常強大的模型&#xff0c;在前面的博文中我們也進行過很多相應項目的開發實踐&#xff0c;感興趣的話可以自行移步閱讀即可&#xff1a; 《基于DeepLabv3Plus開發構建人臉人像分割系統》 《基于DeepLabV3實踐路面、橋梁、基建裂縫裂痕分割》 《基于D…

【鏈表Linked List】力扣-203 移除鏈表元素

目錄 題目描述 解題過程 題目描述 給你一個鏈表的頭節點 head 和一個整數 val &#xff0c;請你刪除鏈表中所有滿足 Node.val val 的節點&#xff0c;并返回 新的頭節點 。 示例 1&#xff1a; 輸入&#xff1a;head [1,2,6,3,4,5,6], val 6 輸出&#xff1a;[1,2,3,4,5…

快速學會繪制Pyqt5中的所有圖(下)

Pyqt5相關文章: 快速掌握Pyqt5的三種主窗口 快速掌握Pyqt5的2種彈簧 快速掌握Pyqt5的5種布局 快速弄懂Pyqt5的5種項目視圖&#xff08;Item View&#xff09; 快速弄懂Pyqt5的4種項目部件&#xff08;Item Widget&#xff09; 快速掌握Pyqt5的6種按鈕 快速掌握Pyqt5的10種容器&…

鴻蒙原生應用開發——分布式數據對象

01、什么是分布式數據對象 在可信組網環境下&#xff0c;多個相互組網認證的設備將各自創建的對象加入同一個 sessionId&#xff0c;使得加入的多個數據對象之間可以同步數據&#xff0c;也就是說&#xff0c;當某一數據對象屬性發生變更時&#xff0c;其他數據對象會檢測到這…

讓聰明的車連接智慧的路,C-V2X開啟智慧出行生活

“聰明的車 智慧的路”形容的便是車路協同的智慧交通系統&#xff0c;從具備無鑰匙啟動&#xff0c;智能輔助駕駛和豐富娛樂影音功能的智能網聯汽車&#xff0c;到園區的無人快遞配送車&#xff0c;和開放的城市道路上自動駕駛的公交車、出租車&#xff0c;越來越多的車聯網應用…

thinkphp lists todo

來由&#xff1a; 數據庫的這個字段我想返回成&#xff1a; 新奇的寫法如下&#xff1a; 邏輯層的代碼&#xff1a; public function goodsDetail($goodId){$detail $this->good->where(id, $goodId)->hidden([type_params,user_id])->find();if (!$detail) {ret…

springboot(ssm出租車管理網站 出租車公司管理系統Java系統

springboot(ssm出租車管理網站 出租車公司管理系統Java系統 開發語言&#xff1a;Java 框架&#xff1a;ssm/springboot vue JDK版本&#xff1a;JDK1.8&#xff08;或11&#xff09; 服務器&#xff1a;tomcat 數據庫&#xff1a;mysql 5.7&#xff08;或8.0&#xff09;…

如何使用PostMan進行并發測試?

如何使用PostMan進行并發測試&#xff1f; &#x1f440;(Postman 的 runner 實際上是串行執行的&#xff0c;因此不能作為并發測試&#xff0c; 只是批量測試&#xff0c;本文如下稱為并發的是錯誤的) 文章目錄 如何使用PostMan進行并發測試&#xff1f;POST篇流程Pre-req 腳…

Conda常用命令總結

使用conda或anaconda的小伙伴們都知道&#xff0c;圖形界面時不靠譜的&#xff0c;而在命令行下&#xff0c;所有的操作就會穩定很多&#xff0c;且極少出現問題。因此&#xff0c;熟記conda的命令行就變得十分有用。但對于我這樣近50歲依舊奮斗在代碼第一線的大齡程序員而已&a…

攔截 open調用 (進程白名單,文件白名單)

攔截 open 文章目錄 攔截 open第一個需求文件結構進程白名單文件白名單 測試代碼第一個版本版本二代碼演示 增加一個日志記錄代碼解釋 gcc -shared -fPIC -o libintercept.so intercept.c -ldlLD_PRELOAD./libintercept.so ./processA在Linux中&#xff0c;我們可以使用LD_PREL…