0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

過(guò)擬合的概念和用幾種用于解決過(guò)擬合問(wèn)題的正則化方法

zhKF_jqr_AI ? 來(lái)源:未知 ? 作者:李倩 ? 2018-04-27 15:23 ? 次閱讀

在日常工作、學(xué)習(xí)中,數(shù)據(jù)科學(xué)家最常遇到的問(wèn)題之一就是過(guò)擬合。你是否曾有過(guò)這樣一個(gè)模型,它在訓(xùn)練集上表現(xiàn)優(yōu)秀,在測(cè)試集上卻一塌糊涂。你是否也曾有過(guò)這樣的經(jīng)歷,當(dāng)你參加建模競(jìng)賽時(shí),從跑分上看你的模型明明應(yīng)該高居榜首,但在賽方公布的成績(jī)榜上,它卻名落孫山,遠(yuǎn)在幾百名之后。如果你有過(guò)類(lèi)似經(jīng)歷,那本文就是專(zhuān)為寫(xiě)的——它會(huì)告訴你如何避免過(guò)擬合來(lái)提高模型性能。

在這篇文章中,我們將詳細(xì)講述過(guò)擬合的概念和用幾種用于解決過(guò)擬合問(wèn)題的正則化方法,并輔以Python案例講解,以進(jìn)一步鞏固這些知識(shí)。注意,本文假設(shè)讀者具備一定的神經(jīng)網(wǎng)絡(luò)、Keras實(shí)現(xiàn)的經(jīng)驗(yàn)。

什么是正則化

在深入探討這個(gè)話(huà)題之前,請(qǐng)看一下這張圖片:

每次談及過(guò)擬合,這張圖片就會(huì)時(shí)不時(shí)地被拉出來(lái)“鞭尸”。如上圖所示,剛開(kāi)始的時(shí)候,模型還不能很好地?cái)M合所有數(shù)據(jù)點(diǎn),即無(wú)法反映數(shù)據(jù)分布,這時(shí)它是欠擬合的。而隨著訓(xùn)練次數(shù)增多,它慢慢找出了數(shù)據(jù)的模式,能在盡可能多地?cái)M合數(shù)據(jù)點(diǎn)的同時(shí)反映數(shù)據(jù)趨勢(shì),這時(shí)它是一個(gè)性能較好的模型。在這基礎(chǔ)上,如果我們繼續(xù)訓(xùn)練,那模型就會(huì)進(jìn)一步挖掘訓(xùn)練數(shù)據(jù)中的細(xì)節(jié)和噪聲,為了擬合所有數(shù)據(jù)點(diǎn)“不擇手段”,這時(shí)它就過(guò)擬合了。

換句話(huà)說(shuō),從左往右看,模型的復(fù)雜度逐漸提高,在訓(xùn)練集上的預(yù)測(cè)錯(cuò)誤逐漸減少,但它在測(cè)試集上的錯(cuò)誤率卻呈現(xiàn)一條下凸曲線(xiàn)。

如果你之前構(gòu)建過(guò)神經(jīng)網(wǎng)絡(luò),想必你已經(jīng)得到了這個(gè)教訓(xùn):網(wǎng)絡(luò)有多復(fù)雜,過(guò)擬合就有多容易。為了使模型在擬合數(shù)據(jù)的同時(shí)更具推廣性,我們可以用正則化對(duì)學(xué)習(xí)算法做一些細(xì)微修改,從而提高模型的整體性能。

正則化和過(guò)擬合

過(guò)擬合和神經(jīng)網(wǎng)絡(luò)的設(shè)計(jì)密切相關(guān),因此我們先來(lái)看一個(gè)過(guò)擬合的神經(jīng)網(wǎng)絡(luò):

如果你之前閱讀過(guò)我們的從零學(xué)習(xí):從Python和R理解和編碼神經(jīng)網(wǎng)絡(luò)(完整版),或?qū)ι窠?jīng)網(wǎng)絡(luò)正則化概念有初步了解,你應(yīng)該知道上圖中帶箭頭的線(xiàn)實(shí)際上都帶有權(quán)重,而神經(jīng)元是儲(chǔ)存輸入輸出的地方。為了公平起見(jiàn),也就是為了防止網(wǎng)絡(luò)在優(yōu)化方向上過(guò)于放飛自我,這里我們還需要加入一個(gè)先驗(yàn)——正則化懲罰項(xiàng),用來(lái)懲罰神經(jīng)元的加權(quán)矩陣。

如果我們?cè)O(shè)的正則化系數(shù)很大,導(dǎo)致一些加權(quán)矩陣的值幾乎為零——那最后我們得到的是一個(gè)更簡(jiǎn)單的線(xiàn)性網(wǎng)絡(luò),它很可能是欠擬合的。

因此這個(gè)系數(shù)并不是越大越好。我們需要優(yōu)化這個(gè)正則化系數(shù)的值,以便獲得一個(gè)良好擬合的模型,如下圖所示。

深度學(xué)習(xí)中的正則化

L2和L1正則化

L1和L2是最常見(jiàn)的正則化方法,它們的做法是在代價(jià)函數(shù)后面再加上一個(gè)正則化項(xiàng)。

代價(jià)函數(shù) = 損失(如二元交叉熵) + 正則化項(xiàng)

由于添加了這個(gè)正則化項(xiàng),各權(quán)值被減小了,換句話(huà)說(shuō),就是神經(jīng)網(wǎng)絡(luò)的復(fù)雜度降低了,結(jié)合“網(wǎng)絡(luò)有多復(fù)雜,過(guò)擬合就有多容易”的思想,從理論上來(lái)說(shuō),這樣做等于直接防止過(guò)擬合(奧卡姆剃刀法則)。

當(dāng)然,這個(gè)正則化項(xiàng)在L1和L2里是不一樣的。

對(duì)于L2,它的代價(jià)函數(shù)可表示為:

這里λ就是正則化系數(shù),它是一個(gè)超參數(shù),可以被優(yōu)化以獲得更好的結(jié)果。對(duì)上式求導(dǎo)后,權(quán)重w前的系數(shù)為1?ηλ/m,因?yàn)棣?、λ、m都是正數(shù),1?ηλ/m小于1,w的趨勢(shì)是減小,所以L(fǎng)2正則化也被稱(chēng)為權(quán)重衰減。

而對(duì)于L1,它的代價(jià)函數(shù)可表示為:

和L2不同,這里我們懲罰的是權(quán)重w的絕對(duì)值。對(duì)上式求導(dǎo)后,我們得到的等式里包含一項(xiàng)-sgn(w),這意味著當(dāng)w是正數(shù)時(shí),w減小趨向于0;當(dāng)w是負(fù)數(shù)時(shí),w增大趨向于0。所以L(fǎng)1的思路就是把權(quán)重往0靠,從而降低網(wǎng)絡(luò)復(fù)雜度。

因此當(dāng)我們想要壓縮模型時(shí),L1的效果會(huì)很好,但如果只是簡(jiǎn)單防止過(guò)擬合,一般情況下還是會(huì)用L2。在Keras中,我們可以直接調(diào)用regularizers在任意層做正則化。

例:在全連接層使用L2正則化的代碼:

from keras import regularizers

model.add(Dense(64, input_dim=64,

kernel_regularizer=regularizers.l2(0.01)

注:這里的0.01是正則化系數(shù)λ的值,我們可以通過(guò)網(wǎng)格搜索對(duì)它做進(jìn)一步優(yōu)化。

Dropout

Dropout稱(chēng)得上是正則化方法中最有趣的一種,它的效果也很好,所以是深度學(xué)習(xí)領(lǐng)域常用的方法之一。為了更好地解釋它,我們先假設(shè)我們的神經(jīng)網(wǎng)絡(luò)長(zhǎng)這樣:

那么Dropout到底drop了什么?我們來(lái)看下面這幅圖:在每次迭代中,它會(huì)隨機(jī)選擇一些神經(jīng)元,并把它們“滿(mǎn)門(mén)抄斬”——把神經(jīng)元連同相應(yīng)的輸入輸出一并“刪除”。

比起L1和L2對(duì)代價(jià)函數(shù)的修改,Dropout更像是訓(xùn)練網(wǎng)絡(luò)的一種技巧。隨著訓(xùn)練進(jìn)行,神經(jīng)網(wǎng)絡(luò)在每一次迭代中都會(huì)忽視一些(超參數(shù),常規(guī)是一半)隱藏層/輸入層的神經(jīng)元,這就導(dǎo)致不同的輸出,其中有的是正確的,有的是錯(cuò)誤的。

這個(gè)做法有點(diǎn)類(lèi)似集成學(xué)習(xí),它能更多地捕獲更多的隨機(jī)性。集成學(xué)習(xí)分類(lèi)器通常比單一分類(lèi)器效果更好,同樣的,因?yàn)榫W(wǎng)絡(luò)要擬合數(shù)據(jù)分布,所以Dropout后模型大部分的輸出肯定是正確的,而噪聲數(shù)據(jù)影響只占一小部分,不會(huì)對(duì)最終結(jié)果造成太大影響。

由于這些因素,當(dāng)我們的神經(jīng)網(wǎng)絡(luò)較大且隨機(jī)性更多時(shí),我們一般用Dropout。

在Keras中,我們可以使用keras core layer實(shí)現(xiàn)dropout。下面是它的Python代碼:

from keras.layers.core importDropout

model = Sequential([

Dense(output_dim=hidden1_num_units, input_dim=input_num_units, activation='relu'),

Dropout(0.25),

Dense(output_dim=output_num_units, input_dim=hidden5_num_units, activation='softmax'),

])

注:這里我們把0.25設(shè)為Dropout的超參數(shù)(每次“刪”1/4),我們可以通過(guò)網(wǎng)格搜索對(duì)它做進(jìn)一步優(yōu)化。

數(shù)據(jù)增強(qiáng)

既然過(guò)擬合是模型對(duì)數(shù)據(jù)集中噪聲和細(xì)節(jié)的過(guò)度捕捉,那么防止過(guò)擬合最簡(jiǎn)單的方法就是增加訓(xùn)練數(shù)據(jù)量。但是在機(jī)器學(xué)習(xí)任務(wù)中,增加數(shù)據(jù)量并不是那么容易實(shí)現(xiàn)的,因?yàn)樗鸭?、?biāo)記數(shù)據(jù)的成本太高了。

假設(shè)我們正在處理的一些手寫(xiě)數(shù)字圖像,為了擴(kuò)大訓(xùn)練集,我們能采取的方法有——旋轉(zhuǎn)、翻轉(zhuǎn)、縮小/放大、位移、截取、添加隨機(jī)噪聲、添加畸變等。下面是一些處理過(guò)的圖:

這些方式就是數(shù)據(jù)增強(qiáng)。從某種意義上來(lái)說(shuō),機(jī)器學(xué)習(xí)模型的性能是靠數(shù)據(jù)量堆出來(lái)的,因此數(shù)據(jù)增強(qiáng)可以為模型預(yù)測(cè)的準(zhǔn)確率提供巨大提升。有時(shí)為了改進(jìn)模型,這也是一種必用的技巧。

在Keras中,我們可以使用ImageDataGenerator執(zhí)行所有這些轉(zhuǎn)換,它提供了一大堆可以用來(lái)預(yù)處理訓(xùn)練數(shù)據(jù)的參數(shù)列表。以下是實(shí)現(xiàn)它的示例代碼:

from keras.preprocessing.image importImageDataGenerator

datagen = ImageDataGenerator(horizontal flip=True)

datagen.fit(train)

早停法

這是一種交叉驗(yàn)證策略。訓(xùn)練前,我們從訓(xùn)練集中抽出一部分作為驗(yàn)證集,隨著訓(xùn)練的進(jìn)行,當(dāng)模型在驗(yàn)證集上的性能越來(lái)越差時(shí),我們立即手動(dòng)停止訓(xùn)練,這種提前停止的方法就是早停法。

在上圖中,我們應(yīng)該在虛線(xiàn)位置就停止訓(xùn)練,因?yàn)樵谀侵?,模型就開(kāi)始過(guò)擬合了。

在Keras中,我們可以調(diào)用callbacks函數(shù)提前停止訓(xùn)練,以下是它的示例代碼:

from keras.callbacks importEarlyStopping

EarlyStopping(monitor='val_err', patience=5)

在這里,monitor指的是需要監(jiān)控的epoch數(shù)量;val_err表示驗(yàn)證錯(cuò)誤(validation error)。

patience表示經(jīng)過(guò)5個(gè)連續(xù)epoch后模型預(yù)測(cè)結(jié)果沒(méi)有進(jìn)一步改善。結(jié)合上圖進(jìn)行理解,就是在虛線(xiàn)后,模型每訓(xùn)練一個(gè)epoch就會(huì)有更高的驗(yàn)證錯(cuò)誤(更低的驗(yàn)證準(zhǔn)確率),因此連續(xù)訓(xùn)練5個(gè)epoch后,它會(huì)提前停止訓(xùn)練。

注:有一種情況是當(dāng)模型訓(xùn)練5個(gè)epoch后,它的驗(yàn)證準(zhǔn)確率可能會(huì)提高,因此選取超參數(shù)時(shí)我們要小心。

用keras實(shí)例研究MNIST數(shù)據(jù)

數(shù)據(jù)集:datahack.analyticsvidhya.com/contest/practice-problem-identify-the-digits/

學(xué)了這么多正則化方法,現(xiàn)在我們就要開(kāi)始動(dòng)手實(shí)踐了。在這個(gè)案例中,我們用的是Analytics Vidhya的數(shù)字識(shí)別數(shù)據(jù)集。

我們先導(dǎo)幾個(gè)基本庫(kù):

%pylab inline

import numpy as np

import pandas as pd

from scipy.misc import imread

from sklearn.metrics import accuracy_score

from matplotlib import pyplot

import tensorflow as tf

import keras

# 阻止?jié)撛诘碾S機(jī)性

seed = 128

rng = np.random.RandomState(seed)

然后加載數(shù)據(jù)集:

root_dir = os.path.abspath('/Users/shubhamjain/Downloads/AV/identify the digits/')

data_dir = os.path.join(root_dir, 'data')

sub_dir = os.path.join(root_dir, 'sub')

## 只讀取訓(xùn)練文件

train = pd.read_csv(os.path.join(data_dir, 'Train', 'train.csv'))

train.head()

檢查一下圖像:

img_name = rng.choice(train.filename)

filepath = os.path.join(data_dir, 'Train', 'Images', 'train', img_name)

img = imread(filepath, flatten=True)

pylab.imshow(img, cmap='gray')

pylab.axis('off')

pylab.show()

# 在numpy數(shù)組中存儲(chǔ)圖像

temp = []

for img_name in train.filename:

image_path = os.path.join(data_dir, 'Train', 'Images', 'train', img_name)

img = imread(image_path, flatten=True)

img = img.astype('float32')

temp.append(img)

x_train = np.stack(temp)

x_train /= 255.0

x_train = x_train.reshape(-1, 784).astype('float32')

y_train = keras.utils.np_utils.to_categorical(train.label.values)

創(chuàng)建驗(yàn)證數(shù)據(jù)集(7:3):

split_size = int(x_train.shape[0]*0.7)

x_train, x_test = x_train[:split_size], x_train[split_size:]

y_train, y_test = y_train[:split_size], y_train[split_size:]

構(gòu)建一個(gè)帶有5個(gè)隱藏層的簡(jiǎn)單神經(jīng)網(wǎng)絡(luò),每層包含500個(gè)神經(jīng)元:

# 導(dǎo)入keras模塊

from keras.models importSequential

from keras.layers importDense

# define vars

input_num_units = 784

hidden1_num_units = 500

hidden2_num_units = 500

hidden3_num_units = 500

hidden4_num_units = 500

hidden5_num_units = 500

output_num_units = 10

epochs = 10

batch_size = 128

model = Sequential([

Dense(output_dim=hidden1_num_units, input_dim=input_num_units, activation='relu'),

Dense(output_dim=hidden2_num_units, input_dim=hidden1_num_units, activation='relu'),

Dense(output_dim=hidden3_num_units, input_dim=hidden2_num_units, activation='relu'),

Dense(output_dim=hidden4_num_units, input_dim=hidden3_num_units, activation='relu'),

Dense(output_dim=hidden5_num_units, input_dim=hidden4_num_units, activation='relu'),

Dense(output_dim=output_num_units, input_dim=hidden5_num_units, activation='softmax'),

])

先跑10個(gè)epoch,快速檢查一下模型性能:

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

trained_model_5d = model.fit(x_train, y_train, nb_epoch=epochs, batch_size=batch_size, validation_data=(x_test, y_test))

L2正則化

from keras import regularizers

model = Sequential([

Dense(output_dim=hidden1_num_units, input_dim=input_num_units, activation='relu',

kernel_regularizer=regularizers.l2(0.0001)),

Dense(output_dim=hidden2_num_units, input_dim=hidden1_num_units, activation='relu',

kernel_regularizer=regularizers.l2(0.0001)),

Dense(output_dim=hidden3_num_units, input_dim=hidden2_num_units, activation='relu',

kernel_regularizer=regularizers.l2(0.0001)),

Dense(output_dim=hidden4_num_units, input_dim=hidden3_num_units, activation='relu',

kernel_regularizer=regularizers.l2(0.0001)),

Dense(output_dim=hidden5_num_units, input_dim=hidden4_num_units, activation='relu',

kernel_regularizer=regularizers.l2(0.0001)),

Dense(output_dim=output_num_units, input_dim=hidden5_num_units, activation='softmax'),

])

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

trained_model_5d = model.fit(x_train, y_train, nb_epoch=epochs, batch_size=batch_size, validation_data=(x_test, y_test))

λ等于0.0001,模型預(yù)測(cè)準(zhǔn)確率更高了!

L1正則化

## l1

model = Sequential([

Dense(output_dim=hidden1_num_units, input_dim=input_num_units, activation='relu',

kernel_regularizer=regularizers.l1(0.0001)),

Dense(output_dim=hidden2_num_units, input_dim=hidden1_num_units, activation='relu',

kernel_regularizer=regularizers.l1(0.0001)),

Dense(output_dim=hidden3_num_units, input_dim=hidden2_num_units, activation='relu',

kernel_regularizer=regularizers.l1(0.0001)),

Dense(output_dim=hidden4_num_units, input_dim=hidden3_num_units, activation='relu',

kernel_regularizer=regularizers.l1(0.0001)),

Dense(output_dim=hidden5_num_units, input_dim=hidden4_num_units, activation='relu',

kernel_regularizer=regularizers.l1(0.0001)),

Dense(output_dim=output_num_units, input_dim=hidden5_num_units, activation='softmax'),

])

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

trained_model_5d = model.fit(x_train, y_train, nb_epoch=epochs, batch_size=batch_size, validation_data=(x_test, y_test))

模型準(zhǔn)確率沒(méi)有任何提高,PASS!

Dropout

## dropout

from keras.layers.core importDropout

model = Sequential([

Dense(output_dim=hidden1_num_units, input_dim=input_num_units, activation='relu'),

Dropout(0.25),

Dense(output_dim=hidden2_num_units, input_dim=hidden1_num_units, activation='relu'),

Dropout(0.25),

Dense(output_dim=hidden3_num_units, input_dim=hidden2_num_units, activation='relu'),

Dropout(0.25),

Dense(output_dim=hidden4_num_units, input_dim=hidden3_num_units, activation='relu'),

Dropout(0.25),

Dense(output_dim=hidden5_num_units, input_dim=hidden4_num_units, activation='relu'),

Dropout(0.25),

Dense(output_dim=output_num_units, input_dim=hidden5_num_units, activation='softmax'),

])

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

trained_model_5d = model.fit(x_train, y_train, nb_epoch=epochs, batch_size=batch_size, validation_data=(x_test, y_test))

還可以,準(zhǔn)確率比一開(kāi)始提高了一些。

數(shù)據(jù)增強(qiáng)

from keras.preprocessing.image importImageDataGenerator

datagen = ImageDataGenerator(zca_whitening=True)

# 加載數(shù)據(jù)

train = pd.read_csv(os.path.join(data_dir, 'Train', 'train.csv'))

temp = []

for img_name in train.filename:

image_path = os.path.join(data_dir, 'Train', 'Images', 'train', img_name)

img = imread(image_path, flatten=True)

img = img.astype('float32')

temp.append(img)

x_train = np.stack(temp)

X_train = x_train.reshape(x_train.shape[0], 1, 28, 28)

X_train = X_train.astype('float32')

# 從數(shù)據(jù)中擬合參數(shù)——增加訓(xùn)練數(shù)據(jù)

datagen.fit(X_train)

在這里,我們用了zca_whitening,它突出了每個(gè)數(shù)字的輪廓,如下圖所示:

## splitting

y_train = keras.utils.np_utils.to_categorical(train.label.values)

split_size = int(x_train.shape[0]*0.7)

x_train, x_test = X_train[:split_size], X_train[split_size:]

y_train, y_test = y_train[:split_size], y_train[split_size:]

## reshaping

x_train=np.reshape(x_train,(x_train.shape[0],-1))/255

x_test=np.reshape(x_test,(x_test.shape[0],-1))/255

## structure using dropout

from keras.layers.core importDropout

model = Sequential([

Dense(output_dim=hidden1_num_units, input_dim=input_num_units, activation='relu'),

Dropout(0.25),

Dense(output_dim=hidden2_num_units, input_dim=hidden1_num_units, activation='relu'),

Dropout(0.25),

Dense(output_dim=hidden3_num_units, input_dim=hidden2_num_units, activation='relu'),

Dropout(0.25),

Dense(output_dim=hidden4_num_units, input_dim=hidden3_num_units, activation='relu'),

Dropout(0.25),

Dense(output_dim=hidden5_num_units, input_dim=hidden4_num_units, activation='relu'),

Dropout(0.25),

Dense(output_dim=output_num_units, input_dim=hidden5_num_units, activation='softmax'),

])

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

trained_model_5d = model.fit(x_train, y_train, nb_epoch=epochs, batch_size=batch_size, validation_data=(x_test, y_test))

提升非常明顯!

早停法

from keras.callbacks importEarlyStopping

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

trained_model_5d = model.fit(x_train, y_train, nb_epoch=epochs, batch_size=batch_size, validation_data=(x_test, y_test)

, callbacks = [EarlyStopping(monitor='val_acc', patience=2)])

和上面那些方法相比,早停法只跑了5個(gè)epoch就停止了,因?yàn)轭A(yù)測(cè)準(zhǔn)確率沒(méi)有提高。但是如果我們?cè)黾拥拇螖?shù),它應(yīng)該能給出更好的結(jié)果。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4771

    瀏覽量

    100779
  • 正則化
    +關(guān)注

    關(guān)注

    0

    文章

    17

    瀏覽量

    8130
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84695

原文標(biāo)題:一文概述深度學(xué)習(xí)中的正則化(含Python代碼)

文章出處:【微信號(hào):jqr_AI,微信公眾號(hào):論智】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    神經(jīng)網(wǎng)絡(luò)中避免過(guò)擬合5種方法介紹

    丟棄法是一種避免神經(jīng)網(wǎng)絡(luò)過(guò)擬合正則技術(shù)。像L1和L2這樣的正則技術(shù)通過(guò)修改代價(jià)函數(shù)來(lái)減少
    發(fā)表于 02-04 11:30 ?2.5w次閱讀
    神經(jīng)網(wǎng)絡(luò)中避免<b class='flag-5'>過(guò)</b><b class='flag-5'>擬合</b>5種<b class='flag-5'>方法</b>介紹

    深層神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練:過(guò)擬合優(yōu)化

    為了訓(xùn)練出高效可用的深層神經(jīng)網(wǎng)絡(luò)模型,在訓(xùn)練時(shí)必須要避免過(guò)擬合的現(xiàn)象。過(guò)擬合現(xiàn)象的優(yōu)化方法通常有三種。
    的頭像 發(fā)表于 12-02 14:17 ?2754次閱讀
    深層神經(jīng)網(wǎng)絡(luò)模型的訓(xùn)練:<b class='flag-5'>過(guò)</b><b class='flag-5'>擬合</b>優(yōu)化

    機(jī)器學(xué)習(xí)基礎(chǔ)知識(shí) 包括評(píng)估問(wèn)題,理解過(guò)擬合、欠擬合以及解決問(wèn)題的技巧

    學(xué)習(xí)通用的,一部分用于解決過(guò)擬合問(wèn)題的技術(shù)(如dropout)除外。 4.1 三類(lèi)機(jī)器學(xué)習(xí)問(wèn)題 在之前的所有例子中,嘗試解決的是分類(lèi)(預(yù)測(cè)貓或狗)或回歸(預(yù)測(cè)用戶(hù)在平臺(tái)上花費(fèi)的平均時(shí)間)問(wèn)題。所有這些都是有監(jiān)督學(xué)習(xí)的例子,目的是
    發(fā)表于 07-12 09:28 ?957次閱讀
    機(jī)器學(xué)習(xí)基礎(chǔ)知識(shí) 包括評(píng)估問(wèn)題,理解<b class='flag-5'>過(guò)</b><b class='flag-5'>擬合</b>、欠<b class='flag-5'>擬合</b>以及解決問(wèn)題的技巧

    采集正弦曲線(xiàn)過(guò)零點(diǎn)附近有波動(dòng),怎么曲線(xiàn)擬合

    采集正弦曲線(xiàn),得到了一組數(shù),過(guò)零點(diǎn)附近有波動(dòng),怎么曲線(xiàn)擬合,將其擬合成標(biāo)準(zhǔn)的正弦曲線(xiàn)的點(diǎn)?
    發(fā)表于 04-09 15:13

    過(guò)擬合,欠擬合以及模型的判斷

    python-學(xué)習(xí)曲線(xiàn),判斷過(guò)擬合,欠擬合
    發(fā)表于 04-24 10:23

    模型的過(guò)擬合之欠擬合總體解決方案

    15 模型的過(guò)擬合 & 欠擬合 & 總體解決方案
    發(fā)表于 05-15 07:49

    深度學(xué)習(xí)中過(guò)擬合/欠擬合的問(wèn)題及解決方案

    的數(shù)據(jù)可以對(duì)未來(lái)的數(shù)據(jù)進(jìn)行推測(cè)與模擬,因此都是使用歷史數(shù)據(jù)建立模型,即使用已經(jīng)產(chǎn)生的數(shù)據(jù)去訓(xùn)練,然后使用該模型去擬合未來(lái)的數(shù)據(jù)。 在我們機(jī)器學(xué)習(xí)和深度學(xué)習(xí)的訓(xùn)練過(guò)程中,經(jīng)常會(huì)出現(xiàn)過(guò)擬合和欠擬合
    發(fā)表于 01-28 06:57

    曲線(xiàn)擬合的判定方法有哪幾種

    曲線(xiàn)擬合是什么意思?曲線(xiàn)擬合的判定方法有哪幾種呢?
    發(fā)表于 11-19 06:48

    基于過(guò)擬合神經(jīng)網(wǎng)絡(luò)的混沌偽隨機(jī)序列

    偽隨機(jī)序列在保密通信、擴(kuò)頻通信、密碼學(xué)等領(lǐng)域具有重要作用。本文結(jié)合神經(jīng)網(wǎng)絡(luò)和混沌映射的特點(diǎn),提出了一種基于過(guò)擬合BP 神經(jīng)網(wǎng)絡(luò)的混沌偽隨機(jī)序列產(chǎn)生方法。以logist
    發(fā)表于 12-22 14:12 ?6次下載

    【連載】深度學(xué)習(xí)筆記4:深度神經(jīng)網(wǎng)絡(luò)的正則

    今天要寫(xiě)的是關(guān)于機(jī)器學(xué)習(xí)和深度學(xué)習(xí)中的一項(xiàng)關(guān)鍵技術(shù):正則。相信在機(jī)器學(xué)習(xí)領(lǐng)域摸爬滾打多年的你一定知道正則是防止模型過(guò)
    的頭像 發(fā)表于 08-14 11:58 ?3349次閱讀

    擬合過(guò)擬合是什么?解決方法總結(jié)

    過(guò)擬合是指模型在訓(xùn)練集上表現(xiàn)很好,到了驗(yàn)證和測(cè)試階段就大不如意了,即模型的泛能力很差。
    的頭像 發(fā)表于 01-29 17:48 ?3.1w次閱讀
    欠<b class='flag-5'>擬合</b>和<b class='flag-5'>過(guò)</b><b class='flag-5'>擬合</b>是什么?解決<b class='flag-5'>方法</b>總結(jié)

    深度學(xué)習(xí)中過(guò)擬合、欠擬合問(wèn)題及解決方案

    如何判斷過(guò)擬合呢?我們?cè)谟?xùn)練過(guò)程中會(huì)定義訓(xùn)練誤差,驗(yàn)證集誤差,測(cè)試集誤差(泛誤差)。訓(xùn)練誤差總是減少的,而泛誤差一開(kāi)始會(huì)減少,但到一定程序后不減反而增加,這時(shí)候便出現(xiàn)了過(guò)
    發(fā)表于 01-22 07:44 ?6次下載
    深度學(xué)習(xí)中<b class='flag-5'>過(guò)</b><b class='flag-5'>擬合</b>、欠<b class='flag-5'>擬合</b>問(wèn)題及解決方案

    正則方法DropKey: 兩行代碼高效緩解視覺(jué)Transformer過(guò)擬合

    美圖影像研究院(MT Lab)與中國(guó)科學(xué)院大學(xué)在 CVPR 2023 上發(fā)表了一篇文章,提出一種新穎且即插即用的正則器 DropKey,該正則器可以有效緩解 Vision Tran
    的頭像 發(fā)表于 04-17 11:35 ?1194次閱讀

    過(guò)擬合、泛和偏差-方差權(quán)衡

    在機(jī)器學(xué)習(xí)中,過(guò)度擬合是當(dāng)模型變得過(guò)于復(fù)雜并開(kāi)始過(guò)于接近訓(xùn)練數(shù)據(jù)時(shí)發(fā)生的常見(jiàn)問(wèn)題。這意味著該模型可能無(wú)法很好地推廣到新的、看不見(jiàn)的數(shù)據(jù),因?yàn)樗旧嫌涀×擞?xùn)練數(shù)據(jù),而不是真正學(xué)習(xí)底層模式或關(guān)系。技術(shù)術(shù)語(yǔ)來(lái)說(shuō),考慮一個(gè)回歸模型,它需要線(xiàn)性關(guān)系,而是使用多項(xiàng)式表示。
    發(fā)表于 06-12 09:31 ?532次閱讀
    <b class='flag-5'>過(guò)</b><b class='flag-5'>擬合</b>、泛<b class='flag-5'>化</b>和偏差-方差權(quán)衡

    深度學(xué)習(xí)模型中的過(guò)擬合正則

    測(cè)試數(shù)據(jù)或新數(shù)據(jù)上表現(xiàn)不佳的現(xiàn)象。為了解決這個(gè)問(wèn)題,正則(Regularization)技術(shù)應(yīng)運(yùn)而生,成為深度學(xué)習(xí)中不可或缺的一部分。本文將從過(guò)擬合的原因、表現(xiàn)、
    的頭像 發(fā)表于 07-09 15:56 ?959次閱讀