- 人工智能算法(卷2):受大自然啟發的算法
- (美)杰弗瑞·希頓
- 4061字
- 2021-01-25 17:48:43
背景信息
你可以按任何順序閱讀“人工智能算法”系列圖書,但是,本書確實擴展了卷1中介紹的某些主題。接下來將回顧這些主題。
向量
向量本質上就是一維數組。請注意,不要將向量的“維度”概念與待求解問題的“維度”概念相混淆,即使待求解的問題有10個輸入通道,它也依然是一個向量——向量始終是一維數組,10個輸入通道則會被存儲為一個長度為10的向量。
在人工智能算法中,向量通常用來存儲某個具體實例的數據。該特定實例可能是位置、客戶的統計信息、工廠的測量結果,甚至是神經網絡的權重——所有這些數據都取決于你要解決的問題。現實世界中的“距離”概念在此也得到了很好的體現。一張紙上的某個點就具有x和y兩個維度,同樣,三維空間中的一個點則具有x、y、z三個維度。二維空間中的一個點可以被存儲為長度為2的向量,相應地,三維空間中的一個點也可以被存儲為長度為3的向量。
我們的宇宙由3個可感知的維度構成——雖說“時間”有時被稱作“第四維”,但這實際上是一種人云亦云的說法,并不意味著“時間”真的是一個實實在在的維度,至少我們只能感受到前3個維度。由于人類無法感知更高的維度,因此要理解高于三維的空間是極為困難的——只是稍有些不巧的是,在人工智能算法中,經常需要用到極高維度的向量空間。
由于AI經常使用鳶尾花數據集(iris data set)[1] ,因此你會在本書中多次看到它。它包含150種鳶尾花的測量值和物種信息,并且數據基本上表示為帶有以下列(或特征)的電子表格:
- 萼片長度;
- 萼片寬度;
- 花瓣長度;
- 花瓣寬度;
- 鳶尾花種屬。
“花瓣”是指鳶尾花的最里面的花瓣,而“萼片”是指鳶尾花的最外面的花瓣。你可能會把這個數據集想成是長度為5的向量,然而實際上“種屬”這一特性與其余4種屬性的處理方式并不相同。因為向量通常只含有數字,而前4種特性本身就是數字量,“種屬”卻不是。
此數據集的主要應用之一是創建一個程序作為分類器。也就是說,它將花朵的特征作為輸入(萼片長度、花瓣寬度等),并最終確定種類。對于完整的已知數據集,這種分類程序將是微不足道的,但是我們的目標是使用未知鳶尾花的數據來查看模型是否可以正確識別物種。
單純的數字編碼只能將鳶尾花種屬轉換為一維的量,因此我們必須使用像突顯編碼法、等邊編碼法這樣可以添加額外維度的編碼方法,以使各個種屬編碼結果間距相等。畢竟在分類鳶尾花的時候,我們并不希望由于編碼方式而出現什么偏差。
把鳶尾花的各項特征視作高維空間中的各個維度這一想法意義極為重大,如此一來就可以把各個樣本(即鳶尾花數據集中的各行)視作這個高維搜索空間中的點,相鄰的點也就具有相似的特征。下面以鳶尾花數據集中的3行數據為例,我們來看看這些相似之處:
5.1,3.5,1.4,0.2,Iris-setosa
7.0,3.2,4.7,1.4,Iris-versicolor
6.3,3.3,6.0,2.5,Iris-virginica
第一行顯示萼片長度為5.1、萼片寬度為3.5、花瓣長度為1.4、花瓣寬度為0.2。如果我們對0~1的范圍使用突顯編碼法編碼,則以上3行將編碼為以下3個向量:
[5.1,3.5,1.4,0.2,1,0,0]
[7.0,3.2,4.7,1.4,0,1,0]
[6.3,3.3,6.0,2.5,0,0,1]
卷1中討論的等邊編碼法是物種另一種可能的編碼方式。現在你已經擁有向量形式的數據,可以計算任何兩個數據項之間的距離。接下來將描述幾種不同的方法,用來計算兩個向量之間的距離。
距離
根據勾股定理發展出來的歐氏距離測量基于兩個向量之間的實際二維距離。換句話說,如果你繪制向量并用直尺對其進行測量,則兩點之間的距離就是歐氏距離。具體來說,如果你有兩個點和
,那么通過公式1描述兩點之間的距離。
(1)
圖1展示了兩點之間的二維歐式距離。
圖1 二維歐氏距離
公式1足以比較兩個長度為2的向量。但是,大多數向量的長度大于2。要計算任意長度的向量的歐氏距離,請使用歐氏距離方程的一般形式。
機器學習通常利用歐氏距離測量,因為這是比較元素數量相同的兩個數字向量的快速方法。考慮3個向量,分別為向量、向量
和向量
,向量
與向量
之間的歐氏距離為10,向量
與向量
之間的歐氏距離為20。在這種情況下,向量
的內容更匹配向量
,而不是向量
。
公式2展示了Deza(2009)提供的用于計算歐氏距離的公式。
(2)
公式2展示了兩個向量和
之間的歐氏距離d。它還指出
與
相同。換句話說,無論哪一端是起點,距離都是相同的。計算歐氏距離只需要對每個數組元素之差的平方求和,然后找到該和的平方根,該平方根就是歐氏距離。
下面以偽代碼的形式展示公式2。
sub euclidean(position1, position2):
sum = 0
for i from 0 to len(position1) -1:
d = position1[i] - position2[i]
sum = sum + d * d;
return sqrt(sum);
使用徑向基函數建模
人工智能使用模型來接收輸入向量并產生正確的輸出,從而使模型能夠識別該輸入。例如,你可能會針對鳶尾花數據集中的4個測量值提供輸入,并期望輸出鳶尾花的種屬。在本節中,我們將介紹一個徑向基函數(Radial-Basis Function,RBF)網絡[2],該網絡是用于回歸和分類的模型。回歸模型返回數值,而分類模型返回一個非數值,例如鳶尾花種屬。
為了使輸入生成正確的輸出,RBF網絡使用了一個參數向量,即一個指定權重和系數的模型。通過調整一個隨機的參數向量,RBF網絡產生與鳶尾花數據集一致的輸出。調整參數向量以產生所需輸出的過程稱為訓練。有許多用于訓練RBF網絡的方法。參數向量也代表它的長期記憶。
下面將簡要回顧徑向基函數的概念,并描述這些向量的確切組成。
徑向基函數
徑向基函數是人工智能領域一個非常重要的概念,因為很多人工智能算法都需要用到這種技術。徑向基函數關于其在x軸上的中點對稱,并在中點處達到最大值,這一最大值稱作“峰值”,且峰值一般為1。實際上在徑向基函數網絡中,峰值總是1,中點則視情況而定。
徑向基函數可以是多維的,但無論輸入向量是多少維的,輸出總是一個標量值。
有很多常見的徑向基函數,其中最常用的就是“高斯函數”。圖2就是以0為中心的一維高斯函數的圖像。
圖2 高斯函數
你可能會將上述曲線識別為正態分布或鐘形曲線,其實這是一個徑向基函數。徑向基函數通常被用于選擇性地放縮數據,高斯函數也不例外。以圖2為例,如果用這個函數來放縮數據,則中心點處放縮幅值最大,越往x軸正負方向移動,放縮幅值越小。
在給出高斯徑向基函數的公式之前,先要研究一下多維的情況如何處理。需要注意的是,徑向基函數的輸入是多維數據,返回的則是一個標量值——這是通過計算徑向基函數的輸入向量和中心向量之間的距離實現的,其中“距離”記為r。當然,要使計算能夠進行,輸入向量和中心向量維數必須相同。只要計算出了這個斜體文字r,接下來就可以計算出對應的徑向基函數值了——所有的徑向基函數都要用到這個計算出的“距離”r。
公式3即為r的計算公式:
(3)
公式3中雙豎線的符號表示計算的是“距離”。歐氏距離是徑向基函數中最常用的距離概念,但在特殊情況下,也有可能使用其他的距離概念——本書中的示例均使用歐氏距離。因此本書中的r指的就是輸入向量和中心向量
之間的歐氏距離,本節所有徑向基函數中的“距離”r均由公式3計算得出。
高斯徑向基函數的公式如公式4所示:
(4)
只要計算出了r,計算徑向基函數的值就很容易了,公式4中的希臘字母一般用來表示“徑向基函數”。公式4中的常數e表示歐拉數或自然常數,值大約為2.718 28。
徑向基函數網絡
徑向基函數網絡本質上就是一至多個徑向基函數的加權求和,其中每個徑向基函數均接受一個帶權重的輸入,從而對輸出進行預測。可將徑向基函數網絡視為包含參數向量的一個長方程。公式5描述了一個徑向基函數網絡:
(5)
注意,其中雙豎線表示運算結果是“距離”,但并未規定計算距離的算法,也就是說選取哪種距離參與運算需要視情況而定。公式5中的指的是輸入向量;c是徑向基函數的中心向量;p是所選的徑向基函數(比如高斯函數);a是每個徑向基函數對應的系數,一般為向量形式,也稱“權重”;b則是每個輸入對應的權重系數。
下面以鳶尾花數據集為例,應用徑向基函數網絡,圖3即為該網絡的圖形化表示。
圖3所示的網絡有4項輸入(包括萼寬、萼長、瓣寬、瓣長),分別對應于描述鳶尾花種屬的各項特征。為簡單起見,圖3中假定3個鳶尾花種屬的編碼方式為突顯編碼法;當然也可以用等邊編碼法,不過輸出項就應該只有兩個了。示例中需要選取3個徑向基函數——這一選擇沒有什么限制條件,全憑個人喜好。增加徑向基函數的數目能夠使模型學習更加復雜的數據集,但也會耗費更多的時間。
圖3 以鳶尾花數據集為輸入的徑向基函數網絡
圖3中的箭頭代表公式5中全部的系數:輸入和徑向基函數之間的箭頭表示的是公式5中的系數b;徑向基函數和求和號之間的箭頭則表示系數a。可能你也注意到了圖3中的“偏置”框,這是人為添加的一個返回值總是1的函數;由于偏置函數的輸出是一個常數,因此也就不需要輸入了。偏置項到求和號之間的權重起著類似于線性回歸中“截距”的作用,因此偏置的存在并不總是壞事兒,在本例中,偏置就是徑向基函數網絡的一個重要組成部分。在神經網絡中,也經常會用到“偏置節點”。
從圖3中有多個求和號可以看出,這是一個分類問題,幾個求和運算的最大值所對應項即預測結果。而如果是一個回歸問題,則輸出應當只有一項,即為回歸問題的預測結果。
你肯定注意到了圖3中的偏置節點,其所在位置與徑向基函數屬同一層級,就像是另一個徑向基函數,只不過不像徑向基函數那樣需要接受輸入而已。這個偏置節點總是輸出常數1,然后這個1再乘以對應的系數,就相當于無論輸入是什么情況,都把對應系數直接加到了輸出項中。尤其在輸入為0的時候,偏置節點就會很有用,因為它使得即使輸入為0,徑向基函數層也依然有值可以輸出。
徑向基函數網絡的長期記憶向量由如下幾個不同的部分組成:
- 輸入系數;
- 輸出系數(求和系數);
- 徑向基函數放縮范圍(在各維度上范圍相同);
- 徑向基函數中心向量。
徑向基函數網絡把所有的元素保存為一個向量,這個向量即為該徑向基函數網絡的“長期記憶向量”。稍后我們會使用貪心隨機訓練算法或爬山算法來訓練網絡,以使其長期記憶向量的值達到能夠根據提供的特征數據正確判斷鳶尾花類別的程度。
這個模型的工作原理與公式5相差無幾,僅有的不同在于該方程更加復雜,因為現在需要計算多個輸出值以及徑向基函數的函數值了。
以上是有關向量、距離和徑向基函數網絡的基本概述。由于這里的討論僅包含理解卷2內容所需的預備知識,因此,要了解這些主題的更全面的解釋,請參閱卷1。
[1] Fisher,1936。
[2] Bishop,1996。