在進入機器學習、深度學習的領域之後,「模型」一詞就會不斷地出現,有時模型是個數學公式,有時是個神經元,越複雜的任務會用到更複雜的網路,有些模型可以直接解釋其組成與參數,有些模型則神祕難解。

可以解釋的模型

其實不只機器學習、深度學習的場合會用到模型,在其他場合也會用到模型,只是不會特地用到模型這個字眼。

舉例來說,如果想畫條二維直線,我們會使用y=ax+b這個模型;若想畫曲線,我們可以選擇多項式,或是更複雜的多項式組合,例如:貝茲曲線。

簡單來說,許多已知數學公式,本身就是個模型,而這類模型有著已知的變數形式、參數等計算方式,可運用文字或公式,具體解釋箇中細節。

這些模型的形式或參數,其實也是學習而來的,只不過學習的過程早就完成了,而且,是透過人類的大腦!

例如,在《Deep Learning with PyTorch》第五章〈學習的機制〉一開始就談到,早在西元1609年,關於資料科學的標準流程就已經建立起來了,例如,當時克卜勒就在沒有電腦、計算機甚至微積分的情況下,建立了克卜勒第一、第二定律,那麼,他是如何做到的?

如同現在的機器學習相關機制,克卜勒需要大量的觀察資料,試著清理出資料當中有用的部份,選擇某個曲線公式與參數,來試著擬合一部份資料,然後,再用另一部份資料來驗證,不斷地調整公式與參數,直到能符合觀察資料為止。

也就是說,對於目前已知、可解釋的公式來說,學習的過程早就由數學家、科學家等完成。

如果就機器學習、深度學習的術語來說,這些模型因為被儲存下來之後,於是,後人才得以直接使用、組合,從而能去解釋、模擬,以及預測更複雜的現象。

難以解釋的模型

由於數學家、科學家等不斷地根據既有的基本定理,從現象所觀察到的各種資料,找出可解釋現象的公式,能精確解釋公式中各參數的意義,因此,有越來越多的現象,可以透過公式來解釋,而這就像是在驗證伽利略說過的一句話:「數學是上帝用來書寫宇宙的文字」。

不過,有些任務其實就現階段的人類而言,沒辦法精確地找出對應的模型,然而,我們卻可以經由設定一個目標、微調達成目標的方式,以及重複地循環,來達成所需的各種任務,就像我在先前專欄〈程式猴與基因演算法〉談過的基因演算法,就是個例子。

以猴子打字而言,猴子本身帶有幾個基因,就代表著模型中有幾個參數,基因排列順序就是參數值,而眾多的猴子,代表著各種可能擬合世界的可能性。

因此,當我們評估猴子在世界中的適應度,就像是在評估與目標的差距,而通過適應度而可以繁衍的猴子在交換基因時的行為,就像是在微調參數,在經過無數代的繁衍之後,猴子可能滅絕,也有可能誕生出猴子界的莎士比亞。

那麼,這隻猴子界的莎士比亞,該怎麼解釋其本身的基因排列,究竟有何意義呢?很難去解釋!那麼,這隻猴子界的莎士比亞,有辦法解釋其全部先代交換基因的過程,有什麼意義呢?事實上,這也是極為艱難的任務。

擁有莎士比亞能力的猴子是最終成果,是個難以精確解釋的模型,雖說如此,從更大的角度來看,其實,基因演算法是設定了一個更通用的模型,也就是:「設定目標」、「微調方式」、「適應度評估」、「重複循環」,而這類型演算法,放棄了解釋最終模型的可能性,以此換取解決複雜任務的可能性。

建立一個超級模型

關於「可以解釋的模型」,以及「難以解釋的模型」,這兩者之間的差異,其實,也普遍存在生活之中。

如果你畫了條拋物線,我請你用解釋路徑如何形成,應該是沒問題。不過,若你隨手畫了個葉片落下的流暢曲線,我請你解釋「流暢是怎麼個流暢法?曲線的公式是什麼?」此時,你八成說不出個所以然。

藉由藝術工作者的巧手,可以做出自然的曲線與平滑,這是來自藝術工作者長期的觀察、練習與經驗,曲線與平滑之類的規則,而且,它們早已內化為藝術工作者的一部份。不過,如果我們要將藝術工作者內化的一部份,提取出來、成為具體的公式與演算法,這並不是件容易的事。

確實地,有些規則過去已經被其他人所提取出來了,像我談過的自然界雜訊模擬(例如Perlin雜訊),或是Voronoi圖;當然,有不少藝術工作者是特意、有意識地安插公式、規則或演算,置入作品中,像是達利、艾雪等,所以,這類作者的作品,在可解釋性的部分,就會達到很高的程度。

深度學習之類的東西,其實就是試圖抽取出這些現階段難以解釋的規則,我們可能很難去解釋每個神經元到底處理了什麼,以及每一層神經網路又處理了什麼;然而,某些程度上,這與克卜勒、伽利略等的做法相比,彼此之先卻又沒有差異,也類似方才談過的基因演算法。而這些作法往往都是放棄了解釋最終模型的可能性,來換取解決複雜任務的可能性。

事實上,我們單看每個神經元,就像單看猴子的基因,不過就是簡單的組合,每個神經元就只是個線性模型接上激勵函數。

以二維來說,視激勵函數而定,每個神經元就是對一小段折線或曲線做出貢獻,在訓練完成之後,模型表現出的曲線,可以達到正確的迴歸或分類,然而,卻很難去解釋哪一層的哪個神經元,是貢獻了哪一個小線段的構成。

那麼,你不用事先建立模型嗎?不!你還是必須建立一個超級模型!至於需要幾個神經層?每層要幾個神經元?使用的激勵函數?學習率?最佳化策略?損失函數用哪個?……你仍然還要負責處理這些問題,並且使用大量的資料,反覆去實驗其正確性嗎?

該做的事情都一樣

確實地,現在機器學習、深度學習的領域,也已經存在著不少已經完成訓練、儲存下來的模型,這就像有了過去數學家、科學家建立的公式;然而,當有必要去建立自己的超級模型時,就會像《Deep Learning with PyTorch》最後一章的結論所言:「大多數的實驗都是以失敗收場的」。

也因此,機器學習、深度學習也不會是(有條件的)暴力法這類的東西。當你思考「可以解釋的模型」、「難以解釋的模型」兩者的差異,在必須構築一個超級模型,接下來用大量資料修正與驗證時,你跟早期數學家、科學家在做的事情,在本質上並沒有兩樣,只不過,現在大量的資料較易獲取,有高速的機器等,令現象的資料來源、驗證的時間成本等,都獲得了改善。

簡單地說,隨意地建立超級模型,暴力地調整超參數,就能達成任務嗎?不是吧!到最後,不管是建立可解釋或難以解釋的模型,該做的事情,還真的與西元1609年的時代沒有兩樣呢!

作者簡介


熱門新聞

Advertisement