ML Lecture 8-1: “Hello world” of deep learning 學習筆記
1. Why Keras, not Tensorflow ?
Tensorflow是一個深度學習框架,非常flexible,你可以想成一個微分器,所以學起來是有一些難度的。
相較之下,Keras提供友好且直觀的interface來應用深度學習,但是也有足夠的彈性讓創造自己的NN架構,就好像是疊積木一樣。
2. ‘Hello World!’ of Keras
- Step 1 : define a set of function
1 | model = Sequential() |
- Step 2 : goodness of function
1 | model.compile(lost = 'categorical_crossentropy', |
- Step 3 : pick the best function
optimizer = 'adam'
這些都是gradient descent based的方法,可以有:SGD,RMSprop,Adagrad,Adadelta,Adam,Adamax,Nadam
最後進行訓練:
1 | model.fit(x_train, y_train, batch_size = 100, nb_epocj = 20) |
假設有1000個樣本,每個樣本是28*28,dimension就是1000*28*28
3. Mini-batch
我們並不會去minimize total loss,這樣太耗費效能與時間了,於是就誕生了mini-batch這個方法,每一個batch都是樣本中隨機挑選的。
步驟為:
- 隨機初始NN的參數
- 挑第一個batch ${L}’={l}^{1}+{l}^{31}+…$並更新一次參數
- 挑第二個batch ${L}’’={l}^{2}+{l}^{16}+…$並更新一次參數
- 直到所有mini-batch都被挑出來了
以上過程就稱為1個epoch。
如果batch_size設為1的話,有stochastic gradient descent的意涵,天下武功唯快不破。但是這樣的話為什麼不直接用SGD,而是用mini-batch呢?李老師說這是實作的議題。
我們原本預期SGD可以比較快,亦即能更新更多次參數,但事後來看,size為1進行1個epoch反而要花更長時間,而且batch size為10反而更穩定。那為什麼batch size設比較大的時候反而比較快?歸功於平行運算,batch中每一個可以同時計算。
那我們可以把batch開到最大嗎?硬體終究有限制,撇開硬體的話,在訓練的時後很容易馬上陷入local minima裡面。(等於沒有隨機性的好處)
4. Evaluate
1 | #case1 |
整個模型的運用就像熟悉的朋友scikit-learn一樣。