PyTorch 框架的深度學習優化算法集

2022-01-10 Python中文社區

文章目錄
前言
1 優化的目標
2 深度學習中的優化挑戰
    2.1 鞍積分
    2.2 消失漸變
3 凸性
    3.1 convex set
    3.2 凸函數
4 局部極小值是全局極小值
5 約束
6 總結
參考

前言優化器或者優化算法,是通過訓練優化參數,來最小化(最大化)損失函數。損失函數是用來計算測試集中目標值Y的真實值和預測值的偏差程度。
為了使模型輸出逼近或達到最優值,我們需要用各種優化策略和算法,來更新和計算影響模型訓練和模型輸出的網絡參數。這種算法使用各參數的梯度值來最小化或最大化損失函數E(x)。最常用的一階優化算法是梯度下降。函數梯度:導數dy/dx的多變量表達式,用來表示y相對於x的瞬時變化率。往往為了計算多變量函數的導數時,會用梯度取代導數,並使用偏導數來計算梯度。梯度和導數之間的一個主要區別是函數的梯度形成了一個多維變量。因此,對單變量函數,使用導數來分析;而梯度是基於多變量函數而產生的。二階優化算法使用了二階導數(也叫做Hessian方法)來最小化或最大化損失函數。這種方法是二階收斂,收斂速度快,但是由於二階導數的計算成本很高,所以這種方法並沒有廣泛使用。主要算法:牛頓法和擬牛頓法(Newton's method & Quasi-Newton Methods)
1 優化的目標


優化提供了一種最大限度地減少深度學習損失功能的方法,但實質上,優化和深度學習的目標是根本不同的。前者主要關注的是儘量減少一個目標,而鑑於數據量有限,後者則關注尋找合適的模型。例如,訓練錯誤和泛化錯誤通常不同:由於優化算法的客觀函數通常是基於訓練數據集的損失函數,因此優化的目標是減少訓練錯誤。但是,深度學習(或更廣義地說,統計推斷)的目標是減少概括錯誤。為了完成後者,除了使用優化算法來減少訓練錯誤之外,我們還需要注意過度擬合。

def f(x):
    return x * torch.cos(np.pi * x)

def g(x):
    return f(x) + 0.2 * torch.cos(5 * np.pi * x)

下圖說明,訓練數據集的最低經驗風險可能與最低風險(概括錯誤)不同。

def annotate(text, xy, xytext):  #@save
    d2l.plt.gca().annotate(text, xy=xy, xytext=xytext,
                           arrowprops=dict(arrowstyle='->'))

x = torch.arange(0.5, 1.5, 0.01)
d2l.set_figsize((4.5, 2.5))
d2l.plot(x, [f(x), g(x)], 'x', 'risk')
annotate('min of\nempirical risk', (1.0, -1.2), (0.5, -1.1))
annotate('min of risk', (1.1, -1.05), (0.95, -0.5))

2 深度學習中的優化挑戰


深度學習優化存在許多挑戰。其中一些最令人惱人的是局部最小值、鞍點和消失的漸變。讓我們來看看它們。

對於任何客觀函數 ,如果 的值 在 附近的任何其他點小於 的值,那麼 在 附近的任何其他點的值小於 ,那麼 可能是局部最低值。如果 的值為 ,為整個域的目標函數的最小值,那麼 是全局最小值。

x = torch.arange(-1.0, 2.0, 0.01)
d2l.plot(x, [f(x), ], 'x', 'f(x)')
annotate('local minimum', (-0.3, -0.25), (-0.77, -1.0))
annotate('global minimum', (1.1, -0.95), (0.6, 0.8))

2.1 鞍積分除了局部最小值之外,鞍點也是梯度消失的另一個原因。* 鞍點 * 是指函數的所有漸變都消失但既不是全局也不是局部最小值的任何位置。考慮這個函數 。它的第一個和第二個衍生品消失了 。這時優化可能會停頓,儘管它不是最低限度。在這裡插入圖片描述


較高維度的鞍點甚至更加陰險。考慮這個函數 。它的鞍點為 。這是相對於 y的最高值,最低為x 。此外,它 * 看起來像馬鞍,這就是這個數學屬性的名字的地方。

2.2 消失漸變沒有必要找到最佳解決方案。本地最佳甚至其近似的解決方案仍然非常有用。3 凸性凸性 (convexity)在優化算法的設計中起到至關重要的作用,
這主要是由於在這種情況下對算法進行分析和測試要容易得多。
換言之,如果該算法甚至在凸性條件設定下的效果很差,通常我們很難在其他條件下看到好的結果。此外,即使深度學習中的優化問題通常是非凸的,它們也經常在局部極小值附近表現出一些凸性。3.1 convex set第一組存在不包含在集合內部的線段,所以該集合是非凸的,而另外兩組則沒有這樣的問題。
在這裡插入圖片描述3.2 凸函數現在我們有了凸集,我們可以引入凸函數(convex function)。
給定一個凸集 ,如果對於所有 和所有 ,一個函數 是凸的,我們可以得到為了說明這一點,讓我們繪製一些函數並檢查哪些函數滿足要求。
下面我們定義一些函數,包括凸函數和非凸函數。

f = lambda x: 0.5 * x**2  # 凸函數
g = lambda x: torch.cos(np.pi * x)  # 非凸函數
h = lambda x: torch.exp(0.5 * x)  # 凸函數

x, segment = torch.arange(-2, 2, 0.01), torch.tensor([-1.5, 1])
d2l.use_svg_display()
_, axes = d2l.plt.subplots(1, 3, figsize=(9, 3))
for ax, func in zip(axes, [f, g, h]):
    d2l.plot([x, segment], [func(x), func(segment)], axes=ax)

4 局部極小值是全局極小值首先凸函數的局部極小值也是全局極小值。
我們用反證法證明它是錯誤的:假設 是一個局部最小值,使得有一個很小的正值 ,使得 滿足
假設存在 ,其中
根據凸性的性質,這與 是局部最小值相矛盾。
因此,對於 不存在
綜上所述,局部最小值 也是全局最小值。例如,對於凸函數 ,有一個局部最小值 , 它也是全局最小值。在這裡插入圖片描述5 約束凸優化的一個很好的特性是能夠讓我們有效地處理約束(constraints)。
即它使我們能夠解決以下形式的 約束優化(constrained optimization)問題:這裡 是目標函數, 是約束函數。
例如第一個約束 ,則參數 被限制為單位球。
如果第二個約束 ,那麼這對應於半空間上所有的 。
同時滿足這兩個約束等於選擇一個球的切片作為約束集。6 總結在深度學習的背景下,凸函數的主要目的是幫助我們詳細了解優化算法。
我們由此得出梯度下降法和隨機梯度下降法是如何相應推導出來的。根據詹森不等式,「一個多變量凸函數的總期望值」大於或等於「用每個變量的期望值計算這個函數的總值「。一個二次可微函數是凸函數,若且唯若其Hessian(二階導數矩陣)是半正定的。凸約束可以通過拉格朗日函數來添加。在實踐中,只需在目標函數中加上一個懲罰就可以了。參考

[1].https://zh-v2.d2l.ai/index.html

個人簡介:李響Superb,CSDN百萬訪問量博主,普普通通男大學生,深度學習算法、醫學圖像處理專攻,偶爾也搞全棧開發,沒事就寫文章。
博客地址:lixiang.blog.csdn.net


點擊下方閱讀原文加入社區會員

相關焦點

  • 對比 | TensorFlow VS PyTorch下的深度學習框架之爭
    source:https://thegradient.pub/state-of-ml-frameworks-2019-pytorch-dominates-research-tensorflow-dominates-industry/對於廣大深度學習行業從業者而言,熟練掌握一種或多種深度學習框架,是日常煉丹的必備技能之一。
  • Keras vs PyTorch:誰是第一深度學習框架?
    兩大框架的連結:  Keras:https://github.com/keras-team/keras (https://keras.io/)  PyTorch:https://github.com/pytorch/pytorch  你想學習深度學習嗎?
  • 在Linux系統中安裝深度學習框架Pytorch
    設為星標才不會錯過哦     你好呀 我是然怡這篇推文是兩個月前復現深度學習論文時做的筆記一系列的筆記做了好幾篇看著閱讀量很低就沒有再發公眾號很久沒有推文了前幾天對公眾號進行了小改「然怡乾貨鋪」改為「水文sw」頭像也是換了的
  • Torch7 開源 PyTorch:Python 優先深度學習框架
    據官網介紹,PyTorch 是一個 Python 優先的深度學習框架,能夠在強大的 GPU 加速基礎上實現張量和動態神經網絡。PyTorch 是一個 Python 軟體包,其提供了兩種高層面的功能:如有需要,你也可以復用你最喜歡的 Python 軟體包(如 numpy、scipy 和 Cython)來擴展 PyTorch。
  • 重磅| Torch7團隊開源PyTorch:Python優先的深度學習框架
    據官網介紹,PyTorch 是一個 Python 優先的深度學習框架,能夠在強大的 GPU 加速基礎上實現張量和動態神經網絡。官網:http://pytorch.orgGitHub:https://github.com/pytorch/pytorchPyTorch 是一個 Python 軟體包,其提供了兩種高層面的功能:使用強大的 GPU 加速的 Tensor 計算(類似 numpy)構建於基於 tape 的 autograd 系統的深度神經網絡如有需要,你也可以復用你最喜歡的
  • 深度學習框架搭建之PyTorch
    深度學習框架搭建之PyTorchPyTorch 簡介PyTorch 是由 Facebook 推出,目前一款發展與流行勢頭非常強勁的深度學習框架。PyTorch 與 NumPy 非常相似,可以說是它的替代者,支持 GPU 加速運算,用來搭建和訓練深度神經網絡。如果學習過 NumPy 以及常見的深度學習概念(如卷積層,循環層等),非常容易上手PyTorch。目前主流的深度學習框架主要有 TensorFlow,PyTorch,mxnet,caffe和Keras 等。
  • 深度學習最常用的學習算法:Adam優化算法
    聽說你了解深度學習最常用的學習算法:Adam優化算法?-深度學習世界。深度學習常常需要大量的時間和機算資源進行訓練,這也是困擾深度學習算法開發的重大原因。雖然我們可以採用分布式並行訓練加速模型的學習,但所需的計算資源並沒有絲毫減少。而唯有需要資源更少、令模型收斂更快的最優化算法,才能從根本上加速機器的學習速度和效果,Adam 算法正為此而生!
  • PyTorch框架歷史和特性更迭與安裝過程
    PyTorch是由Facebook公司開發的深度學習框架,其起源應該是Torch這個深度學習框架。Torch深度學習框架最初的開發可以追溯到2002年。相比使用Python語言作為深度學習框架前端的PyTorch,Torch使用了Lua語言作為深度學習框架的前端。由於機器學習的主流語言是Python,相比之下,Lua語言比較小眾。
  • 最全面的深度學習框架pytorch搭建過程
    深度學習一直是比較熱門的話題,在動手學習之前,需要搭建深度學習框架,如pytorch、TensorFlow、caffe、mxnet等。
  • Tensorflow和Pytorch深度學習框架安裝教程
    目前主流深度學習框架有Tensorflow和pytorch,由於一些原因我只在windows10下安裝了以上兩個深度學習框架。
  • 用PyTorch做深度學習實驗!Facebook新框架Ax和BoTorch雙雙開源
    Ax是一個面向自適應實驗的理解、管理、部署和自動化任務的通用平臺,BoTorch則主要面向貝葉斯優化任務。這兩個框架旨在簡化PyTorch應用中的自適應實驗流程。在現代機器學習應用中,對實驗到生產的流程進行簡化是最難實現的任務之一。在已經市場化深度學習框架中,Facebook的PyTorch因其高度靈活性成為數據科學界的最愛,PyTorch能夠實現快速建模和實驗。
  • 視覺算法工業部署及優化學習路線分享
    仗著這個經驗,我又把組裡其他模型:OCR,簡化版超清視頻到TX2,NX,AGX,智能相機等設備上,用盡了各種能優化的框架ncnn,mnn (其中包括針對工業級的二階段的OCR模型,det用tensorRT,reg用mnn的vulkan後端聯合開多線程優化在TX2上達到real-time)也熟悉了很多不同的backend和指令集架構。
  • 聽說你了解深度學習最常用的學習算法:Adam優化算法?
    By蔣思源2017年7月12日  深度學習常常需要大量的時間和機算資源進行訓練,這也是困擾深度學習算法開發的重大原因。雖然我們可以採用分布式並行訓練加速模型的學習,但所需的計算資源並沒有絲毫減少。而唯有需要資源更少、令模型收斂更快的最優化算法,才能從根本上加速機器的學習速度和效果,Adam算法正為此而生!
  • PYTORCH與TENSORFLOW:哪種框架最適合您的深度學習項目?
    為了幫助開發這些架構,諸如Google,Facebook和Uber之類的技術巨頭已經發布了適用於Python深度學習環境的各種框架,從而使學習,構建和訓練多樣化的神經網絡變得更加容易。在本文中,我們將研究兩個流行的框架並進行比較:PyTorch與TensorFlow。簡要地比較一下,最常用和依賴的Python框架TensorFlow和PyTorch。
  • 掌握深度學習,為什麼要用 PyTorch、TensorFlow 框架?
    畢竟,許多數據集可以用解析方法或簡單的統計過程進行建模。另一方面,在某些情況下,深度學習或深度遷移學習可以幫助你訓練更準確的模型。在這些情況下,你可以考慮使用PyTorch和TensorFlow,特別是如果你所需的訓練模型與其中一個框架模型庫中的模型類似。PyTorchPyTorch建立在舊版的Torch和Caffe2框架之上。
  • TensorFlow與PyTorch之爭,哪個框架最適合深度學習
    那麼究竟哪種框架最適宜自己手邊的深度學習項目呢?本文作者從這兩種框架各自的功能效果、優缺點以及安裝、版本更新等諸多方面給出了自己的建議。如果你在讀這篇文章,那麼你可能已經開始了自己的深度學習之旅。如果你對這一領域還不是很熟悉,那麼簡單來說,深度學習使用了「人工神經網絡」,這是一種類似大腦的特殊架構,這個領域的發展目標是開發出能解決真實世界問題的類人計算機。
  • 深度學習框架簡史:TF和PyTorch雙頭壟斷,未來十年迎來黃金時期
    過去十年,機器學習(尤其是深度學習)領域湧現了大量算法和應用。在這些深度學習算法和應用湧現的背後,是各種各樣的深度學習工具和框架。它們是機器學習革命的腳手架:TensorFlow 和 PyTorch 等深度學習框架的廣泛使用,使得許多 ML 從業者能夠使用適合的領域特定的程式語言和豐富的構建模塊更容易地組裝模型。回顧深度學習框架的演變,我們可以清楚地看到深度學習框架和深度學習算法之間的緊密耦合關係。這種相互依賴的良性循環推動了深度學習框架和工具的快速發展。
  • Facebook發布PyTorch 1.1,開源AI模型優化簡化工具BoTorch & Ax
    GPyTorch 中最頂級的概率建模,包括支持多任務高斯過程(GP)、可擴展 GP、深度核學習、深度 GP 和近似推理。通過再參數化技巧的基於蒙特卡羅的採集函數,使得實現新思想變得簡單,不需要對基礎模型施加限制性假設。Facebook 表示,BoTorch 大大提高了貝葉斯優化研究的開發效率。
  • 深度學習筆記 | 第3講:深度學習優化算法之從SGD到Adam
    又到了每周一狗熊會的深度學習時間了。在上一期中,小編和大家介紹了機器學習和深度學習中的核心任務以及神經網絡的正則化方法和dropout方法來防止過擬合。本期將借著第一期推送小編關於模型與算法的討論的引子,和大家深入探討機器學習和深度學習的數學本質,並在此基礎上重點介紹深度學習中常用的優化算法。
  • 16個GitHub值得收藏的深度學習框架
    16個GitHub值得收藏的深度學習框架 工程師3 發表於 2018-05-10 12:13:00 深度學習是一種基於對數據進行表證學習的機器學習方法,近些年不斷發展並廣受歡迎