第一個類神經網路
在本練習中,我們會訓練第一個小型類神經網路。類神經網路可讓我們學習學習非線性模型,而不必使用明確特徵交叉功能。
工作 1:給定的模型會將我們的兩個輸入特徵結合為單一神經元。此模型會學習任何非線性嗎?執行程式碼以確認你的語言。
工作 2:嘗試將隱藏層中的類神經元從 1 增加到 2,並嘗試從線性啟用改為非線性啟動 (例如 ReLU)。您是否能建立可學習非線性的模型?是否能有效建立資料模型?
工作 3:嘗試使用 ReLU 等非線性啟動功能,將隱藏層中的神經元從 2 增加到 3 。是否能有效建立資料模型?每次執行模型的模型品質差異為何?
工作 4:繼續在每個圖層中新增或移除隱藏層和神經元的實驗。如有需要,您也可以變更學習率、正規化和其他學習設定。可以使用的最小「最小」神經元和層數以 0.177 以下的測試損失。
增加模型大小是否會影響合適程度?或者它的融合速度為何?這麼做是否改變了改用優質模型的頻率?例如,請嘗試下列架構:
- 第一個隱藏層,包含 3 個神經元。
- 第二個隱藏層,包含 3 個神經元。
- 含有 2 個神經元的第三個隱藏層。
(答案會顯示在運動正下方。)
按一下加號圖示來取得工作 1 的答案。
「啟用」已設為「線性」,因此此模型無法學習任何非線性。損失的比例非常高,表示模型「缺少」資料。
按一下加號圖示來取得工作 2 的答案。
非線性啟用函式可以學習非線性模型。不過,具有 2 個神經元的單一隱藏層無法反映這個資料集中的所有非線性特徵,即使沒有雜訊也都會造成高損失,但仍會「缺少」資料的資料。這些練習不具確定性,因此某些執行作業不會學習有效模型,而其他執行作業則會執行良好工作。最佳模型的形狀可能不如預期!
按一下加號圖示來取得工作 3 的答案。
遊戲過程的決定性部分為 Playground。具有 3 個神經元的單一隱藏層足以建立資料集模型 (無噪音),但並非所有執行作業都會融合到良好的模型。
3 個神經元充足,因為 XOR 函式可用 3 個半平面的組合 (ReLU 啟用) 表示。您可以從查看神經元圖片的示意圖,瞭解個別神經元的輸出內容。在具有 3 個神經元和 ReLU 啟用的良好模型中,有 1 張圖片有近垂直線,偵測 X1 為正數 (或負數;符號可切換),1 張圖片的水平線幾乎相同,且偵測到 X2 的對角線和 1 張有對角線的標誌,用於偵測其互動。
不過,並非所有執行作業都會融合到良好的模型。有些執行作業優於具有 2 個神經元的模型,因此在這些情況下可以看到重複的神經元。
按一下加號圖示來取得工作 4 的答案。
具有 3 個神經元的單一隱藏層可以為資料建立模型,但是沒有備援功能,因此在許多執行中,它會有效地失去神經元,而不學習良好的模型。含有超過 3 個神經元的單一圖層具有備援功能,因此較有可能融合至良好的模型。
如您所見,單一隱藏層只有 2 個類神經元無法妥善建立資料模型。如果嘗試,您可以看到輸出層中的所有項目都是由兩個節點的行組成的形狀。在此情況下,更深的網路可單獨建立資料集模型,比只使用第一個隱藏層更好:第二個圖層中的個別神經元可以藉由結合第一層的神經元,建立更複雜的形狀,例如右上角象限。雖然加入第二個隱藏層的模型仍比單獨隱藏第一個隱藏層更好地建立資料集,但在第一個圖層中新增更多節點,讓第二層建構其形狀時,可能會更有意義。
但是,在第一個隱藏層中具有 1 個神經元的模型無法得知良好模型,無論其深度為何。這是因為第一層的輸出內容只會在一個維度 (通常是對角線) 上有所不同,因此仍不能為這個資料集建立良好模型。之後的圖層無法彌補這一點,因此無須擔心複雜性;輸入資料中的資訊已無法復原。
假設要避免使用小型網路,我們就有許多層神經網路,其中有很多簡單的神經元,是不是有這種簡單的問題呢?如我們先前所見,第一個圖層將能嘗試各種不同的斜面。第二層則可將這些類型累積至許多不同的形狀,後續積點的數量有許多繁多。
透過讓模型透過如此多種不同的隱藏神經元,就能將許多不同的形狀視為不同的形狀,您已建立足夠的空間,讓模型輕鬆地訓練模型中雜訊的雜訊,讓這些複雜的形狀能符合訓練資料的既有可能性,而非一般的真值。在此範例中,大型模型的複雜界線能與精確資料點相符。在極端情況下,大型模型可以得知個別噪音點周圍的島嶼,稱為「記憶」資料。藉由允許模型變大許多,您會發現,實際的模型執行效能比 <ph class="ph-1-1">更差,而只有充分的神經元可以解決問題。
類神經網路初始化
本練習再次使用 XOR 資料,但會探討訓練類神經網路的可重複性以及初始化的重要性。
工作 1:按照指定的四或五次執行模型。每次試用期前,請按一下「Reset the network」(重設網路) 按鈕,取得新的隨機初始化。「重設網路」按鈕是指播放按鈕左側的環狀重設箭頭)。讓每個測試至少執行 500 個步驟,以確保融合。每個模型輸出內容融合的形狀為何?有關非轉換最佳化中的初始化角色是什麼?
工作 2:嘗試新增一層和幾個額外節點,讓模型變得更複雜。從工作 1 重複執行測試。這會增加結果額外的穩定性嗎?
(答案會顯示在運動正下方。)
按一下加號圖示來取得工作 1 的答案。
每次執行時,學習的模型有不同的形狀。融合的測試遺失率幾乎從最低到最高 2 倍。
按一下加號圖示來取得工作 2 的答案。
加入圖層和額外節點可產生更多可重複的結果。
每次執行時,產生的模型大致相同。此外,融合的測試遺失率在執行作業之間的顯示差異較低。
類神經網路螺旋
這個資料集是吵雜的螺旋狀資料。很明顯,線性模型在此處會失敗,但即使是手動定義的特徵十字可能並不容易建構。
工作 1:使用 X1 和 X2 訓練最佳模型。如有需要,可新增或移除層和神經元、變更學習設定,例如學習率、正規化率和批次大小。您能得到哪些測試損失?模型輸出途徑的平滑程度如何?
工作 2:即使採用類神經網路,還是需要進行某些功能工程才能獲得最佳效能。請新增其他的跨產品功能或其他轉換,例如 sin(X1) 和 sin(X2)。你有更好的模型嗎?模型的輸出介面是否更順暢?
(答案會顯示在運動正下方。)
按一下加號圖示即可查看可能解答。
下方影片會逐步說明如何在 Playground 中選擇超參數,以訓練模型來盡量減少測試損失的螺旋資料。