CS231n-2017 Lecture4神經網絡筆記

神經網絡:

我們之前的線性分類器可以接受輸入,進而給出評分,這是一種線性變換,再此基礎上,我們對這種線性變換結果進行非線性變換,并輸入到下一層線性分類器中,這個過程就像是人類大腦神經的運作一樣,神經元接受信號,并輸出神經遞質給下一個神經元,表示是興奮(正權重)/抑制(負權重)

激活函數:

上文提到的非線性變換,即使用激活函數,顯然激活函數是非線性函數

常用的激活函數如下:

1.Sigmoid函數

\sigma(x) = \frac{1}{1+e^{-x}}

這個函數接受實數值,并將很大的負數變為0(抑制信號),很大的正數變為1(興奮信號)

但在實際上已經很少使用,主要是因為以下兩個缺點:

(1) Sigmoid函數飽和會使梯度消失

當激活函數的輸出接近0或者接近1時,這里的局部梯度幾乎為0,這就會導致一個問題,在反向傳播的時候,我們要求的梯度會與這里的局部梯度相乘,從而導致要求的梯度為0,所謂梯度消失,則這個梯度對應的變量的信號將無法再傳遞

同時,為了防止這種飽和,需要在初始化權重矩陣時特別小心,否則就會導致很多神經元過飽和,神經網絡無法再繼續學習

(2) Sigmoid函數的輸出不是以0為中心的

由于后續的神經元會以前面神經元的激活函數輸出作為輸入,導致其接收的輸入總是正數,那么在反向傳播的時候,會導致梯度要么全為正數,要么全為負數(比如對于f = Wx+b, x>0?,會導致\nabla_Wf>0),這會導致梯度下降權重更新的時候忽然很大的正向忽然很大的負向所產生的z字形的下降。不過,在整個batch的數據的梯度被加起來后,對于權重的最終更新會有不同的正負,這樣就一定程度地減輕了這個問題

2.Tanh函數

tanh(x) = 2\sigma(2x) - 1 = \frac{e^x-e^{-x}}{e^x+e^{-x}}

這個函數將實數值壓縮到[-1,1]?之間

它也存在飽和問題,但和sigmoid函數不同的是,它的輸出是以0為中心的

3.ReLU函數

ReLU(x) = \begin{cases} 0\text{,} & x<0 \\ x\text{,}& otherwise \end{cases}

優點:

1.相較于Sigmoid和Tanh,ReLU對隨機梯度下降的收斂有巨大的加速作用

2.ReLU的計算資源開銷較少,只需要對矩陣進行閾值計算得到

缺點:

當很大的梯度經過ReLU的神經元時,梯度下降將x更新至負數或者接近0,那么就會損失掉這個神經元的梯度,導致其死亡

這種情況在學習率較高的時候出現頻率較高,由于步長過長,導致x在一次權重更新時就下降到0

4.Leaky ReLU

為了解決ReLU的死亡問題,我們對其進行改進,使公式變為

Leaky ReLU(x) = \begin{cases} 1\text{ ,}& x<0\\ 1+\alpha x\text{,}& otherwise \end{cases}

其中\alpha?是一個小常量

5.Maxout函數

Maxout = max{(W_1x+b_1,W_2x+b_2)}

可以發現ReLU是Maxout的特殊情況,即W_1 = 0, b_1 = 0

則Maxout擁有ReLU的所有優點,而沒有其缺點

但由于W_1,b_1的存在,它每個神經元的參數都增加了一倍

激活函數的選擇問題:

通常建議使用ReLU,并注意設置學習率,監控網絡中死亡神經元的比例,若死亡比例較高,則可以嘗試使用Leaky ReLU或Maxout,也可以嘗試tanh,但不推薦sigmoid

神經網絡結構:

層狀結構:

神經網絡被建模成神經元的集合,神經元之間以無環圖的形式連接,通常是分層的,最普通的是全連接層(fully-connected layer),全連接層中的神經元與其前后兩層的神經元是完全成對連接的,但在同一個全連接層的神經元之間沒有連接,如圖:

命名規則:

當我們說N層神經網絡的時候,不把輸入層算作一層

可使用ANN(Artificial Neural Networks)或MLP(Multi-Layer Perceptrons)來指代神經網絡

輸出層:

輸出層通常沒有激活函數

網絡尺寸:

衡量神經網絡尺寸的標準有兩個:

1.神經元的個數

2.參數的個數

以上圖舉例

第一個網絡有4+2=6個神經元(不算輸入層),3\times4+4\times2=20?個權重參數,還有4+2=6個偏置,共26個可學習的參數

同理,第二個網絡有41個可學習的參數

神經網絡前向傳播計算舉例:

將神經網絡組成層狀,會方便我們使用矩陣乘法進行前向傳播,以上圖右邊的神經網絡舉例

輸入是[3\times1]?的向量,一個層所有連接的權重可以儲存在一個矩陣中,比如第一個隱藏層的權重矩陣是一個[4\times3]?的矩陣W_1, 偏置是[4\times1]?的向量b_1, 假設第一層的激活函數為f,則f(W_1x+b_1)?即可得到第一個隱藏層的輸出,后面幾層的運算同理

表達能力:

可以這樣來理解具有全連接層的神經網絡,它們定義了一個由一系列函數組成的函數族,網絡的權重就是每個函數的參數,已被證明,給出任意連續函數f(x)?和任意\epsilon>0?,均存在至少含1個隱藏層的神經網絡g(x)?, 使得|f(x) - g(x)|< \epsilon?即神經網絡可以近似任何連續函數

既然2層神經網絡可以完美近似所有連續函數,那為什么需要將網絡做得更深層呢?這是因為淺層網絡實際訓練效果較差

神經網絡在實踐中好用,是因為其表達出的函數不僅平滑,而且對于數據的統計特性有很好的擬合

但對于普通神經網絡來說,層數并不是越多越好,其會面臨梯度消失難以訓練的問題,但對于卷積神經網絡來說,層數是一個極為重要的因素,一個直觀解釋是,因為圖像具有層次化結構,所以需要多層處理這種數據

如何設置層的數量和尺寸:

更大容量的神經網絡可以表達更復雜的函數,但這既是優點也是缺點,優點是其可以分類更復雜的數據,缺點是可能造成對訓練數據的過擬合

過擬合指的是網絡對數據中的噪聲有很強的擬合能力,而沒有重視數據間的潛在基本關系(假設的),例如,下圖中使用20個隱藏層的網絡擬合了所有訓練數據,但代價是把決策邊界變成了許多不相連的紅綠區域,即沒有忽略異常點的噪聲,而另外兩個網絡擬合的決策邊界就較為寬泛,這樣在實際測試中會有更好的泛化能力

但并不是不提倡使用大容量的神經網絡,小網絡更難使用梯度下降等局部方法來訓練,而大網絡效果更好。因此我們應該想別的辦法來避免過擬合,例如在Loss函數中加入正則化,下圖是20隱藏層網絡正則化超參數取不同值時的訓練效果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/92133.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/92133.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/92133.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

暑期算法訓練.5

目錄 20. 力扣 34.在排序數組中查找元素的第一個位置和最后一個位置 20.1 題目解析&#xff1a; 20.2 算法思路&#xff1a; 20.3 代碼演示&#xff1a; ?編輯 20.4 總結反思&#xff1a; 21.力扣 69.x的平方根 21.1 題目解析&#xff1a; 21.2 算法思路&#xff1a;…

【HDLBits習題詳解 2】Circuit - Sequential Logic(5)Finite State Machines 更新中...

1. Fsm1&#xff08;Simple FSM 1 - asynchronous reset&#xff09;狀態機可分為兩類&#xff1a;&#xff08;1&#xff09;Mealy狀態機&#xff1a;輸出由當前狀態和輸入共同決定。輸入變化可能立即改變輸出。&#xff08;2&#xff09;Moore狀態機&#xff1a;輸出僅由當前…

多級緩存(億級流量緩存)

傳統緩存方案問題 多級緩存方案 流程 1.客戶端瀏覽器緩存頁面靜態資源; 2. 客戶端請求到Nginx反向代理;[一級緩存_瀏覽器緩存] 3.Nginx反向代理將請求分發到Nginx集群(OpenResty); 4.先重Nginx集群OpenResty中獲取Nginx本地緩存數據;[二級緩存_Nginx本地緩存] 5.若Nginx本地緩存…

淺談Rust語言特性

如大家所了解的&#xff0c;Rust是一種由Mozilla開發的系統編程語言&#xff0c;專注于內存安全、并發性和高性能&#xff0c;旨在替代C/C等傳統系統編程語言。Rust 有著非常優秀的特性&#xff0c;例如&#xff1a;可重用模塊 內存安全和保證&#xff08;安全的操作與不安全的…

React探索高性能Tree樹組件實現——react-window、react-vtree

&#x1f680; 簡介 在現代 Web 應用中&#xff0c;處理大量層級數據的樹形結構是一個常見挑戰。傳統的樹組件在面對成千上萬個節點時往往會出現性能瓶頸&#xff0c;導致頁面卡頓、內存占用過高等問題。本文將深入探討如何使用 react-window 和 react-vtree 構建高性能的虛擬…

C++ 中的默認構造函數:非必要,不提供

《More Effective C&#xff1a;35個改善編程與設計的有效方法》 讀書筆記&#xff1a;非必要不提供default constructor在 C 中&#xff0c;默認構造函數&#xff08;即無需任何參數即可調用的構造函數&#xff09;是對象“無中生有”的一種方式。它的核心作用是在沒有外部信息…

如何選擇低代碼開發平臺

選擇低代碼開發平臺需要考慮平臺的開發效率、靈活性和擴展能力、安全性和合規性、成本效益等關鍵因素。 具體來說&#xff0c;平臺的靈活性和擴展能力尤為重要&#xff0c;這決定了平臺是否能長期滿足企業日益增長的復雜需求。例如&#xff0c;企業在評估平臺時&#xff0c;應關…

電子數據取證領域的雙輪驅動——手工分析 vs 自動化分析

在你剛步入電子數據取證領域時&#xff0c;可能很快就注意到一個普遍現象&#xff1a;大多數取證分析師前期都花費大量時間在網上查閱博客、PDF、推文等信息&#xff0c;尋找證據線索的“藏身之處”——例如注冊表項、日志文件路徑、可疑文件命名模式或遠程登錄痕跡等。這種信息…

《Python 實時通信全解:掌握 WebSocket 技術與 HTTP 的本質區別》

??《Python 實時通信全解:掌握 WebSocket 技術與 HTTP 的本質區別》 引言:通信方式的演進與 Python 的角色 在數字化世界里,**“實時性”**已經成為構建高質量應用的核心訴求。從聊天工具到股票交易系統,再到物聯網設備管理——通信的即時響應能力直接決定用戶體驗。而…

GeoTools 自定義坐標系

前言在GIS開發中&#xff0c;坐標系統是重中之重&#xff0c;在接到任務時首先要確定的就是坐標系。大多數地圖庫或者互聯網地圖默認支持WGS84地理坐標系和Web墨卡托投影坐標系。而在我國要求使用自然資源數據使用2000國家大地坐標&#xff08;CGCS2000&#xff09;。1. 背景 經…

[特殊字符] Java反射從入門到飛升:手撕類結構,動態解析一切![特殊字符]

【&#x1f50d;震撼揭秘】 你是否曾想窺探Java類的內部結構&#xff1f;&#x1f914; 是否好奇Spring框架如何實現"萬物皆可注入"&#xff1f;? 本文將帶你從反射小白晉升為反射高手&#xff0c;用一行代碼透視任意類的構造方法、成員變量和私有方法&#xff01;&…

CMake與catkin_make的find_package()命令使用說明

在 CMake 中&#xff0c;find_package() 是一個核心函數&#xff0c;用于查找并加載外部依賴庫的配置。它的主要作用是定位頭文件、庫文件&#xff0c;并設置相關變量&#xff0c;以便后續編譯和鏈接。以下是詳細解析&#xff1a; 1. 基本語法 find_package(<PackageName&g…

Spring--BeanFactoryPostProcessor的用法

原文網址&#xff1a;Spring--BeanFactoryPostProcessor的用法_IT利刃出鞘的博客-CSDN博客 簡介 說明 本文介紹Spring的BeanFactoryPostProcessor的用法。 BeanPostProcessor和BeanFactoryPostProcessor的區別 項BeanPostProcessorBeanFactoryPostProcessor處理的對象處理…

了解類加載器嗎?類加載器的類型有哪些?

一、什么是類加載器&#xff08;ClassLoader&#xff09; 類加載器是 Java 虛擬機中的一部分&#xff0c;負責將 .class 文件加載到 JVM 內存中&#xff0c;生成對應的 Class 對象。 Java 程序中所有的類在使用前都必須通過類加載器加載進 JVM&#xff0c;才能被執行。二、類加…

PHP面向對象高級特性:魔術方法、對象迭代器與設計模式應用

引言 在前一篇文章中,我們探討了PHP的Traits、匿名類和對象比較機制。本文將深入PHP面向對象編程的更多高級特性,包括魔術方法、對象迭代器以及常用設計模式的實際應用,這些特性能夠幫助開發者構建更加靈活和強大的面向對象系統。 魔術方法深度解析 魔術方法是PHP中一組以…

【Java基礎】一個月教你輕松掌握Java——第三篇Git

一、Java概述&#xff08;之前的文章&#xff09;二、版本控制工具Git其實這個與Java基礎關系不大&#xff0c;但是這個工具還是很重要的&#xff0c;不管是團隊之間打比賽還是就業都應該學會它&#xff0c;秉持著學的早一些&#xff0c;用的時間長一點&#xff0c;會更熟練。&…

【C# in .NET】16. 探秘類成員-索引器:通過索引訪問對象

探秘類成員-索引器:通過索引訪問對象 在 C# 中,索引器(Indexer)是一種獨特的類成員,它允許類或結構的實例像數組一樣被索引訪問,為數據訪問提供了極大的靈活性。本文將從基礎概念出發,深入.NET 框架底層,剖析索引器的實現機制,并通過實戰案例展示其強大的應用價值。 …

idea出現:java: Target level ‘1.7‘ is incompatible with source level ‘1.8‘.解決辦法

在文件->設置->java編譯器&#xff0c;把這里版本對應上。這里用的是8版本

ssms(SQL 查詢編輯器) 添加快捷鍵 Ctrl+D(功能等于Ctrl+C + Ctrl+V),一步到位

1,打開ssms 工具&#xff0c;打開對應添加快捷鍵得地方2&#xff0c;分配 快捷鍵3&#xff0c;看效果

數學建模--層次分析法

層次分析法&#xff08;AHP&#xff09;筆記 一、核心概念 &#xff08;一&#xff09;問題本質 面對多方案、多準則決策&#xff0c;將復雜問題分層拆解&#xff0c;通過定性與定量結合&#xff0c;確定各因素權重&#xff0c;選出最優方案&#xff0c;比如選“微博之星”時綜…