【圖解】由淺入深理解機(jī)器學(xué)習(xí)和GPT原理
原作者:@JayAlammar 翻譯:成江東
從一個簡單的例子開始。假設(shè)你正在幫助一個想買房子的朋友。她被報價40萬美元購買一個2000平方英尺(185平方米)的房子。這個價格合適嗎?在沒有參照物的情況下,這很難判斷。所以你詢問了在同一個社區(qū)購買過房子的朋友們,最后得到了三個數(shù)據(jù)點(diǎn):
就我個人而言,我的第一反應(yīng)是計算每平方英尺的平均價格。這個價格是每平方英尺180美元。
歡迎來到你的第一個神經(jīng)網(wǎng)絡(luò)!雖然它還沒有達(dá)到Siri的水平,但現(xiàn)在你已經(jīng)了解了基本的構(gòu)建模塊。它看起來是這樣的:

這樣的圖表展示了網(wǎng)絡(luò)的結(jié)構(gòu)以及如何計算預(yù)測。計算從左側(cè)的輸入節(jié)點(diǎn)開始。輸入值向右流動。它乘以權(quán)重,結(jié)果就成為我們的輸出。將2,000平方英尺乘以180,我們得到360,000美元。在這個層面上,計算預(yù)測就是簡單的乘法。但在此之前,我們需要考慮我們將要乘以的權(quán)重。這里我們從平均值開始,稍后我們將研究更好的算法,以便在獲得更多輸入和更復(fù)雜模型時進(jìn)行擴(kuò)展。找到權(quán)重就是我們的“訓(xùn)練”階段。所以,每當(dāng)你聽到有人在“訓(xùn)練”神經(jīng)網(wǎng)絡(luò)時,它只是指找到我們用來計算預(yù)測的權(quán)重。

這是一個簡單的預(yù)測模型,它接受輸入,進(jìn)行計算,并給出輸出(由于輸出可以是連續(xù)值,我們所擁有的技術(shù)名稱是“回歸模型”)
注:回歸模型是一種用于預(yù)測因果關(guān)系的統(tǒng)計模型,它通常用于研究與某些因素有關(guān)的連續(xù)變量。它基于已知數(shù)據(jù)的線性或非線性方程,通過最小化誤差或損失函數(shù)來擬合數(shù)據(jù),并通過該方程對未知數(shù)據(jù)進(jìn)行預(yù)測?;貧w模型可以用于分析多種因素對某一變量的影響,例如在經(jīng)濟(jì)學(xué)、社會學(xué)、醫(yī)學(xué)、工程學(xué)等領(lǐng)域中,它經(jīng)常被用于探索因果關(guān)系和預(yù)測未來趨勢。常見的回歸模型包括線性回歸、多項式回歸、邏輯回歸等。
將這個過程可視化(為了簡化,將價格單位從1美元換成1000美元?,F(xiàn)在我們的權(quán)重是0.180而不是180):

更難、更好、更快、更強(qiáng)
我們能否在估計價格方面做得比基于數(shù)據(jù)點(diǎn)平均值更好呢?首先,定義在這種情況下更好的意義。如果我們將模型應(yīng)用于我們擁有的三個數(shù)據(jù)點(diǎn),它會做得多好?

如圖所示,黃線是誤差值,黃線長是不好的,我們希望盡可能減小黃線的長度。

平均值:2,058
在這里,我們可以看到實際價格值、預(yù)測價格值以及它們之間的差異。然后我們需要對這些差異求平均,以便得到一個表示預(yù)測模型中有多少錯誤的數(shù)字。問題是,第3行的值為-63。如果我們想用預(yù)測值和價格之間的差異作為衡量誤差的標(biāo)準(zhǔn),我們必須處理這個負(fù)值。這就是為什么我們引入了一個額外的列,顯示誤差的平方,從而消除了負(fù)值。這就是我們定義更好模型的標(biāo)準(zhǔn) - 更好的模型是誤差較小的模型。誤差是數(shù)據(jù)集中每個點(diǎn)誤差的平均值。對于每個點(diǎn),誤差是實際值和預(yù)測值之間的差異的平方。這稱為均方誤差。將其作為指導(dǎo)來訓(xùn)練我們的模型使其成為我們的損失函數(shù)(也稱為成本函數(shù))。
現(xiàn)在我們已經(jīng)定義了衡量更好模型的標(biāo)準(zhǔn),嘗試一些其它權(quán)重值,并將它們與我們的平均值進(jìn)行比較:

通過改變權(quán)重,我們無法在模型上做出太多改進(jìn)。但是,如果我們添加一個偏置值,我們可以找到改進(jìn)模型的值?,F(xiàn)在我們添加了這個b值到線性公式中,我們的預(yù)測值可以更好地逼近我們的實際值。在這種情境下,我們稱之為“偏置”。這使得我們的神經(jīng)網(wǎng)絡(luò)看起來像這樣:

我們可以概括地說,一個具有一個輸入和一個輸出的神經(jīng)網(wǎng)絡(luò)(劇透警告:沒有隱藏層)看起來像這樣:

在這個圖中,W 和 b 是我們在訓(xùn)練過程中找到的值,X 是我們輸入到公式中的值(例如,我們的示例中的房屋面積(平方英尺))。Y 是預(yù)測的價格?,F(xiàn)在,計算預(yù)測使用這個公式:

因此,我們當(dāng)前的模型通過將房屋面積作為 x 插入,使用這個公式來計算預(yù)測:

訓(xùn)練你想嘗試訓(xùn)練我們的玩具神經(jīng)網(wǎng)絡(luò)嗎?通過調(diào)整權(quán)重和偏置來最小化損失函數(shù)。你能讓誤差值低于799嗎?

自動化恭喜你手動訓(xùn)練了你的第一個神經(jīng)網(wǎng)絡(luò)!看看如何自動化這個訓(xùn)練過程。下面是另一個帶有自動駕駛功能的示例。這些是 GD Step 按鈕。它們使用一種稱為“梯度下降”的算法,嘗試向正確的權(quán)重和偏置值邁進(jìn),以最小化損失函數(shù)。

這兩個新圖表可以幫助你在調(diào)整模型參數(shù)(權(quán)重和偏置)時跟蹤誤差值。跟蹤誤差非常重要,因為訓(xùn)練過程就是盡可能減少這個誤差。梯度下降如何知道它的下一步應(yīng)該在哪里?可以利用微積分。你看,我們知道我們要最小化的函數(shù)(損失函數(shù),所有數(shù)據(jù)點(diǎn)的(y_ - y)2的平均值),也知道當(dāng)前輸入的值(當(dāng)前的權(quán)重和偏置),損失函數(shù)的導(dǎo)數(shù)告訴我們應(yīng)該如何調(diào)整 W 和 b 以最小化誤差。想了解更多關(guān)于梯度下降以及如何使用它來計算新的權(quán)重和偏置的信息,請觀看 Coursera 機(jī)器學(xué)習(xí)課程的第一講。
引入第二變量
房子的大小是決定房價的唯一變量嗎?顯然還有很多其他因素。添加另一個變量,看看我們?nèi)绾握{(diào)整神經(jīng)網(wǎng)絡(luò)來適應(yīng)它。假設(shè)你的朋友做了更多的研究,找到了更多的數(shù)據(jù)點(diǎn)。她還發(fā)現(xiàn)了每個房子有多少個浴室:
我們的兩變量神經(jīng)網(wǎng)絡(luò)如下所示:

現(xiàn)在我們需要找到兩個權(quán)重(每個輸入一個)和一個偏置來創(chuàng)建我們的新模型。計算Y的公式如下:

但是我們?nèi)绾握业絯1和w2呢?這比我們只需要考慮一個權(quán)重值時要復(fù)雜一些。多一個浴室對我們預(yù)測房價的影響有多大呢?嘗試找到合適的權(quán)重和偏置。從這里開始,你會看到隨著輸入數(shù)量的增加,我們面臨的復(fù)雜性也在增加。我們開始失去創(chuàng)建簡單二維形狀的能力,這使得我們不能一眼就能看出模型的特點(diǎn)。相反,我們主要依賴于在調(diào)整模型參數(shù)時,誤差值是如何變化的。

我們再次依靠可靠的梯度下降法來幫助我們找到合適的權(quán)重和偏置。
特征
現(xiàn)在你已經(jīng)了解了具有一個和兩個特征的神經(jīng)網(wǎng)絡(luò),你可以嘗試添加更多特征并使用它們來計算預(yù)測值。權(quán)重的數(shù)量將繼續(xù)增長,當(dāng)我們添加每個新特征時,我們需要調(diào)整梯度下降的實現(xiàn),以便它能夠更新與新特征相關(guān)的新權(quán)重。這里需要注意的是,我們不能盲目地將我們所知道的所有信息都輸入到網(wǎng)絡(luò)中。我們必須在輸入模型的特征上有所選擇。特征選擇/處理是一個擁有自己一套最佳實踐和注意事項的獨(dú)立學(xué)科。如果你想看一個關(guān)于檢查數(shù)據(jù)集以選擇輸入預(yù)測模型的特征的過程的例子,請關(guān)注公眾號:「數(shù)據(jù)STUDIO」。這是一個學(xué)習(xí)機(jī)器學(xué)習(xí)算法的好地方!里面包含了很多相關(guān)項目。Omar EL Gabry在其中講述了他解決Kaggle泰坦尼克挑戰(zhàn)的過程。Kaggle提供了泰坦尼克號上乘客的名單,包括姓名、性別、年齡、船艙以及該人是否幸存等數(shù)據(jù)。挑戰(zhàn)的目標(biāo)是建立一個模型,根據(jù)其他信息預(yù)測一個人是否幸存。
分類
繼續(xù)調(diào)整我們的例子。假設(shè)你的朋友給你一份房子清單。這次,她標(biāo)注了哪些房子在她看來具有合適的大小和浴室數(shù)量:
她需要你使用這個方法來創(chuàng)建一個模型,根據(jù)房子的大小和浴室數(shù)量來預(yù)測她是否會喜歡這個房子。你將使用上面的列表來構(gòu)建模型,然后她將使用這個模型來對許多其他房子進(jìn)行分類。在這個過程中還有一個額外的改變,那就是她還有另一個包含10個房子的列表,她已經(jīng)對這些房子進(jìn)行了標(biāo)記,但她沒有告訴你。這個另外的列表將在你訓(xùn)練模型后用來評估你的模型,從而確保你的模型能夠把握她實際喜歡的房子特征。我們迄今為止所嘗試的神經(jīng)網(wǎng)絡(luò)都是進(jìn)行“回歸”操作的,它們計算并輸出一個“連續(xù)”的值(輸出可以是4,或100.6,或2143.342343)。然而,在實踐中,神經(jīng)網(wǎng)絡(luò)更常用于“分類”類型的問題。在這些問題中,神經(jīng)網(wǎng)絡(luò)的輸出必須是一組離散值(或“類別”),如“好”或“壞”。實踐中的工作原理是,我們將會得到一個模型,該模型會表明某個房屋是“好”的可能性為75%,而不僅是簡單地輸出“好”或“壞”。

在實踐中,我們可以將我們已經(jīng)看到的網(wǎng)絡(luò)轉(zhuǎn)換成一個分類網(wǎng)絡(luò),讓它輸出兩個值——一個值代表某個個類別(我們現(xiàn)在的類別是“好”和“壞”)。然后我們將這些值通過一個叫做“softmax”的操作。softmax的輸出是每個類別的概率。例如,假設(shè)網(wǎng)絡(luò)的這一層輸出“好”為2,“壞”為4,如果我們將[2, 4]輸入到softmax中,它將返回[0.11, 0.88]作為輸出。這意味著網(wǎng)絡(luò)有88%的把握認(rèn)為輸入的值是“壞”的,我們的朋友可能不喜歡那個房子。
Softmax函數(shù)接受一個數(shù)組作為輸入,并輸出一個相同長度的數(shù)組。注意到它的輸出都是正數(shù),并且總和為1,這在輸出概率值時非常有用。另外,盡管4是2的兩倍,但它的概率不僅是2的兩倍,而且是2的八倍。這是一個有用的特性,它可以夸大輸出之間的差異,從而改善我們的訓(xùn)練過程。
如您在最后兩行中所看到的,softmax可以擴(kuò)展到任意數(shù)量的輸入。所以現(xiàn)在如果我們的朋友添加了第三個標(biāo)簽(比如說“不錯,但我得把一間房子租給airbnb”),softmax可以擴(kuò)展以適應(yīng)這種變化。花點(diǎn)時間探索一下網(wǎng)絡(luò)的形狀,看看當(dāng)您改變特征數(shù)量(x1、x2、x3等)(可以是面積、浴室數(shù)量、價格、靠近學(xué)校/工作的距離等)和類別數(shù)量(y1、y2、y3等)(可以是“太貴了”、“性價比高”、“如果我把一間房子租給airbnb就好了”、“太小了”)時,網(wǎng)絡(luò)是如何變化的。

您可以在我為本文創(chuàng)建的這個筆記本中看到如何使用 TensorFlow 創(chuàng)建和訓(xùn)練這個網(wǎng)絡(luò)的示例。真正的動力如果您已經(jīng)讀到這里了,我必須向您揭示我寫這篇文章的另一個動力。這篇文章旨在作為一個更加溫和的 TensorFlow 教程入門。如果您現(xiàn)在開始學(xué)習(xí)《MNIST 機(jī)器學(xué)習(xí)初學(xué)者》,并遇到了這張圖:

原文地址:https://jalammar.github.io/visual-interactive-guide-basics-neural-networks/
數(shù)據(jù)分析入門:統(tǒng)計學(xué)基礎(chǔ)知識總結(jié)
可能是全網(wǎng)最全的速查表:Python Numpy Pandas Matplotlib 機(jī)器學(xué)習(xí) ChatGPT




