欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報邀請碼778899分享:神經(jīng)網(wǎng)絡(luò)超參數(shù)優(yōu)化

柚子快報邀請碼778899分享:神經(jīng)網(wǎng)絡(luò)超參數(shù)優(yōu)化

http://yzkb.51969.com/

遺傳算法與深度學(xué)習(xí)實戰(zhàn)(16)——神經(jīng)網(wǎng)絡(luò)超參數(shù)優(yōu)化

0. 前言1. 深度學(xué)習(xí)基礎(chǔ)1.1 傳統(tǒng)機(jī)器學(xué)習(xí)1.2 深度學(xué)習(xí)

2. 神經(jīng)網(wǎng)絡(luò)超參數(shù)調(diào)整2.1 超參數(shù)調(diào)整策略2.2 超參數(shù)調(diào)整對神經(jīng)網(wǎng)絡(luò)影響

3. 超參數(shù)調(diào)整規(guī)則小結(jié)系列鏈接

0. 前言

我們已經(jīng)學(xué)習(xí)了多種形式的進(jìn)化計算,從遺傳算法到粒子群優(yōu)化,以及進(jìn)化策略和差分進(jìn)化等高級方法。在之后的學(xué)習(xí)中,我們將使用這些進(jìn)化計算 (Evolutionary Computation, EC) 方法來改進(jìn)深度學(xué)習(xí) ( Deep learning, DL),通常稱為進(jìn)化深度學(xué)習(xí) (Evolutionary Deep Learning, EDL)。 然而,在構(gòu)建用于解決 DL 問題的 EDL 解決方案之前,我們必須了解要解決的問題以及如何在沒有 EC 的情況下解決它們,畢竟 EC 只是用來改進(jìn) DL 的工具。因此,在應(yīng)用 EC 方法于超參數(shù)優(yōu)化 (Hyperparameter Optimization, HPO) 之前,我們首先介紹超參數(shù)優(yōu)化的重要性和一些手動調(diào)整策略。

1. 深度學(xué)習(xí)基礎(chǔ)

1.1 傳統(tǒng)機(jī)器學(xué)習(xí)

傳統(tǒng)應(yīng)用程序中,系統(tǒng)是通過使用程序員編寫的復(fù)雜算法來實現(xiàn)智能化的。例如,假設(shè)我們希望識別照片中是否包含狗。在傳統(tǒng)的機(jī)器學(xué)習(xí) (Machine Learning, ML) 中,需要機(jī)器學(xué)習(xí)研究人員首先確定需要從圖像中提取的特征,然后提取這些特征并將它們作為輸入傳遞給復(fù)雜算法,算法解析給定特征以判斷圖像中是否包含狗:

然而,如果要為多種類別圖像分類手動提取特征,其數(shù)量可能是指數(shù)級的,因此,傳統(tǒng)方法在受限環(huán)境中效果很好(例如,識別證件照片),而在不受限制的環(huán)境中效果不佳,因為每張圖像之間都有較大差異。 我們可以將相同的思想擴(kuò)展到其他領(lǐng)域,例如文本或結(jié)構(gòu)化數(shù)據(jù)。過去,如果希望通過編程來解決現(xiàn)實世界的任務(wù),就必須了解有關(guān)輸入數(shù)據(jù)的所有內(nèi)容并編寫盡可能多的規(guī)則來涵蓋所有場景,并且不能保證所有新場景都會遵循已有規(guī)則。 傳統(tǒng)機(jī)器學(xué)習(xí)的主要特點是以有限的特征集和顯式規(guī)則為基礎(chǔ),從大量數(shù)據(jù)中學(xué)習(xí)模型,并利用學(xué)習(xí)到的模型對新數(shù)據(jù)進(jìn)行預(yù)測或分類;主要方法包括:決策樹、樸素貝葉斯分類、支持向量機(jī)、最近鄰分類、線性回歸、邏輯回歸等,這些方法通常需要經(jīng)過數(shù)據(jù)預(yù)處理、特征選擇、模型訓(xùn)練和模型評估等一系列步驟,以達(dá)到更好的分類或預(yù)測效果。 傳統(tǒng)機(jī)器學(xué)習(xí)的優(yōu)點在于它們的理論基礎(chǔ)比較成熟,訓(xùn)練和推理速度相對較快,并且可以適用于各種類型的數(shù)據(jù),此外,對于一些小規(guī)模的數(shù)據(jù)集,傳統(tǒng)機(jī)器學(xué)習(xí)方法的效果也相對不錯。然而,傳統(tǒng)機(jī)器學(xué)習(xí)方法也有相當(dāng)明顯的局限性,例如,由于傳統(tǒng)機(jī)器學(xué)習(xí)方法依賴于手動選擇的特征,因此難以捕捉數(shù)據(jù)中的復(fù)雜非線性關(guān)系;同時,這些方法通常不具備自適應(yīng)學(xué)習(xí)能力,需要人工干預(yù)來調(diào)整模型。

1.2 深度學(xué)習(xí)

神經(jīng)網(wǎng)絡(luò)內(nèi)含了特征提取的過程,并將這些特征用于分類/回歸,幾乎不需要手動特征工程,只需要標(biāo)記數(shù)據(jù)(例如,哪些圖片是狗,哪些圖片不是狗)和神經(jīng)網(wǎng)絡(luò)架構(gòu),不需要手動提出規(guī)則來對圖像進(jìn)行分類,這減輕了傳統(tǒng)機(jī)器學(xué)習(xí)技術(shù)強加給程序員的大部分負(fù)擔(dān)。 訓(xùn)練神經(jīng)網(wǎng)絡(luò)需要提供大量樣本數(shù)據(jù)。例如,在前面的例子中,我們需要為模型提供大量的狗和非狗圖片,以便它學(xué)習(xí)特征。神經(jīng)網(wǎng)絡(luò)用于分類任務(wù)的流程如下,其訓(xùn)練與測試是端到端 (end-to-end) 的:

深度學(xué)習(xí)(Deep Learning, DL)是一類基于神經(jīng)網(wǎng)絡(luò)的機(jī)器學(xué)習(xí)算法,其主要特點是使用多層神經(jīng)元構(gòu)成的深度神經(jīng)網(wǎng)絡(luò),通過大規(guī)模數(shù)據(jù)訓(xùn)練模型并自動地提取、分析、抽象出高級別的特征,經(jīng)典的深度神經(jīng)網(wǎng)絡(luò)架構(gòu)示例如下所示:

深度學(xué)習(xí)的優(yōu)勢在于它可以自動地從大量非結(jié)構(gòu)化或半結(jié)構(gòu)化的數(shù)據(jù)中學(xué)習(xí),同時可以發(fā)現(xiàn)數(shù)據(jù)之間的隱含關(guān)系和規(guī)律,有效地處理語音、圖像、自然語言等復(fù)雜的數(shù)據(jù)。常用的神經(jīng)網(wǎng)絡(luò)模型包括多層感知機(jī) (Multilayer Perceptron, MLP)、卷積神經(jīng)網(wǎng)絡(luò) (Convolutional Neural Network, CNN)、循環(huán)神經(jīng)網(wǎng)絡(luò) (Recurrent Neural Network, RNN) 等。 深度學(xué)習(xí)目前已經(jīng)廣泛應(yīng)用于圖像識別、語音識別、自然語言處理等領(lǐng)域,如人臉識別、自動駕駛、智能客服、機(jī)器翻譯等。雖然深度學(xué)習(xí)在很多領(lǐng)域取得了出色的成果,但是深度神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和優(yōu)化也存在一些難點和挑戰(zhàn),如梯度消失和梯度爆炸等問題,需要使用一系列優(yōu)化算法和技巧來解決。

2. 神經(jīng)網(wǎng)絡(luò)超參數(shù)調(diào)整

深度學(xué)習(xí)模型面臨的困難之一是如何調(diào)整模型選項和超參數(shù)來改進(jìn)模型。DL 模型中通常都會涉及許多選項和超參數(shù),但通常缺乏詳細(xì)說明調(diào)整的效果,通常研究者僅僅展示最先進(jìn)模型的效果,經(jīng)常忽略模型達(dá)到最優(yōu)性能所需的大量調(diào)整工作。 通常,學(xué)習(xí)如何使用不同選項和調(diào)整超參數(shù)需要大量的建模經(jīng)驗。如果沒有進(jìn)行調(diào)整,許多模型可能無法達(dá)到最優(yōu)性能。這不僅是一個經(jīng)驗問題,而且也是 DL 領(lǐng)域本身的一個問題。我們首先學(xué)習(xí)使用 PyTorch 構(gòu)建一個基礎(chǔ)深度學(xué)習(xí)模型,用于逼近給定函數(shù)。

2.1 超參數(shù)調(diào)整策略

在本節(jié)中,我們將介紹一些模型選項和調(diào)整 DL 模型超參數(shù)的技巧和策略。其中一些技巧是根據(jù)大量模型訓(xùn)練經(jīng)驗獲得的,但這些策略也是需要不斷發(fā)展的,隨著 DL 的不斷發(fā)展,模型選項也在不斷的擴(kuò)充。 接下來,我們介紹如何使用超參數(shù)和其他選項。添加超參數(shù):batch_size 和 data_step。超參數(shù) batch_size 用于確定每次前向傳遞中輸入到網(wǎng)絡(luò)的數(shù)據(jù)樣本數(shù)量;超參數(shù) data_step 用于控制生成的訓(xùn)練數(shù)據(jù)量:

import torch

import torch.nn as nn

from torch.autograd import Variable

import torch.nn.functional as F

import torch.optim as optim

from torch.utils.data import TensorDataset, DataLoader

#plotting

from matplotlib import pyplot as plt

from IPython.display import clear_output

#for performance timing

import time

results = []

hp_test = "lr = 3.5e-01" #@param {type:"string"}

learning_rate = 3.5e-01

epochs = 500

middle_layer = 16

batch_size = 25

data_step = .5

data_min = -5

data_max = 5

def function(x):

return (2*x + 3*x**2 + 4*x**3 + 5*x**4 + 6*x**5 + 10)

Xi = np.reshape(np.arange(data_min,data_max, data_step), (-1, 1))

yi = function(Xi)

inputs = Xi.shape[1]

yi = yi.reshape(-1, 1)

plt.plot(Xi, yi, 'o', color='black')

plt.plot(Xi,yi, color="red")

tensor_x = torch.Tensor(Xi) # transform to torch tensor

tensor_y = torch.Tensor(yi)

dataset = TensorDataset(tensor_x,tensor_y) # create your datset

dataloader = DataLoader(dataset, batch_size= batch_size, shuffle=True) # create your dataloader

class Net(nn.Module):

def __init__(self, inputs, middle):

super().__init__()

self.fc1 = nn.Linear(inputs,middle)

self.fc2 = nn.Linear(middle,middle)

self.out = nn.Linear(middle,1)

def forward(self, x):

x = F.relu(self.fc1(x))

x = F.relu(self.fc2(x))

x = self.out(x)

return x

model = Net(inputs, middle_layer)

print(model)

loss_fn = nn.MSELoss()

optimizer = optim.Adam(model.parameters(), lr=learning_rate)

epoch_report = 25

history = []

start = time.time()

for i in range(epochs):

for X, y in iter(dataloader):

# wrap the data in variables

x_batch = Variable(torch.Tensor(X))

y_batch = Variable(torch.Tensor(y))

# forward pass

y_pred = model(x_batch)

# compute and print loss

loss = loss_fn(y_pred, y_batch)

history.append(loss.data/batch_size)

# reset gradients

optimizer.zero_grad()

# backwards pass

loss.backward()

# step the optimizer - update the weights

optimizer.step()

if (i+1) % epoch_report == 0:

clear_output()

y_ = model(tensor_x)

plt.plot(Xi, yi, 'o', color='black')

plt.plot(Xi,y_.detach().numpy(), 'r')

plt.show()

print(f"[{i}] Loss = {loss.data}")

time.sleep(1)

plt.plot(history)

end = time.time() - start

X_a = torch.rand(100,1).clone() * 10 - 5

y_a = model(X_a)

y_a = y_a.detach().numpy()

results.append([hp_test,end, X_a, y_a])

fig = plt.figure()

ax1 = fig.add_subplot(111)

for test,t,x,y in results:

ax1.scatter(x, y, s=10, marker="s", label=f"{test} in {t:0.1f}s")

plt.legend(loc='upper left')

plt.plot(Xi, yi, 'o', color='black')

plt.show()

2.2 超參數(shù)調(diào)整對神經(jīng)網(wǎng)絡(luò)影響

將 middle_layer 的值由 5 修改為 25,運行代碼后,觀察兩次測試的預(yù)測輸出,可以看到 middle_layer 為 25 時的模型性能更好。同時可以看到,模型的訓(xùn)練模型的時間略有不同,這是由于更大的模型需要更長的訓(xùn)練時間。

可以修改超參數(shù) batch_size 和 data_step,觀察不同超參數(shù)對模型性能的影響。但需要注意的是,這些值是相互關(guān)聯(lián)的,如果通過將 data_step 減小到 0.1 來增加數(shù)據(jù)量,則同樣需要增加 batch_size。 下圖展示了在增加數(shù)據(jù)量時改變和不改變批大小的結(jié)果,可以看到,訓(xùn)練 500 個 epoch 所需的訓(xùn)練時間差異明顯。

繼續(xù)修改其它超參數(shù),將 learning_rate 從 3.5e-06 修改為 3.5e-01,在調(diào)整超參數(shù)時,總體目標(biāo)是創(chuàng)建一個能夠快速訓(xùn)練并產(chǎn)生最佳結(jié)果的最小(參數(shù)量)模型。

3. 超參數(shù)調(diào)整規(guī)則

即使本節(jié)中僅僅只有五個超參數(shù),超參數(shù)的調(diào)整仍然可能遇到困難,因此一個簡單的方法是按照以下步驟進(jìn)行操作:

設(shè)置網(wǎng)絡(luò)大小 - 在本節(jié)中,通過修改 middle_layer 的值實現(xiàn),通常,首先調(diào)整網(wǎng)絡(luò)大小或?qū)訑?shù)。但需要注意的是,增加線性層數(shù)通常并不如增加層內(nèi)網(wǎng)絡(luò)節(jié)點數(shù)量有效 超參數(shù)訓(xùn)練規(guī)則#1:網(wǎng)絡(luò)大小——增加網(wǎng)絡(luò)層數(shù)能夠從數(shù)據(jù)中提取更多特征,擴(kuò)展或減小模型寬度(節(jié)點數(shù))能夠調(diào)整模型的擬合程度控制數(shù)據(jù)變化性 – 通常認(rèn)為深度學(xué)習(xí)模型訓(xùn)練需要大量的數(shù)據(jù),雖然深度學(xué)習(xí)模型可能會從更多的數(shù)據(jù)中獲益,但這更多依賴于數(shù)據(jù)集中的變化性,在本節(jié)中,我們使用 data_step 值來控制數(shù)據(jù)的變化性,但通常情況下我們無法控制數(shù)據(jù)的變化性。因此,如果數(shù)據(jù)集包含較大的變化性,則很可能相應(yīng)的需要增加模型的層數(shù)和寬度。與 MNIST 數(shù)據(jù)集中的手寫數(shù)字圖片相比,F(xiàn)ashion-MNIST 數(shù)據(jù)集中服飾圖片的變化性要小得多 超參數(shù)訓(xùn)練規(guī)則#2:數(shù)據(jù)變化性——更具變化性的數(shù)據(jù)集需要更大的模型,以提取更多特征并學(xué)習(xí)更復(fù)雜的解決方案選擇批大小 - 調(diào)整模型的批大小可以顯著提高訓(xùn)練效率,然而,批大小并不能解決訓(xùn)練性能問題,增加批大小可能對降低最終模型性能,批大小需要基于輸入數(shù)據(jù)的變化性進(jìn)行調(diào)優(yōu),輸入數(shù)據(jù)變化性較大時,較小的批大小通常更有益(范圍通常在 16-64 之間),而變化性較小的數(shù)據(jù)可能需要較大的批大小(范圍通常在 64-256 之間,甚至更高) 超參數(shù)訓(xùn)練規(guī)則#3:批大小——如果輸入數(shù)據(jù)變化性較大,則減小批大小,對于變化較小且更統(tǒng)一的數(shù)據(jù)集,增加批大小調(diào)整學(xué)習(xí)率 - 學(xué)習(xí)率控制模型學(xué)習(xí)的速度,學(xué)習(xí)率與模型的復(fù)雜性相關(guān),由輸入數(shù)據(jù)的變化性驅(qū)動,數(shù)據(jù)變化性較高時,需要較小的學(xué)習(xí)率,而更均勻的數(shù)據(jù)可以采用較高的學(xué)習(xí)率,調(diào)整模型大小可能也可能需要調(diào)整學(xué)習(xí)率,因為模型復(fù)雜性發(fā)生了變化 超參數(shù)訓(xùn)練規(guī)則#4:學(xué)習(xí)率——調(diào)整學(xué)習(xí)率以適應(yīng)輸入數(shù)據(jù)的變化性,如果需要增加模型的大小,通常也需要減小學(xué)習(xí)率調(diào)整訓(xùn)練迭代次數(shù) - 處理較小規(guī)模的數(shù)據(jù)集時,模型通常會快速收斂到某個基準(zhǔn)解,因此,可以簡單地減少模型的 epochs (訓(xùn)練迭代次數(shù)),但是,如果模型較復(fù)雜且訓(xùn)練時間較長,則確定總的訓(xùn)練迭代次數(shù)可能更為困難。但多數(shù)深度學(xué)習(xí)框架提供了提前停止機(jī)制,它通過監(jiān)視指定損失值,并在損失值不再變化時自動停止訓(xùn)練,因此,通??梢赃x擇可能需要的最大訓(xùn)練迭代次數(shù),另一種策略是定期保存模型的權(quán)重,然后在需要時,可以重新加載保存的模型權(quán)重并繼續(xù)訓(xùn)練 超參數(shù)訓(xùn)練規(guī)則#5:訓(xùn)練迭代次數(shù)——使用可能需要的最大訓(xùn)練迭代次數(shù),使用提前停止等技術(shù)來減少訓(xùn)練迭代次數(shù)

使用以上五條策略能夠更好的調(diào)整超參數(shù),但這些技術(shù)只是一般規(guī)則,可能會有網(wǎng)絡(luò)配置、數(shù)據(jù)集和其他因素改變這些一般規(guī)則。接下來,我們將進(jìn)一步討論構(gòu)建穩(wěn)定模型時可能需要決定的各種模型選項。 除了超參數(shù)外,模型改進(jìn)的最大動力源于模型所選用的各種選項。DL 模型提供了多種選項,具體取決于實際問題和網(wǎng)絡(luò)架構(gòu),但通常模型的細(xì)微改變就足以從根本上改變模型的擬合方式。 模型選項包括激活函數(shù)、優(yōu)化器函數(shù)、以及網(wǎng)絡(luò)層的類型和數(shù)量的選用。網(wǎng)絡(luò)層的深度通常由模型需要提取和學(xué)習(xí)的特征數(shù)量所決定,網(wǎng)絡(luò)層的類型(全連接、卷積或循環(huán)網(wǎng)絡(luò)等)通常由需要學(xué)習(xí)的特征類型決定。例如,使用卷積層來學(xué)習(xí)特征的聚類,使用循環(huán)神經(jīng)網(wǎng)絡(luò)來確定特征的出現(xiàn)順序。 因此,大多數(shù) DL 模型的網(wǎng)絡(luò)大小和層類型都受數(shù)據(jù)變化性和需要學(xué)習(xí)的特征類型的驅(qū)動。對于圖像分類問題,卷積層用于提取視覺特征,例如眼睛或嘴巴,循環(huán)神經(jīng)網(wǎng)絡(luò)層用于處理語言或時間序列數(shù)據(jù)。 大多數(shù)情況下,模型選項需要關(guān)注的包括激活、優(yōu)化器和損失函數(shù)。激活函數(shù)通常由問題類型和數(shù)據(jù)形式?jīng)Q定,避免在選項調(diào)整的最后階段修改激活函數(shù)。通常,優(yōu)化器和損失函數(shù)的選擇決定了模型訓(xùn)練的好壞。下圖顯示了使用四種不同優(yōu)化器來訓(xùn)練上一節(jié)模型得到的結(jié)果,其中超參數(shù) middle_layer 值為 25,可以看出,與 Adam 和 RMSprop 相比,隨機(jī)梯度下降 (Stochastic Gradient Descent, SGD) 和 Adagrad 表現(xiàn)較差。

損失函數(shù)同樣會對模型訓(xùn)練產(chǎn)生重大影響。在回歸問題中,我們可以使用兩個不同的損失函數(shù):均方誤差 (mean-squared error, MSE) 和平均絕對誤差 (mean absolute error, MAE),下圖顯示了使用的兩個不同損失函數(shù)的模型性能對比結(jié)果??梢钥吹?,MAE 損失函數(shù)的效果更好一些。

超參數(shù)訓(xùn)練規(guī)則#6:模型修改作為一般規(guī)則,更改模型架構(gòu)或關(guān)鍵模型選項,都需要重新調(diào)整所有超參數(shù)

事實上,我們可能需要花費數(shù)天甚至數(shù)月的時間來調(diào)整模型的超參數(shù),直到得到更好的損失和優(yōu)化函數(shù)。超參數(shù)調(diào)整和模型選項選擇并非易事,選用不合適的選項甚至得到更差的模型。在構(gòu)建有效的 DL 模型時,通常會定義模型并選擇最適合實際問題的選項。然后,通過調(diào)整各種超參數(shù)和選項優(yōu)化模型。

小結(jié)

超參數(shù)優(yōu)化的目標(biāo)是通過調(diào)整模型的超參數(shù),如學(xué)習(xí)率、正則化系數(shù)、網(wǎng)絡(luò)架構(gòu)、批大小等,來最大化模型的性能和泛化能力。選擇合適的方法取決于問題的特性、計算資源和優(yōu)化目標(biāo)的復(fù)雜性。本節(jié)中,我們介紹了一些常見模型選項和調(diào)整DL模型超參數(shù)的技巧和策略。

系列鏈接

遺傳算法與深度學(xué)習(xí)實戰(zhàn)(1)——進(jìn)化深度學(xué)習(xí) 遺傳算法與深度學(xué)習(xí)實戰(zhàn)(2)——生命模擬及其應(yīng)用 遺傳算法與深度學(xué)習(xí)實戰(zhàn)(3)——生命模擬與進(jìn)化論 遺傳算法與深度學(xué)習(xí)實戰(zhàn)(4)——遺傳算法(Genetic Algorithm)詳解與實現(xiàn) 遺傳算法與深度學(xué)習(xí)實戰(zhàn)(5)——遺傳算法中常用遺傳算子 遺傳算法與深度學(xué)習(xí)實戰(zhàn)(6)——遺傳算法框架DEAP 遺傳算法與深度學(xué)習(xí)實戰(zhàn)(7)——DEAP框架初體驗 遺傳算法與深度學(xué)習(xí)實戰(zhàn)(8)——使用遺傳算法解決N皇后問題 遺傳算法與深度學(xué)習(xí)實戰(zhàn)(9)——使用遺傳算法解決旅行商問題 遺傳算法與深度學(xué)習(xí)實戰(zhàn)(10)——使用遺傳算法重建圖像 遺傳算法與深度學(xué)習(xí)實戰(zhàn)(11)——遺傳編程詳解與實現(xiàn) 遺傳算法與深度學(xué)習(xí)實戰(zhàn)(12)——粒子群優(yōu)化詳解與實現(xiàn) 遺傳算法與深度學(xué)習(xí)實戰(zhàn)(13)——協(xié)同進(jìn)化詳解與實現(xiàn) 遺傳算法與深度學(xué)習(xí)實戰(zhàn)(14)——進(jìn)化策略詳解與實現(xiàn) 遺傳算法與深度學(xué)習(xí)實戰(zhàn)(15)——差分進(jìn)化詳解與實現(xiàn)

柚子快報邀請碼778899分享:神經(jīng)網(wǎng)絡(luò)超參數(shù)優(yōu)化

http://yzkb.51969.com/

好文閱讀

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://m.gantiao.com.cn/post/19582228.html

發(fā)布評論

您暫未設(shè)置收款碼

請在主題配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄