吳恩達 深度學習筆記

最近在看吳恩達深度學習系列課程,簡單做一個基本框架筆記。
如感興趣或了解更多內容,推薦看原課程
以前也做過一些與機器學習和深度學習有關的筆記,過分重復的就一筆帶過了。

01 第一門課 神經網絡和深度學習

1.1 第一周:深度學習引言

1.2 第二周:神經網絡的編程基礎

需要基本了解:

  1. 二分類
  2. 邏輯回歸
  3. 邏輯函數的代價函數(理解為什么要有代價函數)
  4. 梯度下降法(參數如何更新)
  5. 導數(理解微積分即可)
  6. 計算圖(關于這個,“魚書”將很好很詳細,推薦,用來理解反向傳播很方便)
  7. 利用計算圖求導數(本質上就是求導的鏈式法則)
  8. 邏輯回歸中的梯度下降
  9. m個樣本的梯度下降
  10. 向量化(是為了解決若采用for循環的慢速,向量化更高效,但要注意維度對應上)
  11. python中的廣播(broadcasting)

1.3 第三周:淺層神經網絡

以兩層神經網絡為例,基本邏輯:

  1. 結構(包括輸入層,隱藏層,輸出層)
  2. 單個神經元的計算
  3. 多樣本的向量化
  4. 激活函數(常用種類,為什么要用非線性激活函數,激活函數的導數)
  5. 神經邏輯的梯度下降(與前面邏輯回歸的梯度下降的基本思路,基本一致)
  6. 隨機初始化(對于一個神經網絡,把權重等參數都初始化為0,梯度下降將不會再起作用)

關于第六點的詳細解釋:
詳細解釋

1.4 第四周:深層神經網絡

隱藏層的數量可看作一個可自由選擇大小的超參數
如果有比較多的隱藏層(網絡比較深),總體上能夠學更復雜的函數
前向傳播和后向傳播的基本邏輯,和淺層神經網絡一致

02 第二門課 改善深層神經網絡:超參數調試,正則化以及優化

2.1 第一周:深度學習的實踐層面

2.1.1 訓練,驗證,測試集

先利用訓練集,執行算法進行訓練,通過驗證集或簡單交叉驗證集選擇最好的模型(比如超參數等的選擇)。
經過充分驗證,選定了最終模型,在測試集上進行評估。

在小數據量時代,常見做法是將所有數據三七分,即70%驗證集+30%測試集,如果沒有明確設置驗證集,也可以按照 60%訓練,20%驗證和 20%測試集來劃分。
在現在大數據階段,驗證集和測試集占數據總量的比例會趨向于變得更小。

2.1.2 偏差,方差

圖片
最左邊的圖片,用邏輯回歸進行擬合,并不能很好地擬合該數據,這是高偏差(high bias)的情況,稱為“欠擬合”(underfitting)。

最右邊的圖片,擬合方式分類器方差較高(high variance),數據過度擬合(overfitting)。

理解偏差和方差的兩個關鍵數據是訓練集誤差(Train set error)和驗證集誤差(Dev set error)

  • 假定訓練集誤差是 1%,驗證集誤差是 11%,可以看出訓練集結果非常好,而驗證集結果相對較差。我們可能過度擬合了訓練集,泛化能力(適用于沒訓練的數據的結果較差)在某種程度上,驗證集并沒有充分利用交叉驗證集的作用,像這種情況稱為“高方差”。
  • 假設訓練集誤差是 15%,驗證集誤差是 16%。且假設該案例中人的錯誤率幾乎為 0%。可得知,算法并沒有在訓練集中得到很好訓練,如果訓練數據的擬合度不高,就是數據欠擬合,就可以說這種算法偏差比較高。
  • 假設訓練集誤差是 15%,驗證集的錯誤率達到 30%。在這種情況下,會認為這是方差偏差都很糟糕的情況。
  • 如果訓練集誤差是 0.5%,驗證集誤差是 1%,則是很好的情況,偏差和方差都很低。

最優誤差也被稱為貝葉斯誤差。
如果最優誤差或貝葉斯誤差非常高,比如 15%。此時訓練誤差 15%,驗證誤差 16%,15%的錯誤率對訓練集來說也是非常合理的,偏差不高,方差也非常低。

需要根據實際情況(高偏差,還是高方差),采取不同的措施。

2.1.3 L2 正則化

前面提到了過擬合的問題—高方差。有兩個解決方法,一個是正則化,一個是準備更多的數據。

對w用L2正則化:
圖片
為什么一般對w用2范數?
因為w通常是一個高維參數向量,幾乎可以涵蓋所有參數。是否對b使用2范數的正則化,并不太影響最終結果。

L2正則化是最常見的正則化函數。

提問,為什么正則化有利于預防過擬合?
當處于過擬合狀態時,若正則化𝜆設置得足夠大,權重矩陣𝑊被設置為接近于 0 的值,直觀理解就是把多隱藏單元的權重設為 0,于是基本上消除了這些隱藏單元的許多影響。(0這里算時比較極端的假設)
𝜆會存在一個中間值,于是會有一個接近“Just Right”的中間狀態。

2.1.4 dropout 正則化

除了𝐿2正則化,還有一個非常實用的正則化方法——“Dropout(隨機失活)”.

假設我們需要訓練的神經網絡圖如下,存在過擬合現象:
神經網絡圖

dropout 會遍歷網絡的每一層,并設置消除神經網絡中節點的概率
假設網絡中的每一層,設置每個節點得以保留和消除的概率都是 0.5。
設置完節點概率,我們會消除一些節點,然后刪除掉從該節點進出的連線,最后得到一個節點更少,規模更小的網絡。
圖片

對于其他樣本,我們同樣這樣設置概率,保留一類節點集合,刪除其它類型的節點集合。
對于每個訓練樣本,我們都將采用一個精簡后神經網絡來訓練它。

如何實施 dropout 呢?
下面主要講inverted dropout(反向隨機失活)。
出于完整性考慮,用一個三層(𝑙 = 3)網絡來舉例說明。

  1. 首先要定義向量𝑑,𝑑[3]表示一個三層的 dropout 向量:
    d3 = np.random.rand(a3.shape[0],a3.shape[1])
  2. 然后看它是否小于某數,我們稱之為 keep-prob,keep-prob 是一個具體數字。例如前面我們就設置的0.5。
  3. 接下來,從第三層中獲取激活函數,叫做𝑎[3]。使用 a3=np.multiply(a3,d3),就可以利用乘法運算,得到相應元素的輸出。
  4. 最后,進行調整,使用a3/=keep-prob。
    解釋原因:
    50 個神經元,在一維上𝑎[3]是 50,我們通過因子分解將它拆分成50 × 𝑚維的。
    假設保留和刪除它們的概率分別為 80%和 20%,這意味著最后被刪除或歸零的單元平均有 10(50×20%=10)個。
    看𝑧[4],𝑧[4] = 𝑤[4]𝑎[3] + 𝑏[4],我們的預期是,𝑎[3]減少 20%,也就是說𝑎[3]中有 20%的元素被歸零,為了不影響𝑧[4]的期望值,我們需要用𝑤[4]𝑎[3]/0.8,它將會修正或彌補所需要的那20%,a[3]的期望不會變。

顯然在測試階段,我們并未使用 dropout。
因為在測試階段進行預測時,我們不期望輸出結果是隨機的,如果測試階段應用 dropout 函數,預測會受到干擾。

2.1.5 理解dropout

一種理解是:
不依賴于任何一個特征,因為該單元的輸入可能隨時被清除,因此該單元通過這種方式傳播下去,并為單元的四個輸入增加一點權重,通過傳播所有權重。
dropout將產生收縮權重的平方范數的效果,和之前講的𝐿2正則化類似;實施 dropout 的結果實它會壓縮權重,并完成一些預防過擬合的外層正則化;𝐿2對不同權重的衰減是不同的,它取決于激活函數倍增的大小。
(可粗略理解為:dropout特征都有可能被隨機清除,或者說該單元的輸入也都可能被隨機清除。機器不愿意把所有賭注都放在一個節點上,不愿意給任何一個輸入加上太多權重,因為它可能會被刪除,因此該單元將通過這種方式積極地傳播開,并為單元的四個輸入增加一點權重,通過傳播所有權重)

不擔心過擬合問題的,keep-prob 可以為 1。
過擬合問題比較嚴重的,keep-prob會需要小一點。

dropout的缺點是,代價函數J不再被明確定義,每次迭代,都會隨機移除一些節點。如果要再三檢查梯度下降的性能,很難進行復查。

2.1.6 其他正則化方法

除了𝐿2正則化和隨機失活(dropout)正則化,還有幾種方法可以減少神經網絡中的過擬合:

  1. 數據擴增
    通過隨意翻轉和裁剪圖片等方式,我們可以增大數據集,額外生成假訓練數據。
    和全新的,獨立的貓咪圖片數據相比,這些額外的假的數據無法包含像全新數據那么多的信息,但我們這么做基本沒有花費,代價幾乎為零,除了一些對抗性代價。
  2. early stopping
    術語early stopping表示提早停止訓練神經網絡(如驗證集誤差開始上升的位置)

2.1.7 歸一化輸入

訓練神經網絡,其中一個加速訓練的方法就是歸一化輸入。假設一個訓練集有兩個特征,輸入特征為 2 維。

歸一化需要兩個步驟:

  1. 零均值
  2. 歸一化方差;

使用歸一化輸入,是為了讓各特征能夠從輸入同等考慮。

2.1.8 梯度消失/梯度爆炸

訓練神經網絡的時候,導數或坡度有時會變得非常大,或者非常小,甚至于以指數方式變小,這加大了訓練的難度。

假設深度為150層,在這樣一個深度神經網絡中,如果激活函數或梯度函數以與𝐿相關的指數增長或遞減,它們的值將會變得極大或極小,從而導致訓練難度上升,尤其是梯度指數小于𝐿時,梯度下降算法的步長會非常非常小,梯度下降算法將花費很長時間來學習。

2.1.9 神經網絡權重的初始化

03后記

🥲關于吳恩達《深度學習》的筆記就到這了,應該暫時就當這了。
個人覺得吳恩達的課程,較李宏毅的課和“魚書的講解,還是有點冗長了。
目前打算看看別的書,或者更有針對性一點的論文/期刊之類的。

其實很早之前就學過一些deep learning的東西,目前讀研換方向,算是“文藝復興”了,不過就這么幾年,人工智能發展也真的很快了。
粘貼一下以前在coursera學習上獲得的證書,以前還申請了學生免費上課,🥹全當是紀念了
助學金
證書

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

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

相關文章

2025數字馬力一面面經(社)

2025數字馬力一面面經(社) 日常自我介紹js數據類型有哪些(報完菜名后簡單分析了一下使用引用類型)談談對const、var、let的理解(變量提升、let和const的主要區別、使用const命名引用類型的時可以對引用類型進行操作&am…

PyQt 中 pyqtSignal 的使用

目錄 基本用法 示例代碼 關鍵特性 常見用途 一、信號的定義規則 二、完整用法步驟 1. 導入必要模塊 2. 定義帶信號的類 3. 定義接收信號的槽函數 4. 連接信號與槽 5. 發射信號 6. 斷開連接(可選) 三、高級特性 1. 跨線程通信 2. 信號連接方式 3. 信號與匿名函數 4. 信號轉發 …

使用Python驗證常見的50個正則表達式

什么是正則表達式?正則表達式(Regular Expression)通常被用來檢索、替換那些符合某個模式(規則)的文本。此處的Regular即是規則、規律的意思,Regular Expression即“描述某種規則的表達式”之意。本文收集了一些常見的正則表達式用…

Redis是單線程性能還高的原因

Redis是單線程Redis單線程是指Redis的網絡IO和鍵值對讀寫是由一個線程完成的,其他功能還是使用多線程執行Redis主干業務使用單線程的原因Redis本質就是一個大的共享資源,共享資源是需要對其進行并發控制的,即使增加了線程,大部分線程也是在等待互斥鎖,并行變串行,而且還需要進行…

若依前后端分離版學習筆記(七)—— Mybatis,分頁,數據源的配置及使用

一 Mybatis 1、Maven依賴 在ruoyi父項目的pom文件中有一個分頁插件的依賴 <!-- pagehelper 分頁插件 --> <dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version&…

灌區信息化智能管理系統解決方案

一、方案背景 灌區作為農業灌溉的重要基礎設施&#xff0c;承擔著保障糧食安全和促進農業可持續發展的關鍵作用。然而&#xff0c;傳統灌區管理方式普遍存在信息孤島、數據滯后、調度不精準等問題&#xff0c;導致水資源浪費和管理效率低下。在此背景下&#xff0c;灌區信息化智…

軟件包管理、緩存、自定義 YUM 源

1. 軟件包管理是啥 你可以把軟件包管理器理解成 Linux 的“應用商店 安裝工人”&#xff1a; 應用商店&#xff1a;幫你找到軟件&#xff08;包&#xff09;安裝工人&#xff1a;幫你下載安裝、配置、升級、卸載管理賬本&#xff1a;記錄系統里都安裝了啥、版本號是多少、依賴…

Pthon 本質詳解

理解 Python 的本質&#xff0c;不能僅僅停留在“它是一門編程語言”這個層面&#xff0c;而要深入其設計哲學、核心機制、以及它在編程世界中所扮演的角色。 可以把 Python 的本質概括為一句話&#xff1a;Python 的本質是一種以“簡潔優雅、易于讀寫”為核心設計哲學&#xf…

在Word文檔中用鍵盤直接移動(復制)內容

如何快速在Word文檔中剪切或復制內容到本文檔的其他位置&#xff1f;不用剪切或復制&#xff0c;再粘貼&#xff0c;只需要先選中內容&#xff0c;然后按下F2&#xff08;ShiftF2&#xff09;剪切&#xff08;復制&#xff09;內容&#xff0c;再把光標放到目標位置按下回車鍵就…

VRTE 的應用程序部署到Ubuntu上 報錯:bash: ./rb_exmd: No such file or directory

&#x1f6e0;? 如何在 Ubuntu 上部署 VRTE 3.5 的 AraCM_IPC 應用程序在將 VRTE 3.5 的 AraCM_IPC 應用部署到 Ubuntu 系統時&#xff0c;可能會遇到運行失敗的問題&#xff0c;提示類似&#xff1a;bash: ./rb_exmd: No such file or directory這通常并非文件不存在&#xf…

WD5202 非隔離降壓轉換芯片,220V降5V,輸出電流80MA

解鎖高效電源新境界&#xff1a;WD5202 非隔離降壓轉換芯片在當今電子設備飛速發展的時代&#xff0c;高效、穩定且低成本的電源解決方案至關重要。WD5202 作為一款卓越的非隔離降壓轉換芯片&#xff0c;正以其獨特的性能和廣泛的適用性&#xff0c;在眾多領域嶄露頭角&#xf…

庫函數版獨立按鍵用位運算方式實現(STC8)

位運算&#xff1a;更加簡便&#xff0c;單片機的內存就小&#xff0c;占的內存空間小一點案例&#xff1a; #include "GPIO.h" #include "Delay.h" #include "UART.h" // 串口配置 UART_Configuration #include "NVIC.h" // 中斷…

RA4M2_MINI開發(15)----配置RTC時鐘及顯示時間

RA4M2_MINI開發.15--配置RTC時鐘及顯示時間 概述視頻教學樣品申請硬件準備參考程序源碼下載新建工程工程模板保存工程路徑芯片配置工程模板選擇時鐘設置SWD調試口設置UART配置UART屬性配置設置e2studio堆棧e2studio的重定向printf設置R_SCI_UART_Open()函數原型回調函數user_ua…

使用Prometheus + Grafana + node_exporter實現Linux服務器性能監控

監控與告警系統部署&#xff1a;項目示例: "使用Prometheus Grafana node_exporter實現Linux服務器性能監控"描述: 在目標服務器部署node_exporter采集系統指標(CPU, 內存, 磁盤, 網絡)。部署配置Prometheus Server&#xff0c;抓取node_exporter數據。部署配置Gra…

IP防護等級及檢驗方法說明

IP防護等級說明&#xff1a; IP (Ingress Protection) 防護等級系統是由 IEC 60529 標準定義的&#xff0c;用于衡量電氣設備外殼對固體異物和液體進入的防護能力。IP代碼通常由兩位數字組成&#xff1a;第一位數字表示防固體異物等級(0-6)&#xff0c;第二位數字表示防水等級(…

最近看到的提示詞相關內容匯總

看看能不能總結出來一些提示詞最佳實踐 一定要動手實踐。 目前已經知道的提示詞好習慣 角色扮演 操作步驟 質量要求 結構化輸出 案例 Anthropic 視頻中提到,實際上作為一門科學,我們可以通過以下手段嘗試它。 最初的提示詞,不斷的嘗試,直到最終的提示詞。 優質提示詞結…

github代理

自己整理的github代理 代理網址 https://g.cachecdn.ggff.net/ https://gitcode.com/ https://git.mxg.pub/ https://xiake.pro/ https://github.akams.cn/ 手動更新 hosts 方法 適合臨時使用&#xff0c;Github 的ip經常變 Linux / MacOS hosts 路徑&#xff1a;/etc/host…

交換機100G模塊遠距離連接踩坑記錄

一、業務需求場景 兩個辦公場地之間相距較遠,大約有幾百米。網絡系統規劃兩個辦公場地的局域網之間通過100G 網絡連接,幾百米的距離使用多模光纖是不能滿足需求的,因此選擇使用單模光纖連接,交換機的模塊選擇使用華為QSFP28-100G-PSM4 模塊,這個模塊使用的是MPO接口。 兩個…

精通Python異步編程:深入理解Async/Await在LLM應用中的實踐

簡介 在現代高性能應用開發中,特別是在處理大型語言模型(LLM)時,高效處理I/O密集型操作至關重要。Python的async和await關鍵字通過異步編程提供了優雅的解決方案。本綜合指南將探討如何利用這些特性構建響應迅速、高效的LLM驅動應用。 目錄 理解同步與異步執行 Async/Await…

嵌入式第二十三課 !!!樹結構與排序(時間復雜度)

二叉樹樹概念 樹是 n(n > 0) 個結點的有限集合。若 n0 &#xff0c;為空樹。在任意一個非空樹中&#xff1a; &#xff08;1&#xff09;有且僅有一個特定的根結點&#xff1b;&#xff08;2&#xff09;當 n>1 時&#xff0c;其余結點可分為 m 個互不相交的有…