導航:首頁 > 網路安全 > 訓練時如何優化網路

訓練時如何優化網路

發布時間:2022-12-31 19:09:48

如何優化Wi-Fi無線網路環境 提升速率

一、擺放好路由器的位置
路由器的位置以及如何擺放,是最基礎的,也是最容易忽視的實現高效無線網路的手段。大多數人將路由器放隨意放置在第一個不佔用房間地盤的位置上,這是個重大的錯誤。
你可以把無線路由器想像成球體的中心,網路連接從它的天線向各個方向延伸。我的建議是將4G路由器盡可能近地擺放在必須覆蓋到的住宅或辦公室的物理中心。從建築平面圖或草圖入手,畫出來自各個角落的對角線來確定中心位置。
當然,一些人不能採用這個建議。也許建築的中心有堵石牆或磚砌的煙囪,或者網線從可能最糟的位置引入建築。如果出於某種原因,你不能把天線放置在理想的中央位置的話,請不要失望,後面我們還會介紹其他的解決辦法。
現在,請到處看看,為路由器找個好家。避開角落(尤其在老房子中)是第一步,因為角落會在信號穿過時減弱信號。此外,也不要把路由器放在壁櫥中,書櫃或娛樂中心是不顯眼地放置路由器的好地方。
無線路由器需要交流電源插座和與你的有線電纜或DSL數據源的連接。而如果建築的DSL或有線電纜數據機線路處在一個不方便的位置,請不要驚慌,你可以使用定向天線(下次的連載文章我們會提到),或者延長你的DSL和有線電纜線路。
如果你選擇了後者,就會發現為使你的路由器可以擺放在正確的地方而穿牆破壁鋪設線路是個費力且費錢的工程,並且會造成破壞。作為另一種選擇,可以考慮使用細同軸電纜或乙太網線纜,這類包裹在膠帶中的線纜可以很容易地插入牆壁。
在將線纜引到所需要的位置後,塗上一層薄薄的粘合劑或石膏,然後再塗上顏料,它將成為你的小秘密。
二、設置好路由器的QoS
大多數售出的無線路由器都具有「QoS」功能,但是你可能還是希望能夠更新路由器的固件來解決問題。就拿一台才茂CM8565R4G路由器來舉例吧,如果想優化無線網路性能,我們可以通過配置程序做一些改變。
首先確定你的設備是支持「WMM」(Wi-Fi多媒體)的,如果支持支持「WMM」,你就可以在「應用和游戲」的選項當中找到QoS的菜單。
然後,將「Internet Access Priority」(互聯網接入優先權)配置到你的語音和多媒體應用上。然後在下拉菜單的各個具體應用上進行選擇,可以選擇優先等級(高、中、普通或者低),再點擊「添加」按鈕。
比如你可以設置成給「BitTorrent」和其他下載服務一個較低的優先順序,同時給你的「VoIP」服務一個較高的優先順序,合理分配網路帶寬,提高無線網路性能。
說到「WMM」,它其實是IEEE 802.11e標準的一個子集,後者定義了Wi-Fi的服務品質(QoS)。如果沒有QoS,所有運行於不同設備的應用程序都擁有相同的傳輸數據幀的機會。
對於來自 web 瀏覽器、文件傳輸或電子郵件等應用程序的數據流量來說,這種方式運行得很好,但對於多媒體應用程序而言,這種方式就力不從心了。VoIP、視頻流和互動游戲對延遲時間的增加和吞吐量的降低都高度敏感,WMM縮短了流量優先順序高的數據包的傳輸時間。
目前,支持Wi-Fi功能的VoIP電話、電視機、游戲機等消費電子產品中,有越來越多的產品都支持WMM功能,相關的無線路由器設備也是如此。
此外,通過有些設備還可以幫助你將優先順序設置在特定的語音設備上,做到優化無線網路性能的目的。比如直接連到你的無線網路中的VoIP電話。同時,並不是所有的路由器都可以在具體的應用或設備上配置優先順序。
不過,你至少可以啟動「QoS」或「WMM」功能,它們將幫助你自動地優化多媒體傳輸流,這些設置在很多路由器里是默認為關閉的,只要開啟它們,就有助於合理分配有限的網路帶寬,提高無線網路的性能。

Ⅱ 常用優化器演算法歸納介紹

優化器是神經網路訓練過程中,進行梯度下降以尋找最優解的優化方法。不同方法通過不同方式(如附加動量項,學習率自適應變化等)側重於解決不同的問題,但最終大都是為了加快訓練速度。

這里就介紹幾種常見的優化器,包括其原理、數學公式、核心思想及其性能;

核心思想: 即針對每次輸入的訓練數據,計算輸出預測與真值的Loss的梯度;

從表達式來看,網路中參數的更新,是不斷向著最小化Loss函數的方向移動的:

優點:
簡單易懂,即對於相應的最優解(這里認為是Loss的最小函數),每次變數更新都是沿著局部梯度下降最快的方向,從而最小化損失函數。

缺點:

不同於標准梯度下降法(Gradient Descent)一次計算所有數據樣本的Loss並計算相應的梯度,批量梯度下降法(BGD, Batch Gradient Descent)每次只取一個小批次的數據及其真實標簽進行訓練,稱這個批次為mini-batch;

優點:

缺點:
隨機梯度下降法的 batch size 選擇不當可能導致模型難以收斂;由於這種方法是在一次更新中,就對整個數據集計算梯度,所以計算起來非常慢,遇到很大量的數據集也會非常棘手,而且不能投入新數據實時更新模型。

我們會事先定義一個迭代次數 epoch,首先計算梯度向量 params_grad,然後沿著梯度的方向更新參數 params,learning rate 決定了我們每一步邁多大。

Batch gradient descent 對於凸函數可以收斂到全局極小值,對於非凸函數可以收斂到局部極小值。

和 BGD 的一次用所有數據計算梯度相比,SGD 每次更新時對每個樣本進行梯度更新,對於很大的數據集來說,可能會有相似的樣本,這樣 BGD 在計算梯度時會出現冗餘,而 SGD 一次只進行一次更新,就沒有冗餘,而且比較快,並且可以新增樣本。

即訓練時,每次只從一批訓練樣本中隨機選取一個樣本進行梯度下降;對隨機梯度下降來說,只需要一次關注一個訓練樣本,一點點把參數朝著全局最小值的方向進行修改了。

整體數據集是個循環,其中對每個樣本進行一次參數更新

缺點:

梯度下降速度比較慢,而且每次梯度更新時往往只專注與局部最優點,而不會恰好指向全局最優點;

單樣本梯度更新時會引入許多雜訊(跟訓練目標無關的特徵也會被歸為該樣本分類的特徵);

SGD 因為更新比較頻繁,會造成 cost function 有嚴重的震盪。

BGD 可以收斂到局部極小值,當然 SGD 的震盪可能會跳到更好的局部極小值處。

當我們稍微減小 learning rate,SGD 和 BGD 的收斂性是一樣的。

優點:

當處理大量數據時,比如SSD或者faster-rcnn等目標檢測模型,每個樣本都有大量候選框參與訓練,這時使用隨機梯度下降法能夠加快梯度的計算。

隨機梯度下降是通過每個樣本來迭代更新一次,如果樣本量很大的情況,那麼可能只用其中部分的樣本,就已經將 迭代到最優解了,對比上面的批量梯度下降,迭代一次需要用到十幾萬訓練樣本,一次迭代不可能最優,如果迭代10次的話就需要遍歷訓練樣本10次。缺點是SGD的噪音較BGD要多,使得SGD並不是每次迭代都向著整體最優化方向。所以雖然訓練速度快,但是准確度下降,並不是全局最優。雖然包含一定的隨機性,但是從期望上來看,它是等於正確的導數的。

梯度更新規則:

MBGD 每一次利用一小批樣本,即 n 個樣本進行計算,這樣它可以降低參數更新時的方差,收斂更穩定,另一方面可以充分地利用深度學習庫中高度優化的矩陣操作來進行更有效的梯度計算。

和 SGD 的區別是每一次循環不是作用於每個樣本,而是具有 n 個樣本的批次。

超參數設定值: n 一般取值在 50~256

缺點:(兩大缺點)

鞍點就是:一個光滑函數的鞍點鄰域的曲線,曲面,或超曲面,都位於這點的切線的不同邊。例如這個二維圖形,像個馬鞍:在x-軸方嚮往上曲,在y-軸方嚮往下曲,鞍點就是(0,0)。

為了應對上面的兩點挑戰就有了下面這些演算法

核心思想:

不使用動量優化時,每次訓練的梯度下降方向,都是按照當前批次訓練數據計算的,可能並不能代表整個數據集,並且會有許多雜訊,下降曲線波動較大:

添加動量項之後,能夠有效減小波動,從而加快訓練速度:

當我們將一個小球從山上滾下來時,沒有阻力的話,它的動量會越來越大,但是如果遇到了阻力,速度就會變小。
加入的這一項,可以使得梯度方向不變的維度上速度變快,梯度方向有所改變的維度上的更新速度變慢,這樣就可以加快收斂並減小震盪。

優點:

通過動量更新,參數向量會在有持續梯度的方向上增加速度;
使梯度下降時的折返情況減輕,從而加快訓練速度;

缺點:

如果數據集分類復雜,會導致 和 時刻梯度 向量方向相差較大;在進行向量求和時,得到的 會非常小,反而使訓練速度大大下降甚至模型難以收斂。

這種情況相當於小球從山上滾下來時是在盲目地沿著坡滾,如果它能具備一些先知,例如快要上坡時,就知道需要減速了的話,適應性會更好。

目前為止,我們可以做到,在更新梯度時順應 loss function 的梯度來調整速度,並且對 SGD 進行加速。

核心思想:

自適應學習率優化演算法針對於機器學習模型的學習率,採用不同的策略來調整訓練過程中的學習率,從而大大提高訓練速度。

這個演算法就可以對低頻的參數做較大的更新,對高頻的做較小的更新,也因此,對於稀疏的數據它的表現很好,很好地提高了 SGD 的魯棒性,例如識別 Youtube 視頻裡面的貓,訓練 GloVe word embeddings,因為它們都是需要在低頻的特徵上有更大的更新。

Adagrad 的優點是減少了學習率的手動調節

式中, 表示第 個分類, 表示第 迭代同時也表示分類 累計出現的次數。 表示初始的學習率取值(一般為0.01)

AdaGrad的核心思想: 縮放每個參數反比於其所有梯度歷史平均值總和的平方根。具有代價函數最大梯度的參數相應地有較大的學習率,而具有小梯度的參數又較小的學習率。

缺點:

它的缺點是分母會不斷積累,這樣學習率就會收縮並最終會變得非常小。

這個演算法是對 Adagrad 的改進,

和 Adagrad 相比,就是分母的 換成了過去的梯度平方的衰減平均值,指數衰減平均值

這個分母相當於梯度的均方根 root mean squared (RMS),在數據統計分析中,將所有值平方求和,求其均值,再開平方,就得到均方根值 ,所以可以用 RMS 簡寫:

其中 的計算公式如下, 時刻的依賴於前一時刻的平均和當前的梯度:

梯度更新規則:

此外,還將學習率 換成了 RMS[Δθ],這樣的話,我們甚至都不需要提前設定學習率了:

超參數設定值: 一般設定為 0.9

RMSprop 是 Geoff Hinton 提出的一種自適應學習率方法。

RMSprop 和 Adadelta 都是為了解決 Adagrad 學習率急劇下降問題的,

梯度更新規則:

RMSprop 與 Adadelta 的第一種形式相同:(使用的是指數加權平均,旨在消除梯度下降中的擺動,與Momentum的效果一樣,某一維度的導數比較大,則指數加權平均就大,某一維度的導數比較小,則其指數加權平均就小,這樣就保證了各維度導數都在一個量級,進而減少了擺動。允許使用一個更大的學習率η)

超參數設定值:

Hinton 建議設定 為 0.9, 學習率 為 0.001。

這個演算法是另一種計算每個參數的自適應學習率的方法。相當於 RMSprop + Momentum

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

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

梯度更新規則:

超參數設定值:
建議

示例一

示例二

示例三

上面情況都可以看出,Adagrad, Adadelta, RMSprop 幾乎很快就找到了正確的方向並前進,收斂速度也相當快,而其它方法要麼很慢,要麼走了很多彎路才找到。

由圖可知自適應學習率方法即 Adagrad, Adadelta, RMSprop, Adam 在這種情景下會更合適而且收斂性更好。

如果數據是稀疏的,就用自適用方法,即 Adagrad, Adadelta, RMSprop, Adam。

RMSprop, Adadelta, Adam 在很多情況下的效果是相似的。

Adam 就是在 RMSprop 的基礎上加了 bias-correction 和 momentum,

隨著梯度變的稀疏,Adam 比 RMSprop 效果會好。

整體來講,Adam 是最好的選擇。

很多論文里都會用 SGD,沒有 momentum 等。SGD 雖然能達到極小值,但是比其它演算法用的時間長,而且可能會被困在鞍點。

如果需要更快的收斂,或者是訓練更深更復雜的神經網路,需要用一種自適應的演算法。

各種優化器Optimizer原理:從SGD到AdamOptimizer

深度學習——優化器演算法Optimizer詳解(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)

Ⅲ 網路慢如何優化

首要要看樓主的網路慢是什麼問題

一般有以下幾個原因

一、網路自身問題
您想要連接的目標網站所在的伺服器帶寬不足或負載過大。處理辦法很簡單,請換個時間段再上或者換個目標網站。
二、網線問題導致網速變慢
我們知道,雙絞線是由四對線按嚴格的規定緊密地絞和在一起的,用來減少串擾和背景噪音的影響。同時,在T568A標准和T568B標准中僅使用了雙絞線的1、2和3、6四條線,其中,1、2用於發送,3、6用於接收,而且1、2必須來自一個繞對,3、6必須來自一個繞對。只有這樣,才能最大限度地避免串擾,保證數據傳輸。不按正確標准(T586A、T586B)製作的網線,存在很大的隱患。表現為:一種情況是剛開始使用時網速就很慢;另一種情況則是開始網速正常,但過了一段時間後,網速變慢。後一種情況在台式電腦上表現非常明顯,但用筆記本電腦檢查時網速卻表現為正常。因不按正確標准製作的網線引起的網速變慢還同時與網卡的質量有關。一般台式計算機的網卡的性能不如筆記本電腦的,因此,在用交換法排除故障時,使用筆記本電腦檢測網速正常並不能排除網線不按標准製作這一問題的存在。我們現在要求一律按T586A、T586B標准來壓制網線,在檢測故障時不能一律用筆記本電腦來代替台式電腦。
三、網路中存在迴路導致網速變慢
當網路涉及的節點數不是很多、結構不是很復雜時,這種現象一般很少發生。但在一些比較復雜的網路中,經常有多餘的備用線路,如無意間連上時會構成迴路。比如網線從網路中心接到計算機一室,再從計算機一室接到計算機二室。同時從網路中心又有一條備用線路直接連到計算機二室,若這幾條線同時接通,則構成迴路,數據包會不斷發送和校驗數據,從而影響整體網速。這種情況查找比較困難。為避免這種情況發生,要求我們在鋪設網線時一定養成良好的習慣:網線打上明顯的標簽,有備用線路的地方要做好記載。當懷疑有此類故障發生時,一般採用分區分段逐步排除的方法。
四、網路設備硬體故障引起的廣播風暴而導致網速變慢
作為發現未知設備的主要手段,廣播在網路中起著非常重要的作用。然而,隨著網路中計算機數量的增多,廣播包的數量會急劇增加。當廣播包的數量達到30%時,網路的傳輸效率將會明顯下降。當網卡或網路設備損壞後,會不停地發送廣播包,從而導致廣播風暴,使網路通信陷於癱瘓。因此,當網路設備硬體有故障時也會引起網速變慢。當懷疑有此類故障時,首先可採用置換法替換集線器或交換機來排除集線設備故障。如果這些設備沒有故障,關掉集線器或交換機的電源後,DOS下用「Ping」命令對所涉及計算機逐一測試,找到有故障網卡的計算機,更換新的網卡即可恢復網速正常。網卡、集線器以及交換機是最容易出現故障引起網速變慢的設備。
五、網路中某個埠形成了瓶頸導致網速變慢
實際上,路由器廣域網埠和區域網埠、交換機埠、集線器埠和伺服器網卡等都可能成為網路瓶頸。當網速變慢時,我們可在網路使用高峰時段,利用網管軟體查看路由器、交換機、伺服器埠的數據流量;也可用Netstat命令統計各個埠的數據流量。據此確認網路數據流通瓶頸的位置,設法增加其帶寬。具體方法很多,如更換伺服器網卡為100M或1000M、安裝多個網卡、劃分多個VLAN、改變路由器配置來增加帶寬等,都可以有效地緩解網路瓶頸,可以最大限度地提高數據傳輸速度。
六、蠕蟲病毒的影響導致網速變慢
通過E-mail散發的蠕蟲病毒對網路速度的影響越來越嚴重,危害性極大。這種病毒導致被感染的用戶只要一上網就不停地往外發郵件,病毒選擇用戶個人電腦中的隨機文檔附加在用戶機子的通訊簿的隨機地址上進行郵件發送。成百上千的這種垃圾郵件有的排著隊往外發送,有的又批成批地被退回來堆在伺服器上。造成個別骨幹互聯網出現明顯擁塞,網速明顯變慢,使區域網近於癱瘓。因此,我們必須及時升級所用殺毒軟體;計算機也要及時升級、安裝系統補丁程序,同時卸載不必要的服務、關閉不必要的埠,以提高系統的安全性和可靠性。
七、防火牆的過多使用
防火牆的過多使用也可導致網速變慢,處理辦法不必多說,卸載下不必要的防火牆只保留一個功能強大的足以。
八、系統資源不足
您可能載入了太多的運用程序在後台運行,請合理的載入軟體或刪除無用的程序及文件,將資源空出,以達到提高網速的目的。

希望對樓主有所幫助~~

Ⅳ 神經網路的訓練可以採用二階優化方法嗎

1. 時間復雜度:使用二階方法通常需要直接計算或者近似估計Hessian矩陣,這部分的時間損耗使得其相比一階方法在收斂速度上帶來的優勢完全被抵消;
2. 某些非線性網路層很難(或不可能)使用二階方法優化:如果這個情況為真,那是否可能針對每個網路層使用不同的優化方案,比如像Fully-Connected Layer這樣的簡單線性映射操作使用二階方法,非線性網路層使用傳統梯度下降方法?
3. 二階方法容易被saddle points吸引,難以到達local minimal或者global minimal:NIPS 2014有篇論文([1406.2572] Identifying and attacking the saddle point problem in high-dimensional non-convex optimization)認為在高維情況下,神經網路優化最大的問題不是網路容易到達local minimal,而是容易被saddle points困住,因為在這種情況下,local minimal不管在loss值還是泛化能力上都與global minimal相差不大,反而是非常多的saddle points存在loss較高的空間中。

Ⅳ 深層神經網路的超參數調試、正則化及優化

訓練集  ( Training set )

       作用是用來擬合模型,通過設置分類器的參數,訓練分類模型。後續結合驗證集作用時,會選出同一參數的不同取值,擬合出多個分類器。

驗證集  ( Dev set )

       作用是當通過訓練集訓練出多個模型後,為了能找出效果最佳的模型,使用各個模型對驗證集數據進行預測,並記錄模型准確率。選出效果最佳的模型所對應的參數,即用來調整模型參數。如svm中的參數c和核函數等。

測試集 ( Test set )

       通過訓練集和驗證集得出最優模型後,使用測試集進行模型預測。用來衡量該最優模型的性能和分類能力。即可以把測試集當做從來不存在的數據集,當已經確定模型參數後,使用測試集進行模型性能評價。

一個有助於理解的形象比喻:

        訓練集 ——  課本,學生根據課本里的內容來掌握知識。

        驗證集 —— 作業,通過作業可以知道 不同學生學習情況、進步的速度快慢。

        測試集 ——  考試,考的題是平常都沒有見過,考察學生舉一反三的能力。

        訓練集  直接參與了模型調參的過程,顯然不能用來反映模型真實的能力(防止課本死記硬背的學生擁有最好的成績,即防止 過擬合 ) 。

        驗證集  參與了人工調參(超參數)的過程,也不能用來最終評判一個模型(刷題庫的學生不代表其學習能力強)。

       所以要通過最終的考試 (測試集) 來考察一個學生(模型)真正的能力。

       如何將只有一個包含m個樣例的數據集D,產生出訓練集S和測試集T(驗證集可以省略)?主要有以下三種方法:

自助法 ( bootstrapping )

       給定m個樣本的數據集D,我們對它進行采樣產生數據集D',每次隨機從D中挑選一個樣本,將其拷貝入D',然後再將樣本放回原始數據集D。顯然,該樣本在下次采樣時任然有可能被採到。這個過程重復m次後,我們就得到了含有m個樣本的數據集D',這就是自助采樣的結果。         樣本有重復采樣,也有一次也沒有被採到的。從未採到的結果是 ,取極限得到

                                           

因此,使用自助法約有1/3的數據集沒有被選中過,它們用於測試,這種方式叫「外包估計」。

       自助法在數據集小,難以劃分訓練集、測試集的時候有很大的效果,如果數據集足夠大的時候,留出法和交叉驗證是更好的選擇。

留出法 ( hold-out )

       將整個數據集D劃分為兩個互斥的集合,其中一個作為訓練集S,另一個作為測試集T。即,D=S∪T,S∩T=∅。在S上訓練出模型,T作為測試集,來評估模型效果。

       當樣本數據量較小(10000條左右及以下)時,通常取其中70%作為訓練集,30%作為測試集;或60%作為訓練集,驗證集和測試集各20%。

交叉驗證法 ( cross validation )

       如圖所示,交叉驗證法的實現流程大致如下:

       (1) 將整個數據集分成k個大小相似的子集,即D=D1∪D2∪...∪Dk,Di∩Dj=∅(故又稱k折交叉驗證法,通常取k=10 )。

       (2) 對於每一個模型Mi,演算法執行k次,每次選擇一個Sj(1≤j≤k)作為測試集,其它作為訓練集來訓練模型Mi,把訓練得到的模型在Sj上進行測試,這樣一來,每次都會得到一個誤差E,最後對k次得到的誤差求平均,就可以得到模型Mi的泛化誤差。

       (3) 演算法選擇具有最小泛化誤差的模型作為最終模型,並且在整個訓練集上再次訓練該模型,從而得到最終的模型。

       交叉驗證的主要的目的是 為了選擇不同的模型類型(比如一次線性模型、非線性模型) ,而 不是為了選擇具體模型的具體參數 。比如在BP神經網路中,其目的主要為了選擇模型的層數、神經元的激活函數、每層模型的神經元個數(即所謂的超參數),每一層網路神經元連接的最終權重是在模型選擇(即K折交叉驗證)之後,由全部的訓練數據重新訓練。

       假設這就是數據集,顯然用簡單分類器(如邏輯回歸)並不能很好地擬合上述數據。這種情況稱為  欠擬合  。

       相反地,如果採用一個非常復雜的分類器(如深度神經網路或含有隱藏單元的神經網路),擬合效果會非常好。但與此同時,模型的復雜度也會過高,這種稱為 過擬合  。

       在兩者之間,可能會存在一些復雜程度適中、數據擬合適度的分類器,擬合結果較為合理,稱為 適度擬合 。

       如上圖所示,訓練集誤差和驗證集誤差均較高時為 高偏差(欠擬合)  情況;訓練集誤差較高,驗證集誤差較高低時為  高方差(過擬合)  情況。

(1) 如何減小偏差(防止欠擬合)

       ① 增大神經網路規模。

(2) 如何減小方差(防止過擬合)

       ① 增加數據集樣本數量;

       ② 正則化。

        參數   是指神經網路中由數據驅動並進行調整的變數,如𝑊和𝑏。

        超參數   是指無需數據驅動,而是在訓練前或者訓練中人為進行調整的變數。例如演算法中的learning rate 𝑎(學習率)、iterations(梯度下降法循環的數量)、𝐿(隱藏層數目)、𝑛[𝑙](隱藏層單元數目)、choice of activation function(激活函數的選擇)等都需要人為設置,這些數字實際上控制了最後的參數𝑊和𝑏的值,所以它們被稱作超參數。

       神經網路中的超參數主要分為三類:網路參數、優化參數、正則化參數。

​網路參數

       可指網路層與層之間的交互方式(相加、相乘或者串接等)、卷積核數量和卷積核尺寸、網路層數(也稱深度)和激活函數等。

優化參數

       一般指學習率(learning rate)、批樣本數量(batch size)、不同優化器的參數以及部分損失函數的可調參數等。

正則化參數

       權重衰減系數,隨機失活比率(dropout)等。

       正則化有利於減小訓練集和驗證集准確率的方差,防止過擬合。在無法增加樣本數量或增加樣本數量的成本過高時,正則化是一種行之有效的方法。

        一般將任意 維向量  的 - 范數定義為

                                                              

       根據定義:

       當 時, 的 范數為 ,表示向量 中非0元素的個數。

       當 時, 的 范數為 ,等於向量 中所有元素的絕對值之和。

        當 時, 的 范數為 ,等於向量 中所有元素的平方和開根號。

       正則化(Regularization) 的主要目的是控制模型復雜度,減小過擬合。最基本的正則化方法是在原目標(代價)函數 中添加懲罰項,對復雜度高的模型進行「懲罰」。

       對於神經網路模型, 正則化即在其代價函數中添加 正則項:

                                  

其中, 。之後再求解優化問題 即可。

       假設某三層神經網路存在過擬合問題,採用dropout正則化會遍歷網路的每一層,並設置消除該層中每一個節點的概率(比如0.5),最後得到一個節點更少、規模更小的網路,然後再用反向傳播方法進行訓練,就能有效防止過擬合。

       最常用的方法是 inverted dropout(反向隨機失活) 。對於一個三層神經網路( ),以第三層為例,實施dropout的步驟如下:

① 定義一個三層dropout矩陣d3:

                                     d3=numpy.random.rand(a3.shape[0],a3.shape[1])

其中,a3表示神經網路第三層的激活函數矩陣。

② 設置 ( )的大小。 表示保留某個隱藏單元的概率。將第①步產生的隨機矩陣d3的每個元素與 進行比較,小於置1,大於置0,得到新的d3矩陣(1表示保留該節點,0表示刪除該節點)。

③ 將a3與新的d3矩陣相乘(矩陣對應元素相乘),得到新的激活函數矩陣:

                                                       a3 =np.multiply(a3,d3)

④ 將新的a3矩陣除以keep-prob:

                                                              a3 /= keep_prob

目的是保證a3的期望值(均值)不變,從而保證第三層的輸出不變。

① 使用dropout可以使得部分節點失活,可以起到簡化神經網路結構的作用,從而起到正則化的作用。

② 因為dropout是使得神經網路的節點隨機失活,這樣會讓神經網路在訓練的時候不會使得某一個節點權重過大。因為該節點輸入的特徵可能會被清除,所以神經網路的節點不能依賴任何輸入的特徵。dropout最終會產生收縮權重的平方范數的效果,來壓縮權重,達到類似於 正則化的效果。

① dropout在測試階段不需要使用,因為如果在測試階段使用dropout可能會導致預測值產生隨機變化(因為dropout使節點隨機失活)。而且,在訓練階段已經將權重參數除以keep-prob來保證輸出的期望值不變,所以在測試階段沒必要再使用dropout。

② 神經網路的不同層在使用dropout的時候,keep-prob可以不同。因為可能有的層參數比較多,比較復雜,keep-prob可以小一些,而對於結構比較簡單的層,keep-prob的值可以大一些甚至為1,keep-prob等於1表示不使用dropout,即該層的所有節點都保留。

      加快訓練速度。

       對於一個神經網路模型,考慮其代價函數:

                                               

       如果未歸一化輸入,其代價函數的形狀會較為細長狹窄。在這樣的代價函數的限制下,為避免陷入局部最優解,梯度下降法的學習率必須設置得非常小。

       如果歸一化輸入,代價函數便呈現球形輪廓。這種情況下,不論從哪個位置開始梯度下降法,都能使用較大的學習率,從而更快速、直接地找到全局最優解。

      對於包含n個特徵的m個樣本的數據集,其輸入歸一化的過程主要分為兩步:

① 零均值化

                                                             

                                                            

② 歸一化方差

                                                           

                                                              

其中, 代表第 個樣本的特徵矩陣。

       訓練集、驗證集、測試集特徵矩陣的平均值 和標准差 要保持一致,確保它們歸一化後符合同一分布。

Ⅵ 十分鍾一起學會ResNet殘差網路

深度卷積網路自然的整合了低中高不同層次的特徵,特徵的層次可以靠加深網路的層次來豐富。從而,在構建卷積網路時,網路的深度越高,可抽取的特徵層次就越豐富。所以一般我們會傾向於使用更深層次的網路結構,以便取得更高層次的特徵。但是在使用深層次的網路結構時我們會遇到兩個問題,梯度消失,梯度爆炸問題和網路退化的問題。

但是當使用更深層的網路時,會發生梯度消失、爆炸問題,這個問題很大程度通過標準的初始化和正則化層來基本解決,這樣可以確保幾十層的網路能夠收斂,但是隨著網路層數的增加,梯度消失或者爆炸的問題仍然存在。

還有一個問題就是網路的退化,舉個例子,假設已經有了一個最優化的網路結構,是18層。當我們設計網路結構的時候,我們並不知道具體多少層次的網路時最優化的網路結構,假設設計了34層網路結構。那麼多出來的16層其實是冗餘的,我們希望訓練網路的過程中,模型能夠自己訓練這五層為恆等映射,也就是經過這層時的輸入與輸出完全一樣。但是往往模型很難將這16層恆等映射的參數學習正確,那麼就一定會不比最優化的18層網路結構性能好,這就是隨著網路深度增加,模型會產生退化現象。它不是由過擬合產生的,而是由冗餘的網路層學習了不是恆等映射的參數造成的。

ResNet是在2015年有何凱明,張翔宇,任少卿,孫劍共同提出的,ResNet使用了一個新的思想,ResNet的思想是假設我們涉及一個網路層,存在最優化的網路層次,那麼往往我們設計的深層次網路是有很多網路層為冗餘層的。那麼我們希望這些冗餘層能夠完成恆等映射,保證經過該恆等層的輸入和輸出完全相同。具體哪些層是恆等層,這個會有網路訓練的時候自己判斷出來。將原網路的幾層改成一個殘差塊,殘差塊的具體構造如下圖所示:

可以看到X是這一層殘差塊的輸入,也稱作F(x)為殘差,x為輸入值,F(X)是經過第一層線性變化並激活後的輸出,該圖表示在殘差網路中,第二層進行線性變化之後激活之前,F(x)加入了這一層輸入值X,然後再進行激活後輸出。在第二層輸出值激活前加入X,這條路徑稱作shortcut連接。

我們發現,假設該層是冗餘的,在引入ResNet之前,我們想讓該層學習到的參數能夠滿足h(x)=x,即輸入是x,經過該冗餘層後,輸出仍然為x。但是可以看見,要想學習h(x)=x恆等映射時的這層參數時比較困難的。ResNet想到避免去學習該層恆等映射的參數,使用了如上圖的結構,讓h(x)=F(x)+x;這里的F(x)我們稱作殘差項,我們發現,要想讓該冗餘層能夠恆等映射,我們只需要學習F(x)=0。學習F(x)=0比學習h(x)=x要簡單,因為一般每層網路中的參數初始化偏向於0,這樣在相比於更新該網路層的參數來學習h(x)=x,該冗餘層學習F(x)=0的更新參數能夠更快收斂,如圖所示:

假設該曾網路只經過線性變換,沒有bias也沒有激活函數。我們發現因為隨機初始化權重一般偏向於0,那麼經過該網路的輸出值為[0.6 0.6],很明顯會更接近與[0 0],而不是[2 1],相比與學習h(x)=x,模型要更快到學習F(x)=0。

並且ReLU能夠將負數激活為0,過濾了負數的線性變化,也能夠更快的使得F(x)=0。這樣當網路自己決定哪些網路層為冗餘層時,使用ResNet的網路很大程度上解決了學習恆等映射的問題,用學習殘差F(x)=0更新該冗餘層的參數來代替學習h(x)=x更新冗餘層的參數。

這樣當網路自行決定了哪些層為冗餘層後,通過學習殘差F(x)=0來讓該層網路恆等映射上一層的輸入,使得有了這些冗餘層的網路效果與沒有這些冗餘層的網路效果相同,這樣很大程度上解決了網路的退化問題。

我們發現很深的網路層,由於參數初始化一般更靠近0,這樣在訓練的過程中更新淺層網路的參數時,很容易隨著網路的深入而導致梯度消失,淺層的參數無法更新。

可以看到,假設現在需要更新 參數因為隨機初始化偏向於0,通過鏈式求導我們會發現, 相乘會得到更加接近於0的數,那麼所求的這個 的梯度就接近於0,也就產生了梯度消失的現象。

ResNet最終更新某一個節點的參數時,由於 ,由於鏈式求導後的結果如圖所示,不管括弧內右邊部分的求導參數有多小,因為左邊的1的存在,並且將原來的鏈式求導中的連乘變成了連加狀態(正是 ),都能保證該節點參數更新不會發生梯度消失或梯度爆炸現象。

這樣ResNet在解決了阻礙更深層次網路優化問題的兩個重要問題後,ResNet就能訓練更深層次幾百層乃至幾千層的網路並取得更高的精確度了。

這里是應用了ResNet的網路圖,這里如果遇到了h(x)=F(x)+x中x的維度與F(x)不同的維度時,我們需要對identity加入Ws來保持Ws*x的維度與F(x)的維度一致。

x與F(x)維度相同時:

x與F(x)維度不同時:

下邊是ResNet的網路結構圖:

使用1*1卷積減少參數和計算量:

如果用了更深層次的網路時,考慮到計算量,會先用1 * 1的卷積將輸入的256維降到64維,然後通過1*1恢復。這樣做的目的是減少參數量和計算量。

左圖是ResNet34,右圖是ResNet50/101/152。這一個模塊稱作building block,右圖稱之為bottleneck design。在面對50,101,152層的深層次網路,意味著有很大的計算量,因此這里使用1 * 1卷積先將輸入進行降維,然後再經過3 * 3卷積後再用 卷積進行升維。使用1*1卷積的好處是大大降低參數量計算量。

通過上述的學習,你應該知道了,現如今大家普遍認為更好的網路是建立在更寬更深的網路基礎上,當你需要設計一個深度網路結構時,你永遠不知道最優的網路層次結構是多少層,一旦你設計的很深入了,那勢必會有很多冗餘層,這些冗餘層一旦沒有成功學習恆等變換 ,那就會影響網路的預測性能,不會比淺層的網路學習效果好從而產生退化問題。

ResNet的過人之處,是他很大程度上解決了當今深度網路頭疼的網路退化問題和梯度消失問題。使用殘差網路結構 代替原來的沒有shortcut連接的 ,這樣更新冗餘層的參數時需要學習 比學習 要容易得多。而shortcut連接的結構也保證了反向傳播更新參數時,很難有梯度為0的現象發生,不會導致梯度消失。

這樣,ResNet的構建,使我們更朝著符合我們的直覺走下去,即越深的網路對於高級抽象特徵的提取和網路性能更好,不用在擔心隨著網路的加深發生退化問題了。

近段時間,准備持續發表一些CNN常見的網路模型講解。好了,今天的十分鍾就帶你一起學會ResNet,下次的十分鍾我們再見。

Ⅶ 怎樣優化網卡設置提高網路傳輸速度

可通過以下步驟優化網卡設置提高網路傳輸速度:
1、點擊開始,輸入CMD,選擇以管理員身份運行;
2、在命令提示符中粘貼以下命令:
netsh interface tcp set global autotuning=disabled
出現確定,為執行成功;
3、點擊開始,選擇運行,輸入:regedit,打開注冊表,找到HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\A FD\Parameters;
4、創建新的 dword 32bit 字元串在 Parameters 並且命名為:DefaultSendWindow,編輯DefaultSendWindow的值為十進制輸入值,點擊確定,重啟電腦即可。

Ⅷ 在訓練時,accuracy不變,loss一直在降低是什麼原因

在訓練過程中畫出accuracy 和loss曲線能夠更直觀的觀察網路訓練的狀態,以便更好的優化網路的訓練。本文主要介紹在基於caffe框架訓練網路時,如何利用caffe自帶的一些實用的工具包來繪制曲線。
step1:保存日誌文件
在訓練過程中把終端輸出的結果保存為一個日誌文件,注意文件的後綴名必須是.log,這是因為後面再解析日誌文件時有這個要求。如何把終端保存到日誌文件,例子如下:
$TOOLS/caffe train --solver=$SOLVERFILE 2>&1 |tee out.log
step2:解析日誌文件
這一步利用caffe中tools/extra文件夾下的parse_log.py來解析日誌文件。具體例子如下:
python parse_log.py out.log ./ #兩個參數,一個是日誌文件,另一個是保存的路徑
運行結束之後會發現在你保存的路徑中會生成兩個文件out.log.train和out.log.test
step3:繪制accuracy 和loss曲線。
利用caffe中tools/extra文件夾下的plot_training_log.py文件來繪制。
python plot_training_log.py 2 testloss.png out.log
這里要解釋下,如果你直接運行這個是會報錯的。因為在out.log.test文件是這樣的。
NumIters,Seconds,TestAccuracy,TestLoss
0.0,2.318823,-1,0.360432
200.0,10.975734,-1,0.0757681
400.0,19.634317,-1,0.0610909
600.0,28.295885,-1,0.0554078
800.0,36.953475,-1,0.0510606
1000.0,45.644651,-1,0.0463909
load_data的時候第一行是不讀的,要麼你自己第一行加個#,要麼就直接不讀第一行。另外在split的時候不是用空格而是用『,』因此做如下修改。
def load_data(data_file, field_idx0, field_idx1):
data = [[], []]
with open(data_file, 'r') as f:
num=len(f)
for line_num in range(1,num):#此處修改
line = f[line_num].strip()
#if line[0] != '#':#此處修改
fields = line.split(',')#此處修改
data[0].append(float(fields[field_idx0].strip()))
data[1].append(float(fields[field_idx1].strip()))
return data
上面還有個地方需要解釋就是那個2是什麼意思,這個你直接運行下Python plot_training_log.py就會打出幫助信息,就能看見了。
以上就是利用caffe自帶的工具包繪制曲線的方法。

閱讀全文

與訓練時如何優化網路相關的資料

熱點內容
如何看待網路噴子越來越多 瀏覽:552
華碩路由器怎麼連接網路類型 瀏覽:169
大華網路硬碟錄像機找回密碼 瀏覽:831
漯河職業技術學院計算機網路技術 瀏覽:198
人臉認證時候網路異常 瀏覽:608
家庭網路如何配置電視 瀏覽:576
網路管理的方式有哪些 瀏覽:160
設置wifi網路變快 瀏覽:64
仲愷技工學校計算機網路應用 瀏覽:889
如何使用外置網路 瀏覽:285
wifi直接插網路介面可以嗎 瀏覽:658
小黃蜂網路接入點設置 瀏覽:604
電腦共享網路打開了又關閉了 瀏覽:419
網路版冰點還原軟體 瀏覽:3
老家手機4g網路差怎麼解決 瀏覽:888
科技網路安全工程師 瀏覽:342
oppo要怎麼設置網路 瀏覽:665
電腦的網路成了紅色的叉號怎辦 瀏覽:407
福建網路教育的學校有哪些 瀏覽:495
如何判斷網路盜文 瀏覽:625

友情鏈接