本發(fā)明涉及大規(guī)模機(jī)器分布式訓(xùn)練,特別是涉及一種基于滑動(dòng)窗口采樣的分布式機(jī)器學(xué)習(xí)訓(xùn)練方法及其系統(tǒng)。
背景技術(shù):
在大數(shù)據(jù)集上進(jìn)行訓(xùn)練的現(xiàn)代神經(jīng)網(wǎng)絡(luò)架構(gòu)可以跨廣泛的多種領(lǐng)域獲取可觀的結(jié)果,領(lǐng)域涵蓋從語(yǔ)音和圖像認(rèn)知、自然語(yǔ)言處理、到業(yè)界關(guān)注的諸如欺詐檢測(cè)和推薦系統(tǒng)這樣的應(yīng)用等各個(gè)方面。但是訓(xùn)練這些神經(jīng)網(wǎng)絡(luò)模型在計(jì)算上有嚴(yán)格要求,盡管近些年來(lái)GPU硬件、網(wǎng)絡(luò)架構(gòu)和訓(xùn)練方法上均取得了重大的進(jìn)步,但事實(shí)是在單一機(jī)器上,網(wǎng)絡(luò)訓(xùn)練所需要的時(shí)間仍然長(zhǎng)得不切實(shí)際。幸運(yùn)的是,我們不僅限于單個(gè)機(jī)器:大量工作和研究已經(jīng)使有效的神經(jīng)網(wǎng)絡(luò)分布式訓(xùn)練成為了可能。分布式訓(xùn)練中的數(shù)據(jù)并行方法在每一個(gè)worker machine上都有一套完整的模型,但分別對(duì)訓(xùn)練數(shù)據(jù)集的不同子集進(jìn)行處理。數(shù)據(jù)并行毫無(wú)爭(zhēng)議是分布式系統(tǒng)中最適的方法,而且也一直是更多研究的焦點(diǎn)。在數(shù)據(jù)并行(data parallelism)中,不同的機(jī)器有著整個(gè)模型的完全拷貝;每個(gè)機(jī)器只獲得整個(gè)數(shù)據(jù)的不同部分。計(jì)算的結(jié)果通過(guò)某些方法結(jié)合起來(lái)。數(shù)據(jù)并行訓(xùn)練方法均需要一些整合結(jié)果和在各工作器(worker)間同步模型參數(shù)的方法。現(xiàn)有的分布式機(jī)器學(xué)習(xí)訓(xùn)練方法一般為SGD,目前常用的SGD算法為基于延遲與軟同步的SGD即Staleness Aware SGD,然而它們存在以下一些問(wèn)題:
Staleness Aware SGD使用當(dāng)前過(guò)期梯度(Staleness)調(diào)整對(duì)應(yīng)學(xué)習(xí)器的學(xué)習(xí)率,將分布式異步訓(xùn)練的節(jié)點(diǎn)快慢產(chǎn)生過(guò)期梯度這個(gè)問(wèn)題考慮進(jìn)來(lái),在普適計(jì)算的環(huán)境中,人和計(jì)算機(jī)不斷的進(jìn)行著透明性的交互,在這個(gè)交互過(guò)程中,普適系統(tǒng)獲取與用戶需求相關(guān)的上下文信息來(lái)確認(rèn)為用戶提供什么樣的服務(wù),這就是上下文感知,它是普適計(jì)算的重要技術(shù)??紤]到過(guò)期梯度,雖然一定程度上緩解了全異步同步參數(shù)引起的整體模型收斂效果差與受集群系統(tǒng)波動(dòng)的影響的問(wèn)題,但使用當(dāng)前學(xué)習(xí)器的過(guò)期梯度無(wú)法感知該學(xué)習(xí)器過(guò)期梯度的上下文信息,對(duì)于該過(guò)期梯度處理過(guò)于簡(jiǎn)單,這樣造成分布式異步訓(xùn)練穩(wěn)定性與收斂效果依然不夠理想。
技術(shù)實(shí)現(xiàn)要素:
鑒于以上所述現(xiàn)有技術(shù)的缺點(diǎn),本發(fā)明的目的在于提供一種基于滑動(dòng)窗口采樣的分布式機(jī)器學(xué)習(xí)訓(xùn)練方法及其系統(tǒng),用于解決現(xiàn)有技術(shù)中學(xué)習(xí)器的梯度過(guò)期程度無(wú)法感知該學(xué)習(xí)器梯度過(guò)期程度的上下文信息、對(duì)于該過(guò)期梯度處理過(guò)于簡(jiǎn)單、從而造成分布式異步訓(xùn)練穩(wěn)定性與收斂效果不好的問(wèn)題。
為實(shí)現(xiàn)上述目的,本發(fā)明采用以下方案:一種基于滑動(dòng)窗口采樣的分布式機(jī)器學(xué)習(xí)訓(xùn)練方法,包括以下步驟:步驟1),機(jī)器學(xué)習(xí)模型參數(shù)初始化;步驟2),獲取所有數(shù)據(jù)的一個(gè)數(shù)據(jù)分片,獨(dú)立進(jìn)行模型訓(xùn)練;步驟3),收集歷史的若干輪梯度過(guò)期程度樣本,通過(guò)滑動(dòng)采樣樣本,并計(jì)算梯度過(guò)期程度上下文值,調(diào)整學(xué)習(xí)率后發(fā)起梯度更新請(qǐng)求;步驟4),異步收集多個(gè)梯度過(guò)期程度樣本,利用調(diào)整后的學(xué)習(xí)率更新全局模型參數(shù)并推送更新的參數(shù);步驟5),異步獲取推送的全局參數(shù)更新,繼續(xù)下一次訓(xùn)練;步驟6),檢驗(yàn)?zāi)P褪諗啃?,若不收斂,進(jìn)入所述步驟2)循環(huán);若收斂,進(jìn)入步驟7);步驟7),獲取模型參數(shù)。
于本發(fā)明的一實(shí)施方式中,在所述步驟4)中,還包括維護(hù)一個(gè)邏輯時(shí)鐘記錄當(dāng)前模型參數(shù)版本的步驟,在每進(jìn)行一次從梯度到參數(shù)值的優(yōu)化動(dòng)作后,邏輯時(shí)鐘加1。
于本發(fā)明的一實(shí)施方式中,在每進(jìn)行一次邏輯時(shí)鐘加1后,用當(dāng)前的邏輯時(shí)鐘更新機(jī)器學(xué)習(xí)的邏輯時(shí)鐘。
于本發(fā)明的一實(shí)施方式中,在所述步驟3)中,梯度過(guò)期程度的計(jì)算為:當(dāng)前的邏輯時(shí)鐘-機(jī)器學(xué)習(xí)的邏輯時(shí)鐘+1,其中,每個(gè)機(jī)器學(xué)習(xí)模型保存前N-1次更新時(shí)的梯度過(guò)期程度,N為當(dāng)前更新的次數(shù)。
于本發(fā)明的一實(shí)施方式中,在所述步驟3)中,梯度過(guò)期程度上下文值通過(guò)計(jì)算當(dāng)前梯度過(guò)期程度與前N-1個(gè)梯度過(guò)期程度的均值得到。
此外,本發(fā)明還提供了一種應(yīng)用上述方法的基于滑動(dòng)窗口采樣的分布式機(jī)器學(xué)習(xí)訓(xùn)練系統(tǒng),所述系統(tǒng)包括:服務(wù)器節(jié)點(diǎn),所述服務(wù)器節(jié)點(diǎn)異步收集若干個(gè)梯度更新請(qǐng)求,進(jìn)行全局模型參數(shù)更新并保存,被動(dòng)推送更新的參數(shù);學(xué)習(xí)器節(jié)點(diǎn),每個(gè)所述學(xué)習(xí)器節(jié)點(diǎn)獲取所有數(shù)據(jù)的一個(gè)數(shù)據(jù)分片,獨(dú)立進(jìn)行模型訓(xùn)練,每輪訓(xùn)練完畢后,使用調(diào)整過(guò)的學(xué)習(xí)率向所述服務(wù)器節(jié)點(diǎn)發(fā)起梯度更新,并異步獲取所述服務(wù)器節(jié)點(diǎn)推送的更新的參數(shù),發(fā)起下一輪訓(xùn)練;滑動(dòng)采樣模塊,所述滑動(dòng)采樣模塊附屬于所述學(xué)習(xí)器節(jié)點(diǎn),用于完成前若干輪梯度過(guò)期程度樣本的采樣,計(jì)算梯度過(guò)期程度上下文值,并在所述學(xué)習(xí)器節(jié)點(diǎn)向所述服務(wù)器節(jié)點(diǎn)推送梯度時(shí),推送當(dāng)前梯度過(guò)期程度上下文值,調(diào)整此次更新學(xué)習(xí)率。
于本發(fā)明的一實(shí)施方式中,每個(gè)所述學(xué)習(xí)器節(jié)點(diǎn)保存前N-1次更新時(shí)的梯度過(guò)期程度,其中,N為當(dāng)前更新的次數(shù)。
于本發(fā)明的一實(shí)施方式中,所述服務(wù)器節(jié)點(diǎn)每進(jìn)行一次從梯度到參數(shù)值的優(yōu)化動(dòng)作后,邏輯時(shí)鐘加1。
于本發(fā)明的一實(shí)施方式中,每個(gè)所述學(xué)習(xí)器節(jié)點(diǎn)維護(hù)一個(gè)自己的邏輯時(shí)鐘,所述學(xué)習(xí)器節(jié)點(diǎn)異步提交梯度并立即獲取當(dāng)前所述服務(wù)器節(jié)點(diǎn)參數(shù)值,并用當(dāng)前所述服務(wù)器節(jié)點(diǎn)的邏輯時(shí)鐘更新自己的邏輯時(shí)間。
于本發(fā)明的一實(shí)施方式中,每個(gè)所述學(xué)習(xí)器節(jié)點(diǎn)異步提交梯度至所述服務(wù)器節(jié)點(diǎn),所述服務(wù)器節(jié)點(diǎn)異步累計(jì)任意個(gè)所述學(xué)習(xí)器節(jié)點(diǎn)的梯度,然后進(jìn)行梯度到參數(shù)的優(yōu)化動(dòng)作。
如上所述,本發(fā)明的基于滑動(dòng)窗口采樣的分布式機(jī)器學(xué)習(xí)訓(xùn)練方法及其系統(tǒng),具有以下有益效果:通過(guò)使用滑動(dòng)窗口采樣訓(xùn)練過(guò)程中的快慢節(jié)點(diǎn)特征來(lái)感知訓(xùn)練過(guò)程的上下文,相比普通的梯度延遲感知的異步更新的訓(xùn)練方法,能更好地感知過(guò)期梯度,使用過(guò)期梯度上下文來(lái)控制學(xué)習(xí)器的學(xué)習(xí)率,緩解訓(xùn)練收斂效果不佳的問(wèn)題,同時(shí)減小了分布式系統(tǒng)帶來(lái)的訓(xùn)練波動(dòng),提高了分布式訓(xùn)練的魯棒性。
附圖說(shuō)明
圖1顯示為本發(fā)明基于滑動(dòng)窗口采樣的分布式機(jī)器學(xué)習(xí)訓(xùn)練方法于一實(shí)施例中的流程圖。
圖2顯示為基于服務(wù)器節(jié)點(diǎn)的數(shù)據(jù)并行訓(xùn)練模式于一實(shí)施例中的架構(gòu)圖。
元件標(biāo)號(hào)說(shuō)明
1 服務(wù)器節(jié)點(diǎn)
2 學(xué)習(xí)器節(jié)點(diǎn)
S1~S7 步驟
具體實(shí)施方式
以下通過(guò)特定的具體實(shí)例說(shuō)明本發(fā)明的實(shí)施方式,本領(lǐng)域技術(shù)人員可由本說(shuō)明書所揭露的內(nèi)容輕易地了解本發(fā)明的其他優(yōu)點(diǎn)與功效。本發(fā)明還可以通過(guò)另外不同的具體實(shí)施方式加以實(shí)施或應(yīng)用,本說(shuō)明書中的各項(xiàng)細(xì)節(jié)也可以基于不同觀點(diǎn)與應(yīng)用,在沒(méi)有背離本發(fā)明的精神下進(jìn)行各種修飾或改變。需說(shuō)明的是,在不沖突的情況下,以下實(shí)施例及實(shí)施例中的特征可以相互組合。
需要說(shuō)明的是,以下實(shí)施例中所提供的圖示僅以示意方式說(shuō)明本發(fā)明的基本構(gòu)想,雖圖示中僅顯示與本發(fā)明中有關(guān)的組件而非按照實(shí)際實(shí)施時(shí)的組件數(shù)目、形狀及尺寸繪制,其實(shí)際實(shí)施時(shí)各組件的型態(tài)、數(shù)量及比例可為一種隨意的改變,且其組件布局型態(tài)也可能更為復(fù)雜。
本發(fā)明涉及大規(guī)模機(jī)器分布式訓(xùn)練的方法,針對(duì)當(dāng)前分布式機(jī)器學(xué)習(xí)訓(xùn)練方法穩(wěn)定性與收斂性效果不好的問(wèn)題,提出了一種基于滑動(dòng)窗口采樣的分布式機(jī)器學(xué)習(xí)訓(xùn)練方法及其系統(tǒng),在進(jìn)行機(jī)器學(xué)習(xí)分布式訓(xùn)練時(shí),使用滑動(dòng)窗口采樣感知過(guò)期梯度并基于感知到的過(guò)期梯度上下文調(diào)整學(xué)習(xí)率來(lái)實(shí)現(xiàn)提高大規(guī)模機(jī)器學(xué)習(xí)分布式訓(xùn)練的穩(wěn)定性與收斂效果。本發(fā)明可以用于以下幾種典型的應(yīng)用場(chǎng)景:數(shù)據(jù)并行的大規(guī)模機(jī)器學(xué)習(xí)系統(tǒng)、深度學(xué)習(xí)系統(tǒng)。以下結(jié)合附圖和實(shí)施例對(duì)本發(fā)明作進(jìn)一步的說(shuō)明。
實(shí)施例一
請(qǐng)參閱圖1,為本發(fā)明基于滑動(dòng)窗口采樣的分布式機(jī)器學(xué)習(xí)訓(xùn)練方法于一實(shí)施例中的流程圖。本發(fā)明的方法包括以下步驟:
S1,機(jī)器學(xué)習(xí)模型參數(shù)初始化;
S2,獲取所有數(shù)據(jù)的一個(gè)數(shù)據(jù)分片,獨(dú)立進(jìn)行模型訓(xùn)練;
S3,收集歷史的若干輪梯度過(guò)期程度樣本,通過(guò)滑動(dòng)采樣樣本,并計(jì)算梯度過(guò)期程度上下文值,調(diào)整學(xué)習(xí)率后發(fā)起梯度更新請(qǐng)求;
S4,異步收集多個(gè)梯度過(guò)期程度樣本,利用調(diào)整后的學(xué)習(xí)率更新全局模型參數(shù)并推送更新的參數(shù);
S5,異步獲取推送的全局參數(shù)更新,繼續(xù)下一次訓(xùn)練;
S6,檢驗(yàn)?zāi)P褪諗啃?,若不收斂,進(jìn)入所述步驟2)循環(huán);若收斂,進(jìn)入步驟7);
S7,獲取模型參數(shù)。
作為示例,在所述步驟S4中,還包括維護(hù)一個(gè)邏輯時(shí)鐘記錄當(dāng)前模型參數(shù)版本的步驟,在每進(jìn)行一次從梯度到參數(shù)值的優(yōu)化動(dòng)作后,邏輯時(shí)鐘加1。
作為示例,在每進(jìn)行一次邏輯時(shí)鐘加1后,用當(dāng)前的邏輯時(shí)鐘更新機(jī)器學(xué)習(xí)的邏輯時(shí)鐘。
作為示例,在所述步驟S3中,梯度過(guò)期程度的計(jì)算為:當(dāng)前的邏輯時(shí)鐘-機(jī)器學(xué)習(xí)的邏輯時(shí)鐘+1,其中,每個(gè)機(jī)器學(xué)習(xí)模型保存前N-1次更新時(shí)的梯度過(guò)期程度,N為當(dāng)前更新的次數(shù)。
作為示例,在所述步驟S3中,梯度過(guò)期程度上下文值通過(guò)計(jì)算當(dāng)前梯度過(guò)期程度與前N-1個(gè)梯度過(guò)期程度的均值得到,也即滑動(dòng)窗口采樣。
作為示例,設(shè)stalenessContext(i)為第i個(gè)節(jié)點(diǎn)梯度過(guò)期程度上下文值,gradient(i)為第i個(gè)節(jié)點(diǎn)梯度,使用C(C為大于等于1的整數(shù))個(gè)平均梯度,則做以下加權(quán)平均得到:
G=1/C*sum(stalenessContext(i)*gradient(i)),i={0,1,...nodes},即使用梯度過(guò)期程度上下文值來(lái)調(diào)整學(xué)習(xí)率,讓其感知過(guò)期梯度上下文。
實(shí)施例二
此外,本發(fā)明還提供了一種應(yīng)用上述方法的基于滑動(dòng)窗口采樣的分布式機(jī)器學(xué)習(xí)訓(xùn)練系統(tǒng),請(qǐng)參閱圖2,所述系統(tǒng)包括:服務(wù)器節(jié)點(diǎn)1,所述服務(wù)器節(jié)點(diǎn)1異步收集若干個(gè)梯度更新請(qǐng)求,進(jìn)行全局模型參數(shù)更新并保存,被動(dòng)向客戶端推送更新的參數(shù);學(xué)習(xí)器節(jié)點(diǎn)2,每個(gè)所述學(xué)習(xí)器節(jié)點(diǎn)2獲取所有數(shù)據(jù)的一個(gè)數(shù)據(jù)分片,獨(dú)立進(jìn)行模型訓(xùn)練,每輪訓(xùn)練完畢后,使用調(diào)整過(guò)的學(xué)習(xí)率向所述服務(wù)器節(jié)點(diǎn)1發(fā)起梯度更新,并異步獲取所述服務(wù)器節(jié)點(diǎn)1推送的更新的參數(shù),發(fā)起下一輪訓(xùn)練;滑動(dòng)采樣模塊(未示出),所述滑動(dòng)采樣模塊附屬于所述學(xué)習(xí)器節(jié)點(diǎn)2,用于完成前若干輪梯度過(guò)期程度樣本的采樣,計(jì)算梯度過(guò)期程度上下文值,并在所述學(xué)習(xí)器節(jié)點(diǎn)2向所述服務(wù)器節(jié)點(diǎn)1推送梯度時(shí),推送當(dāng)前梯度過(guò)期程度上下文值,調(diào)整此次更新學(xué)習(xí)率。
需要注意的是,滑動(dòng)采樣模塊在參數(shù)服務(wù)器中的學(xué)習(xí)器節(jié)點(diǎn)2完成采樣工作,并且提供一個(gè)整體訓(xùn)練的技術(shù)方案,可用于實(shí)際的通用機(jī)器學(xué)習(xí)、深度學(xué)習(xí)算法的分布式訓(xùn)練過(guò)程。
作為示例,所述服務(wù)器節(jié)點(diǎn)1每進(jìn)行一次從梯度到參數(shù)值的優(yōu)化動(dòng)作后,邏輯時(shí)鐘加1。所述服務(wù)器節(jié)點(diǎn)1統(tǒng)一維護(hù)一個(gè)邏輯時(shí)鐘記錄當(dāng)前參數(shù)的版本,所述服務(wù)器節(jié)點(diǎn)1每進(jìn)行一次從梯度到參數(shù)值的優(yōu)化動(dòng)作,邏輯時(shí)鐘加1。
作為示例,每個(gè)所述學(xué)習(xí)器節(jié)點(diǎn)2也維護(hù)一個(gè)自己的邏輯時(shí)鐘,所述學(xué)習(xí)器節(jié)點(diǎn)2異步提交梯度并立即獲取當(dāng)前所述服務(wù)器節(jié)點(diǎn)1參數(shù)值,并用當(dāng)前所述服務(wù)器節(jié)點(diǎn)1的邏輯時(shí)鐘更新自己的邏輯時(shí)間。
作為示例,每個(gè)所述學(xué)習(xí)器節(jié)點(diǎn)2需要保存前N-1次更新時(shí)的梯度過(guò)期程度,其中N為當(dāng)前參數(shù)更新的次數(shù)。
作為示例,若設(shè)trainer表示為學(xué)習(xí)器節(jié)點(diǎn),pserver表示為服務(wù)器節(jié)點(diǎn),gradient表示梯度,staleness表示為梯度過(guò)期程度,value表示參數(shù)值,stalenessContext表示為梯度過(guò)期程度上下文值,Timestamp表示邏輯時(shí)鐘,i表示第i個(gè)學(xué)習(xí)器節(jié)點(diǎn),且i={0,1,...nodes},G為平均梯度值,C表示收集的學(xué)習(xí)器節(jié)點(diǎn)的個(gè)數(shù),則梯度過(guò)期程度staleness的計(jì)算式為:
staleness(trainer)=Timestamp(pserver)-Timestamp(trainer)+1。
當(dāng)前梯度過(guò)期程度staleness與前N-1個(gè)梯度過(guò)期程度staleness的均值,即滑動(dòng)窗口采樣,任何學(xué)習(xí)器節(jié)點(diǎn)trainer異步提交梯度gradient至服務(wù)器節(jié)點(diǎn)pserver,服務(wù)器節(jié)點(diǎn)pserver異步累計(jì)C個(gè)學(xué)習(xí)器節(jié)點(diǎn)trainer的梯度gradient,然后進(jìn)行梯度gradient到參數(shù)value的優(yōu)化動(dòng)作,即使用軟同步策略。計(jì)算方法是使用來(lái)自C個(gè)學(xué)習(xí)器節(jié)點(diǎn)trainer的平均梯度G,做以下加權(quán)平均則得到:
G=1/C*sum(stalenessContext(i)*gradient(i)),其中i={0,1,...nodes},即使用梯度過(guò)期程度上下文值stalenessContext調(diào)整學(xué)習(xí)率,讓其感知過(guò)期梯度上下文。學(xué)習(xí)器節(jié)點(diǎn)trainer與服務(wù)器節(jié)點(diǎn)pserver按照上述方法進(jìn)行訓(xùn)練,直到訓(xùn)練收斂。
需要注意的是,對(duì)任何學(xué)習(xí)器節(jié)點(diǎn)trainer而言,它異步提交梯度gradient并立即獲取當(dāng)前的參數(shù)值value;對(duì)服務(wù)器節(jié)點(diǎn)pserver而言,它累計(jì)來(lái)自任意C個(gè)學(xué)習(xí)器節(jié)點(diǎn)trainer的梯度gradient,并立即進(jìn)行優(yōu)化動(dòng)作。模型參數(shù)更新公式為:
其中,s代表等待s個(gè)學(xué)習(xí)器節(jié)點(diǎn)的更新,Wi代表第i個(gè)學(xué)習(xí)器節(jié)點(diǎn)訓(xùn)練后的參數(shù),ΔWj代表第j個(gè)學(xué)習(xí)器節(jié)點(diǎn)貢獻(xiàn)的梯度,λ(ΔWj)代表經(jīng)過(guò)梯度過(guò)期程度上下文值stalenessContext放縮過(guò)的學(xué)習(xí)率。
綜上所述,首先,對(duì)于每個(gè)學(xué)習(xí)器,需要它要保存前N-1個(gè)樣本,每個(gè)樣本為每次更新參數(shù)時(shí)的梯度過(guò)期程度值;然后,每個(gè)學(xué)習(xí)器的梯度過(guò)期程度上下文值為當(dāng)前的梯度過(guò)期程度值與前N-1個(gè)樣本值的均值,計(jì)算完畢后丟棄最老的樣本,保存最新的樣本;最后,在學(xué)習(xí)器向參數(shù)服務(wù)器發(fā)起更新請(qǐng)求時(shí),使用梯度過(guò)期程度上下文值控制該學(xué)習(xí)器的學(xué)習(xí)率。
本發(fā)明的基于滑動(dòng)窗口采樣的分布式機(jī)器學(xué)習(xí)訓(xùn)練方法及其系統(tǒng),通過(guò)使用滑動(dòng)采樣模塊訓(xùn)練過(guò)程中的快慢節(jié)點(diǎn)特征來(lái)感知訓(xùn)練過(guò)程的上下文,相比普通的梯度延遲感知的異步更新的訓(xùn)練方法,能更好地感知過(guò)期梯度,使用過(guò)期梯度上下文來(lái)控制學(xué)習(xí)器的學(xué)習(xí)率,提高大規(guī)模機(jī)器學(xué)習(xí)分布式訓(xùn)練的穩(wěn)定性與收斂效果,同時(shí)減小了分布式系統(tǒng)帶來(lái)的訓(xùn)練波動(dòng),提高了分布式訓(xùn)練的魯棒性。
上述實(shí)施例僅例示性說(shuō)明本發(fā)明的原理及其功效,而非用于限制本發(fā)明。任何熟悉此技術(shù)的人士皆可在不違背本發(fā)明的精神及范疇下,對(duì)上述實(shí)施例進(jìn)行修飾或改變。因此,舉凡所屬技術(shù)領(lǐng)域中具有通常知識(shí)者在未脫離本發(fā)明所揭示的精神與技術(shù)思想下所完成的一切等效修飾或改變,仍應(yīng)由本發(fā)明的權(quán)利要求所涵蓋。