小白也能看懂的TensorFlow介紹
本文是日本東京 TensorFlow 聚會聯(lián)合組織者 Hin Khor 所寫的 TensorFlow 系列介紹文章的Part 3 和 Part4,自稱給出了關(guān)于 TensorFlow 的 gentlest 的介紹。在之前發(fā)布的前兩部分介紹中,作者談到單一特征問題的線性回歸問題以及訓(xùn)練(training)的含義,這兩部分將講解 TensorFlow(TF)進行多個特征的線性回歸和邏輯回歸。
一、矩陣和多特征線性回歸
1. 快速回顧
之前文章的前提是:給定特征——任何房屋面積(sqm),我們需要預(yù)測結(jié)果,也就是對應(yīng)房價($)。為了做到這一點,我們:
(1)我們找到一條「最擬合」所有數(shù)據(jù)點的直線(線性回歸)。「最擬合」是當(dāng)線性回歸線確保實際數(shù)據(jù)點(灰色點)和預(yù)測值(內(nèi)插在直線上的灰色點)之間的差異最小,即最小化多個藍(lán)線之和。
(2)使用這條直線,我們可以預(yù)測任何房屋的價格。
使用單一特征線性回歸進行預(yù)測
2. 多特征線性回歸概述
實際上,任何預(yù)測都依賴于多個特征,于是我們從單特征的線性回歸進階到 帶有兩個特征的線性回歸;之所以選擇兩個特征,是為了讓可視化和理解簡明些,但這個思想可以推廣到帶有任何數(shù)量特征的線性回歸。
我們引進一個新的特征——房間數(shù)量。當(dāng)收集數(shù)據(jù)點時,現(xiàn)在我們需要在現(xiàn)有特征「房屋面積」之上收集新特征「房間數(shù)」的值,以及相應(yīng)的結(jié)果「房屋價格」。
我們的圖表變成了 3 維的。
結(jié)果「房屋價格」以及 2 個特征(「房間數(shù)」,「房屋面積」)的數(shù)據(jù)點空間
然后,我們的目標(biāo)變成:給定「房間數(shù)」和「房屋面積」,預(yù)測「房屋價格」(見下圖)。
由于缺少數(shù)據(jù)點,有時無法對給定的 2 個特征進行預(yù)測
在單一特征的情形中,當(dāng)沒有數(shù)據(jù)點時,我們需要使用線性回歸來創(chuàng)建一條直線,以幫助我們預(yù)測結(jié)果房屋價格。在 2 個特征的情形中,我們也可以使用線性回歸,但是需要創(chuàng)建一個平面(而不是直線),以幫助我們預(yù)測(見下圖)。
使用線性回歸在 2 個特征空間中的創(chuàng)建一個平面來做預(yù)測
3. 多特征線性回歸模型
回憶單一特征的線性回歸(見下圖左邊),線性回歸模型結(jié)果為 y,權(quán)重為 W,房屋大面積為 x,偏差為 b。
對于 2 個特征的回歸(參見下圖右側(cè)),我們引入另一個權(quán)重 W2,另一個自變量 x2 來代表房間數(shù)的特征值。
單特征 vs. 2 個特征的線性回歸方程
如之前討論的那樣,當(dāng)我們執(zhí)行線性回歸時,梯度下降算法能幫助學(xué)習(xí)系數(shù) W、W2 和 b 的值。
4. Tensorflow 的多特征線性回歸
(1)快速回顧
單特征線性回歸的 TF 代碼由 3 部分組成(見下圖):
- 構(gòu)建模型(藍(lán)色部分)
- 基于模型構(gòu)建成本函數(shù)(紅色部分)
- 使用梯度下降(綠色部分)最小化成本函數(shù)
用于單特征線性回歸的 Tensorflow 代碼
(2)Tensorflow 的 2 個特征的線性回歸
TF 代碼中 2 個特征的線性回歸方程(如上所述)的變化(相比單特征)用紅色顯示。
注意,增加新特征的這種方式效率低;隨著特征數(shù)量的增長,所需的變量系數(shù)和自變量的數(shù)量會增加。實際的模型有更多的特征,這惡化了這個問題。那么,如何能有效地表示特征呢?
解決方法:矩陣
首先,讓我們將表征兩個特征的模型推廣到表征 n 個特征的模型:
復(fù)雜的 n 特征公式可以用矩陣簡化,矩陣被內(nèi)置于 TF 中,這是因為:
- 數(shù)據(jù)可以用多維表示,這契合我們表征具有 n 個特征的數(shù)據(jù)點(左下方,也稱為特征矩陣)以及具有 n 個權(quán)重模型(右下,也稱為權(quán)重矩陣)的方式
單個數(shù)據(jù)點的 n 個特征與模型的矩陣形式的 n 個權(quán)重
在 TF 中,它們將被寫為:
- x = tf.placeholder(tf.float,[1,n])
- W = tf.Variable(tf.zeros [n,1])
注意:對于 W,我們使用 tf.zeros,它將所有 W1,W2,...,Wn 初始化為零。
在數(shù)學(xué)上,矩陣乘法是向量乘法的加總;因此自然地,特征(中間的一個)和權(quán)重(右邊的)矩陣之間的矩陣乘法給出(左邊的)結(jié)果,即等于 n 個特征的線性回歸公式的第一部分(如上所述),沒有截距項。
特征和權(quán)重矩陣之間的矩陣乘法給出結(jié)果(未添加截距項)
在 TF 中,這種乘法將表示為:
- y = tf.matmul(x, W)
多行特征矩陣(每行表示數(shù)據(jù)點的 n 個特征)之間的矩陣乘法返回多行結(jié)果,每行代表每個數(shù)據(jù)點的結(jié)果/預(yù)測(沒有加入截距項);因此一個矩陣乘法就可以將線性回歸公式應(yīng)用于多個數(shù)據(jù)點,并對應(yīng)地產(chǎn)生多個預(yù)測(每個數(shù)據(jù)點對應(yīng)一個結(jié)果)(見下文)
注意:特征矩陣中的 x 表示變的更復(fù)雜,即我們使用 x1.1、x1.2,而不是 x1、x2 等,因為特征矩陣(中間矩陣)從表示 n 個特征(1 行 x,n 列)的單個數(shù)據(jù)點擴展到表示具有 n 個特征(m 行 x,n 列)的 m 個數(shù)據(jù)點。因此,我們擴展 x
具有模型權(quán)重的多行矩陣乘法產(chǎn)生矩陣的多個行結(jié)果
在 TF 中,它們將被寫為:
- x = tf.placeholder(tf.float,[m,n])
- W = tf.Variable(tf.zeros [n,1])
- y = tf.matmul(x,W)
最后,向結(jié)果矩陣添加常數(shù),也就是將常數(shù)添加到矩陣中的每一行
在 TF 中,用矩陣表示 x 和 W,無論模型的特征數(shù)量或要處理的數(shù)據(jù)點數(shù)量,矩陣都可以簡化為:
- b = tf.Variable(tf.zeros[1])
- y = tf.matmul(x, W) + b
5. Tensorflow 的多特征備忘單
我們做一個從單一特征到多特征的線性回歸的變化的并行比較:
Tensorflow 中的單特征與 n 個特征的線性回歸模型
6. 總結(jié)
在本文中,我們介紹了多特征線性回歸的概念,并展示了我們?nèi)绾螌⒛P秃?TF 代碼從單特征的線性回歸模型擴展到 2 個特征的線性回歸模型,并可以推廣到 n 特征線性回歸模型。最后我們?yōu)槎嗵卣鞯?TF 線性回歸模型提供了一張備忘單。
二、邏輯回歸
1. 邏輯回歸綜述
我們已經(jīng)學(xué)會了如何使用 Tensorflow(TF)去實現(xiàn)線性回歸以預(yù)測標(biāo)量值得結(jié)果,例如給定一組特征,如住房大小,預(yù)測房價。
然而,有時我們需要對事物分類(classify)而不是去預(yù)測一個具體的數(shù)值,例如給定一張含有數(shù)字(0-9 十個數(shù)字中的一個)的圖片,我們需要將其分類為 0,1,2,3,4,5,6,7,8,9 十類?;蛘?,我們需要將一首歌曲進行歸類,如歸類為流行,搖滾,說唱等。集合 [0,1,2,...,9]、[流行,搖滾,說唱,等等] 中的每一個元素都可以表示一個類。在計算機中,我們通常用數(shù)字對抽象名詞進行表示,比如,pop = 0, rock = 1, 等等。為了實現(xiàn)分類,我們使用 TF 來實現(xiàn)邏輯回歸。
在本文中,我們將使用邏輯回歸將數(shù)字圖片歸類為 0,1,2,3,4,5,6,7,8,9 這十類。
2. 邏輯回歸的細(xì)節(jié)
線性回歸中的許多概念仍然用于邏輯回歸之中。我們可以再次使用公式 y = W.x + b,但是有一些不同的地方。讓我們看看線性回歸和邏輯回歸的公式:
線性回歸與邏輯回歸的區(qū)別與相似
(1) 區(qū)別:
- 結(jié)果(y):對于線性回歸,結(jié)果是一個標(biāo)量值(可以是任意一個符合實際的數(shù)值),例如 50000,23.98 等;對于邏輯回歸,結(jié)果是一個整數(shù)(表示不同類的整數(shù),是離散的),例如 0,1,2,... 9。
- 特征(x):對于線性回歸,特征都表示為一個列向量;對于涉及二維圖像的邏輯回歸,特征是一個二維矩陣,矩陣的每個元素表示圖像的像素值,每個像素值是屬于 0 到 255 之間的整數(shù),其中 0 表示黑色,255 表示白色,其他值表示具有某些灰度陰影。
- 成本函數(shù)(成本):對于線性回歸,成本函數(shù)是表示每個預(yù)測值與其預(yù)期結(jié)果之間的聚合差異的某些函數(shù);對于邏輯回歸,是計算每次預(yù)測的正確或錯誤的某些函數(shù)。
(2)相似性:
訓(xùn)練:線性回歸和邏輯回歸的訓(xùn)練目標(biāo)都是去學(xué)習(xí)權(quán)重(W)和偏置(b)值。
結(jié)果:線性回歸與邏輯回歸的目標(biāo)都是利用學(xué)習(xí)到的權(quán)重和偏置值去預(yù)測/分類結(jié)果。
3. 協(xié)調(diào)邏輯回歸與線性回歸
為了使邏輯回歸利用 y = W.b + x,我們需要做出一些改變以協(xié)調(diào)上述差異。
(1)特征變換,x
我們可以將二維的圖片特征(假設(shè)二維特征有 X 行,Y 列)轉(zhuǎn)換成一維的行向量:將第一行以外的其它行數(shù)值依順序放在第一行后面。
轉(zhuǎn)換圖像特征以適用于邏輯回歸公式
(2)預(yù)測結(jié)果轉(zhuǎn)換,y
對于邏輯回歸,y 不能作為標(biāo)量,因為預(yù)測可能最終為 2.3 或 11,這不在可能的類 [0,1,...,9] 中。
為了解決這個問題,y 應(yīng)該被轉(zhuǎn)換成列向量,該向量的每個元素代表邏輯回歸模型認(rèn)為屬于某個特定類的得分。在下面的示例中,預(yù)測結(jié)果為類'1',因為它具有最高得分。
每個類的分?jǐn)?shù)和具有最高分?jǐn)?shù)的類成為被預(yù)測的類
對于給定的圖片,為求這個分?jǐn)?shù)向量,每個像素都會貢獻(xiàn)一組分?jǐn)?shù)(針對每一類),分?jǐn)?shù)表示系統(tǒng)認(rèn)為這張圖片屬于某類的可能性,每個像素分?jǐn)?shù)之和成為預(yù)測向量。
每個像素提供一個分?jǐn)?shù)向量;每個類別有一個分?jǐn)?shù),最后變成預(yù)測向量。所有預(yù)測向量的總和變成最終預(yù)測。
(3)成本函數(shù)的變換
涉及到預(yù)測結(jié)果和實際結(jié)果之間數(shù)值距離的任何函數(shù)都不能作為成本函數(shù)。對于數(shù)字圖片「1」,這樣的成本函數(shù)將使預(yù)測值「7」(7-1=6)更嚴(yán)重地懲罰預(yù)測值「2」(2-1=1),盡管兩個預(yù)測結(jié)果都是錯誤的。
我們即將使用的成本函數(shù),交叉熵(H),用以下幾個步驟實現(xiàn):
- 將實際圖片的類向量(y')轉(zhuǎn)化成 one-hot 向量,這是一個概率分布。
- 將預(yù)測類 (y) 轉(zhuǎn)化成概率分布。
- 使用交叉熵函數(shù)去計算成本函數(shù),這表示的是兩個概率分布函數(shù)之間的差異。
第一步:One-hot 向量
由于我們已經(jīng)將預(yù)測 (y) 轉(zhuǎn)換成分?jǐn)?shù)向量,因此,我們也應(yīng)該將實際圖片類(y』)轉(zhuǎn)換成相同維數(shù)的向量;one-hot 向量是將對應(yīng)于實際類的的元素為設(shè)為 1,其它元素為 0。下面,我們展示表示 0-9 十個類中一個類的 one-hot 向量。
圖片類和它們的 one-hot 向量表示
假設(shè)實際圖像上是數(shù)字「1」(y'),它的 one-hot 向量是 [0,1,0,0,0,0,0,0,0,0],假設(shè)其預(yù)測向量 (y) [1.3, 33, 2, 1.2, 3.2, 0.5, 3, 9.2, 1],繪制比較如下:
真實圖片 one—hot 向量(頂)預(yù)測類別概率
第二步:用 softmax 實現(xiàn)概率分布
為了在數(shù)學(xué)上比較這兩個「圖」的相似性,交叉熵是一個好方法。(這里是一個很棒但比較長的解釋,如果你對細(xì)節(jié)感興趣的話。https://colah.github.io/posts/2015-09-Visual-Information/)
然而,為了利用交叉熵,我們需要將實際結(jié)果向量(y')和預(yù)測結(jié)果向量(y)轉(zhuǎn)換為「概率分布」,「概率分布」意味著:
- 每個類的概率/分?jǐn)?shù)值在 0-1 之間;
- 所以類的概率/分?jǐn)?shù)和必須是 1;
實際結(jié)果向量(y')如果是 one-hot 向量,滿足了上述限制。
為預(yù)測結(jié)果向量(y), 使用 softmax 將其轉(zhuǎn)換為概率分布:
softmax 函數(shù),這里 i 是表示 0, 1, 2, …, 9 十類
這個過程只需要簡單的兩步,預(yù)測向量(y)中的每個分量是 exp(y_i) 除以所有分量的 exp() 的和。
注意:softmax(y)圖形在形狀上與 prediction (y) 相似,但是僅僅有較大的最大值和較小的最小值
使用 softmax 前后預(yù)測(y)曲線
第三步:交叉熵
現(xiàn)在,我們將預(yù)測向量分?jǐn)?shù)概率分布(y')和實際向量分?jǐn)?shù)概率分布 (y) 運用交叉熵。
交叉熵公式:
交叉熵作為我們想最小化的成本函數(shù)
為了快速理解這個復(fù)雜的公式,我們將其分為 3 部分(見下文)。注意,本文中的符號,我們使用 y_i 表示 y 的第 i 個分量。
交叉熵(H)公式可視為三個部分:紅,藍(lán),綠
- 藍(lán):實際圖像類(y')對應(yīng)的 one-hot 圖,參看 one-hot 向量部分:
- 紅:由預(yù)測向量元素(y)經(jīng)過softmax(y),-og(softmax(y)一系列變化而來:
- 綠:每一圖片類別 i,其中,i = 0, 1, 2, …, 9, 紅藍(lán)部分相乘的結(jié)果
以下圖例會進一步簡化理解。
藍(lán)色制圖只是真實圖片類別(y')one-hot 向量。
每個預(yù)測向量元素,y,轉(zhuǎn)換成 -log(softmax(y),就得到紅圖:
預(yù)測類別向量(y)一系列轉(zhuǎn)換后,得到紅圖
如果你想完全地理解第二個變換 -log(softmax(y)) 與 softmax(y) 為什么成反比,請點擊 video or slides(參見文末資源部分).
交叉熵(H),這個綠色的部分是每個類別的藍(lán)色值和紅色值的乘積和,然后將它們做如下相加:
交叉熵是每個圖像類的藍(lán)色值和紅色值的乘積之和。
由于這張藍(lán)色圖片對應(yīng)一個 one-hot 向量,one-hot 向量僅僅有一個元素是 1,它對應(yīng)一個正確的圖片類,交叉熵的其它所有元素乘積為 0,交叉熵簡化為:
4. 將所有部分放到一起
有了三個轉(zhuǎn)換后,現(xiàn)在,我們就可以將用于線性回歸的技術(shù)用于邏輯回歸。下面的代碼片段展示的是本系列文章第三部分線性回歸代碼和代碼適用邏輯回歸所需要的變化之間的對比。
邏輯回歸的目標(biāo)是最小化交叉熵(H),這意味著我們只需要最小化 -log(softmax(y_i)項;因為該項與 softmax(y_i)成反比,所以我們實際上是最大化該項。
使用反向傳播去最小化交叉熵 (H ) 將改變邏輯回歸的權(quán)重 W 和偏置 b。因此,每張圖片的像素值將會給出對應(yīng)圖片類最高分?jǐn)?shù)/概率!(最高分?jǐn)?shù)/概率對應(yīng)于正確的圖片類)
將線性回歸方法用于邏輯回歸之中,「total_class」是欲分類問題的總類數(shù)量,例如,在上文手寫數(shù)字體識別例子中,total_class=10。
- 將特征變換成一維特征;
- 將預(yù)測結(jié)果向量、實際結(jié)果向量變化成 one-hot 向量;
- 將成本函數(shù)從平方誤差函數(shù)變化到交叉熵。
5. 總結(jié)
線性回歸對基于給定特征的預(yù)測(數(shù)值)是有幫助的,邏輯回歸根據(jù)輸入特征實現(xiàn)分類是有幫助的。
我們展示了如何調(diào)整線性回歸 y = W.x + b 實現(xiàn)邏輯回歸:(1)轉(zhuǎn)換特征向量;2)轉(zhuǎn)換預(yù)測/結(jié)果向量;(3)轉(zhuǎn)換成本函數(shù)。
當(dāng)你掌握了 one-hot 向量,softmax,交叉熵的知識,你就可以處理谷歌上針對「初學(xué)者」的圖片分類問題。
三、資源:
針對初學(xué)者的圖像識別的谷歌代碼:
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/examples/tutorials/mnist/mnist_softmax.py
slideshare 上的幻燈片:
http://www.slideshare.net/KhorSoonHin/gentlest-introduction-to-tensorflow-part-3
油管上的視頻:https://www.youtube.com/watch?v=F8g_6TXKlxw
原文:
https://medium.com/all-of-us-are-belong-to-machines/gentlest-intro-to-tensorflow-4-logistic-regression-2afd0cabc54#.glculhxzi
【本文是51CTO專欄機構(gòu)機器之心的原創(chuàng)譯文,微信公眾號“機器之心( id: almosthuman2014)”】