Logistic Regression as Neural Network
本周課程涉及到的知識點(diǎn):
- Logistic regression 的基本結(jié)構(gòu)
- Loss and cost function 定義
- Gradient descent 梯度下降算法
- Backward propagation 反向傳播算法
Logistic regression 的基本結(jié)構(gòu)
Logistic regression 可以認(rèn)為是一種最簡單的神經(jīng)網(wǎng)絡(luò)巍杈。我們以二元分類(binary classification)問題來說明它的具體結(jié)構(gòu):
我們需要解決的問題是輸入一個(gè)圖像,判斷這個(gè)圖像中是否包含一只貓鸥诽。輸出為1代表圖像是一只貓娄周,0則不是诉位。為了解決這個(gè)問題叭爱,我們首先提取圖像中所有的像素點(diǎn)脯倒,把它們放在一個(gè)向量 X 里实辑。這個(gè)向量的維度是[64 * 64 * 3, 1], 其中64是像素點(diǎn)的個(gè)數(shù),3 是因?yàn)槊總€(gè)像素點(diǎn)需要包含 RGB 三種顏色的信息藻丢。這個(gè)向量也即是我們的輸入 X剪撬。隨后我們首先對該輸入向量做線性變換,得到 Z = W*X + b悠反, 隨后通過sigmoid方程 把結(jié)果轉(zhuǎn)化為一個(gè)0残黑, 1 之間的數(shù)。例如0.73斋否, 因?yàn)?.73 > 0.5, 我們最后輸出1梨水, 也即認(rèn)為圖像中包含一只貓。
從上面的結(jié)構(gòu)可以看出茵臭,logistic regression的目標(biāo)則是給定一系列已經(jīng)標(biāo)記的圖像(training dataset)疫诽,通過不斷的迭代調(diào)整參數(shù)(W, b)使得輸出的判斷結(jié)果(是貓或者不是貓)盡量準(zhǔn)確。這個(gè)過程可以被概括成如下幾步:
- 初始化模型結(jié)構(gòu),比如輸入?yún)?shù) X 的feature個(gè)數(shù)
- 初始化模型參數(shù)奇徒,比如 W 和 b
- 循環(huán)優(yōu)化參數(shù):
- 通過forward propagation計(jì)算cost function, 也即輸出結(jié)果和真實(shí)結(jié)果之間的誤差
- 通過backward propagation反過來計(jì)算cost function 對于W雏亚,b的梯度
- 用gradient descent來優(yōu)化參數(shù)W, b,使得下一輪的判斷更加準(zhǔn)確
可見這個(gè)過程中有幾個(gè)重要的部分:cost function的定義,forward propagation, backward propagation 以及 gradient descent摩钙。其中forward propagation就是根據(jù)輸入 X 來計(jì)算最后的輸出的過程罢低,比較簡單,這里不再多說胖笛,我們下面重點(diǎn)介紹一下其他的部分网持。
Loss and cost function 的定義
假設(shè)模型輸出的結(jié)果是 y', 實(shí)際的真實(shí)結(jié)果是 y, 如何衡量輸出值和真實(shí)值之間的差距呢?
我們用如下方式來定義loss function:
[圖片上傳失敗...(image-846300-1511717383424)]=y\log(\hat{y})+(1-y)\log(1-\hat{y}))
直覺上來理解长踊,當(dāng) y = 1 的時(shí)候 L = -log(y'), 為了盡量縮小 L, y' 應(yīng)該盡量大功舀,也即越靠近 1 越好。而 y = 0 的時(shí)候 L = -log(1 - y'), 可見 y' 越靠近1之斯, L 就越小。這樣就巧妙的把 y 和 y' 的取值對應(yīng)了起來莉擒。 關(guān)于這個(gè)定義,有兩點(diǎn)需要注意:
- 我們不用簡單的 L = (y - y')^2 的方式來定義 loss, 主要原因是這個(gè)不能保證 L 是convex function,同樣也就不能保證存在全局最優(yōu)解。
- 這個(gè)loss function的來源其實(shí)是極大似然估計(jì)。解釋如下:
假設(shè) y' = P(y = 1|x), 那么一旦 y = 1 則 P(y | x) = y', 而一旦 y = 0 則 P(y | x) = 1 - y'. 這個(gè)關(guān)系可以被合并寫成下式:
[圖片上傳失敗...(image-af1ddf-1511717383424)]%20=%20\hat{y}y%20*%20(1%20-%20\hat{y}){1-y})
應(yīng)用對數(shù)極大似然估計(jì),我們對上式兩邊取對數(shù),即可得到loss function的定義韩脏。關(guān)于極大似然估計(jì)的思想可以看這里杭朱。
注意loss function的定義是針對每個(gè)training data的送浊,即對每個(gè)輸入 X 我們都可以計(jì)算出一個(gè)loss value, 那么把m個(gè)training data的loss value取平均我們就得到了cost function的定義J:
[圖片上傳失敗...(image-b8e501-1511717383424)]}\log(a{(i)})+(1-y{(i)})\log(1-a^{(i)}))
cost function非常重要闭树,因?yàn)閘ogistic regression的任務(wù)無非就是不斷調(diào)整優(yōu)化 W, b 參數(shù)使得cost function的值
J 最小化而已与殃。至于如何做到昼接,我們需要用到gradient descent算法。
Gradient descent 梯度下降算法
給定方程 J(W, b)泪喊,如何才能找到合適的 W复凳, b 值來使得 J 最小化呢?
為了簡化問題惶洲,我們假定 J 只和 W 有關(guān)须床, 那么為了使 J 最小我們應(yīng)該對 W 循環(huán)執(zhí)行如下操作知道 J 收斂:
[圖片上傳失敗...(image-456d84-1511717383424)]
其中 a 為 learning rate, dW 即 J 關(guān)于 W 求導(dǎo) (dJ/dW)族阅。關(guān)于為何這樣可以最小化 J愧沟, 下圖可謂一目了然:
我們每次都按照梯度 dW 的方向調(diào)整 W, 這樣可以讓 J 的值不斷往谷底滑落直到最低點(diǎn),因此這個(gè)算法被稱為gradient descent(梯度下降)鲤遥。
從后面的課程來看沐寺,這個(gè)看似簡單算法實(shí)際上是neural network的核心。后面要提到的Adam optimization都是在最基本的gradient descent修改而來的盖奈。
Backward propagation 反向傳播算法
為了應(yīng)用梯度下降算法芽丹,我們首先要求得 J 對每個(gè)參數(shù) W, b 的梯度 - 也即是backward propagation的作用。為了解釋backward propagation卜朗, 我們先來看一下logistic regression的computation graph拔第。
對于每個(gè)輸入 X 和參數(shù) w1,w2,b, 我們可以首先通過forward propagation計(jì)算 a 和 loss function. 現(xiàn)在的問題是如何計(jì)算dL/dw1
, dL/dw2
以及dL/db
。我們從后往前遞推场钉,首先計(jì)算dL/da = -y/a - (1-y)/(1-a)
, 隨后計(jì)算dL/dz = dL/da * da/dz = a - y
蚊俺。最后我們就可以計(jì)算得到dw1 = dL/dz * dz/dw1 = x1 * (a - y)
, dw2 = dL/dz * dz/dw2 = x2 * (a - y)
以及 db = dL/dz * dz/db = a - y
。
這解釋了為何這個(gè)算法被稱為 backward propagation逛万, 因?yàn)槠渌悸肥菑淖詈蟮?cost function 往后遞推去計(jì)算 L 對每個(gè)參數(shù)的梯度泳猬, 這樣做可以極大的降低計(jì)算復(fù)雜度。不然的話為了計(jì)算 dL/dw1
我們不得不先計(jì)算 dL/da
, da/dz
, dz/dw1
, 然后在計(jì)算dL/dw2
的時(shí)候又要重復(fù)計(jì)算dL/da
, da/dz
(除非我們把dL/da
, da/dz
的值緩存下來)宇植。從后往前計(jì)算梯度則自然的避免了這些重復(fù)的計(jì)算過程得封。
最后,注意我們需要計(jì)算的是我們需要對m個(gè)training data計(jì)算反向梯度指郁,也就是我們關(guān)心的其實(shí)是 dJ/dW
, dJ/db
, 這個(gè)可以通過下面兩式求得:
[圖片上傳失敗...(image-c1fa62-1511717383424)]^T)
[圖片上傳失敗...(image-5b7905-1511717383424)]}-y^{(i)}))
總結(jié)
到這里我們已經(jīng)可以構(gòu)建一個(gè)基于logistic regression的最簡單的分類器了忙上。再概括一下,其思想無非是根據(jù)forward propagation計(jì)算輸出以及cost function闲坎, 隨后根據(jù)反向計(jì)算cost function對每個(gè)參數(shù)的梯度疫粥。最后根據(jù)梯度下降算法調(diào)整參數(shù)來使得cost function值降低茬斧,也即提高預(yù)測精度。其實(shí)deep neural network 的基本原理也無非就是這些梗逮,只不過層數(shù)加深以后輸入?yún)?shù)的維度 W, b 變得更加復(fù)雜了而已项秉。