本說明書涉及神經(jīng)網(wǎng)絡(luò)架構(gòu)和壓縮神經(jīng)網(wǎng)絡(luò)。
背景技術(shù):
神經(jīng)網(wǎng)絡(luò)是采用一個或多個非線性單元層來預(yù)測所接收的輸入的輸出的機器學(xué)習(xí)模型。一些神經(jīng)網(wǎng)絡(luò)除了輸出層之外還包括一個或多個隱藏層。每個隱藏層的輸出被用作所述網(wǎng)絡(luò)中下一層的輸入,即下一隱藏層或輸出層的輸入。網(wǎng)絡(luò)的每層根據(jù)相應(yīng)參數(shù)集的當(dāng)前值從所接收的輸入生成輸出。例如被設(shè)計用于時間序列問題或序列到序列學(xué)習(xí)的那些神經(jīng)網(wǎng)絡(luò)(遞歸(recurrent)神經(jīng)網(wǎng)絡(luò)(rnn))的一些神經(jīng)網(wǎng)絡(luò)包括許可其以隱藏狀態(tài)變量的形式的記憶持久存在于數(shù)據(jù)輸入之間的層內(nèi)的遞歸環(huán)路。rnn的變體,長的短期記憶(lstm)神經(jīng)網(wǎng)絡(luò)包括每層內(nèi)用于控制數(shù)據(jù)輸入之間的數(shù)據(jù)的持久性的多個門。例如被設(shè)計用于時間序列問題或序列到序列學(xué)習(xí)的那些神經(jīng)網(wǎng)絡(luò)的一些神經(jīng)網(wǎng)絡(luò)包括許可以隱藏狀態(tài)變量的形式的記憶持久在數(shù)據(jù)輸入之間的層內(nèi)的遞歸環(huán)路。
技術(shù)實現(xiàn)要素:
本說明書描述了涉及遞歸神經(jīng)網(wǎng)絡(luò)架構(gòu)的技術(shù)。一般來說,遞歸神經(jīng)網(wǎng)絡(luò)包括至少一個被壓縮的遞歸神經(jīng)網(wǎng)絡(luò)層。具體地,使用共享投影矩陣來聯(lián)合壓縮用于經(jīng)壓縮遞歸層的遞歸權(quán)重矩陣和層間權(quán)重矩陣。
對于要被配置為執(zhí)行特定操作或動作的一個或多個計算機的系統(tǒng)而言,意味著系統(tǒng)已經(jīng)在其上安裝了操作中的軟件、固件、硬件或它們的組合,其在操作中使得系統(tǒng)執(zhí)行操作或動作。對于要被配置為執(zhí)行特定操作或動作的一個或多個計算機程序而言,意味著一個或多個程序包括當(dāng)由數(shù)據(jù)處理裝置執(zhí)行時使得所述裝置執(zhí)行操作或動作的指令。
在本說明書中描述的主題可以在特定實施例中實現(xiàn),以便實現(xiàn)以下優(yōu)點中的一個或多個。通過在遞歸神經(jīng)網(wǎng)絡(luò)中壓縮一個或多個遞歸層的權(quán)重矩陣,遞歸神經(jīng)網(wǎng)絡(luò)被配置為能夠更有效地處理數(shù)據(jù)并且使用更少的數(shù)據(jù)存儲。特別地,可以有效地訓(xùn)練具有一個或多個經(jīng)壓縮遞歸層的遞歸神經(jīng)網(wǎng)絡(luò),以實現(xiàn)與全尺寸(例如未經(jīng)壓縮的遞歸神經(jīng)網(wǎng)絡(luò))相當(dāng)?shù)男阅?,同時使用較少的數(shù)據(jù)存儲并且能夠通過以下方式更快地處理輸入:經(jīng)壓縮遞歸層的經(jīng)壓縮權(quán)重矩陣具有比未經(jīng)壓縮遞歸神經(jīng)網(wǎng)絡(luò)中的對應(yīng)層的權(quán)重矩陣少的參數(shù)。實際上,因為經(jīng)壓縮的遞歸神經(jīng)網(wǎng)絡(luò)具有較小的計算足跡,所以經(jīng)壓縮的網(wǎng)絡(luò)可以能夠有效地被實現(xiàn)為即使當(dāng)未經(jīng)壓縮的網(wǎng)絡(luò)不能在移動設(shè)備上運行時,也能夠在具有有限存儲和處理能力的移動設(shè)備上實時處理輸入。
在下面的附圖和描述中闡述了本說明書的主題的一個或多個實施例的細(xì)節(jié)。根據(jù)說明書、附圖和權(quán)利要求,主題的其他特征、方面和優(yōu)點將變得顯而易見。
附圖說明
圖1示出了示例神經(jīng)網(wǎng)絡(luò)系統(tǒng)。
圖2是用于經(jīng)壓縮遞歸神經(jīng)網(wǎng)絡(luò)的示例過程的流程圖。
圖3是用于針對特定遞歸層壓縮層間權(quán)重矩陣和遞歸權(quán)重矩陣的示例過程的流程圖。
各個附圖中相同的附圖標(biāo)號和名稱指示相同的元素。
具體實施方式
圖1示出了示例神經(jīng)網(wǎng)絡(luò)系統(tǒng)100。神經(jīng)網(wǎng)絡(luò)系統(tǒng)100是被實現(xiàn)為其中實現(xiàn)了下面描述的系統(tǒng)、組件和技術(shù)的在一個或多個位置中的一個或多個計算機上的計算機程序的系統(tǒng)的示例。
神經(jīng)網(wǎng)絡(luò)系統(tǒng)100是機器學(xué)習(xí)系統(tǒng),其在多個時間步長中的每一個處接收相應(yīng)的神經(jīng)網(wǎng)絡(luò)輸入,并且在每個時間步長處生成相應(yīng)的神經(jīng)網(wǎng)絡(luò)輸出。也就是說,在多個時間步長中的每一個處,神經(jīng)網(wǎng)絡(luò)系統(tǒng)100接收神經(jīng)網(wǎng)絡(luò)輸入并處理神經(jīng)網(wǎng)絡(luò)輸入以生成神經(jīng)網(wǎng)絡(luò)輸出。例如,在給定的時間步長t處,神經(jīng)網(wǎng)絡(luò)系統(tǒng)100可以接收神經(jīng)網(wǎng)絡(luò)輸入102并且生成神經(jīng)網(wǎng)絡(luò)輸出142。
神經(jīng)網(wǎng)絡(luò)系統(tǒng)100可以將所生成的神經(jīng)網(wǎng)絡(luò)輸出存儲在輸出數(shù)據(jù)存儲庫中或者提供神經(jīng)網(wǎng)絡(luò)輸出以用于某些其他直接目的。
神經(jīng)網(wǎng)絡(luò)系統(tǒng)100可以被配置為接收任何種類的數(shù)字?jǐn)?shù)據(jù)輸入并且基于該輸入生成任何種類的分?jǐn)?shù)或分類輸出。
例如,如果到神經(jīng)網(wǎng)絡(luò)系統(tǒng)100的輸入是圖像或已經(jīng)從圖像提取的特征,則由神經(jīng)網(wǎng)絡(luò)系統(tǒng)100針對給定圖像所生成的輸出可以是針對對象類別集中的每一個類別的評分,其中每個分?jǐn)?shù)表示圖像包含屬于該類別的對象的圖像的估計似然率。
作為另一示例,如果到神經(jīng)網(wǎng)絡(luò)系統(tǒng)100的輸入是互聯(lián)網(wǎng)資源(例如,網(wǎng)頁)、文檔或文檔的部分或從互聯(lián)網(wǎng)資源、文檔或文檔的部分提取的特征,則由用于給定的互聯(lián)網(wǎng)資源,則神經(jīng)網(wǎng)絡(luò)系統(tǒng)100針對給定的互聯(lián)網(wǎng)資源、文檔或文檔的部分所生成的輸出可以是一組主題中的每一個的分?jǐn)?shù),其中每個分?jǐn)?shù)代表互聯(lián)網(wǎng)資源、文檔或文檔部分關(guān)于所述話題的估計似然率。
作為另一示例,如果到神經(jīng)網(wǎng)絡(luò)系統(tǒng)100的輸入是針對用戶的個性化推薦的特征,例如表征推薦的場境的特征、例如表征用戶所采取的先前動作的特征,則通過神經(jīng)網(wǎng)絡(luò)系統(tǒng)100所生成的輸出可以是內(nèi)容項集合中的每一個內(nèi)容項的分?jǐn)?shù),其中每個分?jǐn)?shù)表示用戶將有利地響應(yīng)于被推薦內(nèi)容項的估計似然率。在這些示例中的一些中,神經(jīng)網(wǎng)絡(luò)系統(tǒng)100是向用戶提供內(nèi)容推薦的強化學(xué)習(xí)系統(tǒng)的一部分。
作為另一示例,如果對神經(jīng)網(wǎng)絡(luò)系統(tǒng)100的輸入是一種語言的文本,則由神經(jīng)網(wǎng)絡(luò)系統(tǒng)100所生成的輸出可以是針對另一種語言的文本段集合中的每一個文本段的分?jǐn)?shù),其中每個分?jǐn)?shù)表示所述另一種語言的文本段是所述輸入文本到另一種語言的適當(dāng)翻譯的估計似然率。
作為另一個示例,如果到神經(jīng)網(wǎng)絡(luò)系統(tǒng)100的輸入是所說話語的特征,則由神經(jīng)網(wǎng)絡(luò)系統(tǒng)100所生成的輸出可以是文本段集合中的每一個文本段的分?jǐn)?shù),每個分?jǐn)?shù)表示該文本段是該話語的正確轉(zhuǎn)錄的估計似然率。
作為另一個示例,如果到神經(jīng)網(wǎng)絡(luò)系統(tǒng)100的輸入是圖像,則由神經(jīng)網(wǎng)絡(luò)系統(tǒng)100所生成的輸出可以是文本段集合中的每一個文本段的分?jǐn)?shù),每個分?jǐn)?shù)表示文本段是存在于輸入圖像中的文本的估計似然率。
特別地,神經(jīng)網(wǎng)絡(luò)系統(tǒng)100包括遞歸神經(jīng)網(wǎng)絡(luò)110,其又包括多個遞歸層,即至少一個經(jīng)壓縮遞歸層l120和遞歸層l+1130。遞歸神經(jīng)網(wǎng)絡(luò)110被配置為在每個時間步長處接收在該時間步長處的神經(jīng)網(wǎng)絡(luò)輸入并且處理神經(jīng)網(wǎng)絡(luò)輸入以在該時間步長處生成神經(jīng)網(wǎng)絡(luò)輸出。
除了經(jīng)壓縮遞歸層120和遞歸層130之外,遞歸神經(jīng)網(wǎng)絡(luò)110可以包括一個或多個其他組件,例如其他遞歸層,其他非遞歸神經(jīng)網(wǎng)絡(luò)層等等。
例如,遞歸神經(jīng)網(wǎng)絡(luò)100可以是包括多個遞歸層的深度遞歸網(wǎng)絡(luò),所述多個遞歸層包括一個在另一個之上的有序堆棧中排列的經(jīng)壓縮遞歸層120和遞歸層130,以及輸出層,所述輸出層在每個時間步長處接收來自堆棧中的最高遞歸層的層輸出和可選地堆棧中的其他遞歸層的層輸出,并且處理層輸出以在時間步長處生成神經(jīng)網(wǎng)絡(luò)輸出142。
經(jīng)壓縮遞歸層120被配置為在每個時間步長處接收當(dāng)前層輸入122并且處理當(dāng)前層輸入122、遞歸層120的當(dāng)前層狀態(tài)以及遞歸層120的當(dāng)前層輸出122,以生成新的層輸出126并更新當(dāng)前層狀態(tài)以生成新的層狀態(tài)124。
根據(jù)遞歸神經(jīng)網(wǎng)絡(luò)110的配置,當(dāng)前層輸入122可以是神經(jīng)網(wǎng)絡(luò)輸入102或由遞歸神經(jīng)網(wǎng)絡(luò)110的不同組件所生成的輸出。
另外,對于第一步驟之后的每個時間步長,當(dāng)前層狀態(tài)是在前一時間步長處所生成的新的層狀態(tài)。對于第一時間步長,當(dāng)前層狀態(tài)可以是預(yù)定的初始層狀態(tài)。
遞歸層130被配置為在每個時間步長處接收新的層輸出126并且處理新的層輸出126和遞歸層130的當(dāng)前層狀態(tài)以生成新的層輸出136并且以更新當(dāng)前層狀態(tài)以生成新的層狀態(tài)134。
根據(jù)遞歸神經(jīng)網(wǎng)絡(luò)110的配置,新的層輸出126可以作為輸入被提供給遞歸神經(jīng)網(wǎng)絡(luò)110中的另一個遞歸層,以作為對不同類型的神經(jīng)網(wǎng)絡(luò)組件的輸入,例如到輸出層或不同類型的神經(jīng)網(wǎng)絡(luò)層的輸入,或者可以被提供作為遞歸神經(jīng)網(wǎng)絡(luò)110的神經(jīng)網(wǎng)絡(luò)輸出142。
遞歸神經(jīng)網(wǎng)絡(luò)110中的每個遞歸層具有兩個對應(yīng)的權(quán)重矩陣:遞歸權(quán)重矩陣和層間權(quán)重矩陣。一般來說,在給定時間步長處的處理期間,給定遞歸層的遞歸權(quán)重矩陣被應(yīng)用于在前一時間步長處由遞歸層所生成的層輸出,而層間權(quán)重矩陣被應(yīng)用于由遞歸層在給定的時間步長處所生成的層輸出。因此,給定遞歸層的遞歸權(quán)重矩陣通常由給定遞歸層應(yīng)用,而層間權(quán)重矩陣通常由下一層應(yīng)用,該下一層在該時間步長處接收由給定遞歸層所生成的層輸出,例如,在堆棧中給定層之上的下一層的輸出。
在一些實施方式中,遞歸神經(jīng)網(wǎng)絡(luò)110是標(biāo)準(zhǔn)遞歸神經(jīng)網(wǎng)絡(luò),因此每個遞歸層的狀態(tài)也被用作遞歸層的層輸出。也就是說,對于給定時間步長的層的經(jīng)更新狀態(tài)也被用作給定時間步長的層的層輸出。因此,新的層輸出136與新的層狀態(tài)134相同,并且新的層輸出126與新的層狀態(tài)124相同。
在這些實施方式中,如果經(jīng)壓縮遞歸層120或遞歸層130都未被壓縮,則經(jīng)壓縮遞歸層120將被配置為在時間步長t處生成層輸出
其中
遞歸層130將被配置為在時間步長t處生成層輸出
其中
然而,因為至少經(jīng)壓縮遞歸層120已經(jīng)被壓縮,所以經(jīng)壓縮遞歸層120的層間和遞歸權(quán)重矩陣已經(jīng)被修改。
特別地,經(jīng)壓縮遞歸層是遞歸層,對于該遞歸層,遞歸和層間矩陣已經(jīng)各自被相應(yīng)的低秩近似所代替。也就是說,經(jīng)壓縮遞歸層的遞歸權(quán)重矩陣已經(jīng)被具有比所述遞歸權(quán)重矩陣低的秩的矩陣所替代,并且層間權(quán)重矩陣已經(jīng)被具有比所述層間權(quán)重矩陣低的秩的矩陣所替代。在這樣做時,遞歸和層間權(quán)重矩陣中的參數(shù)的數(shù)目已經(jīng)減少。
特別地,使用本說明書中描述的壓縮方案,已經(jīng)通過用相應(yīng)的第一和第二經(jīng)壓縮權(quán)重矩陣
因此,在壓縮之后,當(dāng)遞歸神經(jīng)網(wǎng)絡(luò)110是標(biāo)準(zhǔn)遞歸神經(jīng)網(wǎng)絡(luò)時,由經(jīng)壓縮遞歸層120所生成的層輸出滿足:
而由遞歸層130所生成的層輸出滿足:
在一些其它實施方式中,遞歸神經(jīng)網(wǎng)絡(luò)110中的遞歸層是長的短期存儲器(lstm)層,并且給定lstm層的狀態(tài)和lstm層的層輸出是不同的。為了生成層輸出,給定lstm層將多個門應(yīng)用于當(dāng)前層輸入和當(dāng)前層狀態(tài),以生成新的層輸出并更新當(dāng)前層狀態(tài)以生成新的層狀態(tài)。因此,作為生成層輸出的一部分,lstm通常將不同的權(quán)重矩陣乘以當(dāng)前層輸入和當(dāng)前層狀態(tài)兩者。在下文中描述了lstm層的操作:h.sak,a.senior,andf.beaufays,“l(fā)ongshort-termmemoryrecurrentneuralnetworkarchitecturesforlargescaleacousticmodeling,”inproc.ofinterspeech,2014,pp.338–342。
當(dāng)遞歸層是lstm層時,給定lstm層的遞歸權(quán)重矩陣可以被認(rèn)為是給定lstm層應(yīng)用于當(dāng)前層狀態(tài)的權(quán)重矩陣的垂直級聯(lián)。用于給定lstm層的層間權(quán)重矩陣可以被認(rèn)為是下一個lstm層應(yīng)用于由給定lstm層所生成的層輸出的權(quán)重矩陣的垂直級聯(lián)。
雖然在圖1的示例中只有經(jīng)壓縮遞歸層120被壓縮,但是在一些情況下,遞歸神經(jīng)網(wǎng)絡(luò)110中的多個遞歸層或甚至所有遞歸層都可以被壓縮,如下面參考圖3所述。
在一些實施方式中,共同壓縮遞歸權(quán)重矩陣和層間權(quán)重矩陣,使得投影矩陣在如本說明書中所描述的遞歸和層間權(quán)重矩陣之間共享可以允許權(quán)重矩陣的更有效的參數(shù)化。在一些實施方式中,在遞歸神經(jīng)網(wǎng)絡(luò)110是語音識別模型的情況下,上述技術(shù)可用于將遞歸神經(jīng)網(wǎng)絡(luò)110壓縮至少68%,同時實現(xiàn)在未經(jīng)壓縮模型的5%內(nèi)的字錯誤率。
圖2是用于壓縮遞歸神經(jīng)網(wǎng)絡(luò)的示例過程200的流程圖。為了方便,過程200將被描述為由位于一個或多個位置的一個或多個計算機的系統(tǒng)來執(zhí)行。例如,根據(jù)本說明書適當(dāng)?shù)鼐幊痰纳窠?jīng)網(wǎng)絡(luò)系統(tǒng)(例如圖1的神經(jīng)網(wǎng)絡(luò)系統(tǒng)100)可以執(zhí)行過程200。
系統(tǒng)在訓(xùn)練數(shù)據(jù)上訓(xùn)練未經(jīng)壓縮的遞歸神經(jīng)網(wǎng)絡(luò)(步驟202),以確定未經(jīng)壓縮的遞歸神經(jīng)網(wǎng)絡(luò)的層的權(quán)重矩陣中的參數(shù)的經(jīng)訓(xùn)練值。例如,在網(wǎng)絡(luò)中的任何遞歸層被壓縮之前,系統(tǒng)可以訓(xùn)練圖1的遞歸神經(jīng)網(wǎng)絡(luò)110。該系統(tǒng)可以使用常規(guī)的遞歸神經(jīng)網(wǎng)絡(luò)訓(xùn)練技術(shù)(例如利用隨時間的反向傳播的隨機梯度下降)訓(xùn)練未經(jīng)壓縮的遞歸神經(jīng)網(wǎng)絡(luò)。
系統(tǒng)壓縮遞歸神經(jīng)網(wǎng)絡(luò)中的一個或多個遞歸層(步驟204)。具體地,針對要被壓縮的每個遞歸層,系統(tǒng)生成第一經(jīng)壓縮權(quán)重矩陣
系統(tǒng)利用經(jīng)壓縮的權(quán)重矩陣重新配置遞歸神經(jīng)網(wǎng)絡(luò)(步驟206)。也就是說,針對被壓縮的每個遞歸層,系統(tǒng)用第一經(jīng)壓縮權(quán)重矩陣和投影矩陣的乘積來替換該層的遞歸權(quán)重矩陣,并且用第二經(jīng)壓縮權(quán)重矩陣和投影矩陣的乘積來替換該層的層間權(quán)重矩陣。因為第一經(jīng)壓縮權(quán)重矩陣和投影矩陣的乘積具有比遞歸權(quán)重矩陣更低的秩并且第二經(jīng)壓縮權(quán)重矩陣和投影矩陣的乘積具有比層的層間權(quán)重矩陣更低的秩,所以矩陣包括比未經(jīng)壓縮神經(jīng)網(wǎng)絡(luò)中的它們的對應(yīng)矩陣更少的參數(shù)。
可選地,在重新配置遞歸神經(jīng)網(wǎng)絡(luò)之后,系統(tǒng)可以通過在附加訓(xùn)練數(shù)據(jù)上訓(xùn)練經(jīng)重新配置的神經(jīng)網(wǎng)絡(luò)來微調(diào)經(jīng)壓縮神經(jīng)網(wǎng)絡(luò)的性能,以進(jìn)一步調(diào)整參數(shù)的經(jīng)訓(xùn)練值,同時維持投影矩陣和經(jīng)壓縮權(quán)重矩陣的秩,即,約束投影矩陣和經(jīng)壓縮權(quán)重矩陣的秩不增加。
系統(tǒng)存儲經(jīng)重新配置的神經(jīng)網(wǎng)絡(luò)的權(quán)重矩陣,用于實例化經(jīng)訓(xùn)練的神經(jīng)網(wǎng)絡(luò),即,可以有效地用于處理神經(jīng)網(wǎng)絡(luò)輸入的經(jīng)訓(xùn)練的遞歸神經(jīng)網(wǎng)絡(luò)(步驟208)。在一些情況下,除了存儲權(quán)重矩陣或者代替存儲權(quán)重矩陣,系統(tǒng)可以將權(quán)重矩陣和定義神經(jīng)網(wǎng)絡(luò)的配置的其他數(shù)據(jù)傳送到另一個系統(tǒng),以用于實現(xiàn)經(jīng)訓(xùn)練的遞歸神經(jīng)網(wǎng)絡(luò)。例如,系統(tǒng)可以將配置數(shù)據(jù)傳送到移動設(shè)備,以允許在移動設(shè)備上實現(xiàn)經(jīng)壓縮的遞歸神經(jīng)網(wǎng)絡(luò)。
圖3是用于針對特定遞歸層壓縮層間權(quán)重矩陣和遞歸權(quán)重矩陣的示例過程300的流程圖。為了方便,過程300將被描述為由位于一個或多個位置的一個或多個計算機的系統(tǒng)來執(zhí)行。例如,根據(jù)本說明書適當(dāng)?shù)鼐幊痰纳窠?jīng)網(wǎng)絡(luò)系統(tǒng)(例如,圖1的神經(jīng)網(wǎng)絡(luò)系統(tǒng)100)可以執(zhí)行過程300。
系統(tǒng)確定用于特定遞歸層的遞歸權(quán)重矩陣wh的奇異值分解(svd)(步驟302)。遞歸權(quán)重矩陣的奇異值分解是將矩陣wh分解成第一酉(unitary)矩陣u、矩形對角矩陣σ和第二酉矩陣v。特別地,svd滿足:
wh=u∑vt。
系統(tǒng)可以使用已知的svd分解技術(shù)來確定遞歸權(quán)重矩陣的svd。例如,系統(tǒng)可以首先將遞歸權(quán)重矩陣減少為雙對角矩陣,然后使用迭代方法計算雙對角矩陣的svd,例如,qr算法的變體。
系統(tǒng)截斷svd以生成第一經(jīng)壓縮權(quán)重矩陣
通常,l是小于權(quán)重矩陣的維度并且被配置為控制應(yīng)用到遞歸層的壓縮程度的值。也就是說,l的值越小,所應(yīng)用的壓縮程度越高。
在一些實施方式中,l是預(yù)定值。
在一些其它實施方式中,系統(tǒng)確定l,使得被截斷的svd在svd操作中保留至多可釋方差的預(yù)定閾值分?jǐn)?shù)τ。特別地,系統(tǒng)可以將l設(shè)置為這樣的值,其中(i)矩形對角矩陣σ中的頂部(即,最高)l個值的平方的總和與(ii)矩形對角矩陣σ中的所有值的平方的總和的比率在仍然小于的t的同時最大。
在這些實施方式中,如果系統(tǒng)正在壓縮遞歸神經(jīng)網(wǎng)絡(luò)內(nèi)的多個遞歸層,則l的值在多個層之間可能不同,即,因為不同的l將滿足用于不同矩陣的svd的上述標(biāo)準(zhǔn)。
一旦系統(tǒng)已截斷svd以生成被截斷的第一酉矩陣
系統(tǒng)通過第一經(jīng)壓縮權(quán)重矩陣
其中||x||f表示矩陣x的frobenius范數(shù)。
本說明書中描述的主題和功能操作的實施例可以被實現(xiàn)在數(shù)字電子電路中、在有形體現(xiàn)的計算機軟件或固件中、在計算機硬件(包括本說明書中公開的結(jié)構(gòu)及其結(jié)構(gòu)等同物)中或它們中的一種或多種的組合中。在本說明書中描述的主題的實施例可以被實現(xiàn)為一個或多個計算機程序,即,編碼在有形非暫時性程序載體上的計算機程序指令的一個或多個模塊,用于由數(shù)據(jù)處理裝置執(zhí)行或控制數(shù)據(jù)處理裝置的操作。替選地或另外地,程序指令可以被編碼在人工生成的傳播信號(例如,機器所生成的電、光或電磁信號)上,其被生成以對信息進(jìn)行編碼以傳輸?shù)胶线m的接收機裝置,以便由數(shù)據(jù)處理裝置執(zhí)行。計算機存儲介質(zhì)可以是機器可讀存儲設(shè)備、機器可讀存儲基板、隨機或串行存取存儲器設(shè)備或它們中的一個或多個的組合。
術(shù)語“數(shù)據(jù)處理裝置”是指數(shù)據(jù)處理硬件,并且包括用于處理數(shù)據(jù)的所有種類的裝置、設(shè)備和機器,例如包括通過可編程處理器、計算機或多個處理器或計算機的形式。該裝置還可以是或進(jìn)一步包括專用邏輯電路,例如fpga(現(xiàn)場可編程門陣列)或asic(專用集成電路)。除硬件之外,裝置可以可選地包括創(chuàng)建用于計算機程序的執(zhí)行環(huán)境的代碼,例如構(gòu)成處理器固件、協(xié)議棧、數(shù)據(jù)庫管理系統(tǒng)、操作系統(tǒng)或它們中的一個或多個的組合的代碼。
計算機程序(其還可被稱為或描述為程序、軟件、軟件應(yīng)用、模塊、軟件模塊、腳本或代碼)可以以任何形式的編程語言編寫,包括編譯或解釋性語言、或聲明性或過程性語言,并且其可以以任何形式部署,包括作為獨立程序或作為適于在計算環(huán)境中使用的模塊、組件、子例程或其它單元。計算機程序可以但不需要與文件系統(tǒng)中的文件相對應(yīng)。程序可以被存儲在保存其他程序或數(shù)據(jù)(例如存儲在標(biāo)記語言文檔中的一個或多個腳本)的文件的一部分中、在專用于所述程序的單個文件中或者在多個協(xié)同文件(例如,存儲一個或多個模塊、子程序或代碼部分的文件)中。計算機程序可以被部署為在一個計算機上或在位于一個地點或跨多個地點分布并通過通信網(wǎng)絡(luò)互連的多個計算機上執(zhí)行。
本說明書中描述的過程和邏輯流程可以由執(zhí)行一個或多個計算機程序的一個或多個可編程計算機執(zhí)行,以通過對輸入數(shù)據(jù)進(jìn)行操作并生成輸出來執(zhí)行功能。過程和邏輯流程也可以由專用邏輯電路(例如,fpga(現(xiàn)場可編程門陣列)或asic(專用集成電路))來執(zhí)行,并且裝置也可以被實現(xiàn)為該專用邏輯電路。
適合于執(zhí)行計算機程序的計算機例如包括基于通用或?qū)S梦⑻幚砥骰騼烧呋蛉魏纹渌愋偷闹醒胩幚韱卧?。通常,中央處理單元將從只讀存儲器或隨機存取存儲器或兩者接收指令和數(shù)據(jù)。計算機的基本元件是用于執(zhí)行或?qū)嵤┲噶畹闹醒胩幚韱卧陀糜诖鎯χ噶詈蛿?shù)據(jù)的一個或多個存儲器設(shè)備。通常,計算機還將包括用于存儲數(shù)據(jù)的一個或多個大容量存儲設(shè)備,例如磁盤、磁光盤或光盤,或者可操作地耦合以從其接收數(shù)據(jù)或向其傳送數(shù)據(jù)。然而,計算機不需要具有這樣的設(shè)備。此外,計算機可以被嵌入在另一設(shè)備中,例如移動電話、個人數(shù)字助理(pda)、移動音頻或視頻播放器、游戲機、全球定位系統(tǒng)(gps)接收器或便攜式存儲設(shè)備,例如,通用串行總線(usb)閃存驅(qū)動器,此處僅舉幾個例子。
適合于存儲計算機程序指令和數(shù)據(jù)的計算機可讀介質(zhì)包括所有形式的非易失性存儲器、介質(zhì)和存儲器設(shè)備,例如包括:半導(dǎo)體存儲器設(shè)備,例如eprom、eeprom和閃存設(shè)備;磁盤,例如內(nèi)部硬盤或可移動盤;磁光盤;和cdrom和dvd-rom盤。處理器和存儲器可以由專用邏輯電路補充或并入專用邏輯電路中。
為了提供與用戶的交互,本說明書中描述的主題的實施例可以在具有用于向用戶顯示信息的顯示設(shè)備(例如,crt(陰極射線管)或lcd(液晶顯示器)監(jiān)視器)的計算機上實現(xiàn);以及用戶可以通過其向計算機提供輸入的鍵盤和指針設(shè)備,例如鼠標(biāo)或軌跡球。其他類型的設(shè)備也可以用于提供與用戶的交互;例如,提供給用戶的反饋可以是任何形式的感覺反饋,例如視覺反饋、聽覺反饋或觸覺反饋;并且可以以包括聲音、語音或觸覺輸入的任何形式接收來自用戶的輸入。另外,計算機可以通過向用戶所使用的設(shè)備發(fā)送文檔和從用戶所使用的設(shè)備接收文檔來與用戶交互;例如,通過響應(yīng)于從web瀏覽器所接收的請求,將網(wǎng)頁發(fā)送到在用戶的客戶端設(shè)備上的web瀏覽器。
在本說明書中描述的主題的實施例可以被實現(xiàn)在計算系統(tǒng)中,所述計算系統(tǒng)包括后端組件(例如,作為數(shù)據(jù)服務(wù)器)或者包括中間件組件(例如,應(yīng)用服務(wù)器)或者包括前端組件(例如,具有圖形用戶界面或web瀏覽器的客戶端計算機,用戶可以通過該瀏覽器與本說明書中描述的主題的實施方式交互)或者一個或多個這樣的后端、中間件或前端組件的任何組合。系統(tǒng)的組件可以通過任何形式或介質(zhì)的數(shù)字?jǐn)?shù)據(jù)通信(例如,通信網(wǎng)絡(luò))互連。通信網(wǎng)絡(luò)的示例包括局域網(wǎng)(“l(fā)an”)和廣域網(wǎng)(“wan”),例如互聯(lián)網(wǎng)。
計算系統(tǒng)可以包括客戶端和服務(wù)器??蛻舳撕头?wù)器通常彼此遠(yuǎn)離并且通常通過通信網(wǎng)絡(luò)交互??蛻舳撕头?wù)器的關(guān)系借助于在相應(yīng)計算機上運行并且彼此具有客戶端-服務(wù)器關(guān)系的計算機程序而產(chǎn)生。
盡管本說明書包含許多具體實施細(xì)節(jié),但是這些不應(yīng)被解釋為對任何發(fā)明或要求保護的范圍的限制,而是作為對特定發(fā)明的特定實施例特定的特征的描述。在本說明書中在單獨實施例的場境中描述的某些特征也可以在單個實施例的組合中實現(xiàn)。相反,在單個實施例的場境中描述的各種特征也可以在多個實施例中單獨地或以任何合適的子組合來實現(xiàn)。此外,雖然特征可以在上面描述為在某些組合中起作用并且甚至最初如此要求保護,但是來自所要求保護的組合的一個或多個特征在一些情況下可以從組合中去除,并且所要求保護的組合可以針對子組合或子組合的變體。
類似地,雖然在附圖中以特定順序描繪了操作,但是這不應(yīng)被理解為要求這些操作以所示的特定順序或以依序執(zhí)行,或者所有所示的操作被執(zhí)行以實現(xiàn)期望的結(jié)果。在某些情況下,多任務(wù)和并行處理可能是有利的。此外,上述實施例中的各種系統(tǒng)模塊和組件的分離不應(yīng)被理解為在所有實施例中都需要這樣的分離,并且應(yīng)當(dāng)理解,所描述的程序組件和系統(tǒng)通??梢砸黄鸨患稍趩蝹€軟件產(chǎn)品中,或者被封裝成多個軟件產(chǎn)品。
已經(jīng)描述了本主題的具體實施例。其他實施例在所附權(quán)利要求的范圍內(nèi)。例如,權(quán)利要求中記載的動作可以以不同的順序執(zhí)行并且仍然實現(xiàn)期望的結(jié)果。作為一個示例,附圖中描繪的過程不一定需要所示的特定順序或按照序列順序,以實現(xiàn)期望的結(jié)果。在某些實施方式中,多任務(wù)和并行處理可能是有利的。