玩轉 TensorFlow Playground
04-30
很久之前就玩過 TensorFlow Playground,但當時對神經網路只有一個簡單的概念,不明白各種參數的意義,把它們胡亂點了一遍,並且嘗試多次也沒能把螺旋形狀的數據集分類成功。
現在Andrew Ng 的課程學習過半( 對之前 Ng 課程筆記有興趣的同學可以訪問 線性回歸、邏輯回歸 與 神經網路 ),在理解的基礎上再玩了下,的確有不同的體會。而且由於 TensorFlow Playground 是開源的( 代碼簡潔工整 ),所以可以把源碼取回來然後按照自己的方式來玩~
So~,我的玩法就是修改 TensorFlow Playground 來回顧 Ng 之前課程的內容,以下是玩法參考。有啥有意思的玩法也請留言告訴我哈 (●—●) ~
線性回歸
- 將所有的 特徵 直接連接到 OUTPUT
- 當問題類型選擇為 Regression( 回歸問題 )的時候,OUTPUT 的激活函數默認用的 Linear( 就是 Identity,見激活函數部分 ),所以整個網路的輸出和 線性回歸 的 預測函數 相同
- 神經網路使用的學習演算法是 反向傳播,根據 鏈式法則 你會發覺,我們這樣連接網路後,權值的更新方式和 線性回歸 是相同的
- 可以添加高次的 多項式特徵 來增強網路的學習能力( 記得在代碼的序列化部分也加上,這樣你的選擇狀態就會被記錄下來,省得每次要重新把特徵一個個選上 )
- Standardization,把特徵標準化( 注意一定要做 Standardization,否則你的 損失函數 瞬間就飛走了,根本走不到谷底 )
邏輯回歸
- 將所有的 特徵 直接連接到 OUTPUT
- 問題類型為 Classification( 分類問題 )時,OUTPUT 默認的激活函數是 Tanh,所以我們要把它改為 Sigmoid,使得整個網路的輸出和 邏輯回歸 的 預測函數 相同
- 將 測試集 原先的結果 1、-1 改為 1、0
- 添加新的 損失函數,使得經過 鏈式法則,權值的更新方式和 邏輯回歸 是相同的
- 添加高次 多項式特徵
- Standardization,把特徵標準化
- 將 決策邊界 的判斷值 0 改為 0.5( 因為網路的輸出已經變成了 0 到 1 )
神經網路
- 根據 Wiki 的 Activation Function 詞條 來嘗試不同的激活函數
- 修改網路的層數限制
- 修改每層網路神經元個數限制
Tips
- 連接神經元的權值是可以手動修改的
- 隱含層的每個神經元左下角可以手動觀察調整 Bais
- 把滑鼠停留在神經元上,可以在右側觀察它的輸出
- 單步可以幫助你來調試你修改的代碼是否正確( 輸出一些中間計算值 )
- 從 學習曲線 可以幫助你判斷你的模型遇到 高偏差 還是 高方差 問題
- 希望權值不要過大而產生 過擬合 的話,可以使用 L1 或 L2 正則化
推薦閱讀:
※【可解釋 AI 重大突破】DeepMind 構建心智理論神經網路讓機器互相理解
※基於Numpy實現同態加密神經網路
※Recognant創始人:神經網路其實很簡單,所以,別假裝你是個天才
※使用py-faster-rcnn進行目標檢測(object detect)
※ML領域的生物進化論,進化策略圖文詳解