神经网络
關(guān)于神經(jīng)網(wǎng)絡的基礎理解在知乎下面兩個回答已經(jīng)說的很好了
如何簡單形象又有趣地講解神經(jīng)網(wǎng)絡是什么? --王小龍
如何簡單形象又有趣地講解神經(jīng)網(wǎng)絡是什么? --YJango
這里就只把谷歌教程上面的知識補充一下吧,也差不多是最后一趴了。
激活函數(shù)
要對非線性問題進行建模,我們可以直接引入非線性函數(shù)。我們可以用非線性函數(shù)將每個隱藏層節(jié)點像管道一樣連接起來。在下圖所示的模型中,在隱藏層 1 中的各個節(jié)點的值傳遞到下一層進行加權(quán)求和之前,我們采用一個非線性函數(shù)對其進行了轉(zhuǎn)換。這種非線性函數(shù)稱為激活函數(shù)。
常見激活函數(shù):
- S型激活函數(shù)
- ReLU 激活函數(shù)。
相較于 S 型函數(shù)等平滑函數(shù),以下修正線性單元激活函數(shù)(簡稱為 ReLU)的效果通常要好一點,同時還非常易于計算。ReLU: F(x)=max(0,x)
ReLU 的優(yōu)勢在于它基于實證發(fā)現(xiàn)(可能由 ReLU 驅(qū)動),擁有更實用的響應范圍。S 型函數(shù)的響應性在兩端相對較快地減少。
實際上,所有數(shù)學函數(shù)均可作為激活函數(shù)。假設 表示我們的激活函數(shù)(ReLU、S 型函數(shù)等等)。因此,網(wǎng)絡中節(jié)點的值由以下公式指定:
訓練神經(jīng)網(wǎng)絡
反向傳播演示
反向傳播算法是最常見的一種神經(jīng)網(wǎng)絡訓練算法。借助這種算法,梯度下降法在多層神經(jīng)網(wǎng)絡中將成為可行方法。首先,反向傳播確實依賴于梯度這一概念, 事物必須是可微的,這樣我們才能夠進行學習。
反向傳播算法的一些要點:
- 梯度很重要,如果它是可微的,則我們也許能夠?qū)ζ溥M行學習
- 梯度消失,每個額外的層都會依次降低信噪比,如果我們的網(wǎng)絡太過深入, 信噪比隨著您越來越深入模型而變差,那么學習速度可能真的會變得非常慢。較低層(更接近輸入)的梯度可能會變得非常小。在深度網(wǎng)絡中,計算這些梯度時,可能涉及許多小項的乘積。當較低層的梯度逐漸消失到0 時,這些層的訓練速度會非常緩慢,甚至不再訓練。ReLU 激活函數(shù)有助于防止梯度消失。
- 梯度爆炸,果網(wǎng)絡中的權(quán)重過大,則較低層的梯度會涉及許多大項的乘積。在這種情況下,梯度就會爆炸:梯度過大導致難以收斂。如果學習速率太高,就會出現(xiàn)極不穩(wěn)定的情況, 模型中就可能出現(xiàn)NaN。在這種情況下,就要以較低的學習速率再試一次。批標準化可以降低學習速率,因而有助于防止梯度爆炸。
- ReLU 單元消失,這可能是因為我們將硬性上限設為0, 如果最終所有內(nèi)容都低于0值, 梯度就無法反向傳播, 我們就永遠無法返回存在ReLU層的位置。一旦 ReLU 單元的加權(quán)和低于 0,ReLU 單元就可能會停滯。它會輸出對網(wǎng)絡輸出沒有任何貢獻的 0 激活,而梯度在反向傳播算法期間將無法再從中流過。由于梯度的來源被切斷,ReLU 的輸入可能無法作出足夠的改變來使加權(quán)和恢復到 0 以上。降低學習速率有助于防止 ReLU 單元消失。
- 丟棄正則化,最后,在訓練深度網(wǎng)絡時還有一個很有用的技巧, 即正則化的另一種形式,叫做丟棄。應用丟棄是指,我們針對概率P取一個節(jié)點, 然后從網(wǎng)絡的一個梯度步長中將其移除。在其他梯度步長中重復此過程, 并隨機取不同的節(jié)點進行丟棄。丟棄的節(jié)點越多,正則化效果就越強。您可以清楚地看到,如果丟棄所有節(jié)點, 就會得到一個極為簡單的模型, 這個模型基本上毫無用處。如果一個都不丟棄,則模型便具備完整的復雜性; 如果在訓練過程中的某個位置進行丟棄, 那就相當于在這個位置應用了某種有效的正則化。我們最近取得了多項推動深度學習走向前沿的 關(guān)鍵進展,丟棄便是其中之一, 使我們能夠獲得許多重大的成果。0.0 = 無丟棄正則化。1.0 = 丟棄所有內(nèi)容。模型學不到任何規(guī)律。0.0 和 1.0 之間的值更有用。
- 一般來講,需要考慮盡量將模型的深度限制為最小的有效深度。
- 訓練時,如果特征值在輸入時就已經(jīng)標準化, 這通常會對我們非常有用。如果范圍大致相同, 則有助于提高神經(jīng)網(wǎng)絡的轉(zhuǎn)化速度。范圍實際值并不重要;我們通常推薦的大致范圍是負1到正1。也可以是負5到正5,或者0到1, 只要所有輸入的范圍大致相同就可以。避免 NaN陷阱,避免離群值也會有幫助,可以使用一些標準方法:線性縮放為最大值和最小值設定硬性上下限(截斷)或者對數(shù)縮放
多類別神經(jīng)網(wǎng)絡
前面您已經(jīng)了解了二元分類模型,該模型可從兩個可能的選項中選擇其一,例如:
- 特定電子郵件是垃圾郵件還是非垃圾郵件。
- 特定腫瘤是惡性腫瘤還是良性腫瘤
在本單元中,我們將研究多類別分類,這種模型可從多種可能的情況中進行選擇。例如
- 這是一張?zhí)O果、熊、糖果、狗狗還是雞蛋的圖片
當類別總數(shù)較少時,這種方法比較合理,但隨著類別數(shù)量的增加,其效率會變得越來越低下。
用Softmax激活函數(shù)解決單標簽多類別分類
我們已經(jīng)知道,邏輯回歸可生成介于 0 和 1.0 之間的小數(shù)。例如,某電子郵件分類器的邏輯回歸輸出值為 0.8,表明電子郵件是垃圾郵件的概率為 80%,不是垃圾郵件的概率為 20%。很明顯,一封電子郵件是垃圾郵件或非垃圾郵件的概率之和為 1.0
Softmax本質(zhì)上就是對我們所使用的這種邏輯回歸的泛化, 只不過泛化成了多個類別。在遇到單一標簽的多類別分類問題時,我們使用會Softmax。也就是說,在多類別問題中,Softmax 會為每個類別分配一個用小數(shù)表示的概率。這些用小數(shù)表示的概率相加之和必須是 1.0。與其他方式相比,這種附加限制有助于讓訓練過程更快速地收斂。
例如,Softmax 可能會得出圖片屬于某一特定類別的以下概率:
Softmax 層是緊挨著輸出層之前的神經(jīng)網(wǎng)絡層。Softmax 層必須和輸出層擁有一樣的節(jié)點數(shù)。
關(guān)于Softmax:
詳解softmax函數(shù)以及相關(guān)求導過程 - 憶臻的文章 - 知乎
https://zhuanlan.zhihu.com/p/...
Softmax 函數(shù)的特點和作用是什么? - 楊思達zzzz的回答 - 知乎
https://www.zhihu.com/questio...
在訓練多類別分類時,我們有幾個選項可以選擇。
- 完整 SoftMax(就是之前將的SoftMax):暴力破解,針對所有類別進行計算, 此時訓練成本相對昂貴。
- 候選采樣:針對所有正類別標簽進行計算,但僅針對負類別標簽的隨機樣本進行計算。 此時,我們要針對輸出節(jié)點所屬的類別來訓練輸出節(jié)點, 然后對負分類進行采樣,并且只更新輸出節(jié)點的采樣。這種方式在訓練時效率更高一些,而且在許多情況下 似乎都不會對效果產(chǎn)生很大影響;但顯而易見的是, 我們在推理時仍然需要評估每一個輸出節(jié)點。
類別數(shù)量較少時,完整 Softmax 代價很小,但隨著類別數(shù)量的增加,它的代價會變得極其高昂。候選采樣可以提高處理具有大量類別的問題的效率。
候選采樣:
一種訓練時進行的優(yōu)化,會使用某種函數(shù)(例如 softmax)針對所有正類別標簽計算概率,但對于負類別標簽,則僅針對其隨機樣本計算概率。例如,如果某個樣本的標簽為“小獵犬”和“狗”,則候選采樣將針對“小獵犬”和“狗”類別輸出計算預測概率和相應的損失項,但不必針對每個非狗狗樣本提供概率。這種采樣基于的想法是,只要正類別始終得到適當?shù)恼鰪?#xff0c;負類別就可以從頻率較低的負增強中進行學習,這確實是在實際中觀察到的情況。候選采樣的目的是,通過不針對所有負類別計算預測結(jié)果來提高計算效率。
一個標簽與多個標簽
Softmax 假設每個樣本只是一個類別的成員。但是,一些樣本可以同時是多個類別的成員。對于此類示例:
- 不能使用 Softmax。
- 列表項目
例如,假設您的樣本是只包含一項內(nèi)容(一塊水果)的圖片。Softmax 可以確定該內(nèi)容是梨、橙子、蘋果等的概率。如果您的樣本是包含各種各樣內(nèi)容(幾種不同種類的水果)的圖片,您必須改用多個邏輯回歸。
總結(jié)
- 上一篇: C# fleck websocket使用
- 下一篇: 『Python底层原理』--Python