很多初入机器学习的人会执泥于看论文和数学公式去理解背后的原理,可是绝大部分人这么干之后,不出几日就会没有继续深入的欲望了。我的建议是去看代码,知道如何实现了,通过现象看本质,很快就能明白原理是什么,跟上面的方法是殊途同归的,但是缺点是你理解的东西很难让别人也明白。这就是为啥我曾经在讲座上讲的东西,自认为很简单的东西,听的人就是听不懂。
闲言少叙,书归正传,今天给大家讲的是自动学习机AutoML。
本人是程序员出身,做过跟机器学习、深度学习相关的大大小小的项目也不下十个了,发现一个有趣的现象,不管是图像识别、语音识别还是机器翻译的项目结构差别是很小的,但是一个效果好的模型却需要大量的经验来调优。实现过程有以下步骤:
数据预处理
特性选择
模型算法选择
调参
上线后模型的再优化
效果评估
为了让机器学习模型的设计变得更加简单,我们希望能让这一过程自动化。谷歌团队在这方面做不少尝试,他们将AutoML应用于深度学习的两大数据集中,专注图像识别的 CIFAR-10 与语言建模的 Penn Treebank。在两个数据集上,系统自行设计的模型性能表现与目前机器学习专家所设计的领先模型不相上下。他们的实现方式是,使用一个控制器神经网络生成一个子模型架构,然后在特定的任务中对其进行训练和评估。然后,该反馈被用来通知控制器作出改进下一轮的提案。我们重复这个过程数千次——生成新的架构,测试它们,并将反馈给控制器来学习。
至于某些媒体上宣传的《谷歌发布“AutoML”新技术人工智能可自我创造》,我只能呵呵了,想象力真好!AutoML主要完成的功能有两个,一是模型/算法选择,二是模型超参数优化。
涉及的方法有:
贝叶斯优化
结构化数据和超大数据的逻辑回归
元学习
迁移学习
组合优化
整体过程:
1、元学习的热启动:在机器学习框架中寻找效果好的算法;计算不同数据集之间的相似度,相似的数据可以采取类似的超参数。
2、超参数优化,算法包括:Hyperopt(TPE 算法);SMAC(基于随机森林);Spearmint。输入不同的超参数为,以损失函数为准确率,调优器会在随机选择一些值的基础上,利用贪心算法去寻优。
AutoML的开源实现地址:
automl
tpot
auto_ml是Githut上为数不多的为生产环境设计的代码,包含三个极优秀的开源框架:XGBoost,TensorFlow和LightGBM。可用于分类和预测任务,单次预测仅需1毫秒,支持序列化导出模型到本地。仅需几行代码即可构建一个回归模型:
from auto_mlimport Predictor
fromauto_ml.utils import get_boston_dataset
fromauto_ml.utils_models import load_ml_model
# Load data
df_train,df_test = get_boston_dataset()
# Tell auto_mlwhich column is 'output'
# Also notecolumns that aren't purely numerical
# Examplesinclude ['nlp', 'date', 'categorical', 'ignore']
column_descriptions= {
'MEDV': 'output' ,
'CHAS': 'categorical'
}
ml_predictor =Predictor(type_of_estimator='regressor',column_descriptions=column_descriptions)
ml_predictor.train(df_train)
# Score themodel on test data
test_score =ml_predictor.score(df_test, df_test.MEDV)
# auto_ml isspecifically tuned for running in production
# It can getpredictions on an individual row (passed in as a dictionary)
# A singleprediction like this takes ~1 millisecond
# Here we willdemonstrate saving the trained model, and loading it again
file_name =ml_predictor.save()
trained_model =load_ml_model(file_name)
# .predict and.predict_proba take in either:
# A pandasDataFrame
# A list ofdictionaries
# A singledictionary (optimized for speed in production evironments)
predictions =trained_model.predict(df_test)
print(predictions)
个人认为,AutoML才是真正的机器学习,它把经验性的工作自动化,现在的机器学习只是半成品。AutoML能极大地降低未来机器学习的门槛,将是普通人使用机器学习的利器。
出处:作者古筱凡,知乎:中谷视觉。