DeepLearningAI 學習筆記 1.2 logistic 回歸

1.2 logistic 回歸

視頻:第二周 神經網絡基礎

整理:飛龍

logistic 回歸屬于廣義線性回歸。所謂廣義線性回歸,就是在線性回歸的模型上加一些東西,使其適應不同的任務。

logitic 回歸雖然名字里有回歸,但是它解決的是二元分類問題。二元分類問題中,標簽只有兩個值。一個典型的二元分類是輸入一張圖片,判斷是不是貓。

首先來看假設,我們的假設是這樣的:

$$
P(y=1 | x) = \sigma(\theta^T x)
$$

某個樣本 $(x,y)$ 是正向分類的概率是 $x$ 乘權重 $\theta$ 再套個 sigmoid 函數(shù),非常簡單。這兩個東西都是列向量。

sigmoid 函數(shù)用 $\sigma(x)$ 表示,圖像是 S 型的,值域是 $(0,1)$,正好符合概率的要求。它的導數(shù)用函數(shù)值來表達更加方便,$\frac{d\sigma}{dx} = \sigma(1-\sigma)$。

image

注:

我的習慣是,把 $w$(權重)和 $b$(偏置)打包在一起,稱為 $\theta$,因為這樣節(jié)省很多計算。而且易于擴展,如果你需要偏置項,給 $w$ 多加一項,給 $x$ 添加一個 $1$,如果不需要,保持原樣即可。

為了找出最優(yōu)的 $\theta$,像通常一樣,我們需要一個損失函數(shù),然后使其最小。

$$
z = \theta^T x \\
a = \sigma(z) \\
l = - y \log(a) - (1-y) \log(1-a)
$$

這個函數(shù)為什么能用,需要解釋一下。當 $y$ 是 $1$ 的時候,$l = -\log(a)$。如果我們要使 $l$ 最小,就是使 $a$ 最大。因為 sigmoid 函數(shù)最大值為 $1$,所以實際上,我們使 $a$ 接近 $1$。

當 $y$ 是 $0$ 的時候,$l = -\log(1-a)$。同理,我們使 $a$ 最小,因為 sigmoid 函數(shù)最小值為 $0$,就是使 $a$ 接近 $0$。

無論如何,我們都使 $a$ 盡可能接近 $y$。

我們需要一個大的損失函數(shù),衡量模型在所有樣本上的表現(xiàn)。我們用 $x^{(i)}$ 表示第 $i$ 個樣本的特征。

$$
J = - \sum_i(y^{(i)} \log(a^{(i)}) + (1-y^{(i)}) \log(1-a^{(i)}))
$$

然后我們需要求 $J$ 對 $\theta$ 的導數(shù)。

$$
\frac{dJ}{da^{(i)}} = \frac{1-y{(i)}}{1-a{(i)}} - \frac{y{(i)}}{a{(i)}} \\
\frac{da{(i)}}{dz{(i)}} = a{(i)}(1-a{(i)})\\
\frac{dz^{(i)}}{d\theta} = x^{(i)} \\
\frac{dJ}{dz^{(i)}} = a^{(i)} - y^{(i)} \\
\frac{dJ}{d\theta} = \sum_i((a^{(i)} - y^{(i)}) x^{(i)})
$$

注:

(1)如果你拆成了 $w$ 和 $b$,那么 $\frac{dJ}{db}$ 就是 $\sum_i \frac{dJ}{dz^{(i)}}$,$\frac{dJ}{dw}$ 和 $\frac{dJ}{d\theta}$ 一樣。

(2)所有導數(shù)以及 $J$ 都需要除以 $n_{data}$,但為了簡潔我省略了,下同。

(3)在機器學習(以及數(shù)值計算)中,沒有必要區(qū)分導數(shù)和偏導數(shù),導數(shù)可以看出偏導數(shù)的一元特例。所以這里我都使用了導數(shù)的符號。

我們可以看到最終的導數(shù)和線性回歸一樣,仍然是損失乘以特征再求和。

向量化

我的習慣是,將 $x^{(i)}$ 按行堆疊變成 $X$,也就是行是樣本,列是特征,和咱們能夠獲得的絕大多數(shù)數(shù)據(jù)集一致。

$$
X = \begin{bmatrix} \vdots \\ - \ x^{(i)} \ - \\ \vdots \end{bmatrix} \\
= \begin{bmatrix} & | & \\ \cdots & x_j & \cdots \\ & | & \end{bmatrix}
$$

由于 $X$ 按行堆疊,我們需要把它放在矩陣乘法的左邊。這樣出來的 $Z$ 也是按行堆疊的。

$$
Z = X \theta \\
= \begin{bmatrix} \vdots \\ z^{(i)} \\ \vdots \end{bmatrix}
$$

$A$ 相當于對 $Z$ 的每個元素應用 sigmoid 函數(shù),也是類似的結構:

$$
A = \sigma(Z) \\
= \begin{bmatrix} \vdots \\ a^{(i)} \\ \vdots \end{bmatrix}
$$

接下來是損失函數(shù) $J$:

$$
J = - Sum(Y \ast \log(A) + (1 - Y) \ast \log(1 - A))
$$

其中 $\ast$ 表示逐元素相乘。

接下來是導數(shù):

$$
\frac{dJ}{dZ} = A - Y
$$

這個還是比較好求的。

$$
\frac{dZ}{d\theta} = X \\
\frac{dJ}{d\theta} = X^T(A - Y)
$$

這里有一個方法,就是核對矩陣的維數(shù)。我們已經知道 $\frac{dJ}{d\theta}$ 是兩個導數(shù)相乘,并且 $\frac{dJ}{dZ}$ 是n_data x 1的矩陣,$\frac{dZ}{d\theta}$ 是n_data x x_feature的矩陣,$\frac{dJ}{d\theta}$ 是n_feature x 1的矩陣。根據(jù)矩陣乘法,它只能是 $X^T(A - Y)$。

注:

嚴格來講,向量化的導數(shù)應該稱為梯度。這個筆記中不區(qū)分這兩個術語。

梯度下降法

在代數(shù)中,如果我們需要求出一個凸函數(shù)的最值,我們可能會使導數(shù)等于 0,然后解出方程。但在機器學習中,我們使用梯度下降法來求凸函數(shù)的最值。

梯度下降法是,對于每個自變量 $x$,迭代執(zhí)行以下操作:

$$
x := x - \alpha \frac{dy}{dx}
$$

其中 $\alpha$ 是學習率,一般選取 0 ~ 1 之間的值。

下面直觀地解釋一下。這是一個一元函數(shù),它的形狀是一個碗,或者山谷。

image

我們可以隨便選一個點作為初始值。你可以選0,也可以選1或者隨機值。這個無所謂,因為函數(shù)是凸的,沿任意路徑下降都會達到全局最優(yōu)值。

如果你的初始值在右側,那么導數(shù)為正,減去它的一部分相當于向左移動了一小步。如果你的初始值在左側,導數(shù)為負,減去它的一部分相當于向右移動了一小步??傊?,這樣會使 $x$ 向著全局最優(yōu)的方向移動。

image

多元的凸函數(shù)是這樣。如果你的每個自變量都減去它的導數(shù)(梯度)的一部分,那么所有自變量就相當于向著最陡的方向移動了一小步。如果你在一個山谷中,沿著最陡的方向向下走,就會到達谷底。

代碼

向量化的公式很容易用 NumPy 代碼來表示。

theta = np.random.rand(n_features, 1)

for _ in range(max_iter):
    Z = np.dot(X, theta)
    A = sigmoid(Z)
    dJ_dZ = (A - Y) / n_data
    dJ_dtheta = np.dot(X.T, dJ_dZ)
    theta -= alpha * dJ_dtheta
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容