[Side Project] 互動式教學神經網路反向傳播 Interactive Computational Graph
成品 互動式網頁連結: Interactive Computational Graph 微積分課經典的範例 df/dx sin(x) / x: 2 個 inputs, 1 個 output, 沒有 hidden layer 的 fully connected neural network: 為何要做這套工具 以前在學 machine learning 的時候覺得最難理解的部分就是 backpropagation,也就是神經網路到底是怎麼用數學來做訓練的。 我們知道神經網路就是長這樣子: Source: Wikipedia 但實際上每個 neuron (圓圈圈) 裡面有許多基本的數學運算,像是 sum 還有 activation function: Source: Neural Networks and Machine Learning 當我們把所有東西綜合在一起,腦袋就會打結,到底 chain rule 是怎麼在這麼複雜的神經網路之間套用的? 就算了解基礎也很難相信實際上到底怎麼運作的。我又沒有要真的使用的話,網路上的教學就覺得看看就好 Source: A Step by Step Backpropagation Example 但決心要了解 backpropagation 細節之後,不少教學都提到了 computational graph,從基礎的數學運算當作 nodes 來去理解似乎是比較簡單的方式。 後來找到了這篇文章 Calculus on Computational Graphs: Backpropagation 把 chain rule 講解的簡單至極,於是就在想,為何我不做一個網頁,讓大家可以自由地組合想要的 graph,然後看一下 chain rule 是怎麼流通的。 失敗作經驗 在做這次 side project 前,其實早在一年前我就開始作另一個 side project 是想展現神經網路的訓練過程。名稱叫做 explain-derivatives,是被 TensorFlow 的一個網頁 A Neural Network Playground 啟發的。 但由於一開始欠缺規劃,想到什麼就加什麼功能進去,造成架構一直修改,最後由於程式碼架構太過複雜就放棄了。 這個 project 是用 Cytoscape.js 為底,加上 TypeScr