国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種基于梯度下降算法的蛻變關(guān)系生成方法

2020-11-26 00:36穆翔宇李蘇吉
關(guān)鍵詞:測試用例梯度損失

穆翔宇, 范 鈺, 李蘇吉,2, 張 鵬, 劉 磊

(1. 吉林大學(xué) 計算機(jī)科學(xué)與技術(shù)學(xué)院, 長春 130012; 2. 吉林大學(xué) 口腔醫(yī)院, 長春 130021)

文獻(xiàn)[1]提出的蛻變測試方法解決了傳統(tǒng)測試中的Oracle問題. 蛻變測試的思想是根據(jù)待測程序中的某些性質(zhì), 尋找程序不同輸入之間存在的關(guān)系以及這些輸入對應(yīng)輸出之間存在的關(guān)系, 這種輸入之間的關(guān)系和輸出之間的關(guān)系稱為蛻變關(guān)系. 蛻變測試?yán)猛懽冴P(guān)系在現(xiàn)有成功測試用例的基礎(chǔ)上構(gòu)造新的測試用例, 通過判斷這些測試用例對應(yīng)的輸出之間是否滿足相應(yīng)的蛻變關(guān)系判定程序中是否存在錯誤. 目前, 蛻變測試的研究主要分為蛻變測試技術(shù)的應(yīng)用和改進(jìn)兩類, 蛻變測試技術(shù)的改進(jìn)又分為原始測試用例的生成和有效蛻變關(guān)系的獲取兩類.

在蛻變測試技術(shù)應(yīng)用方面, Lindvall等[2]將蛻變測試和基于模型的測試相結(jié)合, 開發(fā)了自動化的NASA DAT系統(tǒng)測試框架; Sun等[3]設(shè)計了一種利于蛻變測試過程規(guī)范化的基于XML的語言表示, 并開發(fā)了一種支持Web服務(wù)應(yīng)用程序的自動化測試工具M(jìn)T4WS, 將其應(yīng)用于Web服務(wù)測試中; Yan等[4]針對一個無測試預(yù)言的現(xiàn)實(shí)世界中科學(xué)計算程序提取該程序的蛻變關(guān)系, 并證明了蛻變測試探測錯誤的有效性; 文獻(xiàn)[5]對比了錯誤捕獲和蛻變測試在電子表格測試中的故障檢測功能, 并發(fā)現(xiàn)兩者存在互補(bǔ)關(guān)系, 因此提倡同時使用; Saha等[6]將蛻變測試運(yùn)用到強(qiáng)化學(xué)習(xí)中, 為強(qiáng)化學(xué)習(xí)的監(jiān)督分類器測試提供了一種新方法; Nakajima[7]將蛻變測試和機(jī)器學(xué)習(xí)相結(jié)合, 提出了一種適用于神經(jīng)網(wǎng)絡(luò)學(xué)習(xí)模型的新蛻變測試方法, 數(shù)據(jù)集多樣性考慮了訓(xùn)練結(jié)果對數(shù)據(jù)集的依賴性, 并提供了一種生成后續(xù)測試輸入的新方法. 對于測試用例生成, Barus等[8]比較了隨機(jī)測試和自適應(yīng)隨機(jī)測試作為原始測試用例選擇策略對蛻變測試有效性的影響, 實(shí)驗(yàn)結(jié)果表明, 自適應(yīng)隨機(jī)測試在提高蛻變測試的有效性方面優(yōu)于隨機(jī)測試; Batra等[9]提出了一種使選取原始測試用例對應(yīng)路徑最大差異化的遺傳算法; Chen等[10]提出了一種將程序的輸入域劃分為等價類的思想, 減少了原始測試用例數(shù)目, 但錯誤探測率仍較高; Murphy等[11]為蛻變測試的自動化應(yīng)用提出了啟發(fā)式測試預(yù)言和Amsterdam框架; Bluemke等[12]開發(fā)了一種蛻變測試的工具, 使蛻變測試的研究更簡便. 對于有效蛻變關(guān)系的獲取, Just等[13]研究表明, 根據(jù)系統(tǒng)組件推出的蛻變關(guān)系在錯誤探測方面通常優(yōu)于從整個系統(tǒng)得到的蛻變關(guān)系; Liu等[14]提出了一種通過組合現(xiàn)有的蛻變關(guān)系構(gòu)建新蛻變關(guān)系的方法, 驗(yàn)證了組合蛻變關(guān)系具有更高的錯誤探測效率和成本效益; Segura等[15]為探測可變性分析工具中的錯誤, 提出了一種基于蛻變關(guān)系集合的迭代蛻變測試方法; Zhang等[16]為解決面向?qū)ο筌浖y試中方法序列的Oracle問題, 提出了一種基于代數(shù)規(guī)范的面向?qū)ο筌浖y試構(gòu)建蛻變關(guān)系的方法, 顯著降低了蛻變關(guān)系的冗余; Lü等[17]提出了一種基于蛻變關(guān)系和粒子群優(yōu)化算法相結(jié)合的測試用例生成方法, 顯著提高了時間消耗和實(shí)用性評估方面的效率.

蛻變測試的本質(zhì)是驗(yàn)證程序多組輸入和輸出之間是否滿足蛻變關(guān)系, 因此蛻變關(guān)系是蛻變測試的核心, 決定了蛻變測試的能力和效果. 由上述分析可見, 目前關(guān)于蛻變關(guān)系的研究多數(shù)都集中于如何在已知的蛻變關(guān)系集合中選取、 生成更有效的蛻變關(guān)系或蛻變關(guān)系組合方案, 但都有一個前提條件, 即需預(yù)先構(gòu)造一個蛻變關(guān)系集合, 而目前該蛻變關(guān)系集合均依賴測試人員的領(lǐng)域知識構(gòu)建, 從而限制了蛻變測試的進(jìn)一步發(fā)展, 增加了蛻變測試的使用成本. 科學(xué)計算的蛻變關(guān)系存在多種形式, 但50%以上的蛻變關(guān)系可使用多項式的形式表示[18]. 因此本文研究蛻變關(guān)系的多項式形式, 先用基于機(jī)器學(xué)習(xí)基本原理的梯度下降法對多項式系數(shù)進(jìn)行求解, 再通過所得多項式自動提取所測程序的蛻變關(guān)系.

1 蛻變測試基本原理

在軟件測試中, Oracle表示當(dāng)程序正確運(yùn)行時輸入的測試用例應(yīng)該對應(yīng)的輸出結(jié)果. 通常情況下, 獲取合適的Oracle將花費(fèi)較大的代價, 且多數(shù)情形下, 由于待測程序復(fù)雜度等原因, 所以很難或完全不能得到每個測試用例對應(yīng)的Oracle. 此時, 由于測試用例作為輸入所得結(jié)果無法判斷其是否正確, 因此無法測試程序是否存在問題.

蛻變測試基本原理是通過檢測兩個或兩個以上輸出結(jié)果之間是否滿足程序中包含的某種關(guān)系(蛻變關(guān)系)檢測程序中的錯誤. 蛻變測試不同于傳統(tǒng)軟件測試之處是傳統(tǒng)軟件測試將關(guān)注點(diǎn)聚焦于出現(xiàn)錯誤的測試用例中, 而蛻變測試則認(rèn)為正確的測試用例也包含重要信息. 由于蛻變測試不依賴于測試用例產(chǎn)生輸出的正確性, 所以對于多個測試用例, 在未知Oracle的情況下仍可進(jìn)行程序測試. 蛻變測試一般由以下4步構(gòu)成:

1) 根據(jù)合適的測試用例生成策略生成一個或多個測試用例;

2) 分析待測程序的性質(zhì), 生成蛻變關(guān)系;

3) 根據(jù)原始測試用例和蛻變關(guān)系生成衍生的蛻變測試用例集;

4) 依次檢查每個原始測試用例和對應(yīng)衍生測試用例的輸出是否滿足蛻變關(guān)系.

在蛻變測試中, 蛻變關(guān)系的生成是關(guān)鍵. 蛻變關(guān)系表示待測函數(shù)或軟件的一些特殊性質(zhì), 這些性質(zhì)對程序的不同輸入產(chǎn)生影響, 從而檢測出一部分錯誤. 例如, 對于最大值函數(shù)max{X}, 只要X中元素值不變, 則無論X值的順序如何變化, 最大值函數(shù)max{X}的最終輸出一定不變. 通過該性質(zhì)可檢測出函數(shù)的部分正確性. 又例如, 計算sin(x)的程序, 對于大部分x, sin(x)的具體數(shù)值無法確定, 但根據(jù)相關(guān)數(shù)學(xué)知識可知sin(x)與sin(x+2kπ)的值相同, sin(x)與-sin(-x)的值相同, 所以只要在相同的輸入下“sin(x)-sin(x+2kπ)=0”與“sin(x)+sin(-x)=0”都成立, 即可證明程序部分正確. 當(dāng)然, 對于蛻變關(guān)系, 不一定都與“=”相關(guān). 例如, 對于f(x)=x程序, “若x1>x2, 則f(x1)>f(x2)成立”可作為程序的一條蛻變關(guān)系. 但蛻變關(guān)系的提取依賴于測試人員的人工推算, 從而要求測試人員對測試程序所在的領(lǐng)域必須深入了解, 且對于一些復(fù)雜的問題很難推算出合適的蛻變關(guān)系. 為解決該問題, Kanewala等[19]提出了在缺少Oracle的情形下用機(jī)器學(xué)習(xí)的方法發(fā)掘是否一些程序含有某些形式的蛻變關(guān)系. 本文將科學(xué)計算蛻變關(guān)系的提取和機(jī)器學(xué)習(xí)相結(jié)合, 通過大量的數(shù)據(jù)尋找兩個或兩個以上不同參數(shù)的函數(shù)之間存在的數(shù)值關(guān)系.

2 基于梯度下降法的蛻變關(guān)系獲取

2.1 蛻變關(guān)系

蛻變關(guān)系表示軟件輸入變化對輸出的影響, 即在一定取值范圍內(nèi), 程序的輸入變化和程序輸出變化存在關(guān)系. 在進(jìn)行蛻變測試時, 如果原始用例和衍生用例之間的關(guān)系不滿足所選擇的蛻變關(guān)系, 則表明這一對測試用例發(fā)現(xiàn)了程序中的錯誤. 蛻變關(guān)系可用下列公式表示:

R1(x1,x2)→R2(P[x1],P[x2]),

(1)

其中:P[x]表示輸入x在執(zhí)行完程序P后的輸出;R1表示輸入x1與x2之間存在的關(guān)系;R2表示輸出P[x1]與P[x2]之間存在的關(guān)系. 即當(dāng)輸入x1與x2滿足關(guān)系表達(dá)式R1時, 若輸出P[x1]與P[x2]滿足關(guān)系表達(dá)式R2, 則該程序在此蛻變關(guān)系下成立, 否則程序錯誤. 在蛻變測試中, 如何找到合適的R1與R2是測試的關(guān)鍵.

2.2 蛻變關(guān)系算法實(shí)現(xiàn)

在蛻變關(guān)系生成過程中, 如何確定兩個或多個相關(guān)聯(lián)的輸入對相應(yīng)輸出的影響是確定蛻變關(guān)系的關(guān)鍵. 本文采用對于確定關(guān)系的兩個或多個輸入, 通過大量數(shù)據(jù)多次迭代的方式確定不同輸入對輸出的影響, 即使用機(jī)器學(xué)習(xí)方法進(jìn)行蛻變關(guān)系的獲取. 梯度下降算法作為機(jī)器學(xué)習(xí)中的基本算法之一, 具有大樣本下標(biāo)準(zhǔn)差低、 學(xué)習(xí)效率不會下降等優(yōu)點(diǎn). 梯度表示函數(shù)中上升最快的方向, 即f(x,y,z)=(?f/?x,?f/dy,?f/?z). 梯度下降算法的基本思想是按照函數(shù)梯度下降的方向求解函數(shù)的極小值, 本文使用梯度下降算法作為基本算法獲取科學(xué)計算程序中存在的蛻變關(guān)系.

科學(xué)計算程序中50%以上的蛻變關(guān)系可用多項式形式表示, 為簡便, 本文中對輸入x1與x2之間存在的關(guān)系r1和輸出P[x1]與P[x2]之間存在的關(guān)系r2都作為線性方程的情形. 當(dāng)r1為線性方程時,x和r1(x)之間的關(guān)系可表示為r1(x)=ax+b, 其中a,b均為系數(shù). 當(dāng)r2為線性方程時,P(x)和P(r1(x))之間的關(guān)系可表示為θ1P(x)+θ2P(r1(x))+θ3=0, 其中θ1,θ2,θ3均為系數(shù). 因此, 蛻變關(guān)系可表示為

θ1P(x)+θ2P(ax+b)+θ3=0.

(2)

由于在系數(shù)θ1,θ2,θ3都確定的情形下, 自變量x在任何取值下蛻變關(guān)系(2)都成立, 所以蛻變關(guān)系的損失函數(shù)可表示為

L(θ)=|θ1P(x)+θ2P(r1(x))+θ3|.

(3)

多項式蛻變關(guān)系作為最小化損失函數(shù), 可通過梯度下降法迭代, 使多項式蛻變關(guān)系最小化并得到模型參數(shù)值. 下面給出梯度下降法原理, 設(shè)目標(biāo)函數(shù)為L(θ),L(θ)關(guān)于參數(shù)θ1的梯度是損失函數(shù)上升最快的方向. 對于最小化優(yōu)化問題, 只需將參數(shù)沿梯度相反方向前進(jìn)一個步長, 即可實(shí)現(xiàn)目標(biāo)函數(shù)的下降(步長又稱為學(xué)習(xí)率). 則參數(shù)更新公式如下:

θ=θ-αθL(θ),

(4)

算法1蛻變關(guān)系梯度下降算法.

步驟1) 初始化θ(參數(shù)向量) ,α(步長),r1(x)=ax+b,θ1P(x)+θ2P(r1(x))+θ3=0(蛻變關(guān)系);

步驟2)L(θ)=|θ1P(x)+θ2P(r1(x))+θ3|(損失函數(shù)),hθ(x)=θ1P(x)+θ2P(r1(x))+θ3;

步驟3) whileL(θ)收斂 do

步驟5) end while

步驟6) 返回θt.

算法1中, 梯度下降算法根據(jù)函數(shù)下降最快的方向進(jìn)行損失函數(shù)的最小值求解, 通過多次迭代最終實(shí)現(xiàn)假設(shè)函數(shù)hθ(x)和樣本點(diǎn)的擬合. 在梯度下降算法中, 由于損失函數(shù)的復(fù)雜性, 使得到的極值點(diǎn)不一定是損失函數(shù)的最小值點(diǎn), 可能是函數(shù)局部的極值點(diǎn), 但由于科學(xué)計算中多數(shù)程序的蛻變關(guān)系可用多項式形式表示, 因此本文采用梯度下降法得到的一定是損失函數(shù)的最小值. 由于選取參數(shù)θ的初始值不同, 因此得到的極小值也可能不同. 對于下降步長α也需選取合適的值, 若步長α偏小, 則函數(shù)下降得較慢, 需消耗大量的資源; 若步長α選取較大, 則可能會出現(xiàn)無法收斂的情形.

3 算法優(yōu)化

算法學(xué)習(xí)率(即步長α)的取值大小對梯度下降算法的效率影響較大. 如果學(xué)習(xí)率過高則會增加損失函數(shù)的波動性, 而學(xué)習(xí)率過低則會降低算法效率, 增加收斂所需時間. 隨機(jī)梯度下降算法使用固定的學(xué)習(xí)率進(jìn)行參數(shù)更新, 已成為限制算法性能的一個重要因素. 此外, 隨機(jī)梯度下降算法的固定步長使算法在每次迭代后對參數(shù)的更新都有可能會引起損失函數(shù)數(shù)值的劇烈變化, 很難獲取理想的目標(biāo)參數(shù). 例如, 對于函數(shù)tanx, 由于該函數(shù)擁有無窮大和無窮小, 且參數(shù)的更新和損失函數(shù)的變化互相影響, 故函數(shù)tanx的損失函數(shù)值將劇烈波動, 很難選擇合適的參數(shù).

理論上, 如果數(shù)據(jù)集不密集, 則使用自適應(yīng)學(xué)習(xí)速率的優(yōu)化方法(如Adagrad, RMSprop, Adam)可提高隨機(jī)梯度下降算法效率. 本文使用Adam算法解決該問題, 該算法通過計算一階矩估計和二階矩估計設(shè)計獨(dú)立的自適應(yīng)學(xué)習(xí)率, 算法描述如下.

算法2隨機(jī)Adam算法.

步驟1) 初始化α(步長),β1,β2(超參數(shù)),θ0(參數(shù)向量),m0=0,v0=0,t=0(時間步);

步驟2) whileθt不收斂 do

步驟3)t=t+1;

步驟4)gt=θft(θt-1);

步驟5)mt=β1×vt-1+(1-β1)×gt;

步驟10) end while

步驟11) 返回θt.

算法2計算了梯度的指數(shù)移動均值, 而超參數(shù)β1和β2控制移動均值的衰減率. 在給定學(xué)習(xí)率、 超參數(shù)和損失函數(shù)及初始化各參數(shù)后, 算法2對時間步+1, 并計算該時間步下的梯度, 更新偏差的一階估計和原始二階估計, 然后再計算偏差修正的一階矩估計和偏差修正的二階矩估計, 最后根據(jù)計算值更新參數(shù)θ直至收斂.

由于Adam算法在進(jìn)行迭代時通過計算一階矩估計和二階矩估計動態(tài)的調(diào)節(jié)學(xué)習(xí)率, 所以可較好地解決由隨機(jī)梯度下降算法學(xué)習(xí)率固定導(dǎo)致的一系列問題.

4 實(shí) 驗(yàn)

4.1 有效性分析實(shí)驗(yàn)

本文實(shí)驗(yàn)以sin函數(shù)作為研究對象, 隨機(jī)梯度下降算法中所有參數(shù)每次更新都使用相同的學(xué)習(xí)率. 由于sin函數(shù)的損失函數(shù)梯度較大, 若采用較大的學(xué)習(xí)率則會出現(xiàn)收斂緩慢甚至無法收斂的情形, 因此本文將學(xué)習(xí)率取較小值0.000 1. 此外, 由于式(2)在梯度下降求解中可能會出現(xiàn)θ1,θ2,θ3均為0的情形(特別地, 經(jīng)過實(shí)驗(yàn)證明若不采取措施參數(shù)將會直接下降到0), 因此可將參數(shù)θ1去除, 去除參數(shù)θ1能完全杜絕參數(shù)歸零的情形, 所以可將式(2)表示為

(5)

令m=θ2/θ1,n=θ3/θ1, 則損失函數(shù)可表示為

L(m,n)=|P(x)+mP(ax+b)+n|.

(6)

該方法不僅能解決參數(shù)歸零問題, 且不會對蛻變關(guān)系的推斷有影響. 此外, 多數(shù)線性多項式的系數(shù)主要集中在1和2上, 并且若初始值和真實(shí)值較接近時可減少迭代次數(shù), 故本文實(shí)驗(yàn)中將m,a,n的初始化值局限在[-2,2]內(nèi),b值局限在[-10,10]內(nèi).

圖1 一次隨機(jī)梯度下降算法的損失函數(shù)Fig.1 Loss function of a stochastic gradient descent algorithm

將式(6)作為損失函數(shù), 通過Pytorch框架可實(shí)現(xiàn)隨機(jī)梯度下降算法. 實(shí)驗(yàn)成功的標(biāo)準(zhǔn): 在進(jìn)行足夠多次迭代后, 若損失函數(shù)能降為零, 且參數(shù)值也穩(wěn)定在某值, 驗(yàn)證參數(shù)值(代入式(3))符合所測科學(xué)計算函數(shù)的規(guī)律, 則可判斷成功推出了蛻變關(guān)系. 對于每個科學(xué)計算函數(shù), 重復(fù)執(zhí)行程序若干次, 并用Tensorboard記錄數(shù)據(jù), 觀察實(shí)驗(yàn)結(jié)果. 本文選取一個具有代表性的典型特征結(jié)果為例, 圖1為進(jìn)行某次實(shí)驗(yàn)損失函數(shù)每次迭代的數(shù)值結(jié)果. 由圖1可見, 損失函數(shù)在5萬次迭代內(nèi)呈現(xiàn)了高波動性, 這是因?yàn)殡S機(jī)梯度下降每個樣本更新一次梯度, 損失函數(shù)值都會進(jìn)行頻繁地更新. 損失函數(shù)在前期迭代時波動幅度較大并非完全無益, 其可能有益于挖掘新的及更優(yōu)的局部最小值. 后期波動相對前期逐漸減小, 但也在波動中收斂, 多次迭代后損失函數(shù)在波動中降為零. 根據(jù)實(shí)驗(yàn)得到此次運(yùn)行梯度下降算法的參數(shù)值為:m=1,a=1,b=π,n=0, 代入到多項式蛻變關(guān)系式為sin(x)+sin(x+π)=0. 通過查閱三角函數(shù)的相關(guān)定理可知, 該多項式蛻變關(guān)系成立. 本文進(jìn)行了大量重復(fù)性實(shí)驗(yàn), 按同樣流程進(jìn)行數(shù)據(jù)記錄和驗(yàn)證, 結(jié)果表明, 隨機(jī)梯度下降算法可對有多項式蛻變關(guān)系的科學(xué)計算函數(shù)進(jìn)行蛻變關(guān)系推導(dǎo).

4.2 三種自適應(yīng)學(xué)習(xí)速率的優(yōu)化方法對比

理論上, RMSprop算法是Adagrad算法的一種優(yōu)化, 而Adam算法是在RMSprop算法的基礎(chǔ)上進(jìn)行優(yōu)化, 引入了動量和偏差修正. 在類似情形下, RMSprop算法與Adam算法的性能相差較小, 但Adam算法收益于偏差修正, 因此略優(yōu)于RMSprop算法, 因?yàn)锳dam算法在其接近收斂時梯度變得更稀疏[20]. 本文進(jìn)行多次實(shí)驗(yàn)的結(jié)果表明, Adam算法在自動推導(dǎo)蛻變關(guān)系程序的效率最高, 性能最好.

圖2 三種算法的損失值對比Fig.2 Comparison of loss values of three algorithms

圖2為在完全相同的數(shù)據(jù)訓(xùn)練集下, 同一程序中創(chuàng)建三種優(yōu)化器, 隨機(jī)梯度下降算法(A)、 RMSprop算法(B)和Adam算法(C)的損失值對比結(jié)果. 由圖2可見, 在相同數(shù)據(jù)及相同迭代次數(shù)的條件下, 隨機(jī)梯度下降算法和RMSprop算法無法將損失值降低到零, 即推導(dǎo)蛻變關(guān)系失敗. 而Adam算法卻能在約5 000次迭代時即擺脫高波動的損失值, 將損失值逐漸減低到零, 求出蛻變關(guān)系. 表明Adam算法即使初始化參數(shù)時, 參數(shù)距離最優(yōu)解較遠(yuǎn), 但能克服隨機(jī)梯度下降算法的缺陷, 用更精巧的算法將損失函數(shù)降低至零, 證明了在解決該問題中Adam算法比另外兩種算法性能更優(yōu). 多次運(yùn)行程序后結(jié)果表明, 在求解科學(xué)計算函數(shù)的多項式蛻變關(guān)系問題中, Adam算法的效果最好.

4.3 隨機(jī)梯度下降法與Adam算法對比

由上述實(shí)驗(yàn)可知, 使用隨機(jī)梯度下降算法的損失函數(shù)平均迭代次數(shù)約5萬次呈現(xiàn)高波動性, 在10萬次迭代后開始收斂. 為與隨機(jī)梯度下降算法進(jìn)行對比, 本文在實(shí)現(xiàn)過程中將Adam算法的初始學(xué)習(xí)率設(shè)為0.001, 與隨機(jī)梯度下降算法相同使用式(3)作為損失函數(shù), 用Pytorch框架構(gòu)造Adam優(yōu)化器進(jìn)行實(shí)現(xiàn). 多次實(shí)驗(yàn)結(jié)果表明, 在多數(shù)情形下初始值為α=0.001,β1=0.9,β2=0.999,ε=1×10-8時算法性能優(yōu)異.

圖3 Adam算法損失值示例Fig.3 Example of loss values of Adam algorithm

圖3為Adam算法損失值示例. 由圖3可見, Adam算法優(yōu)化后程序推導(dǎo)出蛻變關(guān)系所需的迭代次數(shù)極大降低, 多次實(shí)驗(yàn)結(jié)果表明, 使用Adam算法損失值降為零的次數(shù)約為2 000(不排除存在少量迭代次數(shù)遠(yuǎn)大于2 000的情形), 相比于隨機(jī)梯度下降法的迭代次數(shù)性能明顯提升, 因此Adam算法比隨機(jī)梯度下降法收斂的更快且更穩(wěn)定.

Adam算法比隨機(jī)梯度下降算法效率高的一個重要原因是其可以修正偏差. 對于tan函數(shù), 如嘗試用隨機(jī)梯度下降算法推導(dǎo)其蛻變關(guān)系式, 梯度計算將十分困難, 因?yàn)閠an函數(shù)具有無窮大和無窮小, 高梯度將會導(dǎo)致?lián)p失函數(shù)大幅度波動, 如圖4所示. 而Adam算法可很好地解決該問題, 圖5是用Adam算法計算tan函數(shù)蛻變關(guān)系式的一個示例, 損失函數(shù)在波動中降為零, 此時對于優(yōu)化后的蛻變關(guān)系式(4), 對應(yīng)的參數(shù)為m=1,a=-1,b=π,n=0,代入到多項式蛻變關(guān)系式為tan(x)+tan(-x+π)=0. 經(jīng)過驗(yàn)證, 該組系數(shù)代入tan函數(shù)的蛻變關(guān)系式成立.

圖4 tan損失函數(shù)波動Fig.4 Fluctuations of tan loss function

圖5 Adam算法對于tan函數(shù)的損失值Fig.5 Loss values of Adam algorithm for tan function

盡管Adam算法可求出tan函數(shù)的蛻變關(guān)系式, 但tan函數(shù)易導(dǎo)致?lián)p失函數(shù)高波動的特征, 使執(zhí)行Adam算法失敗率也較高. 但相比隨機(jī)梯度下降法無法求解tan函數(shù)的蛻變關(guān)系式, Adam算法已有很大優(yōu)勢.

綜上所述, 本文將科學(xué)計算程序的蛻變關(guān)系推導(dǎo)問題視為一個多項式系數(shù)搜索問題, 用經(jīng)典的機(jī)器學(xué)習(xí)算法----梯度下降法解決該問題, 并使用Adam算法對梯隊下降法進(jìn)行優(yōu)化, 取得了較好的效果.

猜你喜歡
測試用例梯度損失
一個帶重啟步的改進(jìn)PRP型譜共軛梯度法
一個改進(jìn)的WYL型三項共軛梯度法
隨機(jī)加速梯度算法的回歸學(xué)習(xí)收斂速度
胖胖損失了多少元
回歸測試中測試用例優(yōu)化技術(shù)研究與探索
基于SmartUnit的安全通信系統(tǒng)單元測試用例自動生成
一個具梯度項的p-Laplace 方程弱解的存在性
玉米抽穗前倒伏怎么辦?怎么減少損失?
菜燒好了應(yīng)該盡量馬上吃
損失