- http://mooc.study.163.com/learn/deeplearning_ai-2001281002?tid=2001392029#/learn/content?type=detail&id=2001701013&cid=2001694016
- 向量化是消除代碼中顯示for循環語句的藝術
- 在深度學習安全領域,深度學習、練習中,你經常發現在訓練大數據集的時候,深度學習算法才會表現的更加優越,所以代碼運行的非常快非常重要,否則,如果它運行在一個大的數據集上面,代碼可能會話很長的時間來運行,需要等待非常長的時間才能得到結果,
- 所以在深度學習領域,可以去完成一個向量化以及變成一個關鍵的技巧
- 什么是向量化?
- 在logistic回歸中,我們需要去計算
,其中w是列向量,x也是列向量,如果有很多的特征,他們就是非常大的向量,所以w和x都是R內的nx維度的向量, - 所以去計算w'x,
- 如果有一個非向量化的實現,
- 這個計算結果將會非常的慢
- 作為對比,如果有一個向量化的實現,將會非常直接的計算w^TX
- 在python或者numpy中,需要使用命令z=np.dot(w,x),這是在計算w^T*X,后面直接加上b,我們將會發現這個計算將會非常的快,
- 使用一個小的例子進行說明
- 向量化實現的矩陣計算
- for循環實現的矩陣計算
- 經過對比之后將會發現,向量化和非向量化之間會有非常大的區別(能接近300倍)
- 擴展深度學習實現是在GPU上做的,GPU也叫做圖像處理單元,
- CPU和GPU都有並行化的指令,有時候會叫做SIMD指令,意思就是單指令流多數據,
這句話的意思是如果你使用np.function(),它能讓你去掉顯式for循環的函數,這樣numpy和python就能夠充分利用並行化,去更快的計算- 這一點對 CPU和GPU上面都是有效成立的,
- GPU更擅長SIMD計算,CPU事實上也不是很差,可能並沒有GPU擅長,
- 我們知道了向量化能夠加快代碼的執行, 經驗法則是,只要有其他可能,就不要使用顯式for循環,
