1. 程式人生 > >吳恩達學習筆記(5)--二分類問題

吳恩達學習筆記(5)--二分類問題

二分類(Binary Classification)
我們將學習神經網路的基礎知識,其中需要注意的是,當實現一個神經網路的時候,我們需要知道一些非常重要的技術和技巧。例如有一個包含m個樣本的訓練集,你很可能習慣於用一個for迴圈來遍歷訓練集中的每個樣本(適用於有程式設計思維和經驗的人),但是當實現一個神經網路的時候,我們通常不直接使用for迴圈來遍歷整個訓練集,所以在這周的課程中你將學會如何處理訓練集。

另外在神經網路的計算中,通常先有一個叫做前向暫停(forward pause)或叫做前向傳播(foward propagation)的步驟,接著有一個叫做反向暫停(backward pause) 或叫做反向傳播(backward propagation)的步驟。

所以這周也會向你介紹為什麼神經網路的訓練過程可以分為前向傳播和反向傳播兩個獨立的部分。

在課程中我將使用邏輯迴歸(logistic regression)來傳達這些想法,以使大家能夠更加容易地理解這些概念。即使你之前瞭解過邏輯迴歸,我認為這裡還是有些新的、有趣的東西等著你去發現和了解,所以現在開始進入正題。

邏輯迴歸是一個用於二分類(binary classification)的演算法。

二分類問題示例:
首先我們從一個問題開始說起,這裡有一個二分類問題的例子,假如你有一張圖片作為輸入,比如這隻貓,如果識別這張圖片為貓,則輸出標籤1作為結果;如果識別出不是貓,那麼輸出標籤0作為結果(這也就是著名的cat和non cat問題)。現在我們可以用字母y來表示輸出的結果標籤,如下圖所示:

在這裡插入圖片描述

我們來看看一張圖片在計算機中是如何表示的,為了儲存一張圖片,需要儲存三個矩陣(矩陣的概念,一定要清楚,不清楚的需要去看看線性代數了,補充下),它們分別對應圖片中的紅、綠、藍三種顏色通道,如果你的圖片大小為64x64畫素,那麼你就有三個規模為64x64的矩陣,分別對應圖片中紅、綠、藍三種畫素的強度值。為了便於表示,這裡我畫了三個很小的矩陣,注意它們的規模為5x4 而不是64x64,如下圖所示:

在這裡插入圖片描述

為了把這些畫素值放到一個特徵向量(這個是重點,特徵向量!這個是後面很多神經網路的核心思維!)中,我們需要把這些畫素值提取出來,然後放入一個特徵向量x。為了把這些畫素值轉換為特徵向量 x,我們需要像下面這樣定義一個特徵向量 x 來表示這張圖片,我們把所有的畫素都取出來,例如255、231等等,直到取完所有的紅色畫素,接著最後是255、134、…、255、134等等,直到得到一個特徵向量,把圖片中所有的紅、綠、藍畫素值都列出來。(可以想象成把所有畫素值併成一列或者一排,這裡最好理解成一列,因為後續的思路是按列來看的),如果圖片的大小為64x64畫素,那麼向量 x 的總維度,將是64乘以64乘以3,這是三個畫素矩陣中畫素的總量。

在這個例子中結果為12,288。現在我們用n_x=12,288,來表示輸入特徵向量的維度,有時候為了簡潔,我會直接用小寫的n來表示輸入特徵向量x的維度。所以在二分類問題中,我們的目標就是習得一個分類器,它以圖片的特徵向量作為輸入,然後預測輸出結果y為1還是0,也就是預測圖片中是否有貓:
在這裡插入圖片描述

接下來我們說明一些在餘下課程中,需要用到的一些符號。

符號定義 :

x:表示一個n_x維資料,為輸入資料,維度為(n_x,1);

y:表示輸出結果,取值為(0,1)(取值問題,一定要注意,這個是後期輸出值的把控重點!);

(x(i),y(i))(代表x的(i)上標,y的(i)上標):表示第i組資料,可能是訓練資料,也可能是測試資料,此處預設為訓練資料;
X=[x(1),x(2),…,x^(m)]:表示所有的訓練資料集的輸入值,放在一個 n_x×m的矩陣中,其中m表示樣本數目;
Y=[y(1),y(2),…,y^(m)]:對應表示所有訓練資料集的輸出值,維度為1×m。
此處方便理解,特意截圖出來,希望能瞭解!

在這裡插入圖片描述

用一對(x,y)來表示一個單獨的樣本,x代表n_x維的特徵向量,y 表示標籤(輸出結果)只能為0或1。 而訓練集將由m個訓練樣本組成,其中(x(1),y(1))表示第一個樣本的輸入和輸出,(x(2),y(2))表示第二個樣本的輸入和輸出,直到最後一個樣本(x(m),y(m)),然後所有的這些一起表示整個訓練集。有時候為了強調這是訓練樣本的個數,會寫作M_train,當涉及到測試集的時候,我們會使用M_test來表示測試集的樣本數,所以這是測試集的樣本數:
在這裡插入圖片描述
最後為了能把訓練集表示得更緊湊一點,我們會定義一個矩陣用大寫X的表示,它由輸入向量x(1)、x(2)等組成,如下圖放在矩陣的列中,所以現在我們把x(1)作為第一列放在矩陣中,x(2)作為第二列,x(m)放到第m列,然後我們就得到了訓練集矩陣X。所以這個矩陣有m列,m是訓練集的樣本數量,然後這個矩陣的高度記為n_x,注意有時候可能因為其他某些原因,矩陣X會由訓練樣本按照行堆疊起來而不是列,如下圖所示:x(1)的轉置直到x^(m)的轉置,但是在實現神經網路的時候,使用左邊的這種形式,會讓整個實現的過程變得更加簡單
在這裡插入圖片描述
現在來簡單溫習一下:X是一個規模為n_x乘以m的矩陣,當你用Python實現的時候,你會看到X.shape,這是一條Python命令,用於顯示矩陣的規模,即X.shape等於(n_x,m),X是一個規模為n_x乘以m的矩陣。所以綜上所述,這就是如何將訓練樣本(輸入向量X的集合)表示為一個矩陣。

那麼輸出標籤y呢?同樣的道理,為了能更加容易地實現一個神經網路,將標籤y放在列中將會使得後續計算非常方便,所以我們定義大寫的Y等於y(1),y(m),…,y^(m),所以在這裡是一個規模為1乘以m的矩陣,同樣地使用Python將表示為Y.shape等於(1,m),表示這是一個規模為1乘以m的矩陣。
在這裡插入圖片描述

當你在後面的課程中實現神經網路的時候,你會發現,一個好的符號約定能夠將不同訓練樣本的資料很好地組織起來。而所說的資料不僅包括 x 或者 y 還包括之後你會看到的其他的量。

將不同的訓練樣本的資料提取出來,然後就像剛剛我們對 x 或者 y 所做的那樣,將他們堆疊在矩陣的列中,形成我們之後會在邏輯迴歸和神經網路上要用到的符號表示。

備註:符號說明。

圖片描述(最多50字)