在網路上搜尋 TensorFlow 相關的資訊的時候,常常會看到另外一個工具 Keras 的出現。Keras 是一套深度學習的程式庫,也是一套由 Python 打造而成的開源軟體,常常搭配著 TensorFlow 一起使用。
在介紹 Keras 之前,先來介紹深度學習當中的神經網路
當人類在發展機器學習的時候,除了要讓機器能夠像人類一樣的判斷或預測事物之外,同時也希望能讓機器像人類大腦一樣的學習,也就是模擬大腦中的神經元運作。
神經元的運作很簡單,一個神經元可能接受到一個或是多個其他神經元的訊號,這時候這個神經元會進行處理,最後發出訊號給其他的神經元。
那麼,神經元到底是怎麼「處理」然後「發送」訊息的呢?這取決於來源訊號的權重(weight)以及閾值(threshold)
假設某個神經元可以接收來自另外三個神經元的訊號,這時候收到訊號大小的總和,會等於各自訊號大小乘以各自的權重。可以這麼想像,就是來自某些神經元的訊號對於決策比較重要,因此會給予較大的權重,對於那些比較不重要的訊號,就會給予比較小的權重。
但是最後這個接收完訊號的神經元,要不要發出訊號(做出決策,to go or not to go),就要看我們設定的閾值有多高。閾值可以想像是一個門檻,當訊號要大到某一種程度的時候,才會讓神經元發出訊號,如果收到的累積訊號太小,就不會發出訊號
其實跟前面提到機器學習的方式是差不多的,我們使用訓練資料來訓練機器,過程中機器將不斷的調整權重與閾值,直到得到好的預測結果。和先前的梯度下降一樣,這裡也會有不同的算法來提升效率與準確度
上面這張示意圖是有一個隱藏層的神經網路,代表 input 進來的資訊,只會經過一層神經元的轉換,然後得出 output,然而實際上我們可以在中間加入多層的神經元,越多層的神經元我們的學習深度越深,這也是深度學習這個詞的由來。
理論上要處理更為複雜的問題的時候,我們就需要應用尺度更大的神經元系統來處理,但是更多的神經元代表將消耗更多的計算成本,有些問題不需要殺雞焉用牛刀,夠用就好!