1. 程式人生 > >深度學習必備:隨機梯度下降(SGD)優化演算法及視覺化

深度學習必備:隨機梯度下降(SGD)優化演算法及視覺化

補充在前:實際上在我使用LSTM為流量基線建模時候,發現有效的啟用函式是elu、relu、linear、prelu、leaky_relu、softplus,對應的梯度演算法是adam、mom、rmsprop、sgd,效果最好的組合是:prelu+rmsprop。我的程式碼如下:

# Simple example using recurrent neural network to predict time series values

from __future__ import division, print_function, absolute_import

import tflearn
from tflearn.layers.normalization import batch_normalization import numpy as np import tensorflow as tf import math import json import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt step_radians = 0.01 steps_of_history = 20 steps_in_future = 1 index = 0 def get_data(x): seq = [] next_val
= [] for i in range(0, len(x) - steps_of_history, steps_in_future): seq.append(x[i: i + steps_of_history]) next_val.append(x[i + steps_of_history]) seq = np.reshape(seq, [-1, steps_of_history, 1]) next_val = np.reshape(next_val, [-1, 1]) print(np.shape(seq)) trainX
= np.array(seq) trainY = np.array(next_val) return trainX, trainY def myRNN(x, activator, optimizer, domain=""): trainX, trainY = get_data(x) tf.reset_default_graph() # Network building net = tflearn.input_data(shape=[None, steps_of_history, 1]) net = tflearn.lstm(net, 32, dropout=0.8, bias=True) net = tflearn.fully_connected(net, 1, activation=activator) net = tflearn.regression(net, optimizer=optimizer, loss='mean_square') # customize==> #sgd = tflearn.SGD(learning_rate=0.1, lr_decay=0.96, decay_step=100) #network = tflearn.regression(net, optimizer=sgd, loss='mean_square') model = tflearn.DNN(net) """ net = tflearn.input_data(shape=[None, steps_of_history, 1]) net = tflearn.simple_rnn(net, n_units=32, return_seq=False) net = tflearn.fully_connected(net, 1, activation='linear') net = tflearn.regression(net, optimizer='sgd', loss='mean_square', learning_rate=0.1) # Training model = tflearn.DNN(net, clip_gradients=0.0, tensorboard_verbose=0) """ model.fit(trainX, trainY, n_epoch=100, validation_set=0.1, batch_size=128) # Testing #x = np.sin(np.arange(20*math.pi, 24*math.pi, step_radians)) seq = [] Y = [] for i in range(0, len(x) - steps_of_history, steps_in_future): seq.append(x[i: i + steps_of_history]) Y.append(x[i + steps_of_history]) seq = np.reshape(seq, [-1, steps_of_history, 1]) testX = np.array(seq) # Predict the future values predictY = model.predict(testX) print(predictY) # Plot the results plt.figure(figsize=(20,4)) plt.suptitle('Prediction') plt.title('History='+str(steps_of_history)+', Future='+str(steps_in_future)) plt.plot(Y, 'r-', label='Actual') plt.plot(predictY, 'gx', label='Predicted') plt.legend() if domain: plt.savefig('pku_'+activator+"_"+optimizer+"_"+domain+".png") else: plt.savefig('pku_'+activator+"_"+optimizer+".png") def main(): out_data = {} with open("out_data.json") as f: out_data = json.load(f) #x = out_data["www.coe.pku.edu.cn"] #myRNN(x, activator="prelu", optimizer="rmsprop", domain="www.coe.pku.edu.cn") # I find that prelu and rmsprop is best choice x = out_data["www.coe.pku.edu.cn"] activators = ['linear', 'tanh', 'sigmoid', 'softmax', 'softplus', 'softsign', 'relu', 'relu6', 'leaky_relu', 'prelu', 'elu'] optimizers = ['sgd', 'rmsprop', 'adam', 'momentum', 'adagrad', 'ftrl', 'adadelta'] for activator in activators: for optimizer in optimizers: print ("Running for : "+ activator + " & " + optimizer) myRNN(x, activator, optimizer) main()

梯度下降演算法是機器學習中使用非常廣泛的優化演算法,也是眾多機器學習演算法中最常用的優化方法。幾乎當前每一個先進的(state-of-the-art)機器學習庫或者深度學習庫都會包括梯度下降演算法的不同變種實現。但是,它們就像一個黑盒優化器,很難得到它們優缺點的實際解釋。這篇文章旨在提供梯度下降演算法中的不同變種的介紹,幫助使用者根據具體需要進行使用。

這篇文章首先介紹梯度下降演算法的三種框架,然後介紹它們所存在的問題與挑戰,接著介紹一些如何進行改進來解決這些問題,隨後,介紹如何在並行環境中或者分散式環境中使用梯度下降演算法。最後,指出一些有利於梯度下降的策略。

目錄

  • 三種梯度下降優化框架

  • 問題與挑戰

  • 梯度下降優化演算法

  • 演算法的視覺化

  • 選擇哪種優化演算法?

  • 並行與分散式SDG

  • 更多的SDG優化策略

  • 總結

  • 引用

三種梯度下降優化框架

梯度下降演算法是通過沿著目標函式J(θ)引數θ∈R的梯度(一階導數)相反方向−∇θJ(θ)來不斷更新模型引數來到達目標函式的極小值點(收斂),更新步長為η。

有三種梯度下降演算法框架,它們不同之處在於每次學習(更新模型引數)使用的樣本個數,每次更新使用不同的樣本會導致每次學習的準確性和學習時間不同。

  • 批量梯度下降(Batch gradient descent)

每次使用全量的訓練集樣本來更新模型引數,即: θ=θ−η⋅∇θJ(θ)

其程式碼如下:

epochs 是使用者輸入的最大迭代次數。通過上訴程式碼可以看出,每次使用全部訓練集樣本計算損失函式 loss_function 的梯度 params_grad,然後使用學習速率 learning_rate 朝著梯度相反方向去更新模型的每個引數params。一般各現有的一些機器學習庫都提供了梯度計算api。如果想自己親手寫程式碼計算,那麼需要在程式除錯過程中驗證梯度計算是否正確。

批量梯度下降每次學習都使用整個訓練集,因此其優點在於每次更新都會朝著正確的方向進行,最後能夠保證收斂於極值點(凸函式收斂於全域性極值點,非凸函式可能會收斂於區域性極值點),但是其缺點在於每次學習時間過長,並且如果訓練集很大以至於需要消耗大量的記憶體,並且全量梯度下降不能進行線上模型引數更新。

  • 隨機梯度下降(Stochastic gradient descent)

隨機梯度下降演算法每次從訓練集中隨機選擇一個樣本來進行學習,即: θ=θ−η⋅∇θJ(θ;xi;yi)

批量梯度下降演算法每次都會使用全部訓練樣本,因此這些計算是冗餘的,因為每次都使用完全相同的樣本集。而隨機梯度下降演算法每次只隨機選擇一個樣本來更新模型引數,因此每次的學習是非常快速的,並且可以進行線上更新。

其程式碼如下:

隨機梯度下降最大的缺點在於每次更新可能並不會按照正確的方向進行,因此可以帶來優化波動(擾動),如下圖:

圖1 SGD擾動

不過從另一個方面來看,隨機梯度下降所帶來的波動有個好處就是,對於類似盆地區域(即很多區域性極小值點)那麼這個波動的特點可能會使得優化的方向從當前的區域性極小值點跳到另一個更好的區域性極小值點,這樣便可能對於非凸函式,最終收斂於一個較好的區域性極值點,甚至全域性極值點。

由於波動,因此會使得迭代次數(學習次數)增多,即收斂速度變慢。不過最終其會和全量梯度下降演算法一樣,具有相同的收斂性,即凸函式收斂於全域性極值點,非凸損失函式收斂於區域性極值點。

  • 小批量梯度下降(Mini-batch gradient descent)

Mini-batch 梯度下降綜合了 batch 梯度下降與 stochastic 梯度下降,在每次更新速度與更新次數中間取得一個平衡,其每次更新從訓練集中隨機選擇 m,m<n 個樣本進行學習,即:

θ=θ−η⋅∇θJ(θ;xi:i+m;yi:i+m)

其程式碼如下:

相對於隨機梯度下降,Mini-batch梯度下降降低了收斂波動性,即降低了引數更新的方差,使得更新更加穩定。相對於全量梯度下降,其提高了每次學習的速度。並且其不用擔心記憶體瓶頸從而可以利用矩陣運算進行高效計算。一般而言每次更新隨機選擇[50,256]個樣本進行學習,但是也要根據具體問題而選擇,實踐中可以進行多次試驗,選擇一個更新速度與更次次數都較適合的樣本數。mini-batch梯度下降可以保證收斂性,常用於神經網路中。

問題與挑戰

雖然梯度下降演算法效果很好,並且廣泛使用,但同時其也存在一些挑戰與問題需要解決:

  • 選擇一個合理的學習速率很難。如果學習速率過小,則會導致收斂速度很慢。如果學習速率過大,那麼其會阻礙收斂,即在極值點附近會振盪。

  • 學習速率調整(又稱學習速率排程,Learning rate schedules)[11]試圖在每次更新過程中,改變學習速率,如退火。一般使用某種事先設定的策略或者在每次迭代中衰減一個較小的閾值。無論哪種調整方法,都需要事先進行固定設定,這邊便無法自適應每次學習的資料集特點[10]。

  • 模型所有的引數每次更新都是使用相同的學習速率。如果資料特徵是稀疏的或者每個特徵有著不同的取值統計特徵與空間,那麼便不能在每次更新中每個引數使用相同的學習速率,那些很少出現的特徵應該使用一個相對較大的學習速率。

  • 對於非凸目標函式,容易陷入那些次優的區域性極值點中,如在神經網路中。那麼如何避免呢。Dauphin[19]指出更嚴重的問題不是區域性極值點,而是鞍點。

梯度下降優化演算法

下面將討論一些在深度學習社群中經常使用用來解決上訴問題的一些梯度優化方法,不過並不包括在高維資料中不可行的演算法,如牛頓法。

  • Momentum

如果在峽谷地區(某些方向較另一些方向上陡峭得多,常見於區域性極值點)[1],SGD會在這些地方附近振盪,從而導致收斂速度慢。這種情況下,動量(Momentum)便可以解決[2]。

動量在引數更新項中加上一次更新量(即動量項),即: νt=γνt−1+η ∇θJ(θ),θ=θ−νt

其中動量項超引數γ<1一般是小於等於0.9。

其作用如下圖所示:

圖2 沒有動量

圖3 加上動量

加上動量項就像從山頂滾下一個球,求往下滾的時候累積了前面的動量(動量不斷增加),因此速度變得越來越快,直到到達終點。同理,在更新模型引數時,對於那些當前的梯度方向與上一次梯度方向相同的引數,那麼進行加強,即這些方向上更快了;對於那些當前的梯度方向與上一次梯度方向不同的引數,那麼進行削減,即這些方向上減慢了。因此可以獲得更快的收斂速度與減少振盪。

  • Nesterov accelerated gradient(NAG)

從山頂往下滾的球會盲目地選擇斜坡。更好的方式應該是在遇到傾斜向上之前應該減慢速度。

Nesterov accelerated gradient(NAG,涅斯捷羅夫梯度加速)不僅增加了動量項,並且在計算引數的梯度時,在損失函式中減去了動量項,即計算∇θJ(θ−γνt−1),這種方式預估了下一次引數所在的位置。即:

νt=γνt−1+η⋅∇θJ(θ−γνt−1),θ=θ−νt

如下圖所示:

圖4 NAG更新

詳細介紹可以參見Ilya Sutskever的PhD論文[9]。假設動量因子引數γ=0.9,首先計算當前梯度項,如上圖小藍色向量,然後加上動量項,這樣便得到了大的跳躍,如上圖大藍色的向量。這便是隻包含動量項的更新。而NAG首先來一個大的跳躍(動量項),然後加上一個小的使用了動量計算的當前梯度(上圖紅色向量)進行修正得到上圖綠色的向量。這樣可以阻止過快更新來提高響應性,如在RNNs中[8]。

通過上面的兩種方法,可以做到每次學習過程中能夠根據損失函式的斜率做到自適應更新來加速SGD的收斂。下一步便需要對每個引數根據引數的重要性進行各自自適應更新。

  • Adagrad

Adagrad[3]也是一種基於梯度的優化演算法,它能夠對每個引數自適應不同的學習速率,對稀疏特徵,得到大的學習更新,對非稀疏特徵,得到較小的學習更新,因此該優化演算法適合處理稀疏特徵資料。Dean等[4]發現Adagrad能夠很好的提高SGD的魯棒性,google便用起來訓練大規模神經網路(看片識貓:recognize cats in Youtube videos)。Pennington等[5]在GloVe中便使用Adagrad來訓練得到詞向量(Word Embeddings), 頻繁出現的單詞賦予較小的更新,不經常出現的單詞則賦予較大的更新。

Adagrad主要優勢在於它能夠為每個引數自適應不同的學習速率,而一般的人工都是設定為0.01。同時其缺點在於需要計算引數梯度序列平方和,並且學習速率趨勢是不斷衰減最終達到一個非常小的值。下文中的Adadelta便是用來解決該問題的。

  • Adam

Adaptive Moment Estimation (Adam) 也是一種不同引數自適應不同學習速率方法,與Adadelta與RMSprop區別在於,它計算曆史梯度衰減方式不同,不使用歷史平方衰減,其衰減方式類似動量,如下:

mt=β1mt−1+(1−β1)gt

vt=β2vt−1+(1−beta2)g2t

mt與vt分別是梯度的帶權平均和帶權有偏方差,初始為0向量,Adam的作者發現他們傾向於0向量(接近於0向量),特別是在衰減因子(衰減率)β1,β2接近於1時。為了改進這個問題,

對mt與vt進行偏差修正(bias-corrected):

mt^=mt1−betat1

vt^=vt1−betat2

最終,Adam的更新方程為:

θt+1=θt−ηvt^−−√+ϵmt^

論文中建議預設值:β1=0.9,β2=0.999,ϵ=10−8。論文中將Adam與其它的幾個自適應學習速率進行了比較,效果均要好。

演算法的視覺化

下面兩幅圖視覺化形象地比較上述各優化方法,如圖:

圖5 SGD各優化方法在損失曲面上的表現

從上圖可以看出, Adagrad、Adadelta與RMSprop在損失曲面上能夠立即轉移到正確的移動方向上達到快速的收斂。而Momentum 與NAG會導致偏離(off-track)。同時NAG能夠在偏離之後快速修正其路線,因為其根據梯度修正來提高響應性。

圖6 SGD各優化方法在損失曲面鞍點處上的表現

從上圖可以看出,在鞍點(saddle points)處(即某些維度上梯度為零,某些維度上梯度不為零),SGD、Momentum與NAG一直在鞍點梯度為零的方向上振盪,很難打破鞍點位置的對稱性;Adagrad、RMSprop與Adadelta能夠很快地向梯度不為零的方向上轉移

從上面兩幅圖可以看出,自適應學習速率方法(Adagrad、Adadelta、RMSprop與Adam)在這些場景下具有更好的收斂速度與收斂性。

如何選擇SGD優化器

如果你的資料特徵是稀疏的,那麼你最好使用自適應學習速率SGD優化方法(Adagrad、Adadelta、RMSprop與Adam),因為你不需要在迭代過程中對學習速率進行人工調整。

RMSprop是Adagrad的一種擴充套件,與Adadelta類似,但是改進版的Adadelta使用RMS去自動更新學習速率,並且不需要設定初始學習速率。而Adam是在RMSprop基礎上使用動量與偏差修正。RMSprop、Adadelta與Adam在類似的情形下的表現差不多。Kingma[15]指出收益於偏差修正,Adam略優於RMSprop,因為其在接近收斂時梯度變得更加稀疏。因此,Adam可能是目前最好的SGD優化方法。

有趣的是,最近很多論文都是使用原始的SGD梯度下降演算法,並且使用簡單的學習速率退火調整(無動量項)。現有的已經表明:SGD能夠收斂於最小值點,但是相對於其他的SGD,它可能花費的時間更長,並且依賴於魯棒的初始值以及學習速率退火調整策略,並且容易陷入區域性極小值點,甚至鞍點。因此,如果你在意收斂速度或者訓練一個深度或者複雜的網路,你應該選擇一個自適應學習速率的SGD優化方法。

並行與分散式SGD

如果你處理的資料集非常大,並且有機器叢集可以利用,那麼並行或分散式SGD是一個非常好的選擇,因為可以大大地提高速度。SGD演算法的本質決定其是序列的(step-by-step)。因此如何進行非同步處理便是一個問題。雖然序列能夠保證收斂,但是如果訓練集大,速度便是一個瓶頸。如果進行非同步更新,那麼可能會導致不收斂。下面將討論如何進行並行或分散式SGD,並行一般是指在同一機器上進行多核並行,分散式是指叢集處理。

  • Hogwild

Niu[23]提出了被稱為Hogwild的並行SGD方法。該方法在多個CPU時間進行並行。處理器通過共享記憶體來訪問引數,並且這些引數不進行加鎖。它為每一個cpu分配不重疊的一部分引數(分配互斥),每個cpu只更新其負責的引數。該方法只適合處理資料特徵是稀疏的。該方法幾乎可以達到一個最優的收斂速度,因為cpu之間不會進行相同資訊重寫。

  • Downpour SGD

Downpour SGD是Dean[4]提出的在DistBelief(Google TensorFlow的前身)使用的SGD的一個非同步變種。它在訓練子集上訓練同時多個模型副本。這些副本將各自的更新發送到引數伺服器(PS,parameter server),每個引數伺服器只更新互斥的一部分引數,副本之間不會進行通訊。因此可能會導致引數發散而不利於收斂。

  • Delay-tolerant Algorithms for SGD

McMahan與Streeter[12]擴充套件AdaGrad,通過開發延遲容忍演算法(delay-tolerant algorithms),該演算法不僅自適應過去梯度,並且會更新延遲。該方法已經在實踐中表明是有效的。

  • TensorFlow

TensorFlow[13]是Google開源的一個大規模機器學習庫,它的前身是DistBelief。它已經在大量移動裝置上或者大規模分散式叢集中使用了,已經經過了實踐檢驗。其分散式實現是基於圖計算,它將圖分割成多個子圖,每個計算實體作為圖中的一個計算節點,他們通過Rend/Receive來進行通訊。

  • Elastic Averaging SGD

Zhang等[14]提出Elastic Averaging SGD(EASGD),它通過一個elastic force(儲存引數的引數伺服器中心)來連線每個work來進行引數非同步更新。

更多的SGD優化策略

接下來介紹更多的SGD優化策略來進一步提高SGD的效能。另外還有眾多其它的優化策略,可以參見[22]。

  • Shuffling and Curriculum Learning

為了使得學習過程更加無偏,應該在每次迭代中隨機打亂訓練集中的樣本。

另一方面,在很多情況下,我們是逐步解決問題的,而將訓練集按照某個有意義的順序排列會提高模型的效能和SGD的收斂性,如何將訓練集建立一個有意義的排列被稱為Curriculum Learning[16]。

Zaremba與Sutskever[17]在使用Curriculum Learning來訓練LSTMs以解決一些簡單的問題中,表明一個相結合的策略或者混合策略比對訓練集按照按照訓練難度進行遞增排序要好。

  • Batch normalization

為了方便訓練,我們通常會對引數按照0均值1方差進行初始化,隨著不斷訓練,引數得到不同程度的更新,這樣這些引數會失去0均值1方差的分佈屬性,這樣會降低訓練速度和放大引數變化隨著網路結構的加深。

Batch normalization[18]在每次mini-batch反向傳播之後重新對引數進行0均值1方差標準化。這樣可以使用更大的學習速率,以及花費更少的精力在引數初始化點上。Batch normalization充當著正則化、減少甚至消除掉Dropout的必要性。

  • Early stopping

在驗證集上如果連續的多次迭代過程中損失函式不再顯著地降低,那麼應該提前結束訓練,詳細參見NIPS 2015 Tutorial slides,或者參見防止過擬合的一些方法。

  • Gradient noise

Gradient noise[21]即在每次迭代計算梯度中加上一個高斯分佈N(0,σ2t)的隨機誤差,即

gt,i=gt,i+N(0,σ2t)

高斯誤差的方差需要進行退火:

σ2t=η(1+t)γ

對梯度增加隨機誤差會增加模型的魯棒性,即使初始引數值選擇地不好,並適合對特別深層次的負責的網路進行訓練。其原因在於增加隨機噪聲會有更多的可能性跳過區域性極值點並去尋找一個更好的區域性極值點,這種可能性在深層次的網路中更常見。

總結

在上文中,對梯度下降演算法的三種框架進行了介紹,並且mini-batch梯度下降是使用最廣泛的。隨後,我們重點介紹了SGD的一些優化方法:Momentum、NAG、Adagrad、Adadelta、RMSprop與Adam,以及一些非同步SGD方法。最後,介紹了一些提高SGD效能的其它優化建議,如:訓練集隨機洗牌與課程學習(shuffling and curriculum learning)、batch normalization、early stopping 與 Gradient noise。

希望這篇文章能給你提供一些關於如何使用不同的梯度優化演算法方面的指導。如果還有更多的優化建議或方法還望大家提出來?或者你使用什麼技巧和方法來更好地訓練SGD可以一起交流?Thanks。

本文譯文授權轉載自CSDN

由於微信文章字數限制,本文未列出全部參考文獻,請戳原文檢視。

原文連結:http://sebastianruder.com/optimizing-gradient-descent/index.html

相關推薦

深度學習必備隨機梯度下降SGD優化演算法視覺

補充在前:實際上在我使用LSTM為流量基線建模時候,發現有效的啟用函式是elu、relu、linear、prelu、leaky_relu、softplus,對應的梯度演算法是adam、mom、rmsprop、sgd,效果最好的組合是:prelu+rmsprop。我的程式碼如下: # Simple examp

深度學習筆記之【隨機梯度下降SGD

筆記 優化問題 toc 最終 來看 應用 優化算法 樣本 找到 隨機梯度下降 幾乎所有的深度學習算法都用到了一個非常重要的算法:隨機梯度下降(stochastic gradient descent,SGD) 隨機梯度下降是梯度下降算法的一個擴展 機器學習中一個反復出現的

深度學習反向傳播---隨機梯度下降

一、誤差準則函式與隨機梯度下降: 數學一點將就是,對於給定的一個點集(X,Y),找到一條曲線或者曲面,對其進行擬合之。同時稱X中的變數為特徵(Feature),Y值為預測值。 如圖: 一個典型的機器學習的過程,首先給出一組輸入資料X,我們的演算法會通過一系列的過程得到一個

深度學習tensorboard使用記錄windows

TensorBoard 的視覺化工具,可以用來展現你的 TensorFlow 影象,繪製圖像生成的定量指標圖以及附加資料。 tensorBoard的使用設計如下幾個函式: 第一、建立一個事件檔案 summary_waiter = tf.summary.F

深度學習十一Deep learning中的優化方法隨機梯度下降、受限的BFGS、共軛梯度

  三種常見優化演算法:SGD(隨機梯度下降),LBFGS(受限的BFGS),CG(共軛梯度法)。      1.SGD(隨機梯度下降)        隨機梯度下降(Stochastic Gradient Descent, SGD)是隨機和優化相結合的產物,是一種很神奇的優化方法,屬於

監督學習隨機梯度下降算法sgd和批梯度下降算法bgd

這就是 影響 個數 執行 類型 http 關系 col pla 線性回歸 首先要明白什麽是回歸。回歸的目的是通過幾個已知數據來預測另一個數值型數據的目標值。 假設特征和結果滿足線性關系,即滿足一個計算公式h(x),這個公式的自變量就是已知的數據x,

學習筆記13隨機梯度下降Stochastic gradient descent, SGD

假設我們提供了這樣的資料樣本(樣本值取自於y=3*x1+4*x2):x1x2y1419252651194229x1和x2是樣本值,y是預測目標,我們需要以一條直線來擬合上面的資料,待擬合的函式如下:我們

Hulu機器學習問題與解答系列 | 二十四隨機梯度下降

叠代 -s nbsp xib 大量 步長 空間 圖片 ges Hulu優秀的作者們每天和公式抗爭,只為提升你們的技能,感動的話就把文章看完,然後哭一個吧。 今天的內容是 【隨機梯度下降法】 場景描述 深度學習得以在近幾年迅速占領工業界和學術界的高地,重要原因之一是數

谷歌機器學習速成課程---降低損失 (Reducing Loss)隨機梯度下降

計算 機器 OS 隨機梯度下降法 術語表 表示 機器學習 放心 使用 在梯度下降法中,批量指的是用於在單次叠代中計算梯度的樣本總數。到目前為止,我們一直假定批量是指整個數據集。就 Google 的規模而言,數據集通常包含數十億甚至數千億個樣本。此外,Google 數據集通常

深度學習的異構加速技術螺獅殼裏做道場

篩選 分享 intel 支持 get 更多 wid efficient 優勢 作者簡介:kevinxiaoyu,高級研究員,隸屬騰訊TEG-架構平臺部,主要研究方向為深度學習異構計算與硬件加速、FPGA雲、高速視覺感知等方向的構架設計和優化。“深度學習的異構加速技術”系列

吳恩達《深度學習》第四門課2卷積神經網絡實例探究

之一 所有 展示 數據擴充 簡介 設置 假設 通道 開源 2.1為什麽要進行實例探究 (1)就跟學編程一樣,先看看別人怎麽寫的,可以模仿。 (2)在計算機視覺中一個有用的模型,,用在另一個業務中也一般有效,所以可以借鑒。 (3)本周會介紹的一些卷積方面的經典網絡經典的包括:

深度學習——線性單元和梯度下降

每次 總結 只知道 指向 預測 模型 pre 叠代 $$ 機器學習的一些基本概念,模型、目標函數、優化算法等等,這些概念對於機器學習算法來說都是通用的套路。 線性單元   當我們面對的數據不是線性可分的時候,感知器規則就無法收斂,為了解決這個問題,我們使用一個可導的線性

機器學習 優化演算法利器之梯度下降Gradient Descend

理解:機器學習各種演算法的求解最終出來的幾乎都是求解最優模型引數的優化問題。 前言        在優化問題領域有些很多優秀思想和演算法,從約束條件分類 分為無約束條件的優化和有約束條件的優化問題,有約束條

【吳恩達機器學習筆記】005 梯度下降Gradient Descent

一、引入        在前幾節課我們講到,我們希望能夠找到曲線擬合效果最好的線條,這樣的線條的誤差最小,所以就轉化成了下面這幅圖所表達的內容。        我們有一些函式,這些函式會有n個引數,我們希望能得到這個函式的最小值,為了方便計算,我們從最簡單的入手,讓引數的個數

深度學習的異構加速技術螺獅殼裡做道場

作者簡介:kevinxiaoyu,高階研究員,隸屬騰訊TEG-架構平臺部,主要研究方向為深度學習異構計算與硬體加速、FPGA雲、高速視覺感知等方向的構架設計和優化。“深度學習的異構加速技術”系列共有三篇文章,主要在技術層面,對學術界和工業界異構加速的構架演

Pytorch_第七篇_深度學習 (DeepLearning) 基礎 [3]---梯度下降

# 深度學習 (DeepLearning) 基礎 [3]---梯度下降法 --- ## Introduce 在上一篇[“深度學習 (DeepLearning) 基礎 [2]---神經網路常用的損失函式”](https://www.cnblogs.com/wangqinze/p/13433418.html)中我

吳恩達《深度學習》第四門課1卷積神經網絡

圖像分割 1.5 共享 信號處理 soft 沒有 樣本 填充 單元 1.1計算機視覺 (1)計算機視覺的應用包括圖像分類、目標檢測、圖像分割、風格遷移等,下圖展示了風格遷移案例: (2)圖像的特征量非常之大,比如一個3通道的1000*1000的照片,其特征為3*1000*

吳恩達《深度學習》第五門課2自然語言處理與詞嵌入

星級 技術 ima lac 個數 應該 ras 時有 根據 2.1詞匯表征 (1)使用one-hot方法表示詞匯有兩個主要的缺點,以10000個詞為例,每個單詞需要用10000維來表示,而且只有一個數是零,其他維度都是1,造成表示非常冗余,存儲量大;第二每個單詞表示的向量相

python資料分析新手入門課程學習——探索分析與視覺來源慕課網

 一,單因子與對比分析視覺化 資料 import pandas as pd df = pd.read_csv('./HR.csv') #檢視前十條資料 df.head(10) 以下為顯示的結果 我們可以看出: 第一個屬性satisf

深度學習上的超解析度認知

從本質上對深度學習和超解析度進行梳理 溫故而知新 超解析度 作為處理影象的其中一個問題,和它同一個層次的還有降噪(Denoising),抗模糊(Deblurring),缺失修復(Inpainting)。難度(相對的)也是依次遞增的。傳統觀念上講,他們每一個的處理方式都有各自專門的