久久综合九色综合97婷婷-美女视频黄频a免费-精品日本一区二区三区在线观看-日韩中文无码有码免费视频-亚洲中文字幕无码专区-扒开双腿疯狂进出爽爽爽动态照片-国产乱理伦片在线观看夜-高清极品美女毛茸茸-欧美寡妇性猛交XXX-国产亚洲精品99在线播放-日韩美女毛片又爽又大毛片,99久久久无码国产精品9,国产成a人片在线观看视频下载,欧美疯狂xxxx吞精视频

有趣生活

當(dāng)前位置:首頁>職場> 算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)

發(fā)布時(shí)間:2024-01-19閱讀( 29)

導(dǎo)讀作者丨燈會(huì)來源丨極市平臺(tái)編輯丨極市平臺(tái)優(yōu)化算法深度學(xué)習(xí)優(yōu)化學(xué)習(xí)方法(一階、二階)一階方法:隨機(jī)梯度下降(SGD)、動(dòng)量(Momentum)、牛頓動(dòng)量法(Ne....

作者丨燈會(huì)

來源丨極市平臺(tái)

編輯丨極市平臺(tái)

優(yōu)化算法

深度學(xué)習(xí)優(yōu)化學(xué)習(xí)方法(一階、二階)

一階方法:隨機(jī)梯度下降(SGD)、動(dòng)量(Momentum)、牛頓動(dòng)量法(Nesterov動(dòng)量)、AdaGrad(自適應(yīng)梯度)、RMSProp(均方差傳播)、Adam、Nadam。

二階方法:牛頓法、擬牛頓法、共軛梯度法(CG)、BFGS、L-BFGS。

自適應(yīng)優(yōu)化算法有哪些?(Adagrad(累積梯度平方)、RMSProp(累積梯度平方的滑動(dòng)平均)、Adam(帶動(dòng)量的RMSProp,即同時(shí)使用梯度的一、二階矩))。

梯度下降陷入局部最優(yōu)有什么解決辦法? 可以用BGD、SGD、MBGD、momentum,RMSprop,Adam等方法來避免陷入局部最優(yōu)。

1.梯度下降法原理

梯度下降法又稱最速下降法,是求解無約束最優(yōu)化問題的一種最常用的方法,在對損失函數(shù)最小化時(shí)經(jīng)常使用。梯度下降法是一種迭代算法。選取適當(dāng)?shù)某踔祒(0),不斷迭代,更新x的值,進(jìn)行目標(biāo)函數(shù)的極小化,直到收斂。由于負(fù)梯度方向時(shí)使函數(shù)值下降最快的方向,在迭代的每一步,以負(fù)梯度方向更新x的值,從而達(dá)到減少函數(shù)值的目的。

我們首先確定損失函數(shù):

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(1)

其中,J(θ)是損失函數(shù),m代表每次取多少樣本進(jìn)行訓(xùn)練,如果采用SGD進(jìn)行訓(xùn)練,那每次隨機(jī)取一組樣本,m=1;如果是批處理,則m等于每次抽取作為訓(xùn)練樣本的數(shù)量。θ是參數(shù),對應(yīng)(1式)的θ1和θ2。求出了θ1和θ2,h(x)的表達(dá)式就出來了:

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(2)

我們的目標(biāo)是讓損失函數(shù)J(θ)的值最小,根據(jù)梯度下降法,首先要用J(θ)對θ求偏導(dǎo):

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(3)

由于是要最小化損失函數(shù),所以參數(shù)θ按其負(fù)梯度方向來更新:

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(4)

①批量梯度下降(BGD)

批量梯度下降法,是梯度下降法最常用的形式,具體做法也就是在更新參數(shù)時(shí)使用所有的樣本來進(jìn)行更新

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(5)

寫成偽代碼如下:

for i in range(nb_epochs): params_grad = evaluate_gradient(loss_function, data, params) params = params - learning_rate * params_grad

優(yōu)點(diǎn):(1)一次迭代是對所有樣本進(jìn)行計(jì)算,此時(shí)利用矩陣進(jìn)行操作,實(shí)現(xiàn)了并行。(2)由全數(shù)據(jù)集確定的方向能夠更好地代表樣本總體,從而更準(zhǔn)確地朝向極值所在的方向。當(dāng)目標(biāo)函數(shù)為凸函數(shù)時(shí),BGD一定能夠得到全局最優(yōu)。

缺點(diǎn):(1)當(dāng)樣本數(shù)目 m 很大時(shí),每迭代一步都需要對所有樣本計(jì)算,訓(xùn)練過程會(huì)很慢。(2)不能投入新數(shù)據(jù)實(shí)時(shí)更新模型。

②隨機(jī)梯度下降(SGD)

隨機(jī)梯度下降法求梯度時(shí)選取一個(gè)樣本j來求梯度。

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(6)

寫成偽代碼如下:

for i in range(nb_epochs): np.random.shuffle(data) for example in data: params_grad = evaluate_gradient(loss_function , example ,params) params = params - learning_rate * params_grad

優(yōu)點(diǎn):(1)由于不是在全部訓(xùn)練數(shù)據(jù)上的損失函數(shù),而是在每輪迭代中,隨機(jī)優(yōu)化某一條訓(xùn)練數(shù)據(jù)上的損失函數(shù),這樣每一輪參數(shù)的更新速度大大加快。

缺點(diǎn):(1)準(zhǔn)確度下降。由于即使在目標(biāo)函數(shù)為強(qiáng)凸函數(shù)的情況下,SGD仍舊無法做到線性收斂。(2)可能會(huì)收斂到局部最優(yōu),由于單個(gè)樣本并不能代表全體樣本的趨勢。(3)不易于并行實(shí)現(xiàn)。SGD 因?yàn)楦卤容^頻繁,會(huì)造成 cost function 有嚴(yán)重的震蕩。

③小批量梯度下降算法(mini-batch GD)

小批量梯度下降法是是對于m個(gè)樣本,我們采用x個(gè)樣子來迭代,1<x<m。一般可以取x=10,當(dāng)然根據(jù)樣本的數(shù)據(jù),可以調(diào)整這個(gè)x的值。

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(7)

偽代碼如下:

for i in range(nb_epochs): np.random.shuffle(data) for batch in get_batches(data, batch_size=50): params_grad = evaluate_gradient(loss_function, batch, params) params = params - learning_rate * params_grad

優(yōu)點(diǎn):(1)通過矩陣運(yùn)算,每次在一個(gè)batch上優(yōu)化神經(jīng)網(wǎng)絡(luò)參數(shù)并不會(huì)比單個(gè)數(shù)據(jù)慢太多。(2)每次使用一個(gè)batch可以大大減小收斂所需要的迭代次數(shù),同時(shí)可以使收斂到的結(jié)果更加接近梯度下降的效果。(比如上例中的30W,設(shè)置batch_size=100時(shí),需要迭代3000次,遠(yuǎn)小于SGD的30W次)(3)可實(shí)現(xiàn)并行化。

缺點(diǎn)(解釋1):

1.不過 Mini-batch gradient descent 不能保證很好的收斂性,learning rate 如果選擇的太小,收斂速度會(huì)很慢,如果太大,loss function 就會(huì)在極小值處不停地震蕩甚至偏離。(有一種措施是先設(shè)定大一點(diǎn)的學(xué)習(xí)率,當(dāng)兩次迭代之間的變化低于某個(gè)閾值后,就減小 learning rate,不過這個(gè)閾值的設(shè)定需要提前寫好,這樣的話就不能夠適應(yīng)數(shù)據(jù)集的特點(diǎn)。)對于非凸函數(shù),還要避免陷于局部極小值處,或者鞍點(diǎn)處,因?yàn)榘包c(diǎn)周圍的error是一樣的,所有維度的梯度都接近于0,SGD 很容易被困在這里。(會(huì)在鞍點(diǎn)或者局部最小點(diǎn)震蕩跳動(dòng),因?yàn)樵诖它c(diǎn)處,如果是訓(xùn)練集全集帶入即BGD,則優(yōu)化會(huì)停止不動(dòng),如果是mini-batch或者SGD,每次找到的梯度都是不同的,就會(huì)發(fā)生震蕩,來回跳動(dòng)。)

2.SGD對所有參數(shù)更新時(shí)應(yīng)用同樣的 learning rate,如果我們的數(shù)據(jù)是稀疏的,我們更希望對出現(xiàn)頻率低的特征進(jìn)行大一點(diǎn)的更新。LR會(huì)隨著更新的次數(shù)逐漸變小。

缺點(diǎn)(解釋2):

(1)batch_size的不當(dāng)選擇可能會(huì)帶來一些問題。

batcha_size的選擇帶來的影響:在合理地范圍內(nèi),增大batch_size的好處:a. 內(nèi)存利用率提高了,大矩陣乘法的并行化效率提高。b. 跑完一次 epoch(全數(shù)據(jù)集)所需的迭代次數(shù)減少,對于相同數(shù)據(jù)量的處理速度進(jìn)一步加快。c. 在一定范圍內(nèi),一般來說 Batch_Size 越大,其確定的下降方向越準(zhǔn),引起訓(xùn)練震蕩越小。

(2)盲目增大batch_size的壞處:

a. 內(nèi)存利用率提高了,但是內(nèi)存容量可能撐不住了。b. 跑完一次 epoch(全數(shù)據(jù)集)所需的迭代次數(shù)減少,要想達(dá)到相同的精度,其所花費(fèi)的時(shí)間大大增加了,從而對參數(shù)的修正也就顯得更加緩慢。c. Batch_Size 增大到一定程度,其確定的下降方向已經(jīng)基本不再變化。

2.梯度下降算法改進(jìn)

①動(dòng)量梯度下降法(Momentum)

Momentum 通過加入 γ*vt?1 ,可以加速 SGD, 并且抑制震蕩。momentum即動(dòng)量,它模擬的是物體運(yùn)動(dòng)時(shí)的慣性,即更新的時(shí)候在一定程度上保留之前更新的方向,同時(shí)利用當(dāng)前batch的梯度微調(diào)最終的更新方向。這樣一來,可以在一定程度上增加穩(wěn)定性,從而學(xué)習(xí)地更快,并且還有一定擺脫局部最優(yōu)的能力。動(dòng)量法做的很簡單,相信之前的梯度。如果梯度方向不變,就越發(fā)更新的快,反之減弱當(dāng)前梯度。r一般為0.9。

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(8)

缺點(diǎn):這種情況相當(dāng)于小球從山上滾下來時(shí)是在盲目地沿著坡滾,如果它能具備一些先知,例如快要上坡時(shí),就知道需要減速了的話,適應(yīng)性會(huì)更好。

②Nesterov accelerated gradient法(NAG)

用 θ?γv_t?1 來近似當(dāng)做參數(shù)下一步會(huì)變成的值,則在計(jì)算梯度時(shí),不是在當(dāng)前位置,而是未來的位置上。仍然是動(dòng)量法,只是它要求這個(gè)下降更加智能。這個(gè)算法就可以對低頻的參數(shù)做較大的更新,對高頻的做較小的更新,也因此,對于稀疏的數(shù)據(jù)它的表現(xiàn)很好,很好地提高了 SGD 的魯棒性。

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(9)

esterov 的好處就是,當(dāng)梯度方向快要改變的時(shí)候,它提前獲得了該信息,從而減弱了這個(gè)過程,再次減少了無用的迭代。超參數(shù)設(shè)定值: 一般 γ 仍取值 0.9 左右。

③Adagrad

這個(gè)算法就可以對低頻的參數(shù)做較大的更新,對高頻的做較小的更新,也因此,對于稀疏的數(shù)據(jù)它的表現(xiàn)很好,很好地提高了 SGD 的魯棒性,例如識(shí)別 Youtube 視頻里面的貓,訓(xùn)練 GloVe word embeddings,因?yàn)樗鼈兌际切枰诘皖l的特征上有更大的更新。

梯度更新規(guī)則:

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(10)

其中g(shù)為:t時(shí)刻參數(shù)θ_i的梯度

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(11)

如果是普通的 SGD, 那么 θ_i 在每一時(shí)刻的梯度更新公式為:

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(12)

但這里的learning rate η也隨t和i而變:

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(13)

其中 Gt 是個(gè)對角矩陣, (i,i) 元素就是 t 時(shí)刻參數(shù) θi 的梯度平方和。

Adagrad 的優(yōu)點(diǎn)是減少了學(xué)習(xí)率的手動(dòng)調(diào)節(jié)。超參數(shù)設(shè)定值:一般η選取0.01。

缺點(diǎn):它的缺點(diǎn)是分母會(huì)不斷積累,這樣學(xué)習(xí)率就會(huì)收縮并最終會(huì)變得非常小。

④Adadelta

這個(gè)算法是對 Adagrad 的改進(jìn),和Adagrad相比,就是分母的 G 換成了過去的梯度平方的衰減平均值,指數(shù)衰減平均值

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(14)

這個(gè)分母相當(dāng)于梯度的均方根 root mean squared (RMS),在數(shù)據(jù)統(tǒng)計(jì)分析中,將所有值平方求和,求其均值,再開平方,就得到均方根值 ,所以可以用 RMS 簡寫:

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(15)

其中 E 的計(jì)算公式如下,t 時(shí)刻的依賴于前一時(shí)刻的平均和當(dāng)前的梯度:

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(16)

梯度更新規(guī)則:此外,還將學(xué)習(xí)率η換成了RMS[Δθ],這樣的話,我們甚至都不需要提前設(shè)定學(xué)習(xí)率了:

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(17)

超參數(shù)設(shè)定值: γ 一般設(shè)定為 0.9

⑤RMSprop

RMSprop 是 Geoff Hinton 提出的一種自適應(yīng)學(xué)習(xí)率方法。RMSprop 和 Adadelta 都是為了解決 Adagrad 學(xué)習(xí)率急劇下降問題的。

梯度更新規(guī)則:RMSprop 與 Adadelta 的第一種形式相同:(使用的是指數(shù)加權(quán)平均,旨在消除梯度下降中的擺動(dòng),與Momentum的效果一樣,某一維度的導(dǎo)數(shù)比較大,則指數(shù)加權(quán)平均就大,某一維度的導(dǎo)數(shù)比較小,則其指數(shù)加權(quán)平均就小,這樣就保證了各維度導(dǎo)數(shù)都在一個(gè)量級,進(jìn)而減少了擺動(dòng),允許使用一個(gè)更大的學(xué)習(xí)率η)。

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(18)

超參數(shù)設(shè)定值:Hinton 建議設(shè)定 γ 為 0.9, 學(xué)習(xí)率 η 為 0.001。

⑥Adam:Adaptive Moment Estimation

Adam 算法和傳統(tǒng)的隨機(jī)梯度下降不同。隨機(jī)梯度下降保持單一的學(xué)習(xí)率(即 alpha)更新所有的權(quán)重,學(xué)習(xí)率在訓(xùn)練過程中并不會(huì)改變。而 Adam 通過計(jì)算梯度的一階矩估計(jì)和二階矩估計(jì)而為不同的參數(shù)設(shè)計(jì)獨(dú)立的自適應(yīng)性學(xué)習(xí)率。這個(gè)算法是另一種計(jì)算每個(gè)參數(shù)的自適應(yīng)學(xué)習(xí)率的方法,相當(dāng)于 RMSprop Momentum。

除了像 Adadelta 和 RMSprop 一樣存儲(chǔ)了過去梯度的平方 vt 的指數(shù)衰減平均值 ,也像 momentum 一樣保持了過去梯度 mt 的指數(shù)衰減平均值:

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(19)

如果mt和vt被初始化為0向量,那它們就會(huì)向0偏置,所以做了偏差校正,通過計(jì)算偏差校正后的mt和vt來抵消這些偏差:

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(20)

梯度更新規(guī)則:

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(21)

超參數(shù)設(shè)定值:建議 β1 = 0.9,β2 = 0.999,? = 10e?8。

實(shí)踐表明,Adam 比其他適應(yīng)性學(xué)習(xí)方法效果要好。

Adam和 SGD 區(qū)別:Adam = Adaptive Momentum,顧名思義Adam集成了SGD的一階動(dòng)量和RMSProp的二階動(dòng)量。

3.牛頓法

利用二階導(dǎo)數(shù),收斂速度快;但對目標(biāo)函數(shù)有嚴(yán)格要求,必須有連續(xù)的一、二階偏導(dǎo)數(shù),計(jì)算量大。利用牛頓法求解目標(biāo)函數(shù)的最小值其實(shí)是轉(zhuǎn)化成求使目標(biāo)函數(shù)的一階導(dǎo)為0的參數(shù)值。這一轉(zhuǎn)換的理論依據(jù)是,函數(shù)的極值點(diǎn)處的一階導(dǎo)數(shù)為0.其迭代過程是在當(dāng)前位置x0求該函數(shù)的切線,該切線和x軸的交點(diǎn)x1,作為新的x0,重復(fù)這個(gè)過程,直到交點(diǎn)和函數(shù)的零點(diǎn)重合。此時(shí)的參數(shù)值就是使得目標(biāo)函數(shù)取得極值的參數(shù)值。

簡述梯度下降法和牛頓法的優(yōu)缺點(diǎn)?梯度下降法和牛頓法區(qū)別

1.牛頓法:是通過求解目標(biāo)函數(shù)的一階導(dǎo)數(shù)為0時(shí)的參數(shù),進(jìn)而求出目標(biāo)函數(shù)最小值時(shí)的參數(shù)。①收斂速度很快。②海森矩陣的逆在迭代過程中不斷減小,可以起到逐步減小步長的效果。③缺點(diǎn):海森矩陣的逆計(jì)算復(fù)雜,代價(jià)比較大,因此有了擬牛頓法。

2.梯度下降法:是通過梯度方向和步長,直接求解目標(biāo)函數(shù)的最小值時(shí)的參數(shù)。越接近最優(yōu)值時(shí),步長應(yīng)該不斷減小,否則會(huì)在最優(yōu)值附近來回震蕩。

Batch Normalization

1.批標(biāo)準(zhǔn)化(Batch Normalization)

可以理解為是一種數(shù)據(jù)預(yù)處理技術(shù),使得每層網(wǎng)絡(luò)的輸入都服從(0,1)0均值,1方差分布,如果不進(jìn)行BN,那么每次輸入的數(shù)據(jù)分布不一致,網(wǎng)絡(luò)訓(xùn)練精度自然也受影響。前向公式:

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(22)

前向傳播代碼

def batchnorm_forward(x, gamma, beta, eps): N, D = x.shape #為了后向傳播求導(dǎo)方便,這里都是分步進(jìn)行的 #step1: 計(jì)算均值 mu = 1./N * np.sum(x, axis = 0) #step2: 減均值 xmu = x - mu #step3: 計(jì)算方差 sq = xmu ** 2 var = 1./N * np.sum(sq, axis = 0) #step4: 計(jì)算x^的分母項(xiàng) sqrtvar = np.sqrt(var eps) ivar = 1./sqrtvar #step5: normalization->x^ xhat = xmu * ivar #step6: scale and shift gammax = gamma * xhat out = gammax beta #存儲(chǔ)中間變量 cache = (xhat,gamma,xmu,ivar,sqrtvar,var,eps) return out, cache

后向傳播代碼

def batchnorm_backward(dout, cache): #解壓中間變量 xhat,gamma,xmu,ivar,sqrtvar,var,eps = cache N,D = dout.shape #step6 dbeta = np.sum(dout, axis=0) dgammax = dout dgamma = np.sum(dgammax*xhat, axis=0) dxhat = dgammax * gamma #step5 divar = np.sum(dxhat*xmu, axis=0) dxmu1 = dxhat * ivar #注意這是xmu的一個(gè)支路 #step4 dsqrtvar = -1. /(sqrtvar**2) * divar dvar = 0.5 * 1. /np.sqrt(var eps) * dsqrtvar #step3 dsq = 1. /N * np.ones((N,D)) * dvar dxmu2 = 2 * xmu * dsq #注意這是xmu的第二個(gè)支路 #step2 dx1 = (dxmu1 dxmu2) 注意這是x的一個(gè)支路 #step1 dmu = -1 * np.sum(dxmu1 dxmu2, axis=0) dx2 = 1. /N * np.ones((N,D)) * dmu 注意這是x的第二個(gè)支路 #step0 done! dx = dx1 dx2 return dx, dgamma, dbeta

Batch Norm即批規(guī)范化,目的是為了解決每批數(shù)據(jù)訓(xùn)練時(shí)的不規(guī)則分布給訓(xùn)練造成的困難,對批數(shù)據(jù)進(jìn)行規(guī)范化,還可以在梯度反傳時(shí),解決梯度消失的問題。

Batchnorm也是一種正則的方式,可以代替其他正則方式如Dropout,但通過這樣的正則化,也消融了數(shù)據(jù)之間的許多差異信息。

2. batchnorm的幾個(gè)參數(shù),可學(xué)習(xí)的參數(shù)有哪些?

第四步加了兩個(gè)參數(shù)γ和β,分別叫做縮放參數(shù)和平移參數(shù),通過選擇不同的γ和β可以讓隱藏單元有不同的分布。這里面的γ和β可以從你的模型中學(xué)習(xí),可以用梯度下降,Adam等算法進(jìn)行更新。

3. Batch Normalization的作用

神經(jīng)網(wǎng)絡(luò)在訓(xùn)練的時(shí)候隨著網(wǎng)絡(luò)層數(shù)的加深,激活函數(shù)的輸入值的整體分布逐漸往激活函數(shù)的取值區(qū)間上下限靠近,從而導(dǎo)致在反向傳播時(shí)低層的神經(jīng)網(wǎng)絡(luò)的梯度消失。而BatchNormalization的作用是通過規(guī)范化的手段,將越來越偏的分布拉回到標(biāo)準(zhǔn)化的分布,使得激活函數(shù)的輸入值落在激活函數(shù)對輸入比較敏感的區(qū)域,從而使梯度變大,加快學(xué)習(xí)收斂速度,避免梯度消失的問題

①不僅僅極大提升了訓(xùn)練速度,收斂過程大大加快;②還能增加分類效果,一種解釋是這是類似于dropout的一種防止過擬合的正則化表達(dá)方式,所以不用Dropout也能達(dá)到相當(dāng)?shù)男Ч虎哿硗庹{(diào)參過程也簡單多了,對于初始化要求沒那么高,而且可以使用大的學(xué)習(xí)率等。

4. BN層怎么實(shí)現(xiàn)

1.計(jì)算樣本均值。2.計(jì)算樣本方差。3.樣本數(shù)據(jù)標(biāo)準(zhǔn)化處理。4.進(jìn)行平移和縮放處理。引入了γ和β兩個(gè)參數(shù)。來訓(xùn)練γ和β兩個(gè)參數(shù)。引入了這個(gè)可學(xué)習(xí)重構(gòu)參數(shù)γ、β,讓我們的網(wǎng)絡(luò)可以學(xué)習(xí)恢復(fù)出原始網(wǎng)絡(luò)所要學(xué)習(xí)的特征分布。

5.BN一般用在網(wǎng)絡(luò)的哪個(gè)部分啊?

先卷積再BN

Batch normalization 的 batch 是批數(shù)據(jù), 把數(shù)據(jù)分成小批小批進(jìn)行 stochastic gradient descent. 而且在每批數(shù)據(jù)進(jìn)行前向傳遞 forward propagation 的時(shí)候, 對每一層都進(jìn)行 normalization 的處理

6.BN為什么要重構(gòu)

恢復(fù)出原始的某一層所學(xué)到的特征的。因此我們引入了這個(gè)可學(xué)習(xí)重構(gòu)參數(shù)γ、β,讓我們的網(wǎng)絡(luò)可以學(xué)習(xí)恢復(fù)出原始網(wǎng)絡(luò)所要學(xué)習(xí)的特征分布。

7.BN層反向傳播,怎么求導(dǎo)

反向傳播:

反向傳播需要計(jì)算三個(gè)梯度值,分別是

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(23)

定義

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(24)

為從上一層傳遞過來的殘差。

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(25)

觀察縮放和移位與歸一化公式,可以看到從xi到y(tǒng)i的鏈?zhǔn)接?jì)算過程:

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(26)

上式三個(gè)加號(hào)對應(yīng)三條鏈?zhǔn)接?jì)算。

8. batchnorm訓(xùn)練時(shí)和測試時(shí)的區(qū)別

訓(xùn)練階段:首先計(jì)算均值和方差(每次訓(xùn)練給一個(gè)批量,計(jì)算批量的均值方差),然后歸一化,然后縮放和平移。

測試階段:每次只輸入一張圖片,這怎么計(jì)算批量的均值和方差,于是,就有了代碼中下面兩行,在訓(xùn)練的時(shí)候?qū)崿F(xiàn)計(jì)算好mean、 var,測試的時(shí)候直接拿來用就可以了,不用計(jì)算均值和方差。

9.先加BN還是激活,有什么區(qū)別(先激活)

目前在實(shí)踐上,傾向于把BN放在ReLU后面。也有評測表明BN放ReLU后面效果更好。

二、基礎(chǔ)卷積神經(jīng)網(wǎng)絡(luò)

1.CNN的經(jīng)典模型

LeNet,AlexNet,VGG,GoogLeNet,ResNet,DenseNet

2.對CNN的理解

CNN= 數(shù)據(jù)輸入層 (Input Layer)+ {[卷積計(jì)算層(CONV Layer )*a+ReLU激勵(lì)層 (ReLU Layer)]*b+ 池化層 (Pooling Layer ) }*c+全連接層 (FC Layer) * d 。

3.CNN和傳統(tǒng)的全連接神經(jīng)網(wǎng)絡(luò)有什么區(qū)別?

在全連接神經(jīng)網(wǎng)絡(luò)中,每相鄰兩層之間的節(jié)點(diǎn)都有邊相連,于是會(huì)將每一層的全連接層中的節(jié)點(diǎn)組織成一列,這樣方便顯示連接結(jié)構(gòu)。而對于卷積神經(jīng)網(wǎng)絡(luò),相鄰兩層之間只有部分節(jié)點(diǎn)相連,為了展示每一層神經(jīng)元的維度,一般會(huì)將每一層卷積層的節(jié)點(diǎn)組織成一個(gè)三維矩陣。全連接神經(jīng)網(wǎng)絡(luò)和卷積神經(jīng)網(wǎng)絡(luò)的唯一區(qū)別就是神經(jīng)網(wǎng)絡(luò)相鄰兩層的連接方式。

4.講一下CNN,每個(gè)層及作用

卷積層:用它來進(jìn)行特征提取

池化層:對輸入的特征圖進(jìn)行壓縮,一方面使特征圖變小,簡化網(wǎng)絡(luò)計(jì)算復(fù)雜度;一方面進(jìn)行特征壓縮,提取主要特征,

激活函數(shù):是用來加入非線性因素的,因?yàn)榫€性模型的表達(dá)能力不夠。

全連接層(fully connected layers,F(xiàn)C)在整個(gè)卷積神經(jīng)網(wǎng)絡(luò)中起到“分類器”的作用。全連接層則起到將學(xué)到的“分布式特征表示”映射到樣本標(biāo)記空間的作用。

5.為什么神經(jīng)網(wǎng)絡(luò)使用卷積層?-共享參數(shù),局部連接;

使用卷積層的前提條件是什么?-數(shù)據(jù)分布一致

6.resnet相比于之前的卷積神經(jīng)網(wǎng)絡(luò)模型中,最大的改進(jìn)點(diǎn)是什么?,解決了什么問題

跳躍連接(residual block)和瓶頸層。resnet本身是一種擬合殘差的結(jié)果,讓網(wǎng)絡(luò)學(xué)習(xí)任務(wù)更簡單,可以有效地解決梯度彌散的問題。

Resnet為啥能解決梯度消失,怎么做的,能推導(dǎo)嗎?

由于每做一次卷積(包括對應(yīng)的激活操作)都會(huì)浪費(fèi)掉一些信息:比如卷積核參數(shù)的隨機(jī)性(盲目性)、激活函數(shù)的抑制作用等等。這時(shí),ResNet中的shortcut相當(dāng)于把以前處理過的信息直接再拿到現(xiàn)在一并處理,起到了減損的效果。

7.resnet第二個(gè)版本做了哪些改進(jìn),Resnet性能最好的變體是哪個(gè),結(jié)構(gòu)是怎么樣的,原理是什么?

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(27)

Resnetv2:1、相比于原始的網(wǎng)絡(luò)結(jié)構(gòu),先激活的網(wǎng)絡(luò)中f是恒等變換,這使得模型優(yōu)化更加容易。2、使用了先激活輸入的網(wǎng)絡(luò),能夠減少網(wǎng)絡(luò)過擬合。

Resnet性能最好的變體是Resnext。

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(28)

ResNeXt可以說是基于Resnet與Inception Split Transfrom Concat而搞出的產(chǎn)物,結(jié)構(gòu)簡單、易懂又足夠強(qiáng)大。(Inception網(wǎng)絡(luò)使用了一種split-transform-merge思想,即先將輸入切分到不同的低維度中,然后做一個(gè)特征映射,最后將結(jié)果融合到一起。但模型的泛化性不好,針對不同的任務(wù)需要設(shè)計(jì)的東西太多。)

ResNeXt提出了一個(gè)基數(shù)(cardinatity)的概念,用于作為模型復(fù)雜度的另外一個(gè)度量。基數(shù)(cardinatity)指的是一個(gè)block中所具有的相同分支的數(shù)目。

與 ResNet 相比,相同的參數(shù)個(gè)數(shù),結(jié)果更好:一個(gè) 101 層的 ResNeXt 網(wǎng)絡(luò),和 200 層的 ResNet 準(zhǔn)確度差不多,但是計(jì)算量只有后者的一半。

ResNet的特點(diǎn) 引入跳躍連接,有效地解決了網(wǎng)絡(luò)過深時(shí)候梯度消失的問題,使得設(shè)計(jì)更深層次的網(wǎng)絡(luò)變得可行

8.簡述InceptionV1到V4的網(wǎng)絡(luò)、區(qū)別、改進(jìn)

Inceptionv1的核心就是把googlenet的某一些大的卷積層換成11, 33, 5*5的小卷積,這樣能夠大大的減小權(quán)值參數(shù)數(shù)量。

inception V2在輸入的時(shí)候增加了batch_normal,所以他的論文名字也是叫batch_normal,加了這個(gè)以后訓(xùn)練起來收斂更快,學(xué)習(xí)起來自然更高效,可以減少dropout的使用。

inception V3把googlenet里一些77的卷積變成了17和71的兩層串聯(lián),33的也一樣,變成了13和31,這樣加速了計(jì)算,還增加了網(wǎng)絡(luò)的非線性,減小過擬合的概率。另外,網(wǎng)絡(luò)的輸入從224改成了299.

inception v4實(shí)際上是把原來的inception加上了resnet的方法,從一個(gè)節(jié)點(diǎn)能夠跳過一些節(jié)點(diǎn)直接連入之后的一些節(jié)點(diǎn),并且殘差也跟著過去一個(gè)。另外就是V4把一個(gè)先11再33那步換成了先33再11.

論文說引入resnet不是用來提高深度,進(jìn)而提高準(zhǔn)確度的,只是用來提高速度的。

9. DenseNet為什么比ResNet有更強(qiáng)的表達(dá)能力?

DenseNet在增加深度的同時(shí),加寬每一個(gè)DenseBlock的網(wǎng)絡(luò)寬度,能夠增加網(wǎng)絡(luò)識(shí)別特征的能力,而且由于DenseBlock的橫向結(jié)構(gòu)類似 Inception block的結(jié)構(gòu),使得需要計(jì)算的參數(shù)量大大降低。

三、損失函數(shù)

1.說一下smooth L1 Loss,并闡述使用smooth L1 Loss的優(yōu)點(diǎn)

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(29)

Smooth L1的優(yōu)點(diǎn):①相比于L1損失函數(shù),可以收斂得更快。②相比于L2損失函數(shù),對離群點(diǎn)、異常值不敏感,梯度變化相對更小,訓(xùn)練時(shí)不容易跑飛。

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(30)

2. L1_loss和L2_loss的區(qū)別

平均絕對誤差(L1 Loss): 平均絕對誤差(Mean Absolute Error,MAE) 是指模型預(yù)測值f(x)和真實(shí)值y之間距離的平均值,其公式如下:

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(31)

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(32)

均方誤差MSE (L2 Loss):均方誤差(Mean Square Error,MSE)是模型預(yù)測值f(x) 與真實(shí)樣本值y 之間差值平方的平均值,其公式如下

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(33)

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(34)

3.為何分類問題用交叉熵而不用平方損失?啥是交叉熵

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(35)

1.用平方誤差損失函數(shù),誤差增大參數(shù)的梯度會(huì)增大,但是當(dāng)誤差很大時(shí),參數(shù)的梯度就會(huì)又減小了。2.使用交叉熵?fù)p失是函數(shù),誤差越大參數(shù)的梯度也越大,能夠快速收斂。

分類中為什么交叉熵?fù)p失函數(shù)比均方誤差損失函數(shù)更常用?

交叉熵?fù)p失函數(shù)關(guān)于輸入權(quán)重的梯度表達(dá)式與預(yù)測值與真實(shí)值的誤差成正比且不含激活函數(shù)的梯度,而均方誤差損失函數(shù)關(guān)于輸入權(quán)重的梯度表達(dá)式中則含有,由于常用的sigmoid/tanh等激活函數(shù)存在梯度飽和區(qū),使得MSE對權(quán)重的梯度會(huì)很小,參數(shù)w調(diào)整的慢,訓(xùn)練也慢,而交叉熵?fù)p失函數(shù)則不會(huì)出現(xiàn)此問題,其參數(shù)w會(huì)根據(jù)誤差調(diào)整,訓(xùn)練更快,效果更好。

4.一張圖片多個(gè)類別怎么設(shè)計(jì)損失函數(shù),多標(biāo)簽分類問題

多標(biāo)簽分類怎么解決,從損失函數(shù)角度考慮

分類問題名稱 輸出層使用激活函數(shù) 對應(yīng)的損失函數(shù)

二分類 sigmoid函數(shù) 二分類交叉熵?fù)p失函數(shù)(binary_crossentropy)

多分類 Softmax函數(shù) 多類別交叉熵?fù)p失函數(shù)(categorical_crossentropy)

多標(biāo)簽分類 sigmoid函數(shù) 二分類交叉熵?fù)p失函數(shù)(binary_crossentropy)

(多標(biāo)簽問題與二分類問題關(guān)系在上文已經(jīng)討論過了,方法是計(jì)算一個(gè)樣本各個(gè)標(biāo)簽的損失(輸出層采用sigmoid函數(shù)),然后取平均值。把一個(gè)多標(biāo)簽問題,轉(zhuǎn)化為了在每個(gè)標(biāo)簽上的二分類問題。)

5. LR的損失函數(shù)?它的導(dǎo)數(shù)是啥?加了正則化之后它的導(dǎo)數(shù)又是啥?

Logistic regression (邏輯回歸)是當(dāng)前業(yè)界比較常用的機(jī)器學(xué)習(xí)方法。

Logistic回歸雖然名字里帶“回歸”,但是它實(shí)際上是一種分類方法,主要用于兩分類問題,利用Logistic函數(shù)(或稱為Sigmoid函數(shù)),自變量取值范圍為(-INF, INF),自變量的取值范圍為(0,1),函數(shù)形式為:

算法工程師項(xiàng)目經(jīng)歷(一位算法工程師經(jīng)歷30)(36)

LR的損失函數(shù)為交叉熵?fù)p失函數(shù)。

參考文獻(xiàn)
  • LeCun Y, Bottou L, Bengio Y, et al. Gradient-based learning applied to document recognition[J]. Proceedings of the IEEE, 1998, 86(11): 2278-2324.
  • Krizhevsky A, Sutskever I, Hinton G E. Imagenet classification with deep convolutional neural networks[J]. Advances in neural information processing systems, 2012, 25: 1097-1105.
  • Simonyan K, Zisserman A. Very deep convolutional networks for large-scale image recognition[J]. arXiv preprint arXiv:1409.1556, 2014.
  • Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[C].Proceedings of the IEEE conference on computer vision and pattern recognition. 2015: 1-9.
  • He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C].Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.
  • Huang G, Liu Z, Van Der Maaten L, et al. Densely connected convolutional networks[C].Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 4700-4708.
  • He K, Zhang X, Ren S, et al. Identity mappings in deep residual networks[C].European conference on computer vision. Springer, Cham, 2016: 630-645.
  • Xie S, Girshick R, Dollár P, et al. Aggregated residual transformations for deep neural networks[C].Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 1492-1500.
參考鏈接
  • https://zhuanlan.zhihu.com/p/26138673
  • https://blog.csdn.net/elaine_bao/article/details/50923198
  • https://www.cnblogs.com/guoyaohua/p/8724433.html
  • https://blog.csdn.net/bl128ve900/article/details/95309305
  • https://blog.csdn.net/bll1992/article/details/87431604
  • https://blog.csdn.net/kittyzc/article/details/107444373
  • https://blog.csdn.net/qq122716072/article/details/107083623
  • https://www.cnblogs.com/wangguchangqing/p/12021638.html
  • https://zhuanlan.zhihu.com/p/97324416
  • https://blog.csdn.net/zouxy09/article/details/20319673
  • https://blog.csdn.net/google19890102/article/details/69942970
  • https://www.cnblogs.com/guoyaohua/p/8542554.html
  • https://blog.csdn.net/qq_39852676/article/details/86529995
,
TAGS標(biāo)簽:   算法   工程師   項(xiàng)目   經(jīng)歷   一位

歡迎分享轉(zhuǎn)載→ http://m.avcorse.com/read-33071.html

Copyright ? 2024 有趣生活 All Rights Reserve吉ICP備19000289號(hào)-5 TXT地圖HTML地圖XML地圖