一個偉大願景:讓深度學習更簡單
更多深度文章,請關注:https://yq.aliyun.com/cloud
當15年前推出MapReduce時,它展示了整個世界對於未來的不屑一瞥。矽穀科技公司的工程師第一次可以分析整個互聯網。然而,MapReduce提供了非常低級API,結果使這個“超級力量”成為了奢侈品,隻有極少數的高學曆的,有很多資源的工程師才可以使用它。
今天,深度學習已經達到了“MapReduce”當時的地位:它已經顯示出了很大潛力,它是人工智能的“超級力量”。它的力量在過去的幾年創造的價值很讓人吃驚,例如:自動駕駛汽車和AlphaGo這些都被認為是奇跡。
然而,今天利用深度學習的超級力量與過去的大數據一樣具有挑戰性。深度學習框架由於低級API而具有陡峭的“學習曲線” ;擴展分布式硬件需要大量的人工工作; 即使是大量的時間和資源的結合,深度學習實現成功也需要繁瑣的工作和實驗參數。因此深度學習也通常被稱為“黑魔法”。
七年前,我們開始了一個Spark項目,其目標是通過提供高級API和統一的引擎來實現機器學習,ETL,流式傳輸和交互式SQL,從而實現“大眾化”大數據的“超級力量”的目標。今天,Apache Spark已經為軟件工程師們及SQL分析師們都提供了大量數據。
繼續這個民主化的願景,我們很高興地宣布深度學習管道,這是一個新的開源庫,旨在使每個人都能輕鬆地將可擴展的深度學習整合到他們的工作流程中,使他們能從機器學習從業者過渡到商業分析師,真正的將技術應用於實際生活中。
深度學習管道基於Apache Spark的ML管道培訓,並使用Spark DataFrames和SQL部署模型。它包括用於深度學習的常見的高級API,因此有些功能可以在幾行代碼中高效地完成,比如說:
· 圖像加載(Image loading)
· 在Spark ML管道中應用預先訓練的模型(Apply pre-trained models as transformers in a Spark ML pipeline)
· 遷移學習(Transfer learning)
· 分布式超參數調優(Distributed hyperparameter tuning)
· 在DataFrames和SQL中部署模型
接下來,我們通過實例詳細描述這些功能。要在Databricks上嚐試這些和更多的例子,請查看筆記本深度學習流水線在數據庫中。
圖像加載(Image loading)
在圖像上應用深度學習的第一步是加載圖像的能力。深度學習管道包括可以將數百萬圖像加載到DataFrame中的實用程序功能,並以分布式方式自動解碼它們,從而允許進行大規模操作。
df = imageIO.readImages("/data/myimages")
我們還正在努力增加對更多數據類型的支持,如文本和時間序列。
應用可預測的預訓練模型(Applying Pre-trained Models for Scalable Prediction)
深度學習管道支持以分布式的方式運行預訓練的模型,可用於批量和流式數據處理。它包含了一些最受歡迎的模型,使用戶在不需要花費昂貴的培訓模型的前提下,能夠直接開始深度學習。例如,以下代碼使用InceptionV3創建一個Spark預測流水線,InceptionV3是用於圖像分類的最先進的卷積神經網絡(CNN)模型,並且預測了我們剛加載的圖像中是什麼樣的對象。當然,這個預測是利用Spark一起完成的。
from sparkdl import readImages, DeepImagePredictor
predictor = DeepImagePredictor(inputCol="image", outputCol="predicted_labels", modelName="InceptionV3")
predictions_df = predictor.transform(df)
除了使用已經創建好的模型,用戶還可以在Spark預測管道中插Keras 模型和TensorFlow Graphs。這可以將單節點工具上的任何單節點模型轉換成可以分布式應用在大量數據的單節點模型。
在數據庫統一分析平台上,如果選擇基於GPU的集群,計算密集型部分將自動運行在GPU上,以獲得最佳效率。
遷移學習(Transfer learning)
預先訓練的模型在適合手頭任務時非常有用,但通常不會針對用戶正在處理的特定數據集進行優化。例如,InceptionV3是針對廣泛的1000個類別進行圖像分類優化的模型,但我們的域可能是狗種分類。一種常用的深度學習技術是遷移學習,它使針對類似任務訓練的模型適應於手頭的任務。同從初級培訓新模式相比,遷移學習需要大幅度的減少數據和資源。這就是為什麼遷移學習已經成為許多現實世界的用例,如癌症檢測方法。
深度學習管道可以快速轉移學習與Featurizer的概念。以下示例結合了Spark中的InceptionV3模型和邏輯回歸,以將InceptionV3適配到我們的特定域。DeepImageFeaturizer自動剝離預先訓練的神經網絡的最後一層,並使用所有以前層的輸出作為邏輯回歸算法的特征。由於邏輯回歸算法是一種簡單而快速的算法,所以這種遷移學習訓練可以快速收斂,而不需要通過培訓遠程學習模型所需的圖像。
from sparkdl import DeepImageFeaturizer
from pyspark.ml.classification import LogisticRegression
featurizer = DeepImageFeaturizer(modelName="InceptionV3")
lr = LogisticRegression()
p = Pipeline(stages=[featurizer, lr])
# train_images_df = ... # load a dataset of images and labels
model = p.fit(train_images_df)
分布式超參數調優(Distributed hyperparameter tuning)
在深度學習中獲得最佳結果需要對培訓參數進行不同的測試,這是一個超參數調優的重要步驟。由於深度學習管道可以將深度學習培訓作為Spark的機器學習流程中的一步,因此用戶可以依靠已經內置到Spark中的超參數調優基礎架構。
以下代碼插入到Keras Estimator中,並使用具有交叉驗證的網格搜索來執行超參數調整:
myEstimator = KerasImageFileEstimator(inputCol='input',
outputCol='output',
modelFile='/my_models/model.h5',
imageLoader=_loadProcessKeras)
kerasParams1 = {'batch_size':10, epochs:10}
kerasParams2 = {'batch_size':5, epochs:20}
myParamMaps =
ParamGridBuilder() \
.addGrid(myEstimator.kerasParams, [kerasParams1, kerasParams2]) \
.build()
cv = CrossValidator(myEstimator, myEvaluator, myParamMaps)
cvModel = cv.fit()
kerasTransformer = cvModel.bestModel # of type KerasTransformer
在SQL中部署模型(Deploying Models in SQL)
一旦數據科學家建立了所需的模型,深度學習管道就可以將其作為SQL中的一個功能,所以組織中的任何人都可以使用它 - 數據工程師,數據科學家,業務分析師,任何人。
sparkdl.registerKerasUDF("img_classify", "/mymodels/dogmodel.h5")
接下來,組織中的任何用戶都可以在SQL中應用預測:
SELECT image, img_classify(image) label FROM images
WHERE contains(label, “Chihuahua”)
所有支持的語言(Python,Scala,Java,R)中的DataFrame編程API中也提供了類似的功能。與可擴展預測類似,此功能可以在批量和結構化流中使用。
在這篇博文中,我們介紹了深層學習管道,這是一個新的圖書館,使深度學習更加容易使用和擴展。雖然這隻是一個開始,我們認為深度學習管道有潛力完成Spark所完成的工作:使深度學習的“超級力量”對每個人都是觸手可得的。
係列中的未來帖子將更詳細地介紹圖書館中的各種工具,比如說:大規模的圖像處理,遷移學習,大規模預測,以及在SQL中進行深度學習。
要了解有關該庫的更多信息,請查看Databricks筆記本以及github倉庫。我們希望您能給我們反饋。或者,作為貢獻者,並幫助將可擴展的深度學習的超級力量帶給每個人。
超級福利:免費試用DATABRICKS
本文由北郵@愛可可-愛生活老師推薦,阿裏雲雲棲社區組織翻譯。
文章原標題《A Vision for Making Deep Learning Simple From Machine Learning Practitioners to Business Analysts》,
作者: Sue Ann Hong, Tim Hunter and Reynold Xin ,譯者:袁虎,審閱:我是主題曲哥哥
文章為簡譯,更為詳細的內容,請查看原文
最後更新:2017-06-14 01:32:07