咱們如今有一堆輸入,咱們但願能有一個網絡,使得經過這個網絡的構成的映射關係知足咱們的期待。也就是說,咱們在解決這個問題以前先假設,這種映射能夠用網絡的模型來比較好的描述。爲何是網絡而不是什麼別的形式呢?不懂了。。html
這個網絡究竟是個怎樣的形式呢?以下圖所示,\(i1,i2\)是輸入,\(o1,o2\)是輸出,其中\(w1...w8, b1, b2\)是這個網絡中的參數。對於一個結點來講,它的全部輸出都等於它的每一個輸入,對於對應\(w\)的加權求和帶入激活函數的結果。
c++
而如今\(w1...w8, b1, b2\)這些參數都是未知的,咱們但願能經過一些方法逼近這些參數的真實結果。算法
咱們將\(w1...w8, b1, b2\)這些參數,考慮成一個高維空間中的點,與三維還有二維的狀況相似的,咱們貪心的朝着周圍都走一小步,找到那個能得到相對最優解的方向,並接受此次移動,這是經典的梯度降低的思想。因而,咱們引入了損失函數,使用它來描述這個點的優秀程度。\(w1...w8, b1, b2\)是這個函數的輸入,經過調整這些輸入,咱們但願能得到一個使得損失函數得到最值的位置,然而實際上,咱們得到的顯然是一個極值,並不必定是最值,除非能證實這個損失函數關於這些參數是凸的。可是,做爲一個比較優秀的解,這樣作仍是有價值的。網絡
後半部分的思想過程瓜熟蒂落,感受整套方法最有價值和啓發意義的就是這個網絡模型。函數
c++寫了個實現。太醜了不發了。。最麻煩的部分就是鏈式求導算梯度的幾個式子推導,有了式子以後仍是挺好寫的。很是有意思的是,一開始的寫法,沒有加入參數 b1,b2,所以迭代 500000 次左右才能使L達到 1e-22 的精度,可是當咱們,補上 b1 和 b2 時,只用迭代 200000 次便可達到,一個式子形式的設計或者說網絡結構的設計,對於算法的效果影響仍是很巨大的。spa