2.1 二元分类-深度学习-Stanford吴恩达教授
| 1.7 總結習題 | 回到目錄 | 2.2 Logistic 回歸 |
二元分類 (Binary Classification)
這周我們將學習神經網絡的基礎知識,其中需要注意的是,當實現一個神經網絡的時候,我們需要知道一些非常重要的技術和技巧。例如有一個包含 mmm 個樣本的訓練集,你很可能習慣于用一個for循環來遍歷訓練集中的每個樣本,但是當實現一個神經網絡的時候,我們通常不直接使用for循環來遍歷整個訓練集,所以在這周的課程中你將學會如何處理訓練集。
另外在神經網絡的計算中,通常先有一個叫做前向暫停(forward pause)或叫做前向傳播(foward propagation)的步驟,接著有一個叫做反向暫停(backward pause) 或叫做反向傳播(backward propagation)的步驟。所以這周我也會向你介紹為什么神經網絡的訓練過程可以分為前向傳播和反向傳播兩個獨立的部分。
在課程中我將使用邏輯回歸(logistic regression)來傳達這些想法,以使大家能夠更加容易地理解這些概念。即使你之前了解過邏輯回歸,我認為這里還是有些新的、有趣的東西等著你去發現和了解,所以現在開始進入正題。
邏輯回歸是一個用于二分類(binary classification)的算法。首先我們從一個問題開始說起,這里有一個二分類問題的例子,假如你有一張圖片作為輸入,比如這只貓,如果識別這張圖片為貓,則輸出標簽1作為結果;如果識別出不是貓,那么輸出標簽0作為結果。現在我們可以用字母 來 表示輸出的結果標簽,如下圖所示:
我們來看看一張圖片在計算機中是如何表示的,為了保存一張圖片,需要保存三個矩陣,它們分別對應圖片中的紅、綠、藍三種顏色通道,如果你的圖片大小為64x64像素,那么你就有三個規模為64x64的矩陣,分別對應圖片中紅、綠、藍三種像素的強度值。為了便于表示,這里我畫了三個很小的矩陣,注意它們的規模為5x4 而不是64x64,如下圖所示:
為了把這些像素值放到一個特征向量中,我們需要把這些像素值提取出來,然后放入一個特征向量 xxx 。為了把這些像素值轉換為特征向量 xxx ,我們需要像下面這樣定義一個特征向量 xxx 來表示這張圖片,我們把所有的像素都取出來,例如255、231等等,直到取完所有的紅色像素,接著最后是255、134、…、255、134等等,直到得到一個特征向量,把圖片中所有的紅、綠、藍像素值都列出來。如果圖片的大小為64x64像素,那么向量 xxx 的總維度,將是64乘以64乘以3,這是三個像素矩陣中像素的總量。在這個例子中結果為 nx=12,288n_x=12,288nx?=12,288 。現在我們用,來表示輸入特征向量的維度,有時候為了簡潔,我會直接用小寫 nnn 的來表示輸入特征向量 xxx 的維度。所以在二分類問題中,我們的目標就是習得一個分類器,它以圖片的特征向量作為輸入,然后預測輸出 yyy 結果為1還是0,也就是預測圖片中是否有貓:
接下來我們說明一些在余下課程中,需要用到的一些符號。
符號定義 :
x:x:x:
表示一個 nxn_xnx? 維數據,為輸入數據,維度為 (nx,1)(n_x,1)(nx?,1);
y:y:y:
表示輸出結果,取值為 (0,1)(0,1)(0,1);
(x(i),y(i)):(x^{(i)},y^{(i)}):(x(i),y(i)):
表示第組數據,可能是訓練數據,也可能是測試數據,此處默認為訓練數據;
X=[x(1),x(2),?,x(m)]X=[x^{(1)},x^{(2)},\cdots,x^{(m)}]X=[x(1),x(2),?,x(m)]:
表示所有的訓練數據集的輸入值,放在一個 nx?mn_x * mnx??m 的矩陣中,其中 mmm 表示樣本數目;
Y=[y(1),y(2),?,y(m)]Y=[y^{(1)},y^{(2)},\cdots,y^{(m)}]Y=[y(1),y(2),?,y(m)]:
對應表示所有訓練數據集的輸出值,維度為 1?m1*m1?m。
用一對 (x,y)(x,y)(x,y) 來表示一個單獨的樣本,xxx 代表 nxn_xnx? 維的特征向量,yyy 表示標簽(輸出結果)只能為0或1。 而訓練集將由 mmm 個訓練樣本組成,其中 (x(1),y(1))(x^{(1)},y^{(1)})(x(1),y(1)) 表示第一個樣本的輸入和輸出, (x(2),y(2))(x^{(2)},y^{(2)})(x(2),y(2)) 表示第二個樣本的輸入和輸出,直到最后一個樣本 (x(m),y(m))(x^{(m)},y^{(m)})(x(m),y(m)) ,然后所有的這些一起表示整個訓練集。有時候為了強調這是訓練樣本的個數,會寫作 MtrainM_{train}Mtrain?,當涉及到測試集的時候,我們會使用來 MtestM_{test}Mtest? 表示測試集的樣本數,所以這是測試集的樣本數:
最后為了能把訓練集表示得更緊湊一點,我們會定義一個矩陣用大寫的 XXX 表示,它由輸入向量 x(1)x^{(1)}x(1)、x(2)x^{(2)}x(2) 等組成,如下圖放在矩陣的列中,所以現在我們 x(1)x^{(1)}x(1) 把作為第一列放在矩陣中, x(2)x^{(2)}x(2) 作為第二列,x(m)x^{(m)}x(m) 放到第 mmm 列,然后我們就得到了訓練集矩陣 XXX。所以這個矩陣有 mmm 列,mmm 是訓練集的樣本數量,然后這個矩陣的高度記為 nxn_xnx?,注意有時候可能因為其他某些原因,矩陣 XXX 會由訓練樣本按照行堆疊起來而不是列,如下圖所示:x(1)x^{(1)}x(1) 的轉置 x(m)x^{(m)}x(m) 直到的轉置,但是在實現神經網絡的時候,使用左邊的這種形式,會讓整個實現的過程變得更加簡單:
現在來簡單溫習一下:XXX 是一個規模為 nxn_xnx? 乘以 mmm 的矩陣,當你用Python實現的時候,你會看到X.shape,這是一條Python命令,用于顯示矩陣的規模,即X.shape等于 (nx,m)(n_x,m)(nx?,m),XXX 是一個規模為 nxn_xnx? 乘以 mmm 的矩陣。所以綜上所述,這就是如何將訓練樣本(輸入向量 XXX 的集合)表示為一個矩陣。
那么輸出標簽 yyy 呢?同樣的道理,為了能更加容易地實現一個神經網絡,將標簽 yyy 放在列中將會使得后續計算非常方便,所以我們定義大寫的 YYY 等于 y(1),y(2),?,y(m)y^{(1)},y^{(2)},\cdots,y^{(m)}y(1),y(2),?,y(m),所以在這里是一個規模為1乘以 mmm 的矩陣,同樣地使用Python將表示為Y.shape等于,表示這是一個規模為1乘以 mmm 的矩陣。
當你在后面的課程中實現神經網絡的時候,你會發現,一個好的符號約定能夠將不同訓練樣本的數據很好地組織起來。而我所說的數據不僅包括 xxx 或者 yyy 還包括之后你會看到的其他的量。將不同的訓練樣本的數據提取出來,然后就像剛剛我們對 xxx 或者 yyy 所做的那樣,將他們堆疊在矩陣的列中,形成我們之后會在邏輯回歸和神經網絡上要用到的符號表示。如果有時候你忘了這些符號的意思,比如什么是 mmm,或者什么是 nnn,或者忘了其他一些東西,我們也會在課程的網站上放上符號說明,然后你可以快速地查閱每個具體的符號代表什么意思,好了,我們接著到下一個視頻,在下個視頻中,我們將以邏輯回歸作為開始。 備注:附錄里也寫了符號說明。
課程板書
| 1.7 總結習題 | 回到目錄 | 2.2 Logistic 回歸 |
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀
總結
以上是生活随笔為你收集整理的2.1 二元分类-深度学习-Stanford吴恩达教授的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1.7 总结-深度学习-Stanford
- 下一篇: 2.2 Logistic 回归-深度学习