03.03 什麼叫做深度學習框架,其作用是什麼?

行者知趣


框架是一種抽象。而抽象非常重要。

本質上,深度學習是在操作大量的浮點矩陣。但是,如果你在實現深度學習的時候,思考層次在矩陣乘法之類的上面,那這個層級太低了。


比如說,利用Keras搭一個深度學習模型,可能花不了一刻鐘:

from keras.models import Sequential

from keras.layers import Dense

model = Sequential()

model.add(Dense(units=64, activation='relu', input_dim=100))

model.add(Dense(units=10, activation='softmax'))


model.compile(loss='categorical_crossentropy', optimizer='sgd', metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5, batch_size=32)


我們看到,使用框架,不僅寫起來快,而且可讀性很好。

上面的代碼中,我們用了兩個密集(Dense)層(也就是全連接的層):

  1. 第一層:輸入維度100,神經元64個,激活函數ReLU
  2. 第二層:神經元10個,激活函數softmax

然後是編譯模型,損失函數選交叉熵,優化用SGD(隨機梯度下降),評估指標是精確度。

最後擬合訓練數據,epoch為5,batch size為32.

如果我們不用框架,從頭寫起,一刻鐘也許剛剛寫好ReLU和softmax的定義。等我們把網絡架構、損失函數、優化方法什麼一一實現,可能已經過去一週了,而且我們自己實現的性能還不一定好。

然後,別人看我們的代碼,密密麻麻的幾千行,看起來也累。這都是抽象層次太低的緣故。

當然,另一方面,“框架”其實也“框”住了我們。上面的代碼中,有一個`model.compile`的語句。這背後其實很有深義。我們需要先定義一個模型,然後編譯,然後再運行。這是因為Keras基於TensorFlow,而TensorFlow是一個define-and-run的框架,不支持動態圖模型。如果我們使用PyTorch、MXNet這樣支持動態圖模型的框架,就可以使用動態圖模型,在運行中動態調整模型,也就是所謂define-by-run。(其實TensorFlow去年引入了貪婪執行模式,最近剛剛又推出了Swift For TensorFlow這樣的研究項目,不過總的來說,TensorFlow的define-by-run模式還處於試驗階段。)


結一下,深度學習框架為我們提供了高層抽象,大大提升了開發效率,另一方面,也可能限制我們的思路,這個算是負作用吧。


論智


首先理解深度學習,深度學習就是使用人工神經網絡算法讓機器學會學習。
然後是框架,什麼是框架?拿一個大型商場來說,商場的梁板柱就是這個商場的框架,商場裡面每個商戶可以租一間賣衣服,賣零食。賣衣服、賣零食就是在這個商場的框架的基礎上建立起來的。
所以深度學習框架就是提供創建深度學習項目的一些基礎和支撐。
我們以搭建一個100層的深度神經網絡做人臉識別項目為例。假設我們提供的數據是500張人臉的照片。我們需要把這500張照片分為訓練數據、驗證數據和測試數據。我們自己分也可以,但是深度學習框架,比如Keras就給你提供了相應的方法,你只需要把500張人臉照片輸入,它就給你返回訓練數據、驗證數據和測試數據。然後每個神經元的激活函數,我們可能會用到sigmoid激活函數、RELU激活函數、tanh激活函數等。這些激活函數我們不用自己用代碼實現,框架已經幫我們寫好了,我們只需要調用就可以。還有各種優化器,比如SGD、Adagrad等,我們也不用自己實現,直接調用框架提供給我們的就好了。我們可以把主要精力放到模型設計上。就像在商場我們只需要把主要精力放到進貨上。
然後簡單比較下當下幾種深度學習框架:

根據github上的star數量開看,目前市場佔有率是:

tensorflow>keras>caffe>pytorch>Theano

tensorflow偏底層,對理解深度學習的模型設計有點用。我們熟知的AlphaGo就是構建在tensorflow上。keras更上層,是搭建在Theano、tensorflow和CNTK之上的,所以使用起來比較簡單,缺點是不夠靈活,因為畢竟它是在別人的基礎上構建的。caffe算是深度學習早期發展最好的框架了,現在很多實驗室還都偏向使用caffe,因為caffe不管是在訓練階段和投入到生產中運算速度都比較快。但是在研發迭代中因為修改會比較多的牽扯到c++和cuda編程,所以也是不夠靈活易用的,它主要在計算機視覺方面表現比較好。然後pytorch,pytorch是今年或者去年年末才發佈的,現在衝到第四的位置是很厲害,它和tensorflow相比一個很大的優勢是它是動態神經網絡。Theano是非常老牌的,它更適合數值計算優化。

如果新手入手學習,推薦tensorflow、keras和pytorch。


分享到:


相關文章: