4.1 數(shù)據(jù)預(yù)處理
1、向量化
神經(jīng)網(wǎng)絡(luò)的所有輸入和目標(biāo)都必須是浮點(diǎn)數(shù)張量,前面二分類和多分類的例子都是用one-shot編碼將數(shù)據(jù)處理成float32格式的張量。
2、值標(biāo)準(zhǔn)化
數(shù)據(jù)的各個(gè)特征取值范圍相差較大時(shí),例如有的在0-1之間,有的在100-200之間,將其輸入到神經(jīng)網(wǎng)絡(luò)中是不安全的,為了使網(wǎng)絡(luò)學(xué)習(xí)更加容易,輸入數(shù)據(jù)應(yīng)該具有以下特征:
取值較?。捍蟛糠种刀荚?~1范圍內(nèi)
同質(zhì)性:所有特征的取值都應(yīng)該在大致相同的范圍內(nèi)
對(duì)于Numpy數(shù)組的實(shí)現(xiàn):
x -= x.mean(axis = 0) #減去平均值
x /= x.std(axis = 0) #除以標(biāo)準(zhǔn)差
3、處理缺失值
數(shù)據(jù)中可能會(huì)存在缺失值,即某個(gè)樣本某個(gè)特征沒有數(shù)據(jù)的情況,如何處理?
一般來說,對(duì)于神經(jīng)網(wǎng)絡(luò),將缺失值設(shè)置為0是安全的,只要0不是一個(gè)有意義的值,網(wǎng)絡(luò)能從數(shù)據(jù)中學(xué)到0代表缺失數(shù)據(jù),并且會(huì)忽略這個(gè)值。
注意,如果在測(cè)試數(shù)據(jù)中可能有缺失值,而在訓(xùn)練集上沒有的情況下,我們應(yīng)該人為生成一些有缺失值的訓(xùn)練樣本(多次復(fù)制一些訓(xùn)練樣本,然后刪除測(cè)試數(shù)據(jù)中可能缺失的某些特征)。
4、優(yōu)化和泛化
優(yōu)化即學(xué)習(xí),使之在訓(xùn)練數(shù)據(jù)上達(dá)到最佳性能
泛化是指訓(xùn)練好的模型在前所未有數(shù)據(jù)上的性能好壞,機(jī)器學(xué)習(xí)的目的當(dāng)然是得到良好的泛化。
模型大(復(fù)雜),即模型中可學(xué)習(xí)的參數(shù)多,就擅長(zhǎng)擬合數(shù)據(jù),但是泛化能力差
模型小,即模型中沒有那么多參數(shù),又會(huì)導(dǎo)致欠擬合
因此要找到合適的模型大小,一般先選擇相對(duì)較少的層和參數(shù),然后逐漸增加層的大小或添加新層。
如何降低過擬合?

如圖所示我們可以看到模型在第二輪就開始過擬合,訓(xùn)練損失每輪都在降低,但驗(yàn)證損失在第二輪后就開始升高,訓(xùn)練精度每輪都在升高,但驗(yàn)證精度在第二輪之后也開始降低。
降低過擬合的方法:正則化
我們剛才說在更大的網(wǎng)絡(luò)上,即參數(shù)多的時(shí)候容易過擬合,那我們就想辦法削減權(quán)重(權(quán)重越大,其對(duì)應(yīng)的特征影響越大),甚至使其逼近于0,等于基本上消除了這些隱藏單元的許多影響,也就簡(jiǎn)化了神經(jīng)網(wǎng)絡(luò),使其不那么復(fù)雜。
參考下面幾個(gè)博客:介紹了梯度優(yōu)化算法、L1正則化、L2正則化
優(yōu)化算法
正則化(Regularization)
為什么正則化有利于預(yù)防過擬合呢?(Why regularization reduces overfitting?)
在Keras中添加權(quán)重正則化的方法:
model.add(layers.Dense(16,kernel_regularizer=regularizers.l2(0.001),activation='relu', input_shape=(1000,)))
"""l2(0.001)的意思是該層權(quán)重矩陣的每個(gè)系數(shù)都會(huì)使網(wǎng)絡(luò)總損失增加0.001 * weight_coefficient_value。注意,由于這個(gè)懲罰項(xiàng)只在訓(xùn)練時(shí)添加,所以這個(gè)網(wǎng)絡(luò)的訓(xùn)練損失會(huì)比測(cè)試損失大很多。"""

dropout正則化
對(duì)于個(gè)樣本,單次迭代訓(xùn)練時(shí),隨機(jī)刪除掉隱藏層一定數(shù)量的神經(jīng)元;然后,在刪除后的剩下的神經(jīng)元上正向和反向更新權(quán)重和常數(shù)項(xiàng);接著,下一次迭代中,再恢復(fù)之前刪除的神經(jīng)元,重新隨機(jī)刪除一定數(shù)量的神經(jīng)元,進(jìn)行正向和反向更新和。不斷重復(fù)上述過程,直至迭代訓(xùn)練完成
dropout正則化
為什么dropout正則化能夠降低過擬合
對(duì)于某個(gè)神經(jīng)元來說,某次訓(xùn)練時(shí),它的某些輸入在dropout的作用下被過濾了。而在下一次訓(xùn)練時(shí),又有不同的某些輸入被過濾。經(jīng)過多次訓(xùn)練后,某些輸入被過濾,某些輸入被保留。這樣,該神經(jīng)元就不會(huì)受某個(gè)輸入非常大的影響而被均勻化了。即對(duì)應(yīng)的權(quán)重w不會(huì)很大。從效果上來說與L2 regularization是類似的,都是對(duì)權(quán)重w進(jìn)行“懲罰”,減小了w的值。