高效计算基础与线性分类器
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
目錄(?)[+]
1. 深度學習與應用
1. 圖像上的應用:可以根據圖片,識別圖片的內容,描述圖像;模仿人的創造性生成畫作;相冊自動歸類等。
2. NLP上的應用:用RNN學習某作家的文筆風格進行寫作、學習代碼寫作等。下圖為RNN學習了200M的代碼量后自動生成的代碼片段,代碼的格式已經比較相似了。
3. 綜合應用:識別物體,再根據識別出來的物品組織成文本描述。
2. 高效計算基礎
Python基本類型、容器等基礎的語言知識,請移步:python基礎教程
Numpy:矩陣運算
Scipy:稀疏矩陣求距離。
科學計算庫的安裝與使用可以移步:Python及科學運算庫的安裝
3. 圖像識別難點與KNN
圖像識別的核心問題:一個圖像給計算機輸入的是一個矩陣,每一個像素點上都是一個RGB顏色值,根據矩陣去做圖像識別,計算置信度。
難點:
1. 視角不同:每個事物旋轉或者側視最后的構圖都完全不同
2. 尺寸大小不統一:相同內容的圖片也可大可小
3. 變形:很多東西處于特殊的情形下, 會有特殊的擺放和形狀
4. 光影等干擾/幻象重點內容
5. 背景干擾
6. 同類內的差異(比如椅子有靠椅/吧椅/餐椅/躺椅…)
圖像識別的基本流程:
K最鄰近法(KNN):K最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。KNN算法的核心思想是如果一個樣本在特征空間中的k個最相鄰的樣本中的大多數屬于某一個類別,則該樣本也屬于這個類別,并具有這個類別上樣本的特性。
KNN做圖像識別有一些缺點,比如準確度不高,因為找不到圖像合適的特征,而且KNN需要記錄全部訓練數據。那么可以試試線性分類器,用邏輯回歸或者linearSVM。
4. 線性分類器
4.1 線性分類器
線性分類器會有一個得分函數,比如CIFAR-10數據集,數據集里有10個類別,每個圖像的大小都是32x32,每個像素點有RDB的值,所以總共有32x32x3=3072 個數,線性分類器就是把這些數作為輸入,即3072x1的向量,給定權重矩陣W[n*3072],n是要判定的類別的數量。通過矩陣相乘得到得分函數:
其中W是通過訓練得到的。那么得到的得分高低就可以判定類別。
線性分類器的理解:
1. 空間劃分:Wx+b是空間的點。
2. 模板匹配:W的每一行可以看做是其中一個類別的模板。每類得分,實際上是像素點和模板匹配度,模板匹配的方式是內積計算。
4.2 損失函數
損失函數:由得分函數我們知道,給定W,可以由像素映射到類目得分。損失函數用來評估W、b的好壞,衡量吻合度,可以通過調整參數/權重W, 使得映射的結果和實際類別吻合。有兩種損失函數:
一是hinge loss/支持向量機損失。
對于訓練集中的第i張圖片數據xi,在W下會有一個得分結果向量f(xi,W),第j類的得分為我們記作f(xi,W)j,則在該樣本上的損失我們由下列公式計算得到:
假如有貓、狗、船三個類別,得分函數計算某張圖片的得分為f(xi,W)=[13,?7,11],而實際的結果是第一類yi=0。假設Δ=10,用上面的公式把錯誤類別(j≠yi)都遍歷了一遍,則求值加和:
Li=max(0,?7?13+10)+max(0,11?13+10)
計算得到狗的損失函數為0,船的損失函數為8,所以被判定為船的概率還是比較高的。所以Δ可以看做一個超參數,規定一個警戒線用來平衡損失。
二是互熵損失(softmax分類器)。
對于訓練集中的第i張圖片數據xi,在W下會有一個得分結果向量fyi,則損失函數記作:
Li=?log(efyi∑jefj)
把得分求exp再做歸一化,計算損失。兩種損失函數得到的結果會有些區別,實際的求解過程比較如下:
5. 實踐
KNN分類器、用SVM和Softmax分類器做圖像分類,詳見ipython。
More
總結
以上是生活随笔為你收集整理的高效计算基础与线性分类器的全部內容,希望文章能夠幫你解決所遇到的問題。