終於講Neural Network了,明天應該會講Tree-based的演算法,剩下四天希望能好好收尾。
理論上依照出現時間,Neural Netowrk應該在SVM之前,至於為什麼沒落了一段時間?又為什麼再次興起呢?就在這章節盡可能的帶過。
古早以前經典的Neural Network就是用Perceptron串接起來的三層結構: Input --> Hidden --> Output
這邊有人會說是 3-layer,也有些人是用Weight層數來算是 2-layer,實際上都是在講相同的東西。然而,在過去這樣在現今看起來非常淺層的模型,卻仍很難被訓練成功,而且電腦也需要花很多時間計算,因此,才會被放棄了一段時間。(若現在不使用機器學習的Package去土炮刻出來,應該也會遇到相同的問題)
原因是什麼呢?
1.硬體
硬體上儲存空間與運算速度,前者限制了模型的大小,過大的矩陣與資料無法被存取,後者則是導致計算時間過長,不符合效益。
2.軟體
此項不算太主要的原因,只是錦上添花,現在有許多開源的套件,無論是機器學習或是其它數學運算的方法,讓演算法的實現更快速,效率上也有專門的軟體工程師進行優化,整體的生命週期可以縮短許多。
3.算法
過去在調參Neural Network的模型時,被認為需要很多黑魔法才能夠訓練成功,也衍伸一些調參用的演算法。主要核心的問題大概是:初始值設定、最佳化的困難。初始值的選取真的非常重要,因為這在一開始就會決定模型到底能不能訓練的成功。最佳化的困難上,後來用反向傳播(Backpropagation)初步的解決,但接著又衍生出梯度消失\爆炸等問題。
4.其它
越大型的Neural Network使用越多參數,從簡單的解聯立方程式問題來看,變數越多需要越多方程式,因此,需要越多的資料。在過去的資料集幾千幾萬筆資料可能就算"大"了,這樣卻遠遠不夠訓練大型的神經網絡,但受限於硬體的儲存限制與資料蒐集的困難,無法有足夠大型的資料集。隨著時代的推進,開始能利用網際網路進行Crowdsourcing或各種感知裝置來蒐集數據,再加上分散式儲存系統的逐漸成熟,讓資料數量能以超越千萬量級的速度被創造與儲存,進而支撐巨型的神經網路能夠被訓練成功。