pytorch梯度下降法講解(非常詳細)


pytorch隨機梯度下降法
1、梯度、偏微分以及梯度的區別和聯系
(1)導數是指一元函數對於自變量求導得到的數值,它是一個標量,反映了函數的變化趨勢;
(2)偏微分是多元函數對各個自變量求導得到的,它反映的是多元函數在各個自變量方向上的變化趨勢,也是標量;
(3)梯度是一個矢量,是有大小和方向的,其方向是指多元函數增大的方向,而大小是指增長的趨勢快慢。

2、在尋找函數的最小值的時候可以利用梯度下降法來進行尋找,一般會出現以下兩個問題局部最優解和銨點(不同自變量的變化趨勢相反,一個處於極小,一個處於極大)


3、初始狀態、學習率和動量(如何逃出局部最優解)是全部尋優的三個重要影響因素


4、常見函數的梯度計算基本和一元函數導數是一致的


5、常見的激活函數主要有三種:
(1)sigmoid函數

(2)tanh函數

(3)Relu函數


6、常用的損失函數-loss函數
(1)MSE-回歸問題
(2)Cross entropy loss-分類問題


7、對於MSE均方差的loss函數,計算時可以利用norm函數來進行計算,調用的格式如下所示:
MSE=torch.norm(y-y_pre,2).pow(2)
也可以直接調用API:
F.mse_loss(y,y_pre)來進行求解
8、對於梯度的求取在pytorch里面主要有兩種方式:
(1)torch.autograd.grad(loss,[w0,w1,...],retain_graph=True)
(2)loss.backward(retain_graph=True) #其中使得retain_graph=True的目的是使得其不發生變化


9、感知機及其梯度推導——完整的神經網絡的梯度計算的過程
(1)單輸出模型的梯度計算

(2)多輸出模型的梯度計算

10、鏈式法則
鏈式法則主要是用來求取多隱含層和多輸出的神經網絡的梯度計算關系,它可以方便地進行計算,高效准確


11、使用梯度下降法求解一個2D函數的最小值:
#反向傳播過程解析
#2D函數最優化曲線
#畫3D函數圖像輸出
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
import matplotlib.pyplot as plt
import numpy as np
import mpl_toolkits.mplot3d
figure=plt.figure()
#ax = Axes3D(figure)
ax=figure.gca(projection="3d")
x1=np.linspace(-6,6,1000)
y1=np.linspace(-6,6,1000)
x,y =np.meshgrid(x1,y1)
z=(x**2+y-11)**2+(x+y**2-7)**2
#ax.plot_surface(x,y,z,rstride=10,cstride=4,cmap=cm.YlGnBu_r)
ax.plot_surface(x,y,z,cmap="rainbow")
plt.show()

#梯度下降法尋找2D函數最優值函數
def f(x):
return (x[0]**2+x[1]-11)**2+(x[0]+x[1]**2-7)**2
x=torch.tensor([-4.,0.],requires_grad=True) #
optimizer=torch.optim.Adam([x],lr=1e-3)
for step in range(20000):
  pre=f(x)
  optimizer.zero_grad()
  pre.backward()
  optimizer.step()
  if step % 2000==0:
    print(step,x.tolist(),pre)

輸出結果如下所示:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM