神經網路中的一些常見概念

2021-09-23 17:21:04 字數 2075 閱讀 1784

損失函式

學習率過擬合

為啥需要啟用函式?在神經網路中,我們的輸入層通過各個連線上的權值,進行加權求和後傳遞到下一層,這種處理方式往往是呈線性組合的狀態,而我們知道一般線性函式的值域是負無窮到正無窮,也是就是說線性組合的模型缺乏逼近能力,而我們的神經網路的訓練大多需要乙個梯度下降即尋找最小誤差的過程,很顯然,這種線性組合的方式滿足不了,於是我們需要一種非線性的函式將線性的組合進行非線性對映,增強網路的魯棒性

啟用函式通常有以下性質:

非線性可微性單調性

?(?)≈?

輸出值有範圍

計算簡單

歸一化

啟用函式經常使用sigmoid函式、tanh函式、relu 函式

sigmoid函式的優點在於輸出範圍有限,資料在傳遞的過程中不容易發散,並且其輸出範圍為(0,1),可以在輸出層表示概率值,如圖所示。sigmoid函式的導數是非零的,很容易計算。

sigmoid函式的主要缺點是梯度下降非常明顯,且兩頭過於平坦,容易出現梯度消失的情況,輸出的值域不對稱,並非像tanh函式那樣值域是-1到1。

雙曲正切函式將資料對映到[-1,1],解決了sigmoid函式輸出值域不對稱問題。另外,它是完全可微分和反對稱的,對稱中心在原點。然而它的輸出值域兩頭依舊過於平坦,梯度消失問題仍然存在。為了解決學習緩慢和梯度消失問題,可使用其更加平緩的變體,如log-log、softsign、symmetrical sigmoid等

relu函式是目前神經網路裡常用的啟用函式,由於relu函式是線性特點使其收斂速度比sigmoid、tanh更快,而且沒有梯度飽和的情況出現。計算更加高效,相比於sigmoid、tanh函式,只需要乙個閾值就可以得到啟用值,不需要對輸入歸一化來防止達到飽和。

損失函式評價的是模型對樣本擬合度,**結果與實際值越接近,說明模型的擬合能力越強,對應損失函式的結果就越小;反之,損失函式的結果越大。

損失函式結果比較大時,對應的梯度下降比較快。為了計算方便,可以採用歐式距離作損失度量標準,通過最小化實際值與估計值之間的均方誤差作為損失函式,即最小平方誤差準則(mse):

其中?(?)是模型根據輸入矩陣x輸出乙個**向量,**值?(?)和真值?的歐式距離越大、損失就越大,反之就越小,即求〖||?(?)−?||〗^2的極小值。

如果是批量資料,則將所有資料對應模型結果與其真實值之間的差的平方進行求和。合適的損失函式能夠確保深度學習模型更好地收斂,常見的損失函式有softmax、歐式損失、sigmoid交叉時損失、triplet loss、moon loss、contrastive loss等。

學習率其實就是誤差下降(梯度下降)時,函式旋轉的角度,它控制每次更新引數的幅度,過高和過低的學習率都可能對模型結果帶來不良影響,合適的學習率可以加快模型的訓練速度。過高的話,可能會使得模型的訓練忽略了細節,從而不能達到誤差的最小值,過低的話,會使得整個訓練的過程變得異常慢。

這個概念過擬合是指模型在訓練集上**效果好,但在測試集上**效果差。而欠擬合則是訓練集和效果差,但泛化能力不錯。

常用的防止過擬合的方法有:

引數範數懲罰

資料增強

提前終止

bagging等整合方法

dropout

批正則化

神經網路學習中的一些記錄

在執行resnet 時,報了乙個錯 忘了具體是什麼 在網上查到的解決方法是安裝mkdocs,然而安裝之後,spyder一開啟就閃退,還出現如下視窗 經過搜尋,發現是tornado6.0的版本棄用了tornado.web.asynchronous這種寫法,降級到5.1.1就沒問題了。於是python ...

關於神經網路的一些認識

如果說線性分類器使用直線作為分類的邊界,那麼神經網路則是在使用線性分類的基礎上加了非線性的分類,也就是曲線。直接說就是,比如在svm上是權重w與輸入x相乘之後就是計算損失函式 直接使用w權重矩陣對輸入x進行分類,而神經網路是在使用w權重對輸入x進行分類之前,先用啟用函式計算輸入x的值,而神經網路裡則...

常見的神經網路

由於新的神經網路架構無時無刻不在湧現,想要記錄所有的神經網路是很困難的事情。要把所有這些縮略語指代的網路 dcign,iilstm,dcgan等 都弄清,一開始估計還無從下手。下表包含了大部分常用的模型 大部分是神經網路還有一些其他的模型 雖然這些架構都是新奇獨特的,但當我開始把它們的結果畫下來的時...