梯度下降法和牛頓法計算開根號

梯度下降法和牛頓法計算開根號

本文將介紹如何不調包,只能使用加減乘除法實現對根號x的求解。主要介紹梯度下降和牛頓法者兩種方法,并給出 C++ 實現。

梯度下降法

思路/步驟

  1. 轉化問題,將 x\sqrt{x}x? 的求解轉化為最小化目標函數:L(t)L(t)L(t)L(t)=(t2?x)L(t)=(t^2-x)L(t)=(t2?x) ,當 LLL 趨近于 0 時,ttt 就是我們想要的結果;
  2. 迭代尋找使得 LLL 變小的 ttt
  3. 最終得到足夠小的 LLL 時的 ttt ,即使得 L→0L\rightarrow 0L0, 得到結果 ttt
  4. 求解 LLL 的極小值,就是導數為 0 的點

如何迭代

OK,現在的問題就是要如何進行迭代,從而得到盡可能小的 LLL,為此,我們要使得隨著每一次迭代中 ttt 的變化,LLL 都朝著更小的方向變化一個合適的步長

在這里插入圖片描述

確定如何迭代,無非就是要確定每次迭代的方向步長

最自然的想法,我們使得 ttt 朝政府兩個方向都移動一個很小的步長,然后比一比,看哪個的 LLL 更小了,就向哪個方向移動。即:

  • L(t+Δt)<L(t)L(t+\Delta t)<L(t)L(t+Δt)<L(t) ,則 t1=t+Δtt_1=t+\Delta tt1?=t+Δt
  • L(t?Δt)<L(t)L(t-\Delta t)<L(t)L(t?Δt)<L(t) ,則 t1=t?Δtt_1=t-\Delta tt1?=t?Δt

注意這里的 Δt\Delta tΔt 應當是一個大于零的無窮小數,即 0+0^+0+

在這里插入圖片描述

我們接下來再對上面的式子進行一點變化:

  • L(t+Δt)?L(t)<0L(t+\Delta t)-L(t)<0L(t+Δt)?L(t)<0 ,則 t1=t+Δtt_1=t+\Delta tt1?=t+Δt
  • L(t)?L(t?Δt)>0L(t)-L(t-\Delta t)>0L(t)?L(t?Δt)>0 ,則 t1=t?Δtt_1=t-\Delta tt1?=t?Δt

將這兩個式子寫在一起:
t1=t?L(t+Δt)?L(t)∣L(t+Δt)?L(t)∣?Δtt_1=t-\frac{L(t+\Delta t)-L(t)}{|L(t+\Delta t)-L(t)|}\cdot \Delta t t1?=t?L(t+Δt)?L(t)L(t+Δt)?L(t)??Δt
這里的 L(t+Δt)?L(t)∣L(t+Δt)?L(t)∣\frac{L(t+\Delta t)-L(t)}{|L(t+\Delta t)-L(t)|}L(t+Δt)?L(t)L(t+Δt)?L(t)? 用來指示正負號。再進行一點變形:
t1=t?L(t+Δt)?L(t)∣L(t+Δt)?L(t)∣?Δt=t?L(t+Δt)?L(t)Δt∣L(t+Δt)?L(t)Δt∣?Δt=t?L(t+Δt)ΔtΔt∣L(t+Δt)?L(t)Δt∣=t?αL′(t),α=Δt∣L(t+Δt)?L(t)Δt∣→0+,L′(t)=L(t+Δt)?L(t)Δt\begin{align} t_1&=t-\frac{L(t+\Delta t)-L(t)}{|L(t+\Delta t)-L(t)|}\cdot \Delta t\\ &=t-\frac{\frac{L(t+\Delta t)-L(t)}{\Delta t}}{|\frac{L(t+\Delta t)-L(t)}{\Delta t}|}\cdot \Delta t\\ &=t-\frac{L(t+\Delta t)}{\Delta t}\frac{\Delta t}{|\frac{L(t+\Delta t)-L(t)}{\Delta t}|}\\ &=t-\alpha L'(t), \ \ \ \alpha=\frac{\Delta t}{|\frac{L(t+\Delta t)-L(t)}{\Delta t}|}\rightarrow 0^+,\ \ \ L'(t)=\frac{L(t+\Delta t)-L(t)}{\Delta t} \end{align} t1??=t?L(t+Δt)?L(t)L(t+Δt)?L(t)??Δt=t?ΔtL(t+Δt)?L(t)?ΔtL(t+Δt)?L(t)???Δt=t?ΔtL(t+Δt)?ΔtL(t+Δt)?L(t)?Δt?=t?αL(t),???α=ΔtL(t+Δt)?L(t)?Δt?0+,???L(t)=ΔtL(t+Δt)?L(t)???

  1. 當a取無窮小時,雖然一定保證下降,但效率太慢

  2. 日常設計的很多函數,可以允許使用相對大一些的步長,比如 α=0.01\alpha = 0.01α=0.01。理由是,若步長大了,出現跳過合適位置,使得 L(t1)>L(t0)L(t1) > L(t0)L(t1)>L(t0)。再下一個時刻,依舊可能跳回來使得 L(t2)<L(t1)L(t2) < L(t1)L(t2)<L(t1)

  3. 大的步長不能保證一定收斂,但是大部分時候是可以很好的工作,也因此,步長 α\alphaα,我們稱之為學習率,通常會給一個相對小的數字,但不會太小。

  4. 總之,學習率一般需要在不同的模型任務中手動調試。

代碼

float sqrt_grad_decent(float x) {float t = x / 2;float L = (t * t - x) * (t * t - x);float alpha = 0.001;while ( L > 1e-5 ) {float delta = 2 * (t * t - x) * 2 * t;t = t - alpha * delta;L = (t * t - x) * (t * t - x);printf("t=%f\n", t);}return t;
}

總結

  1. 梯度下降法是通過觀察局部,決定如何調整的算法。如果函數具有多個極值,則可能陷入局部極值,此時初始點的選擇直接影響收斂結果

  2. 大的步長在一定程度上可能跨過局部極值,但也可能造成震蕩導致不收斂

  3. 步長的選擇,需要根據函數的特性來找到合適取值,若導數特別大時,則步長取小,導數小時,步長可大。否則很容易造成收斂問題

  4. 存在一類算法,可以在一定范圍內搜索一個合適步長,使得每一次迭代更加穩定

牛頓法1

梯度下降法常用語求解函數極小值的情況,而牛頓法常用于求解函數零點的情況,即 L=0L=0L=0 時方程的根。

思路/步驟

  1. 轉化問題,將求解 x\sqrt{x}x? 轉換為求解 L(t)=t2?x=0L(t)=t^2-x=0L(t)=t2?x=0 時的根,即函數的零點
  2. 迭代尋找 ttt

如何迭代

用曲線在 t0t_0t0? 處切線與 xxx 軸的交點作為 t1t_1t1? ,來逼近函數的零點。圖/牛頓法

在這里插入圖片描述

切線斜率,同樣可以用導數來表示 。

考慮兩個坐標系:原坐標系 o1o1o1 ,新坐標系 o2o2o2 ,其中 o2o2o2o1o1o1 中的 (x1,f(x1))(x_1,f(x_1))(x1?,f(x1?)) 為原點。則在 o2o2o2 坐標系中,下圖紅色切線可表示為:
fo2(x)=f′(x1)xf_{o2}(x)=f'(x_1)x fo2?(x)=f(x1?)x
則該切線與 xxx 軸交點:
fo2(x2)=f′(x1)(x2?x1)=?f(x1)f_{o2}(x_2)=f'(x_1)(x_2-x_1)=-f(x_1) fo2?(x2?)=f(x1?)(x2??x1?)=?f(x1?)
則有:
x2?x1=?f(x1)f′(x1)x2=x1?f(x1)f′(x1)x_2-x_1=-\frac{f(x_1)}{f'(x_1)}\\ x_2=x_1-\frac{f(x_1)}{f'(x_1)} x2??x1?=?f(x1?)f(x1?)?x2?=x1??f(x1?)f(x1?)?

在這里插入圖片描述

代碼

我們經過上一小節已經知道迭代的方法:
t1=t?L(t)L′(t)t_1=t-\frac{L(t)}{L'(t)} t1?=t?L(t)L(t)?
代碼:

float sqrt_newton1(float x) {float t = x / 2;float L = t * t - x;while ( abs(L) > 1e-5 ) {float dL = 2 * t;t = t - L / dL;L = t * t - x;}return t;
}

牛頓法2

思路

既然牛頓法是對函數求零點,那我們能不能對函數的導函數求零點呢?這樣就可以得到函數的極值了。

與梯度下降法的目標函數 L(t)=(t2?x)L(t)=(t^2-x)L(t)=(t2?x) 是相同的,而區別在于,迭代式不同 t1=t?f′(t)f′′(t)t_1=t-\frac{f'(t)}{f''(t)}t1?=t?f′′(t)f(t)?,并且其中步長(學習率)為 1。

代碼

float sqrt_newton2(float x) {float t = x / 2;float L = (t * t - x) * (t * t - x);while ( L > 1e-5 ) {float dL = 2 * (t * t - x) * 2 * t;float d2L = 12 * t * t - 4 * x;t = t - dL / d2L;L = (t * t - x) * (t * t - x);}return t;
}

Ref

  1. 牛頓法

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

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

相關文章

匯博工業機器人碼垛機怎么寫_全自動碼垛機器人在企業生產中的地位越來越重要...

全自動碼垛機器人在企業生產中的地位越來越重要在智能化的各種全自動生產線中&#xff0c;全自動碼垛機器人成了全自動生產線的重要機械設備&#xff0c;在各種生產中發揮著不可忽視的作用。全自動碼垛機器人主要用于生產線上的包裝過程中&#xff0c;不僅能夠提高企業的生產率…

kmeans手寫實現與sklearn接口

kmeans手寫實現與sklearn接口 kmeans簡介 K 均值聚類是最基礎的一種聚類方法。它是一種迭代求解的聚類分析算法。 kmeans的迭代步驟 給各個簇中心 μ1,…,μc\mu_1,\dots,\mu_cμ1?,…,μc? 以適當的初值&#xff1b; 更新樣本 x1,…,xnx_1,\dots,x_nx1?,…,xn? 對應的…

小說中場景的功能_《流浪地球》:從小說到電影

2019年春節賀歲檔冒出一匹黑馬&#xff1a;國產科幻片《流浪地球》大年初一上映后口碑、票房雙豐收&#xff1a;截至9日下午&#xff0c;票房已破15億&#xff0c;并獲得9.2的高評分。著名導演詹姆斯卡梅隆通過社交媒體對我國春節期間上映的科幻影片《流浪地球》發出的祝愿&…

線性回歸與邏輯回歸及其實現

線性回歸與邏輯回歸及其實現 回歸與分類 預測值定性分析&#xff0c;即離散變量預測時&#xff0c;稱之為分類&#xff1b;預測值定量分析&#xff0c;即連續變量預測時&#xff0c;稱之為回歸。 如預測一張圖片是貓還是狗&#xff0c;是分類問題&#xff1b;預測明年的房價…

hbase 頁面訪問_HBase

HBase 特點 海量存儲 Hbase 適合存儲 PB 級別的海量數據&#xff0c;在 PB 級別的數據以及采用廉價 PC 存儲的情況下&#xff0c;能在幾十到百毫秒內返回數據。這與 Hbase 的極易擴展性息息相關。正式因為 Hbase 良好的擴展性&#xff0c;才為海量數據的存儲提供了便利。 2&…

深入理解L1、L2正則化

深入理解L1、L2正則化 轉自&#xff1a;【面試看這篇就夠了】L1、L2正則化理解 一、概述 正則化&#xff08;Regularization&#xff09;是機器學習中一種常用的技術&#xff0c;其主要目的是控制模型復雜度&#xff0c;減小過擬合。正則化技術已經成為模型訓練中的常用技術&a…

rk3128屏幕占空比參數設置_瑞芯微RK3128芯片怎么樣 性能全面解讀

最近&#xff0c;筆者聽說一款搭載瑞芯微RK3128芯片方案的盒子問市了&#xff0c;打聽了一下才知道還真有其事&#xff0c;這款上市的RK3128盒子叫做開博爾M1&#xff0c;報價229元&#xff0c;這個價位在如今的四核網絡機頂盒市場可謂是不多見&#xff0c;但是這款芯片的性能怎…

機器學習中的概率模型

機器學習中的概率模型 轉自&#xff1a;https://zhuanlan.zhihu.com/p/164551678 機器學習中的概率模型 概率論&#xff0c;包括它的延伸-信息論&#xff0c;以及隨機過程&#xff0c;在機器學習中有重要的作用。它們被廣泛用于建立預測函數&#xff0c;目標函數&#xff0c;以…

訪問云服務器儲存的mp4_訪問云服務器儲存的mp4

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":6,"count":6}]},"card":[{"des":"云服務器 ECS(Elastic Compute Service)是一…

先驗、后驗、似然

先驗、后驗、似然 先驗分布、后驗分布和似然函數 本節轉自&#xff1a;先驗分布、后驗分布、似然估計這幾個概念是什么意思&#xff0c;它們之間的關系是什么&#xff1f; 通俗解釋 先驗分布&#xff1a;根據一般的經驗認為隨機變量應該滿足的分布。先驗分布是你瞎猜參數服從啥…

max std value 宏_Rust Macro/宏 新手指南

Rust語言最強大的一個特點就是可以創建和利用宏/Macro。不過創建 Rust宏看起來挺復雜&#xff0c;常常令剛接觸Rust的開發者心生畏懼。這片文章 的目的就是幫助你理解Rust Macro的基本運作原理&#xff0c;學習如何創建自己的 Rust宏。相關鏈接&#xff1a;在線學編程 - 匯智網…

高斯分布及其極大似然估計

高斯分布及其極大似然估計 高斯分布 一維高斯分布 一維高斯分布的概率密度函數為&#xff1a; N(μ,σ2)12πσexp?(?(x?μ)22σ2)N(\mu,\sigma^2)\frac{1}{\sqrt{2\pi}\sigma}\exp(-\frac{(x-\mu)^2}{2\sigma^2}) N(μ,σ2)2π?σ1?exp(?2σ2(x?μ)2?) 多維高斯分布…

農林資金 大數據審計案例_大數據審計:現狀與發展

大數據審計&#xff1a;現狀與發展【摘要】傳統手工環境下&#xff0c;審計人員常用的審計方法包括檢查法、觀察法、重新計算法、外部調查法、分析法、鑒定法等。隨著信息技術的發展&#xff0c;被審計單位的運行越來越依賴于信息化環境。信息化環境下審計工作發生了巨大的變化…

商標45類分類表明細表_2019版注冊商標分類表,商標注冊45類范圍明細

注冊商標的時候都是要確定具體的產品或服務的&#xff0c;目前我國商標分類是用《類似商品和服務區分表–基于尼斯分類第十一版》2019年版這本分類書。這本分類表也是全球通用的分類表&#xff0c;商標分類總共有45個類別&#xff0c;1-34類是產品類、35-45類是服務類。這45個大…

高維高斯分布基礎

高維高斯分布基礎 多位高斯分布的幾何理解 多維高斯分布表達式為&#xff1a; p(x∣μ,Σ)1(2π)p/2∣Σ∣1/2e?12(x?μ)TΣ?1(x?μ)p(x|\mu,\Sigma)\frac{1}{(2\pi)^{p/2}|\Sigma|^{1/2}}e^{-\frac{1}{2}(x-\mu)^{T}\Sigma^{-1}(x-\mu)} p(x∣μ,Σ)(2π)p/2∣Σ∣1/21?…

angularjs sill 創建項目_開源項目——博客項目MyBlogs.Core,基于.NET 5

個人博客站項目源碼&#xff0c;高性能低占用的博客系統&#xff0c;這也許是我個人目前寫過的性能最高的web項目了 。目前日均處理請求數80-120w次&#xff0c;同時在線活躍用戶數30-100人&#xff0c;數據量累計已達到100多萬條&#xff0c;數據庫Redis網站主程序同時運行在一…

懷舊服推薦配置_【懷舊服】狂暴戰P4畢業裝備推薦

在懷舊服開啟P4階段之后&#xff0c;狂暴戰玩家的輸出也得到了進一步的提升。當然&#xff0c;狂暴戰想要打出足夠的傷害離不開對應的裝備&#xff0c;現在就給大家介紹下狂暴戰P4階段的BIS裝備。散件裝備狂暴戰在這一階段依舊有非常不錯的散件裝備&#xff0c;個人建議玩家入手…

高斯混合模型GMM及EM迭代求解算法(含代碼實現)

高斯混合模型GMM及EM迭代求解算法&#xff08;含代碼實現&#xff09; 高斯分布與高斯混合模型 高斯分布 高斯分布大家都很熟悉了&#xff0c;下面是一元高斯分布的概率密度函數&#xff08;Probability Density Function&#xff0c;PDF&#xff09;&#xff1a; P(x)N(μ,…

十個模塊_專欄 | ABAQUS Part模塊的十個小技巧

作者介紹星辰_北極星2012年開始從事Abaqus仿真相關工作&#xff0c;服務大小課題逾百項; 主要仿真領域&#xff1a;石油工程、巖土工程和金屬加工工藝&#xff1b; 重點研究方向&#xff1a;ABAQUS GUI二次開發、固體力學、斷裂以及損傷等。Abaqus有部件(Part)和裝配體(Assembl…

深度學習時代的視頻理解綜述

深度學習時代的視頻理解綜述 本文為b站bryanyzhu老師四期視頻理解相關論文解讀的匯總圖文筆記。 我們先精讀深度學習時代視頻理解領域最為重要的兩篇論文&#xff1a;雙流網絡和 I3D。它們分別是領域內兩大類方法雙流&#xff08;利用光流&#xff09;網絡和 3D CNN 網絡的代…