人臉識別 (吳恩達老師 學習筆記)

2021-10-10 07:46:25 字數 2143 閱讀 3175

目錄前言

一次學習 (one-shot learning)

siamese網路(孿生神經網路)

triplet損失(三元組損失)

人臉驗證與二分類 前言

人臉識別應用是目前應用最廣的乙個深度學習的落地專案,如下圖所示,只有真正的人臉才可以成功識別。

人臉識別(face recognition):是乙個1:k的問題,假如人臉驗證的準確率是99%,那麼乙個識別100人的系統則犯錯概率是1%×100,即100人中很有可能會識別錯誤1個人,這是無法落地的。

人臉驗證的準確率需要足夠高,如99.99%,才能用來構造人臉識別系統。人臉驗證的難點是如何解決一次學習(one-shot)的問題。

one-shot learning:只有乙個訓練樣本,就能成功訓練模型。

要讓人臉識別能夠做到一次學習,現在要做的應該是構造乙個神經網路訓練similarity函式。詳細地說,通過神經網路學習這樣乙個用d表示的函式,如果相似函式輸出的值小於閾值,則系統認為是同乙個人,這樣還有乙個好處是增加新的識別人臉不需要重新訓練神經網路,只需要把這個人的臉送入相似函式執行的資料庫中就行。

可以通過siamese網路實現的相似度判斷。

這裡跟卷積神經網路的區別是,沒有softmax函式,最後全連線層計算出的值作為編碼影象的列向量

,即相似度等於

(對於兩個不同的輸入,執行相同的卷積神經網路,然後比較它們,這一般叫做siamese網路架構。)

如何訓練乙個神經網路的引數,讓其可以成功編碼人臉?方法之一就是定義triplet(三元組損失)函式,然後通過梯度下降等反向傳播更新網路引數。

資料集據包括錨(anchor)示例、正(positive)示例、負(negative)示例   (positive表示是同乙個人)

訓練網路時,讓anchor和positive的編碼相似度大,並且anchor和negative的編碼相似度小。即,

即所以triplet損失(三元組)代表需要同時看三張。

(這樣的好處是只要損失函式小於等於0,網路不會關心負值的大小)

問題- 如何從訓練集中選擇a、p、n ?

好的訓練樣本應該是讓d(a,p) 很接近d(a,n), 這樣才會讓神經網路更新選擇讓d(a,p)盡可能小,d(a,n)盡可能大。

除了用triplet loss的方法,另一種訓練神經網路的方法轉化為分類問題,具體是選取一對神經網路,使其同時計算出f(x(i))的列向量,然後將其一起輸入邏輯回歸單元,然後**輸出1,0,表示是不是相同的人。

還有一些變形來代替綠色標記的公式,如

下面的是資料庫,可以先提前計算好列向量(這樣可以不儲存原始影象),比較的時候,只需要比較新的的列向量。

吳恩達老師課程機器學習筆記

無監督學習 線性回歸 代價函式j 主要演算法 1.監督學習 supervised learning 2.無監督學習 unsupervised learning 其他演算法 1.強化學習 reinforcement learning 2.推薦演算法 recommender systems right ...

吳恩達老師機器學習筆記SVM(一)

時隔好久沒有再拾起機器學習了,今日抽空接著學 上圖為原始資料 這裡套用以前logistic回歸的模板改一下下。load ex6data1.mat theta rand 3,1 m,n size x x ones m,1 新增常量 x x x c 1 for i 1 10000 擬合次數 theta ...

筆記 吳恩達老師機器學習及深度學習

一 教程 機器學習 或者 深度學習 二 網路筆記及課程相關資源 1 吳恩達機器學習筆記 2 深度學習筆記 三 問題整理 1.第二週做程式設計任務提交時出了問題,matlab顯示如下 解決方法 吳恩達 ml作業提交 grader sent no response 補充乙個win7 64系統的curl安...