深度神經(jīng)網(wǎng)絡(luò)的模型參數(shù)訓(xùn)練方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明涉及模式分類領(lǐng)域,尤其涉及一種深度神經(jīng)網(wǎng)絡(luò)的模型參數(shù)訓(xùn)練方法及系 統(tǒng)。
【背景技術(shù)】
[0002] 在基于數(shù)據(jù)統(tǒng)計(jì)的模式分類系統(tǒng)中,通常選擇合適的模型來(lái)描述所述模式的概率 分布,如用高斯混合模型來(lái)表述符合多高斯分布的模式的概率分布函數(shù)等。一般來(lái)說(shuō)模式 識(shí)別系統(tǒng)由模型參數(shù)訓(xùn)練和應(yīng)用分類兩個(gè)階段構(gòu)成,在模型參數(shù)訓(xùn)練階段利用收集的標(biāo)注 訓(xùn)練數(shù)據(jù)對(duì)所述模型進(jìn)行訓(xùn)練,得到模型參數(shù),如高斯混合模型的均值、方差等;隨后在分 類階段,基于訓(xùn)練得到的模型預(yù)測(cè)待分類數(shù)據(jù)的類別。
[0003] -般來(lái)說(shuō),模型拓?fù)浣Y(jié)構(gòu)越復(fù)雜,模型參數(shù)越多,則其對(duì)模式的模擬效果越精確。 作為模式分類領(lǐng)域中功能非常強(qiáng)大的分類器,神經(jīng)網(wǎng)絡(luò)一直是研究的熱點(diǎn)內(nèi)容之一。而近 年來(lái)隨著計(jì)算機(jī)計(jì)算能力的不斷提升,結(jié)構(gòu)更為復(fù)雜的深度神經(jīng)網(wǎng)絡(luò)技術(shù)得以發(fā)展,其中 以深度可信神經(jīng)網(wǎng)絡(luò)為代表的一些利用深度神經(jīng)網(wǎng)絡(luò)的技術(shù)方案在語(yǔ)音和圖像識(shí)別等領(lǐng) 域中取得了顯著的性能提升。
[0004] 復(fù)雜模型提高了模型的模擬精度,但相應(yīng)的其模型參數(shù)規(guī)模往往過(guò)于龐大,導(dǎo)致 模型訓(xùn)練過(guò)程非常緩慢,無(wú)法滿足系統(tǒng)產(chǎn)品應(yīng)用需求。如在語(yǔ)音識(shí)別應(yīng)用中訓(xùn)練數(shù)據(jù)通 常是幾千小時(shí)甚至更多的語(yǔ)音數(shù)據(jù),在這些數(shù)據(jù)基礎(chǔ)上訓(xùn)練一個(gè)正常規(guī)模的深度神經(jīng)網(wǎng) 絡(luò)往往需要長(zhǎng)達(dá)幾個(gè)月甚至一年的時(shí)間,這對(duì)于產(chǎn)品的更新來(lái)說(shuō)時(shí)間長(zhǎng)到完全無(wú)法接受。 盡管模式分類領(lǐng)域存在訓(xùn)練效率優(yōu)化算法,如多臺(tái)機(jī)器并行訓(xùn)練或者采用單GPlKGraphiC Processing Unit,圖形處理器)進(jìn)行訓(xùn)練等等,但是對(duì)于復(fù)雜模型如深度神經(jīng)網(wǎng)絡(luò)訓(xùn)練來(lái) 說(shuō),優(yōu)化算法的訓(xùn)練效率仍然無(wú)法滿足產(chǎn)品級(jí)應(yīng)用的需求。
【發(fā)明內(nèi)容】
[0005] 本發(fā)明實(shí)施例提供一種深度神經(jīng)網(wǎng)絡(luò)的模型參數(shù)訓(xùn)練方法及系統(tǒng),以提高深度神 經(jīng)網(wǎng)絡(luò)訓(xùn)練效率。
[0006] 本發(fā)明的技術(shù)方案為:
[0007] -種深度神經(jīng)網(wǎng)絡(luò)的模型參數(shù)訓(xùn)練方法,包括:
[0008] 主線程獲取初始化模型參數(shù),并將所述初始化模型參數(shù)備份至各子線程;
[0009] 主線程在接收到任意一個(gè)子線程根據(jù)自己的訓(xùn)練數(shù)據(jù)獨(dú)立運(yùn)算得到的累計(jì)統(tǒng)計(jì) 量后,根據(jù)所述累計(jì)統(tǒng)計(jì)量更新主線程保存的模型參數(shù),并將更新后的模型參數(shù)發(fā)送給所 述子線程,以使所述子線程更新自己保存的模型參數(shù)。
[0010] 優(yōu)選的是,所述子線程根據(jù)自己的訓(xùn)練數(shù)據(jù)獨(dú)立運(yùn)算包括:
[0011] 所述子線程獲取自己的訓(xùn)練數(shù)據(jù),根據(jù)所述訓(xùn)練數(shù)據(jù)和所述模型參數(shù)計(jì)算統(tǒng)計(jì)量 和累計(jì)統(tǒng)計(jì)量,并根據(jù)所述統(tǒng)計(jì)量更新自己保存的模型參數(shù),直到滿足系統(tǒng)更新條件; [0012] 在滿足系統(tǒng)更新條件后,所述子線程向主線程發(fā)送更新請(qǐng)求,所述更新請(qǐng)求中包 含所述子線程獨(dú)立運(yùn)算得到的累計(jì)統(tǒng)計(jì)量;
[0013] 所述子線程每隔設(shè)定時(shí)間判斷是否收到主線程發(fā)送的針對(duì)該子線程的更新響應(yīng), 直到收到所述更新響應(yīng)后,根據(jù)所述更新響應(yīng)中的模型參數(shù)更新自己保存的模型參數(shù)。
[0014] 優(yōu)選的是,所述方法還包括:
[0015] 所述子線程根據(jù)所述更新響應(yīng)中的模型參數(shù)更新自己保存的模型參數(shù)后,將自己 記錄的模型參數(shù)的更新次數(shù)清零。
[0016] 優(yōu)選的是,所述系統(tǒng)更新條件為所述子線程自己記錄的模型參數(shù)的更新次數(shù)超過(guò) 設(shè)定閾值,或者所有訓(xùn)練數(shù)據(jù)都已參與了訓(xùn)練。
[0017] 優(yōu)選的是,所述系統(tǒng)更新條件為所述子線程自己記錄的模型參數(shù)的更新次數(shù)超過(guò) 設(shè)定閾值,并且所述設(shè)定閾值次數(shù)的累計(jì)統(tǒng)計(jì)量的二范數(shù)的值大于設(shè)定門限,或者所有訓(xùn) 練數(shù)據(jù)都已參與了訓(xùn)練。
[0018] -種深度神經(jīng)網(wǎng)絡(luò)的模型參數(shù)訓(xùn)練系統(tǒng),包括主線程模塊和至少一個(gè)子線程模 塊,其中:
[0019] 所述主線程模塊包括:
[0020] 初始化單元,用于獲取初始化模型參數(shù),并將所述初始化模型參數(shù)備份至各子線 程模塊;
[0021] 系統(tǒng)模型存儲(chǔ)單元,用于保存所述初始化模型參數(shù)及更新后的模型參數(shù);
[0022] 系統(tǒng)交互單元,用于接收任意一個(gè)子線程模塊根據(jù)自己的訓(xùn)練數(shù)據(jù)獨(dú)立運(yùn)算得到 的累計(jì)統(tǒng)計(jì)量;
[0023] 系統(tǒng)模型更新單元,用于在所述系統(tǒng)交互單元接收到所述累計(jì)統(tǒng)計(jì)量后,根據(jù)所 述累計(jì)統(tǒng)計(jì)量更新所述系統(tǒng)模型存儲(chǔ)單元保存的模型參數(shù);
[0024] 所述系統(tǒng)交互單元,還用于將所述系統(tǒng)模型更新單元更新后的模型參數(shù)發(fā)送給所 述子線程模塊,以使所述子線程模塊更新自己保存的模型參數(shù)。
[0025] 優(yōu)選的是,所述子線程模塊包括:
[0026] 線程模型存儲(chǔ)單元,用于保存所述初始化模型參數(shù)及更新后的模型參數(shù);
[0027] 訓(xùn)練數(shù)據(jù)獲取單元,用于獲取自己的訓(xùn)練數(shù)據(jù);
[0028] 計(jì)算單元,用于根據(jù)所述訓(xùn)練數(shù)據(jù)和所述線程模型存儲(chǔ)單元保存的模型參數(shù)計(jì)算 統(tǒng)計(jì)量和累計(jì)統(tǒng)計(jì)量;
[0029] 線程模型更新單元,用于根據(jù)所述計(jì)算單元計(jì)算得到的統(tǒng)計(jì)量更新所述線程模型 存儲(chǔ)單元保存的模型參數(shù);
[0030] 判斷單元,用于在所述線程模型更新單元更新所述模型參數(shù)后,判斷是否滿足系 統(tǒng)更新條件;如果滿足,則通知線程交互單元向主線程模塊發(fā)送更新請(qǐng)求,所述更新請(qǐng)求中 包含所述子線程模塊獨(dú)立運(yùn)算得到的累計(jì)統(tǒng)計(jì)量;
[0031] 所述線程交互單元,還用于在向主線程模塊發(fā)送更新請(qǐng)求后每隔設(shè)定時(shí)間判斷是 否收到主線程模塊發(fā)送的針對(duì)所述子線程模塊的更新響應(yīng),直到收到所述更新響應(yīng)后,將 所述更新響應(yīng)中包含的模型參數(shù)傳送給所述線程模型更新單元;
[0032] 所述線程模型更新單元,還用于根據(jù)所述線程交互單元傳送的模型參數(shù)更新所述 線程模型存儲(chǔ)單元保存的模型參數(shù)。
[0033] 優(yōu)選的是,所述子線程模塊還包括:
[0034] 更新次數(shù)記錄單元,用于在所述線程模型更新單元根據(jù)所述更新響應(yīng)中的模型參 數(shù)更新自己保存的模型參數(shù)后,將自己記錄的模型參數(shù)的更新次數(shù)清零。
[0035] 優(yōu)選的是,所述系統(tǒng)更新條件為所述子線程自己記錄的模型參數(shù)的更新次數(shù)超過(guò) 設(shè)定閾值,或者所有訓(xùn)練數(shù)據(jù)都已參與了訓(xùn)練。
[0036] 優(yōu)選的是,所述系統(tǒng)更新條件為所述子線程自己記錄的模型參數(shù)的更新次數(shù)超過(guò) 設(shè)定閾值,并且所述設(shè)定閾值次數(shù)的累計(jì)統(tǒng)計(jì)量的二范數(shù)的值大于設(shè)定門限,或者所有訓(xùn) 練數(shù)據(jù)都已參與了訓(xùn)練。
[0037] 本發(fā)明的有益效果在于,應(yīng)用本發(fā)明實(shí)施例深度神經(jīng)網(wǎng)絡(luò)的模型參數(shù)訓(xùn)練方法及 系統(tǒng):
[0038] (1)任意一個(gè)子線程獨(dú)立地在更新若干次各自保存的模型參數(shù)后,與主線程進(jìn)行 模型參數(shù)的交互,提高了模型參數(shù)的訓(xùn)練效率;魯棒性強(qiáng),在多個(gè)子線程中的一個(gè)或者幾個(gè) 無(wú)法工作的情況下,應(yīng)用本發(fā)明實(shí)施例的訓(xùn)練方法及系統(tǒng)仍然能夠完成模型參數(shù)的訓(xùn)練;
[0039] (2)子線程分別獨(dú)立地與主線程進(jìn)行信息交互,提高了 GPU的利用率,使用同等數(shù) 目的GPU,應(yīng)用本發(fā)明實(shí)施例的訓(xùn)練方法及系統(tǒng)能夠有更高的復(fù)雜模型訓(xùn)練效率和GPU利 用率。
【附圖說(shuō)明】
[0040] 圖1示出了本發(fā)明實(shí)施例深度神經(jīng)網(wǎng)絡(luò)的模型參數(shù)訓(xùn)練方法的流程圖;
[0041] 圖2示出了本發(fā)明實(shí)施例中子線程根據(jù)自己的訓(xùn)練數(shù)據(jù)獨(dú)立運(yùn)算的流程圖;
[0042] 圖3示出了本發(fā)明實(shí)施例深度神經(jīng)網(wǎng)絡(luò)的模型參數(shù)訓(xùn)練系統(tǒng)中主線程模塊的結(jié) 構(gòu)示意圖;
[0043] 圖4示出了本發(fā)明實(shí)施例深度神經(jīng)網(wǎng)絡(luò)的模型參數(shù)訓(xùn)練系統(tǒng)中子線程模塊的結(jié) 構(gòu)示意圖。
【具體實(shí)施方式】
[0044] 下面詳細(xì)描述本發(fā)明的實(shí)施例,所述實(shí)施例的示例在附圖中示出,其中自始至終 相同或類似的標(biāo)號(hào)表示相同或類似的元件或具有相同或類似功能的元件。下面通過(guò)參考附 圖描述的實(shí)施例是示例性的,僅用于解釋本發(fā)明,而不能解釋為對(duì)本發(fā)明的限制。
[0045] 對(duì)于復(fù)雜模型來(lái)說(shuō),通常模型的概率分布無(wú)法用簡(jiǎn)單的分布如高斯分布來(lái)描述, 因此也就無(wú)法直接求出模型的參數(shù)。一般來(lái)說(shuō),復(fù)雜模型參數(shù)訓(xùn)練通常采用迭代更新優(yōu)化 的方法。首先選取模型參數(shù)的初始值,在每次迭代中首先獲取當(dāng)前模型參數(shù)的值,隨后計(jì)算 所述訓(xùn)練數(shù)據(jù)相應(yīng)于所述模型參數(shù)的數(shù)學(xué)統(tǒng)計(jì)量,最后根據(jù)所述統(tǒng)計(jì)量對(duì)所述模型參數(shù)進(jìn) 行更新,獲取更新的模型參數(shù)。其具體步驟包括:
[0046] 步驟al :獲取當(dāng)前的模型參數(shù)值;
[0047] 步驟a2 :讀取