一文帶你瞭解深度學習的前置預備知識(下)
theme: devui-blue
持續創作,加速成長!這是我參與「掘金日新計劃 · 10 月更文挑戰」的第3天,點選檢視活動詳情
之前我們說過了資料操作以及預處理的知識,對於裡面用到的線性代數和概率的知識,我們在本篇文章中詳細描述。
線性代數
標量
僅包含一個數值的我們稱之為 標量(scalar),它由只有一個元素的張量表示。
- 在深度學習中,標量通常由普通小寫字母表示(例如,$x$、$y$和$z$);
- 用 $\mathbb{R}$ 表示所有(連續)實數標量的空間,那麼表示式$x\in\mathbb{R}$是表示$x$是一個實值標量的整式形式,例如$x, y \in {0,1}$表明$x$和$y$是值只能為$0$或$1$的數字。
在下面的程式碼中,我們例項化兩個標量,並使用它們執行一些熟悉的算術運算,即加法、乘法、除法和指數。
``` import torch
x = torch.tensor([3.0]) y = torch.tensor([2.0])
x + y, x * y, x / y, x**y
執行結果
(tensor([5.]), tensor([6.]), tensor([1.5000]), tensor([9.])) ```
向量
1. 向量表示
我們可以將向量視為標量值組成的列表,這些標量值稱為向量的元素(element)或分量(component)。
當我們使用向量表示資料集中的樣本時,它們的值具有一定的現實意義。例如,如果我們正在訓練一個模型來預測貸款違約風險,我們可能會將每個申請人與一個向量相關聯,其分量與其收入、工作年限、過往違約次數和其他因素相對應。如果我們正在研究醫院患者可能面臨的心臟病發作風險,我們可能會用一個向量來表示每個患者,其分量為最近的生命體徵、膽固醇水平、每天運動時間等。
通常將向量記為粗體、小寫的符號(例如,$\mathbf{x}$、$\mathbf{y}$和$\mathbf{z})$。
我們使用一維張量處理向量x = torch.arange(6)
,使用下標來引用向量的任一元素。例如,我們可以通過$x_i$來引用第$i$個元素。注意,元素$x_i$是一個標量,大量文獻中都會預設列向量是向量的預設方向。在數學中,向量$\mathbf{x}$可以寫為:
$$\mathbf{x} =\begin{bmatrix}x_{1} \x_{2} \ \vdots \x_{n}\end{bmatrix},$$
其中$x_1,\ldots,x_n$是向量的元素。
2. 向量維度
向量只是一個數字陣列。就像每個陣列都有一個長度一樣,每個向量也是如此。在數學表示法中,如果我們想說一個向量$\mathbf{x}$由$n$個實值標量組成,我們可以將其表示為$\mathbf{x}\in\mathbb{R}^n$。
向量的長度通常稱為向量的維度(dimension)。
當用張量表示一個向量(只有一個軸)時,我們可以通過.shape
屬性訪問向量的長度。形狀(shape)是一個元組,列出了張量沿每個軸的長度(維數),對於只有一個軸的張量,形狀只有一個元素。
x.shape # torch.Size([4])
為什麼我會著重強調這個概念呢,因為維度(dimension)這個詞在不同上下文往往會有不同的含義,這經常會使人感到困惑。
- 向量 或 軸的維度 被用來表示向量或軸的長度,即向量或軸的元素數量。
- 張量的維度 用來表示張量具有的軸數。在這個意義上,張量的某個軸的維數就是這個軸的長度。
矩陣
1. 矩陣定義
向量將標量從零階推廣到一階,矩陣將向量從一階推廣到二階。
矩陣,我們通常用粗體、大寫字母來表示(例如,$\mathbf{X}$、$\mathbf{Y}$和$\mathbf{Z}$),在程式碼中表示為具有兩個軸的張量。
在數學表示法中,我們使用$\mathbf{A} \in \mathbb{R}^{m \times n}$來表示矩陣$\mathbf{A}$,其由$m$行和$n$列的實值標量組成。直觀地,我們可以將任意矩陣$\mathbf{A} \in \mathbb{R}^{m \times n}$視為一個表格,其中每個元素$a_{ij}$屬於第$i$行第$j$列:
$$\mathbf{A}=\begin{bmatrix} a_{11} & a_{12} & \cdots & a_{1n} \ a_{21} & a_{22} & \cdots & a_{2n} \ \vdots & \vdots & \ddots & \vdots \ a_{m1} & a_{m2} & \cdots & a_{mn} \ \end{bmatrix}.$$
對於任意$\mathbf{A} \in \mathbb{R}^{m \times n}$,$\mathbf{A}$的形狀是($m$,$n$)或$m \times n$。當矩陣具有相同數量的行和列時,我們稱之為方矩陣(square matrix)。
當呼叫函式來例項化張量時,我們可以通過指定兩個分量$m$和$n$來建立一個形狀為$m \times n$的矩陣。
A = torch.arange(20).reshape(5, 4)
A
2. 矩陣的轉置
當我們交換矩陣的行和列時,可以得到一個新的矩陣,我們稱之為矩陣的轉置(transpose),用$\mathbf{a}^\top$來表示矩陣的轉置。
-
如果$\mathbf{B}=\mathbf{A}^\top$,則對於任意$i$和$j$,都有$b_{ij}=a_{ji}$。
-
作為方矩陣的一種特殊型別,對稱矩陣(symmetric matrix)$\mathbf{A}$等於其轉置:$\mathbf{A} = \mathbf{A}^\top$。
3. 哈達瑪積
兩個矩陣按元素相乘稱為哈達瑪積(Hadamard product)(數學符號$\odot$)。
對於矩陣$\mathbf{A} \in \mathbb{R}^{m \times n}$,$\mathbf{B} \in \mathbb{R}^{m \times n}$,其中矩陣$\mathbf{A}$ 和 矩陣$\mathbf{B}$ 第$i$行和第$j$列的元素分別為$a_{ij}$,$b_{ij}$。那麼這兩個矩陣的哈達瑪積為:
$$ \mathbf{A} \odot \mathbf{B} = \begin{bmatrix} a_{11} b_{11} & a_{12} b_{12} & \dots & a_{1n} b_{1n} \ a_{21} b_{21} & a_{22} b_{22} & \dots & a_{2n} b_{2n} \ \vdots & \vdots & \ddots & \vdots \ a_{m1} b_{m1} & a_{m2} b_{m2} & \dots & a_{mn} b_{mn} \end{bmatrix}. $$
點積(Dot Product)
線性代數中最基本的操作之一是點積。給定兩個向量$\mathbf{x},\mathbf{y}\in\mathbb{R}^d$,它們的點積 $\mathbf{x}^\top\mathbf{y}$(或$\langle\mathbf{x},\mathbf{y}\rangle$)是相同位置的按元素乘積的和:
- $\mathbf{x}^\top \mathbf{y} = \sum_{i=1}^{d} x_i y_i$。
``` y = torch.ones(4, dtype = torch.float32) x, y, torch.dot(x, y)
tensor([0., 1., 2., 3.]), tensor([1., 1., 1., 1.]), tensor(6.)
```
點積在很多場合都有用。例如,給定一組由向量$\mathbf{x} \in \mathbb{R}^d$表示的值,和一組由$\mathbf{w} \in \mathbb{R}^d$表示的權重。$\mathbf{x}$中的值根據權重$\mathbf{w}$的加權和可以表示為點積$\mathbf{x}^\top \mathbf{w}$。當權重為非負數且和為1(即$\left(\sum_{i=1}^{d}{w_i}=1\right)$)時,點積表示加權平均(weighted average)。將兩個向量歸一化得到單位長度後,點積表示它們夾角的餘弦。
概率
在某種形式上,機器學習就是做出預測。舉例說明
例一:如圖所示,我們很容易的可以從$160 \times 160$畫素的解析度識別出狗,但它在$40\times40$畫素上變得具有挑戰性,而且在$10 \times 10$畫素下幾乎是不可能的。換句話說,我們在很遠的距離(從而降低解析度)區分狗的能力可能會接近不知情的猜測。
概率給了我們一種正式的途徑來說明我們的確定性水平。
- 如果我們完全肯定影象是一隻狗,我們說標籤$y$是"狗"的概率,表示為$P(y=$"狗"$)$等於$1$;
- 如果我們沒有證據表明$y=$“貓”或$y=$“狗”,那麼我們可以說這兩種可能性是等可能的,把它表示為$P(y=$"貓"$)=P(y=$"狗"$)=0.5$;
- 如果我們有足夠的信心,但不確定影象描繪的是一隻狗,我們可以將概率賦值為$0.5<P(y=$"狗"$)<1$。
例二,給出一些天氣監測資料,我們想預測明天金華下雨的概率。如果是夏天,下雨的概率是0.5。
在這兩種情況下,我們都不確定結果。但這兩種情況之間有一個關鍵區別。在第一種情況中,影象實際上是狗或貓,我們只是不知道哪個。在第二種情況下,結果實際上可能是一個隨機的事件。因此,概率是一種靈活的語言,用於說明我們的確定程度。
聯合概率
聯合概率(joint probability)$P(A=a,B=b)$。給定任何值$a$和$b$,聯合概率可以回答,$同時滿足A=a$和$B=b$的概率是多少。
請注意,對於任何$a$和$b$的取值,$P(A = a, B=b) \leq P(A=a)$。這點是確定的,因為要同時發生$A=a$和$B=b$,$A=a$就必須發生,$B=b$也必須發生(反之亦然)。因此,$A=a$和$B=b$同時發生的可能性不大於$A=a$或是$B=b$單獨發生的可能性。
條件概率
我們稱下面比率為條件概率(conditional probability),並用$P(B=b \mid A=a)$表示它:它是$B=b$的概率,前提是$A=a$已發生。 - $0 \leq \frac{P(A=a, B=b)}{P(A=a)} \leq 1$。
期望和差異
為了概括概率分佈的關鍵特徵,我們需要一些測量方法。
隨機變數$X$的期望(或平均值)表示為
- $$E[X] = \sum_{x} x P(X = x).$$
當函式$f(x)$的輸入是從分佈$P$中抽取的隨機變數時,$f(x)$的期望值為
- $$E_{x \sim P}[f(x)] = \sum_x f(x) P(x).$$
在許多情況下,我們希望衡量隨機變數$X$與其期望值的偏置。這可以通過方差來量化
- $$\mathrm{Var}[X] = E\left[(X - E[X])^2\right] = E[X^2] - E[X]^2.$$
方差的平方根被稱為標準差(standared deviation)。
隨機變數函式的方差衡量的是,當從該隨機變數分佈中取樣不同值$x$時,函式值偏離該函式的期望的程度:
- $$\mathrm{Var}[f(x)] = E\left[\left(f(x) - E[f(x)]\right)^2\right].$$
總結
這部分的數學知識還是很重要的,但本文涉及的知識面並沒有那麼全,只是講了論文中經常用到的數學知識。如果想要了解更多,大家可以在掘金平臺上再搜尋補習下相關知識。同時對於本文所敘述的內容,我概括了以下幾點: * 標量、向量、矩陣和張量是線性代數中的基本數學物件。 * 向量泛化自標量,矩陣泛化自向量。 * 標量、向量、矩陣和張量分別具有零、一、二和任意數量的軸。