MLP神經(jīng)網(wǎng)絡(luò) 卷積神經(jīng)網(wǎng)絡(luò)中的batch到底是什么?
卷積神經(jīng)網(wǎng)絡(luò)中的batch到底是什么?通常,神經(jīng)網(wǎng)絡(luò)需要訓(xùn)練大量的樣本,才能使結(jié)果收斂并符合實際情況。但是,當(dāng)訓(xùn)練樣本的數(shù)量非常大時,不可能將所有數(shù)據(jù)一起讀入內(nèi)存然后進(jìn)行訓(xùn)練,這需要將數(shù)據(jù)分成多個組進(jìn)
卷積神經(jīng)網(wǎng)絡(luò)中的batch到底是什么?
通常,神經(jīng)網(wǎng)絡(luò)需要訓(xùn)練大量的樣本,才能使結(jié)果收斂并符合實際情況。
但是,當(dāng)訓(xùn)練樣本的數(shù)量非常大時,不可能將所有數(shù)據(jù)一起讀入內(nèi)存然后進(jìn)行訓(xùn)練,這需要將數(shù)據(jù)分成多個組進(jìn)行訓(xùn)練。
神經(jīng)網(wǎng)絡(luò)訓(xùn)練的一組數(shù)據(jù)稱為批,批的大小是指訓(xùn)練數(shù)據(jù)的個數(shù)。
假設(shè)訓(xùn)練數(shù)據(jù)滿足正態(tài)分布,批量越大,這組數(shù)據(jù)越容易與訓(xùn)練數(shù)據(jù)擬合,即特征損失越小,收斂效果和效率越好。
但是如果大小太大,內(nèi)存將不足。批量大小應(yīng)根據(jù)需要選擇,以達(dá)到時間、空間和效果的平衡。
此外,批量歸一化還可以大大提高訓(xùn)練效果和收斂速度。
Batch Normalization中,如何更快地訓(xùn)練深度神經(jīng)網(wǎng)絡(luò)?
首先,ICs(internal covariate shift)在統(tǒng)計機(jī)器學(xué)習(xí)中有一個經(jīng)典的假設(shè),它要求源空間和目標(biāo)空間的數(shù)據(jù)分布是一致的。對于深層神經(jīng)網(wǎng)絡(luò),深層神經(jīng)網(wǎng)絡(luò)涉及到多個層次的疊加,每一層的參數(shù)更新都會導(dǎo)致上層輸入數(shù)據(jù)分布的變化。通過層層疊加,上層輸入分布的變化會非常劇烈,這使得高層需要不斷地適應(yīng)底層的參數(shù)更新,使得訓(xùn)練收斂速度變慢。為了很好地訓(xùn)練模型,我們需要非常小心地設(shè)置學(xué)習(xí)率,初始化權(quán)重,并盡可能小心地更新參數(shù)。
通過對每層數(shù)據(jù)進(jìn)行批量歸一化,降低了對初始權(quán)值和學(xué)習(xí)速度的依賴,加快了神經(jīng)網(wǎng)絡(luò)的收斂速度。
當(dāng)神經(jīng)網(wǎng)絡(luò)訓(xùn)練的收斂速度很慢,或者梯度離散無法訓(xùn)練時,可以嘗試用BN來解決。
神經(jīng)網(wǎng)絡(luò)訓(xùn)練中的batch、epoch、iteration有何不同?
Batchsize是輸入模型中的樣本數(shù)
iteration是迭代次數(shù)。
Epoch是遍歷整個訓(xùn)練集的次數(shù)
假設(shè)訓(xùn)練集樣本數(shù)為n,則在一次迭代中輸入batchsize樣本,n/batchsize是一次迭代中的一個Epoch。
為什么A卡不像N卡那樣,開發(fā)類似CUDA的API,從而可以做科學(xué)計算?
雖然NVIDIA顯卡有CUDA,amd顯卡也有OpenCL。事實上,CUDA和OpenCL都是為了滿足通用并行計算的需求而設(shè)計的。然而,CUDA是一個成熟的開發(fā)平臺,它為NVIDIA提供了一個完整的工具包,相對來說更加專業(yè)和封閉。OpenCL是一個開放的標(biāo)準(zhǔn),被許多軟硬件制造商廣泛使用。
就科學(xué)計算而言,CUDA對開發(fā)人員更友好,應(yīng)用更廣泛。這與CUDA相對完整的開發(fā)工具包有很大關(guān)系。經(jīng)過多年的開發(fā),CUDA擁有比OpenCL更好的生態(tài)系統(tǒng),它更易于使用,對程序員也更友好。雖然OpenCL是開放的,但是它的API設(shè)計很怪異,缺乏一致性,并且它的函數(shù)不是正交的,這并不簡單,它還遠(yuǎn)遠(yuǎn)不夠成熟。
Amd顯卡目前不支持CUDA,但只能支持OpenCL。在一些科學(xué)計算程序中,AMD顯卡的計算效率明顯低于N顯卡。這就是CUDA的優(yōu)勢。amd之所以沒有像CUDA那樣開發(fā)API,是因為amd沒有足夠的實力來制定這個標(biāo)準(zhǔn)。英偉達(dá)早在2006年就開始在gtx8800顯卡上推出CUDA,經(jīng)過這么多年的發(fā)展,英偉達(dá)已經(jīng)投入了巨大的人力物力取得了今天的成績,包括一年一度的GTC大會,在CUDA和相關(guān)技術(shù)推廣方面做了大量的工作,而amd顯然缺乏這樣的工作。
事實上,作為同時開發(fā)CPU和GPU的半導(dǎo)體制造商,AMD要做到這一點并不容易。在資金不能大幅度增長的情況下,顯卡業(yè)務(wù)只要做好自己的工作就非常好。至于新的API標(biāo)準(zhǔn),顯然很難做到。我們只能期待OpenCL有一個更好的未來。
batch no什么意思?
批次是指批次。也就是說,卷積神經(jīng)網(wǎng)絡(luò)對數(shù)據(jù)進(jìn)行分批處理。批量大小是每批樣品的數(shù)量。