計算梯度的三種方法 數值法,解析法,反向傳播法

2021-09-11 07:27:01 字數 1468 閱讀 8405

"""# first method 解析法

def grad1(x,y,z):

dx = z

dy = z

dz = (x+y)

return (dx,dy,dz)

# second method 數值法

def grad2(x,y,z,epi):

# dx

fx1 = (x+epi+y)*z

fx2 = (x-epi+y)*z

dx = (fx1-fx2)/(2*epi)

# dy

fy1 = (x+y+epi)*z

fy2 = (x+y-epi)*z

dy = (fy1-fy2)/(2*epi)

# dz

fz1 = (x+y)*(z+epi)

fz2 = (x+y)*(z-epi)

dz = (fz1-fz2)/(2*epi)

return (dx,dy,dz)

# third method 反向傳播法

三種方法的區別:

數值法,通過對自變數的微小變動,來計算其導數;

解析法,計算出導數的表示式;

梯度下降法,已知當前的導數表示式,並計算出當前的導數;

提問1:為何要用梯度下降法,而不是直接使用解析表示式,使其為0?

答:得到解析表示式很容易,使得導數為0 ,這就變成了乙個方程式求解問題,計算機並不擅長,而且非常複雜,計算量大,且不好計算,而且會出現無解;而使用梯度下降法,就非常簡單,而且計算機是非常擅長優化的;

提問2:為何不使用數值分析法?

答:在引數比較少的情況下,可以使用,但引數極多的情況下,計算量就非常大的;執行效率極差;

提問3:數值分析法有神經網路訓練中是否有其地位呢?

答:當自己寫梯度計算時,可以用來檢驗

排序的常見的三種方法 冒泡法 選擇法 插入法

int tmp for int i 0 i arr.length 1 i 選擇排序就是從第一趟開始,用第乙個元素和剩下中的每乙個元素比較,如果比第乙個小,就和第乙個元素交換值,最後使得第乙個元素中的值最小,第二趟選擇出第二小的放到第二元素,依次,使得陣列有序。int tmp int minindex...

xml 解析的三種方法

dom解析 public class dompersonservice public static listreadxml inputstream instream throws exception listpersons new arraylist 例項化乙個文件構建器工廠 documentbui...

根號法 埃氏法 尤拉篩選。三種方法求素數

先上開根號求素數 乙個數n的最小質因子,必定小於開根號n 數學表達 a b n,若a 開根號n,b必定 開根號n,所以只要求2 開根號n,即可判斷n是不是素數。反證法如果數n的最小質因子a大於開根號n,那數n的另乙個因子b,b和a構成一對n的約數 必定大於a,那麼也大於根號n,這時候,a b必定大於...