神经网络基础之可视化和交互式指南
1.動機
2015年11月谷歌開源TensorFlow的時候,我非常興奮,知道是時候開始學習了。聽起來不太戲劇化,但對我來說,這實際上有點像普羅米修斯從機器學習的奧林匹斯山把火傳給人類。在我的腦海里浮現出這樣一個想法:當谷歌研究人員發布他們的Map Reduce論文時,整個大數據領域和Hadoop等技術都得到了大大的加速。這一次,這不是一篇論文,而是經過多年的發展,他們在內部使用的軟件。
因此,我開始盡我所能地學習這個主題的基礎知識,并意識到需要為在這個領域沒有經驗的人提供更溫和的資源。這是我的嘗試。
2. 出發
讓我們從一個簡單的例子開始。假設你在幫助一個想買房的朋友。她以40萬美元的價格買了一棟2000平方英尺(185米)的房子。這個價格合適嗎?
沒有參照系是不容易判斷的。所以你問你的朋友誰在同一個社區買了房子,你最終得到三個數據:
就我個人而言,我的第一反應是得到每平方英尺180美元的平均價格。
歡迎來到你的第一個神經網絡!現在它還沒有達到Siri的水平,但是現在你知道了基本的構建塊。看起來是這樣的:
像這樣的圖表向我們展示了網絡的結構以及它是如何計算預測的。計算從左側的輸入節點開始。輸入值向右流動。它乘以權重,結果就是我們的輸出。
把2000平方英尺乘以180就得到36萬美元。預測的計算是簡單的乘法運算。但在那之前,我們需要考慮我們將要乘以的權重。這里我們從一個平均值開始,稍后我們將研究更好的算法,它可以隨著我們得到更多的輸入和更復雜的模型而擴展。找到權重是我們的“訓練”階段。所以,每當你聽說有人“訓練”神經網絡時,就意味著找到我們用來計算預測的權重。
這是一種預測。這是一個簡單的預測模型,它接受一個輸入,進行一個計算,并給出一個輸出(因為輸出可以是連續值,所以我們的technical名稱是“回歸模型”)
讓我們將這個過程形象化(為了簡單起見,讓我們將價格單位從1美元切換到1000美元)。現在我們的重量是0.180而不是180):
3. 更快,更好,更快,更強
我們能做得比根據我們數據點的平均值來估計價格更好嗎?讓我們試試。讓我們先來定義在這種情況下做得更好意味著什么。如果將我們的模型應用到我們擁有的三個數據點上,它可以做到多好?
有點黃了。黃色不好。黃色表示錯誤。我們想盡量縮小黃色。
在這里我們可以看到實際價格,預測價格,以及它們之間的差異。然后我們需要平均這些差異,這樣我們就有了一個數字,告訴我們這個預測模型有多大的誤差。問題是,第三行的值是-63。如果我們想用預測值和價格之間的差異作為誤差度量標準,就必須處理這個負值。這就是為什么我們要引入一個額外的列來顯示誤差平方,從而去掉負值。
這就是我們對“做得更好”的定義——更好的模型就是誤差更小的模型。誤差被測量為我們數據集中每個點的平均誤差。對于每個點,通過實際值和預測值之間的差值來衡量誤差,并提高到2的冪次方。這稱為均方誤差(mse)。以它為指導來訓練我們的模型并使之成為我們的損失函數(也就是成本函數)。
既然我們已經定義了一個更好的模型的度量標準,讓我們用更多的權重值進行實驗,并將它們與我們的平均選擇進行比較:
我們的線可以更好地近似我們的值,現在我們將這個b值添加到公式中。在這種情況下,我們稱之為“bias”。這使得我們的神經網絡看起來像這樣:
我們可以這樣來概括,一個神經網絡有一個輸入和一個輸出(spoiler warning:沒有隱藏層)如下所示:
在這個圖中,W和b是我們在訓練過程中發現的值。X是我們插入公式中的輸入(在我們的例子中,面積以平方英尺為單位)。Y是預測價格。
計算預測現在使用以下公式:
因此,我們當前的模型通過插入房屋面積x來計算預測,在這個公式中:
4. 訓練你的Dragon
你試試訓練我們的玩具神經網絡怎么樣?通過調整權重和偏差刻度盤來最小化損失函數。你能得到低于799的誤差值嗎?
5. 自動化
恭喜你手動訓練了你的第一個神經網絡!讓我們看看如何自動化這個訓練過程。
下面是另一個帶有autopilot-like功能的例子。這些是GD步驟按鈕。他們使用一種稱為“梯度下降”的算法,試圖逐步走向正確的權重和偏差值,以最小化損失函數。
這兩個新的圖表可以幫助在處理模型的參數(權重和偏差)時跟蹤錯誤值。跟蹤錯誤是很重要的,因為訓練過程都是為了盡可能減少這種誤差。
梯度下降法知道它的下一步應該在哪里?知道我們要最小化的函數(我們的損失函數,所有數據點的的平均值),并且知道它當前輸入(當前的權重和偏差),損失函數的導數告訴我們為了最小化誤差,向哪個方向推w和b。
6. 另外兩個例子
房子的大小是決定房價的唯一變量嗎?顯然還有很多其它因素。我們再加一個變量,看看如何調整我們的神經網絡。
假設你的朋友做了更多的研究,發現了更多的數據點。她還發現每間房子有多少個浴室:
帶有兩個變量的網絡如下:
我們現在必須找到兩個權重(每個輸入一個)和一個偏差來創建新模型。
計算Y如下所示:
但是我們怎么找到w1和w2呢?這比我們只需要擔心一個權重的時候要復雜一些。有一個額外的浴室會在多大程度上改變我們對房子價值的預測?
試著找出正確的權重和偏差。您將從這里開始看到,隨著輸入變量的增加,模型更復雜。我們開始失去創建簡單2d形狀的能力,這些形狀可以讓我們一眼就看到模型。相反,當我們調整模型參數時,我們必須主要依賴于誤差值是如何變化的。
直接使用梯度下降即可。
7. 特征
現在我們已經看了具有一個和兩個特征的神經網絡,我們還可以想辦法添加額外的特征,并使用它們來計算得到預測。權重的數量將繼續增長,我們的梯度下降的實現將不得不在添加每個特征時進行調整,以便它可以更新與新特征相關聯的新權重。
這里需要注意的是,我們不會盲目地向網絡提供我們所知道的關于我們的examples的所有信息。我們必須有選擇性地選擇哪些特性提供給模型。特征選擇/處理是一個完整的學科,有自己的一套最佳實踐和考慮因素。如果您想查看一個示例,說明如何檢查數據集以選擇哪些特性來為預測模型提供數據,請查看泰坦尼克號之旅。
神經網絡基礎之可視化和交互式指南!更多干貨,請關注公眾號:煉丹筆記總結
以上是生活随笔為你收集整理的神经网络基础之可视化和交互式指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 一文梳理多任务学习(MMoE/PLE/D
- 下一篇: 霸榜各大CV任务榜单,Swin Tran