玩轉 TensorFlow Playground

很久之前就玩過 TensorFlow Playground,但當時對神經網路只有一個簡單的概念,不明白各種參數的意義,把它們胡亂點了一遍,並且嘗試多次也沒能把螺旋形狀的數據集分類成功。

現在Andrew Ng 的課程學習過半( 對之前 Ng 課程筆記有興趣的同學可以訪問 線性回歸邏輯回歸神經網路 ),在理解的基礎上再玩了下,的確有不同的體會。而且由於 TensorFlow Playground 是開源的( 代碼簡潔工整 ),所以可以把源碼取回來然後按照自己的方式來玩~

So~,我的玩法就是修改 TensorFlow Playground 來回顧 Ng 之前課程的內容,以下是玩法參考。有啥有意思的玩法也請留言告訴我哈 (●—●) ~

線性回歸

  • 將所有的 特徵 直接連接到 OUTPUT
  • 當問題類型選擇為 Regression( 回歸問題 )的時候,OUTPUT 的激活函數默認用的 Linear( 就是 Identity,見激活函數部分 ),所以整個網路的輸出和 線性回歸預測函數 相同
  • 神經網路使用的學習演算法是 反向傳播,根據 鏈式法則 你會發覺,我們這樣連接網路後,權值的更新方式和 線性回歸 是相同的
  • 可以添加高次的 多項式特徵 來增強網路的學習能力( 記得在代碼的序列化部分也加上,這樣你的選擇狀態就會被記錄下來,省得每次要重新把特徵一個個選上 )
  • Standardization,把特徵標準化( 注意一定要做 Standardization,否則你的 損失函數 瞬間就飛走了,根本走不到谷底 )

線性回歸:使用 6 次多項式特徵,總共 27 個特徵的訓練結果

邏輯回歸

  • 將所有的 特徵 直接連接到 OUTPUT
  • 問題類型為 Classification( 分類問題 )時,OUTPUT 默認的激活函數是 Tanh,所以我們要把它改為 Sigmoid,使得整個網路的輸出和 邏輯回歸預測函數 相同
  • 測試集 原先的結果 1、-1 改為 1、0
  • 添加新的 損失函數,使得經過 鏈式法則,權值的更新方式和 邏輯回歸 是相同的
  • 添加高次 多項式特徵
  • Standardization,把特徵標準化
  • 決策邊界 的判斷值 0 改為 0.5( 因為網路的輸出已經變成了 0 到 1 )

邏輯回歸:使用 6 次多項式特徵,總共 27 個特徵的訓練結果

神經網路

  • 根據 Wiki 的 Activation Function 詞條 來嘗試不同的激活函數
  • 修改網路的層數限制
  • 修改每層網路神經元個數限制

2 層隱含層,每層 32 個神經元,激活函數為 ReLU

Tips

  • 連接神經元的權值是可以手動修改的
  • 隱含層的每個神經元左下角可以手動觀察調整 Bais
  • 把滑鼠停留在神經元上,可以在右側觀察它的輸出
  • 單步可以幫助你來調試你修改的代碼是否正確( 輸出一些中間計算值 )
  • 學習曲線 可以幫助你判斷你的模型遇到 高偏差 還是 高方差 問題
  • 希望權值不要過大而產生 過擬合 的話,可以使用 L1L2 正則化

推薦閱讀:

【可解釋 AI 重大突破】DeepMind 構建心智理論神經網路讓機器互相理解
基於Numpy實現同態加密神經網路
Recognant創始人:神經網路其實很簡單,所以,別假裝你是個天才
使用py-faster-rcnn進行目標檢測(object detect)
ML領域的生物進化論,進化策略圖文詳解

TAG:機器學習 | 神經網路 |