1. 程式人生 > >神經網路與深度學習課程學習筆記(第二章)

神經網路與深度學習課程學習筆記(第二章)

第二章 神經網路基礎

自學Andrew Ng老師的神經網路公開課,作一些筆記,老師講的非常詳細,通俗易懂,感覺不需要做第一章的筆記,所以沒有

2.1 二分分類

什麼是二分分類問題,用影象中是否有小貓的例子來說明,影象的顏色畫素數值是演算法的輸入,是否有小貓是演算法的輸出。
在logistic迴歸和神經網路中需要用到的關鍵符號,以及它們的表示方法。比如對於所有的訓練樣本,要寫成一個大的矩陣,矩陣的每一列是一個訓練樣本輸入,多個樣本就橫著寫,訓練樣本的輸出也是這樣寫,每一列是一個訓練樣本輸出。

2.2 logistic迴歸

Logistic迴歸是一種監督學習演算法,用來輸出估計狀態集合為0,1的學習結果。
我們的目的是輸出估計的0或1,或者說,輸出估計值為1的概率,如果採用線性函式:wx+b,無法輸出兩個狀態,則我們使用sigmod函式,從而y

=s(wx+b)y=s(wx+b)z=wx+bz=wx+by=s(z)y=s(z)sigmod函式可以在z為非常大時輸出1,在z為非常小時輸出0。
對於引數,一種寫法時theta,theta0表示b,也就是x^0的引數,theta其他值對應w,教程中不使用theta而是使用w和b,更容易理解。

2.3 代價函式

右上角帶括號的角標是指第i個樣本,統一寫法。
如何訓練引數w和b,我們的目的是讓y/hat與y的差距儘可能小,設計一個損失函式(誤差函式),
L(y^,y) L(\hat y, y)
這個函式可以是歐幾里得距離,但是會在下一步梯度下降法時出現很多區域性最優解,從而這裡設計
L

(y^,y)=ylogy(1y)log(1y) L(\hat y, y) = -ylogy-(1-y)log(1-y)
這個公式也能做到損失函式的要求,還能夠避免梯度下降法的區域性最優解。
將所有的訓練樣本的損失函式求均值後,得到的值為代價函式
J(w,b)=1miL(y^i,yi) J(w,b)=\frac {1}{m}\sum_i{L(\hat y^{i}, y^{i})}
損失函式是針對單個訓練樣本,代價函式是所有訓練樣本損失函式的均值,用來控制整個模型的訓練程度,我們的訓練就是針對代價函式。

2.4 梯度下降法

本節就講了上一節提出的代價函式,如何取得能夠使代價函式最小的w和b的值,用到的方法就是梯度下降法。梯度下降法就是重複的更新w和b,每次更新的步長就是αdw\alpha dwαdb\alpha dbα\alpha是學習率,值越大,步長越大。然後後邊還講了導數和偏導數的概念,還好學過高數,不難。

2.5 導數

這節直接跳過

2.6 更多導數例子

這節就是講導數會變的情況,講的是真的細啊

2.7 計算圖

介紹了計算圖的概念,就是把一個公式拆分成多個子公式,形成一個圖的形式。

2.8 計算圖的導數計算

這節通過反向計算計算圖的導數,分別求代價函式J相對於各個項的導數,引出了反向計算。反向計算是為了得到代價函式中的每一個引數的導數,從而通過導數結合前邊的梯度下降法,就可以按梯度的方向去更新引數,最終尋找到代價函式的最小值。

2.9 logistic迴歸中的梯度下降法

這一節是將前幾節的梯度下降法,logistic迴歸公式,還有反向計算結合起來,舉例
z=w1x1+w2x2+b z=w^1x^1+w^2x^2+b

y^=a=sigmod(z) \hat y = a = sigmod(z)

L(y^,y)=L(a,y)=(ylog(a)+(1y)log(1a)) L(\hat y, y) = L(a, y) = -(ylog(a)+(1-y)log(1-a))

這幾個公式,然後反向計算da>dz>dw1>dw2>dbda->dz->dw^1->dw^2->db關於引數w1,w2,bw^1, w^2, b的導數,就可以用到梯度下降法中了。本節講的是單個樣本的例子。
計算出來的
da=dL(a,y)da=ya+1y1a da=\frac{dL(a,y)}{da} = -\frac{y}{a}+\frac{1-y}{1-a}

dz=dL(a,y)dadadz=da(a(1a))=ay dz=\frac{dL(a,y)}{da}*\frac{da}{dz}=da*(a(1-a))=a-y

dw=xdz dw=x*dz

db=dz db=dz

2.10 向量化

本節介紹了python中用向量來代替迴圈實現向量運算的好處,就是快,老師用一個例子來演示了,向量np.dot(x,y)np.dot(x,y)用1.5ms,用迴圈需要500ms,這還是小資料,大資料下計算速率差別更大。所以建議能用向量運算的時候就去用,儘量不要用迴圈單個元素的乘。

2.11 向量化的更多例子

本節前半段介紹了除了計算兩個向量的乘法可以使用向量化的方法以外,對於計算向量的指數、對數、倒數、絕對值等等數學運算,也可以用向量化方法取代迴圈依次計算每一個項的方法。
後邊介紹了對於logistics迴歸演算法中,可以將所有的引數寫成一個向量,然後裡邊關於依次計算引數倒數和更新引數倒數的步驟就可以使用向量化的方法來取代。

2.12 向量化的logistics迴歸

使用向量化可以替代迴圈實現對啟用函式的計算,首先z=wx+bz=wx+b其次a=sigmod(z)a=sigmod(z)其中zzaa看作是向量,寫作ZZAA,可以用Z=np.dot(WT,X)+bZ=np.dot(W^T, X)+bA=sigmod(Z)A=sigmod(Z)來計算。

2.13 向量化logistics迴歸的反向傳播演算法

dz=aydz=a-y是怎麼來的?和z=wx+bz=wx+b的關係是啥?
本節講了如何將整個logistics迴歸演算法用向量化的方式來替代,logistics迴歸的迴圈版本需要每次迴圈每個樣本,對每個樣本進行計算和迭代,向量化的版本取代了這個迴圈。
Z=WTX+b Z = W^T * X + b

A=sigmod(Z) A = sigmod(Z)

dZ=AY dZ = A - Y

dW+=1m(XdZT) dW += \frac{1}{m} (X * dZ^T)

dB+=1mnp.sum(dZ) dB += \frac{1}{m} np.sum(dZ)

W:=WαdW W := W - \alpha * dW

B:=BαdB B := B - \alpha * dB

2.14 Python中的廣播

這次講的是Python中的broadcasting,我不知道這裡翻譯成廣播對不對,反正意思就是Python可以在矩陣運算中,將不符合行列數量匹配的矩陣之間進行運算,會將較小的那個矩陣擴充套件成較大的那個的行列數。同理也適用於矩陣與向量和實數做的運算。

上文公式中我們使用了BBdBdB來表示常數引數矩陣,然而在神經網路中這個量是向量,這裡就用到了Python廣播,將向量的bbdbdb擴充套件成BBdBdB

2.15 關於Python/numpy中向量的說明

這個問題我以前經常會遇到,之前沒有總結過。
當使用Python做科學運算時,總會使用到numpy,但要注意資料結構的問題,區分開陣列和矩陣的區別。使用

a=np.random.randn(5)

生成的a是一個數組,陣列的轉置依然是這個陣列,不滿足矩陣的運算;使用

a=np.random.randn(5,1)

生成的a是一個矩陣,矩陣滿足矩陣運算。如果將兩個a求sharp,第一個得到的是(5,)這樣一個結果,第二個得到的是(5,1)這樣一個結果。
經常會有一些問題是因為這裡資料結構區別導致的,要多加註意,老師建議總是去使用矩陣,而不是陣列,如果有陣列,就使用reshape將其變為矩陣。另外,多的使用assert去檢查a.shape是否滿足要求,可以避免難以除錯的bug。

2.16 ipython筆記本

這節講怎麼用ipython筆記本除錯程式碼和提交作業。

2.17 (選修)logistics損失函式的解釋

本節講的明顯比前邊的複雜一些,分兩部分。
首先是解釋logistics中損失函式
L(y^,y)=(ylogy+(1y)log(1y)) L(\hat y, y) = -(ylogy + (1-y)log(1-y))
是怎麼推匯出來的,這個式子是首先由:
p(yx)={y^y=11y^y=0 p(y|x)={ \begin{cases} \hat y& \text{y=1} \\ 1- \hat y& \text{y=0} \\ \end{cases} }
將這兩個式子合併:
p(yx)=y^y(1y^)(1y) p(y|x) = \hat y^y * (1-\hat y)^{(1-y)}
另外老師說對log(p(yx)log(p(y|x)求最大值等效於求p(yx)p(y|x)的最大值,所以
log(p(yx))=ylog(y^)+(1y)log(1y^) log(p(y|x)) = ylog(\hat y)+(1-y)log(1-\hat y)
之後對整個式子加負號,是因為計算損失函式的最小值,所以將計算log函式的最大值取負數,最後
L(y^,y)=(ylog(y^)+(1y)log(1y^)) L(\hat y, y) = -(ylog(\hat y) + (1-y)log(1-\hat y))

相關推薦

神經網路深度學習課程學習筆記第二

第二章 神經網路基礎 自學Andrew Ng老師的神經網路公開課,作一些筆記,老師講的非常詳細,通俗易懂,感覺不需要做第一章的筆記,所以沒有 2.1 二分分類 什麼是二分分類問題,用影象中是否有小貓的例子來說明,影象的顏色畫素數值是演算法的輸入,是否有小貓

java-web學習筆記第二

直接 () destroy 垃圾回收 垃圾回收器 troy 鏈接 ems cse 第二章:Servlet基礎 1,創建Servlet有幾種方式?處理http請求最好使用哪種方式?  1>直接實現Servlet接口和它的所有方法;&emsp

Perl學習筆記第二

1.字串 1.單雙引號內的字串直接量 ----單引號內的字串指的是一對單引號(')圈引的一串字元,單引號內的字元(除了單引號和反斜線字元外)都表示它們自己。 'fred' #總共4個字元:f、r、e、d '' #空字元(沒有字元) 'hello there' #h

Linux核心設計實現 總結筆記第二

一、Linux核心中的一些基本概念 核心空間:核心可獨立於普通應用程式,它一般處於系統態,擁有受保護的記憶體空間和訪問硬體裝置的所有許可權。這種系統態和被保護起來的記憶體空間,稱為核心空間。 程序上下文:當應用程式執行一條系統呼叫,通過系統呼叫執行在核心空間,而核心被稱為執行在程序上下文中。  

Effective Objective-C 2.0 總結筆記第二—— 物件、訊息、執行期

第二章:物件、訊息、執行期 ​ “物件”就是“基本構造單元”,開發者可以通過物件來儲存並傳遞資料。物件之間傳遞資料並執行任務的過程就是“訊息傳遞”。程式執行起來後,為其提供相關支援的程式碼就是“Objective-C執行期環境”,它提供了一些使得物件之間能夠傳遞訊息的重要函式,並且包括建

不測的祕密:精準測試之路----讀書筆記第二

二:道與術 1、程式碼分析 解決:如何在保證質量前提下,縮減迴歸測試範圍 why:瞭解其內部實現,讓測試變得更精準白盒測試優勢:對程式內部實現的瞭解;   黑盒測試優勢:對使用者場景的把握   2、測試分析理論由來    黑白測試核心思想: 白盒:

PRML讀書筆記第二

2018/4/111.共軛先驗:後驗概率分佈(正比於先驗和似然函式的乘積)擁有與先驗分佈相同的函式形式(比如都是高斯分佈)。這個性質被叫做共軛性(Conjugacy),這時先驗分佈就稱為共軛先驗;2.我們可以觀察似然函式的形式,找到一個正比與似然函式的函式式,將其作為先驗概率

神經網路深度學習課程筆記第三、四周

接著學習吳恩達老師第三、四周的課程。(圖片均來自吳恩達老師課件)   第三週 1. 普通的淺層網路                        

神經網路深度學習課程筆記第一、二週

   之前結束了吳恩達老師的機器學習的15節課,雖然看得很艱辛,但是也算是對於機器學習的理論有了一個入門,很多的東西需要不斷的思考以及總結。現在開始深度學習的學習,仍然做課程筆記,記錄自己的一些收穫以及思考。   第一週 1. ReLU (Rectified

吳恩達《神經網路深度學習課程筆記歸納-- 神經網路基礎之邏輯迴歸

上節課我們主要對深度學習(Deep Learning)的概念做了簡要的概述。我們先從房價預測的例子出發,建立了標準的神經網路(Neural Network)模型結構。然後從監督式學習入手,介紹了Standard NN,CNN和RNN三種不同的神經網路模型。接著介紹了兩種不

吳恩達《神經網路深度學習課程筆記歸納-- 神經網路基礎之Python向量化

上節課我們主要介紹了邏輯迴歸,以輸出概率的形式來處理二分類問題。我們介紹了邏輯迴歸的Cost function表示式,並使用梯度下降演算法來計算最小化Cost function時對應的引數w和b。通過計算圖的方式來講述了神經網路的正向傳播和反向傳播兩個過程。本節課我們將來

Coursera吳恩達《神經網路深度學習課程筆記2-- 神經網路基礎之邏輯迴歸

上節課我們主要對深度學習(Deep Learning)的概念做了簡要的概述。我們先從房價預測的例子出發,建立了標準的神經網路(Neural Network)模型結構。然後從監督式學習入手,介紹了Standard NN,CNN和RNN三種不同的神經網路模型。接

Note——Neural Network and Deep Learning 1[神經網路深度學習學習筆記1]

一、初學神經網路的體會 正如書中作者說的神經網路可以被稱作最美的程式設計正規化之一,神經網路將我們需要解決的複雜問題,比如手寫字型分類,簡化成一個個簡單的步驟,而本人無需瞭解內部的具體結構引數變化等。關於神經網路已經有很多實用的庫,使用這些庫可以很快的解決問題。但是不滿

神經網路深度學習學習筆記

《Neural Networks and Deep Learning》一書的中文譯名是《神經網路與深度學習》,書如其名,不需要解釋也知道它是講什麼的,這是本入門級的好書。 在第一章中,作者展示瞭如何編寫一個簡單的、用於識別MNIST資料的Python神經網路程

神經網路深度學習學習筆記:實現單隱層的神經網路

本文為吳恩達課程的程式設計大作業,需要建立的模型如下圖所示: 依賴庫 import numpy as np import matplotlib.pyplot as plt from testCases import * #程式碼見文末

小白學《神經網路深度學習筆記之一-計算機的潛意識:淺談神經網路-從神經元到深度學習

神經網路是一門重要的機器學習技術。它是目前最為火熱的研究方向--深度學習的基礎。學習神經網路不僅可以讓你掌握一門強大的機器學習方法,同時也可以更好地幫助你理解深度學習技術。 本文以一種簡單的,循序的方式講解神經網路。適合對神經網路瞭解不多的同學。本文對閱讀沒有一定的前提要

神經網路深度學習筆記

第四章 神經網路可以計算任何函式的視覺化證明     神經網路的一個最顯著的事實就是它可以計算任何的函式。不管這個函式是什麼樣,總會確保有一個神經網路能夠對任何可能的輸入xx,其值f(x)f(x)(或者某個足夠準確的近似)是網路的輸出。即使這個函式有很多輸入和

神經網路深度學習 筆記5 過度擬合和正則化

1.過擬合 模型複雜而訓練樣本不足,過度訓練,會導致過度擬合。 訓練資料集上的代價表現是越來越好的,測試集上的代價越來越差。訓練資料上的分類準確率一直在提升接近 100%,而測試準確率僅僅能夠達到 82.27%。 網路幾乎是在單純記憶訓練集合,而沒有對數字本質進行理解能

神經網路深度學習第一天讀書筆記

書本來源 概念:感知器、S型神經元 感知器(Perceptrons) 一個感知器接受幾個二進位制的輸入,得到一個二進位制輸出。 書上舉例是三個,可以有更多輸入。 threshold表示閾值,w

吳恩達 深度學習 神經網路深度學習 神經網路基礎 課程作業

Part 1:Python Basics with Numpy (optional assignment) 1 - Building basic functions with numpy Numpy is the main package for scientific c