1. 程式人生 > >深度學習筆記(三):啟用函式和損失函式

深度學習筆記(三):啟用函式和損失函式

這一部分來探討下啟用函式和損失函式。在之前的logistic和神經網路中,啟用函式是sigmoid, 損失函式是平方函式。但是這並不是固定的。事實上,這兩部分都有很多其他不錯的選項,下面來一一討論

3. 啟用函式和損失函式

3.1 啟用函式

關於啟用函式,首先要搞清楚的問題是,啟用函式是什麼,有什麼用?不用啟用函式可不可以?答案是不可以。啟用函式的主要作用是提供網路的非線性建模能力。如果沒有啟用函式,那麼該網路僅能夠表達線性對映,此時即便有再多的隱藏層,其整個網路跟單層神經網路也是等價的。因此也可以認為,只有加入了啟用函式之後,深度神經網路才具備了分層的非線性對映學習能力。 那麼啟用函式應該具有什麼樣的性質呢?

可微性: 當優化方法是基於梯度的時候,這個性質是必須的。
單調性: 當啟用函式是單調的時候,單層網路能夠保證是凸函式。
輸出值的範圍: 當啟用函式輸出值是 有限 的時候,基於梯度的優化方法會更加 穩定,因為特徵的表示受有限權值的影響更顯著;當啟用函式的輸出是 無限 的時候,模型的訓練會更加高效,不過在這種情況小,一般需要更小的learning rate

從目前來看,常見的啟用函式多是分段線性和具有指數形狀的非線性函式

3.1.1 sigmoid

f(x)=11+ex
這裡寫圖片描述

sigmoid 是使用範圍最廣的一類啟用函式,具有指數函式形狀,它在物理意義上最為接近生物神經元。此外,(0, 1) 的輸出還可以被表示作概率,或用於輸入的歸一化,代表性的如Sigmoid交叉熵損失函式。

然而,sigmoid也有其自身的缺陷,最明顯的就是飽和性

。從上圖可以看到,其兩側導數逐漸趨近於0

limx>f(x)=0
具有這種性質的稱為軟飽和啟用函式。具體的,飽和又可分為左飽和與右飽和。與軟飽和對應的是硬飽和, 即
f(x)=0|x|>cc
sigmoid 的軟飽和性,使得深度神經網路在二三十年裡一直難以有效的訓練,是阻礙神經網路發展的重要原因。具體來說,由於在後向傳遞過程中,sigmoid向下傳導的梯度包含了一個 f(x) 因子(sigmoid關於輸入的導數),因此一旦輸入落入飽和區,f(x) 就會變得接近於0,導致了向底層傳遞的梯度也變得非常小。此時,網路引數很難得到有效訓練。這種現象被稱為梯度消失。一般來說, sigmoid 網路在 5 層之內就會產生梯度消失現象

此外,sigmoid函式的輸出均大於0,使得輸出不是0均值,這稱為偏移現象,這會導致後一層的神經元將得到上一層輸出的非0均值的訊號作為輸入。

3.1.2 tanh

f(x)=1e2x1+e2x
這裡寫圖片描述

tanh也是一種非常常見的啟用函式。與sigmoid相比,它的輸出均值是0,使得其收斂速度要比sigmoid快,減少迭代次數。然而,從途中可以看出,tanh一樣具有軟飽和性,從而造成梯度消失。

3.1.3 ReLU,P-ReLU, Leaky-ReLU

f(x)={x,ifx00,ifx<0f(x)=max(0,x)
這裡寫圖片描述

ReLU的全稱是Rectified Linear Units,是一種後來才出現的啟用函式。 可以看到,當x<0時,ReLU硬飽和,而當x>0時,則不存在飽和問題。所以,ReLU 能夠在x>0時保持梯度不衰減,從而緩解梯度消失問題。這讓我們能夠直接以監督的方式訓練深度神經網路,而無需依賴無監督的逐層預訓練。

然而,隨著訓練的推進,部分輸入會落入硬飽和區,導致對應權重無法更新。這種現象被稱為“神經元死亡”。與sigmoid類似,ReLU的輸出均值也大於0,偏移現象和 神經元死亡會共同影響網路的收斂性。

針對在x<0的硬飽和問題,我們對ReLU做出相應的改進,使得

f(x)={x,ifx0αx,ifx<0
這裡寫圖片描述

這就是Leaky-ReLU, 而P-ReLU認為,α也可以作為一個引數來學習,原文獻建議初始化a為0.25,不採用正則。

3.1.4 ELU

f(x)={x,ifx0α(ex1),ifx<0

這裡寫圖片描述

融合了sigmoid和ReLU,左側具有軟飽和性,右側無飽和性。右側線性部分使得ELU能夠緩解梯度消失,而左側軟飽能夠讓ELU對輸入變化或噪聲更魯棒。ELU的輸出均值接近於零,所以收斂速度更快。在 ImageNet上,不加 Batch Normalization 30 層以上的 ReLU 網路會無法收斂,PReLU網路在MSRA的Fan-in (caffe )初始化下會發散,而 ELU 網路在Fan-in/Fan-out下都能收斂

3.1.5 Maxout

f(x)=max(wT1x+b1,wT2x+b2,,wTn+bn)
在我看來,這個啟用函式有點大一統的感覺,因為maxout網路能夠近似任意連續函式,且當w2,b2,…,wn,bn為0時,退化為ReLU。Maxout能夠緩解梯度消失,同時又規避了ReLU神經元死亡的缺點,但增加了引數和計算量。

3.2 損失函式

在之前的內容中,我們用的損失函式都是平方差函式,即

C=12(ay)2
其中y是我們期望的輸出,a為神經元的實際輸出(a=σ(Wx+b)。也就是說,當神經元的實際輸出與我們的期望輸出差距越大,代價就越高。想法非常的好,然而在實際應用中,我們知道引數的修正是與CWCb成正比的,而根據
CW=(ay)σ(a)xTCb=(ay)σ(a)
我們發現其中都有σ(a)這一項。因為sigmoid函式的性質,導致σ′(z)在z取大部分值時會造成飽和現象,從而使得引數的更新速度非常慢,甚至會造成離期望值越遠,更新越慢的現象。那麼怎麼克服這個問題呢?我們想到了交叉熵函式。我們知道,熵的計算公式是
H(y)=iyilog(yi)
而在實際操作中,我們並不知道y的分佈,只能對y的分佈做一個估計,也就是算得的a值, 這樣我們就能夠得到用a來表示y的交叉熵
H(y,a)=iyilog(ai)
如果有多個樣本,則整個樣本的平均交叉熵為
H(y,a

相關推薦

深度學習筆記()啟用函式損失函式

這一部分來探討下啟用函式和損失函式。在之前的logistic和神經網路中,啟用函式是sigmoid, 損失函式是平方函式。但是這並不是固定的。事實上,這兩部分都有很多其他不錯的選項,下面來一一討論 3. 啟用函式和損失函式 3.1 啟

python學習筆記元組集合

學習python的小夥伴們經常會有這樣一個疑問,既然有列表裡,問什麼還要有元組呢。因為列表是可變的,而元組是不可變的。比如我們經常需要傳入函式的資料是不變的,這時就要用到元組了。 def info(a): a[0] = 'haha' return a a =

深度學習筆記——常用的啟用(激勵)函式

  啟用函式(又叫激勵函式,後面就全部統稱為啟用函式)是模型整個結構中的非線性扭曲力,神經網路的每層都會有一個啟用函式。那他到底是什麼,有什麼作用?都有哪些常見的啟用函式呢?   深度學習的基本原理就是基於人工神經網路,訊號從一個神經元進入,經過非線性的 activation function,傳入到下一層神

深度學習筆記常見啟用函式總結

一.啟用函式概覽 基本上,入門深度學習的第一件事情就是了解”神經元”的構造,啟用函式算是最基本的一個”部件”了吧.那啟用函式到底有什麼用呢?為什麼需要啟用函式?啟用函式的定義是什麼呢? 下面這篇論文提供了啟用函式的定義以及常見的”飽和”的定義,以及對於啟用函

深度學習筆記2池化 全連線 啟用函式 softmax

1. 池化 池化層的輸入一般來源於上一個卷積層,主要作用是提供了很強的魯棒性(例如max-pooling是取一小塊區域中的最大值,此時若此區域中的其他值略有變化,或者影象稍有平移,pooling後的結果仍不變),並且減少了引數的數量,防止過擬合現象的發生。池化層一般沒有引

MYSQL學習筆記日期時間函數

div content minute name top fonts table hmm 指定 MYSQL學習筆記三:日期和時間函數 1. 獲取當前日期的函數和獲取當前時間的函數 /*獲取當前日期的函數和獲取當前時間的函數。將日期以‘YYYY-MM-DD‘或者’YYYYM

深度學習筆記 LeNet-5、AlexNet VGGNet等網路模型的小結

最近在學習吳恩達Andrew Ng的深度學習課程,之前對這幾個網路還比較混亂,現在記錄一下: LeNet-5神經網路的貢獻:  1.這是一個比較早的網路模型,其中在卷積層後面加入池化層的思想先今還在使用。 2.在最後的卷積層接入池化層和全連線層在當前也比較常用。 出

Python學習筆記函式

文章目錄 1. 呼叫函式 資料型別轉換 2. 定義函式 2.1 `def` 2.2 空函式 2.3 引數檢查 2.4 返回多個值 2.5 練習

Typescript 學習筆記函式

中文網:https://www.tslang.cn/ 官網:http://www.typescriptlang.org/ 目錄: Typescript 學習筆記一:介紹、安裝、編譯 Typescript 學習筆記二:資料型別 Typescript 學習筆記三:函式 Type

CNTK與深度強化學習筆記之一 環境搭建基本概念

如需轉載,請指明出處。 前言 深度強化學習是人工智慧當前的熱點,CNTK也是微軟力推的深度學習框架,2.x版本比之前有了長足的進步。目前國內將這兩者融合起來的文章還不多。因此寫作了這個學習筆記,希望能對大家有所幫助。 硬體,開發環境以及CNTK安裝 CN

深度學習筆記(六)Encoder-Decoder模型Attention模型

這兩天在看attention模型,看了下知乎上的幾個回答,很多人都推薦了一篇文章Neural Machine Translation by Jointly Learning to Align and Translate 我看了下,感覺非常的不錯,裡面還大

Python學習筆記輸入輸出

        首先,登入        >>>是Python直譯器的提示符輸出1輸出字串,使用print(),在括號中加上字串,多個字串用逗號“,”隔開,每個字串用單引號包住注意:print()會依次列印每個字串,遇到逗號“,”會輸出一個空格2,print

深度學習---深度學習筆記(七)Encoder-Decoder模型Attention模型

這兩天在看attention模型,看了下知乎上的幾個回答,很多人都推薦了一篇文章Neural Machine Translation by Jointly Learning to Align and Translate 我看了下,感覺非常的不錯,裡面還大概闡述了encoder

Tensorflow深度學習之五啟用函式

啟用函式的作用 在神經網路中,啟用函式的作用是能夠給神經網路加入一些非線性因素,使得神經網路可以更好地解決較為複雜的問題。 我們嘗試引入非線性的因素,對樣本進行分類。 在神經網路中也類似,我們需要引入一些非線性的因素,來更好地解決複雜的問題。而啟用函式恰好

Linux學習筆記()系統執行級與執行級的切換

查看 用戶操作 回車 water hat ntsysv tde 文件表 config 1.Linux系統與其它的操作系統不同,它設有執行級別。該執行級指定操作系統所處的狀態。Linux系統在不論什麽時候都執行於某個執行級上,且在不同的執行級上執行的程序和服務都不同,所要

Odoo10學習筆記模型(結構化的應用數據)、視圖(用戶界面設計)

其他 描述 用戶界面 列表 支持 字段 界面設計 允許 學習 一:模型 1:創建模型 模型屬性:模型類可以使用一些屬性來控制它們的一些行為: _name :創建odoo模型的內部標識符,必含項。 _description :當用戶界面顯示模型時,一個方便用戶的模型記錄標題。

tensorflow學習筆記()實現自編碼器

sea start ear var logs cos soft 編碼 red 黃文堅的tensorflow實戰一書中的第四章,講述了tensorflow實現多層感知機。Hiton早年提出過自編碼器的非監督學習算法,書中的代碼給出了一個隱藏層的神經網絡,本人擴展到了多層,改進

CSS學習筆記自定義單選框,復選框,開關

sla checked 移動 transform 第一個 16px 位移 block back 一點一點學習CCS,這次學習了如何自定義單選框,復選框以及開關。 一、單選框 1、先寫好body裏面的樣式,先寫幾個框 1 <body> 2 <d

Effictive Java學習筆記1創建銷毀對象

安全 需要 () 函數 調用 bsp nbsp bean 成了 建議1:考慮用靜態工廠方法代替構造器 理由:1)靜態方法有名字啊,更容易懂和理解。構造方法重載容易讓人混淆,並不是好主意    2)靜態工廠方法可以不必每次調用時都創建一個新對象,而公共構造函數每次調用都會

Android學習筆記用Intent串聯activity

conda data activity setresult result 意圖 prot 其他 cte 一:Intent Intent可以理解為 意圖。 我們可以通過創建intent實例來定義一個跳轉意圖,意圖包括:要跳轉到哪個頁面、需要傳遞什麽