机器学习算法十分强悍,能够对输入的数据进行深入的观察,建立从现实世界到所要解决问题的高质量的映射,从而让冷冰冰的机器做出近似于人类的高质量的预测和识别。如今,随着机器学习算法的高速发展,机器学习算法已经被广泛地应用于生活中,它们在潜移默化中影响并帮助着我们,比如在输入一段文本的时候,机器能理解我们的意思,这就是基于机器学习的自然语言处理以及文本挖掘技术;比如看到一张图片,机器就能迅速帮我们找出其中的人脸或者目标事物,这就是基于机器学习的图像处理技术;比如网购平台总是能高效精准地为我们推送令人怦然心动(忍不住剁手)的精美商品,这就是基于机器学习的推荐系统。然而,机器学习算法是个消耗算力的怪兽。当处理大规模数据的时候,现有机器学习技术通常都要付出巨大的时间成本来进行训练和学习。这个领域就叫做大规模机器学习(Largescale Machine Learning, LML),大规模机器学习的目标是想方设法从大数据中高效地挖掘和学习到数据之间的模式和联系,深入挖掘其中的有效信息。《A Survey on Large-scale Machine Learning》对大规模机器学习方法LML进行了系统的综述,为这个领域的未来发展描绘出了一个宏大的蓝图。以下是论文内容,AI科技评论对关键内容进行了编译。论文链接:https://arxiv.org/pdf/2008.03911.pdf我们首先根据算法的可扩展性(Scalability)对LML方法进行了三方面的划分,它们分别是:1、计算复杂度的模型简化;2、计算效率的优化逼近;3、计算能力上的计算并行性。然后我们根据目标情景再对这些话题进行细分,并根据它们的内在算法策略上的差异再次细分并详细介绍。最后我们分析了它们的局限性,并讨论了大规模机器学习方法未来可能的发展方向,以及需要进一步改善和解决的问题。
1
200+大规模机器学习论文综述机器学习是一个很神奇的方向,它能够给冰冷的机器赋以“智能”,让它们能够从繁杂无序的数据中“抽丝剥茧”,从而学习其中潜在的规律和“模式”。以往我们都是需要人类专家对数据进行“生无可恋"的研究、讨论和思考之后才能得到一些有用的信息,而如今机器学习能够自动完成这一切,而无需我们手动对这些抽象的信息进行发现和编码。机器学习方法固然好,但是它也有着一摞“难念的经”,其中最让它头疼的就是在面对大规模数据模型训练的“二次时间复杂性”问题。近年来,随着各种可穿戴设备的发展、手机等终端的普及,以及摄像头等数据源的疯狂增长,人们所拥有的数据大规模增长。想要从这些庞大的数据集中挖掘出有效的信息是一件很累人的事情,即便是对于拥有强大算力的计算机来说也是一样,这就让机器学习算法变得不堪重负。在实际中,甚至会出现数据过期没用了,但是模型还没训练结束的问题,让人哭笑不得。因此,为了充分挖掘大数据这座金矿,人们开始研究大规模机器学习这个领域。通常意义上来说,大规模机器学习的宗旨在于在有限的计算资源上解决一般化的机器学习任务,尤其是针对那些基于大规模数据集的场景。因此,大规模机器学习领域已经成为大数据分析的核心技术之一,如果没有它,可能后续的一切技术和操作都将不复存在。举例来说,在Waymo和Tesla Autopilot等自动驾驶汽车中,需要对感知的多种图像和传感器数据进行快速而实时的卷积计算处理,从而感知到周围的环境并作出及时的车辆操作(因为自动驾驶汽车的感知数据很丰富,包括视频、声音、雷达和距离传感器等,计算比较复杂,我们可不想看到出车祸了之后算法才告诉我们要刹车的“马后炮”)。又比如在线媒体和电商网站,如Netflix和Amazon,它们需要根据用户的浏览历史和购买记录建立实时高效的协作过滤模型,从而进行精准的推荐(应该没啥人会太关注昨天的娱乐圈热点,因为已经过时了嘛)。不论如何,大规模机器学习对于我们的日常生活起着至关重要的作用。在近些年,人们意识到数据才是企业资本的核心,因此人们对于大数据的青睐和分析需求与日俱增!而随着数据的爆炸性增长,大规模机器学习这一领域急需一些系统的调研和回顾文章,用以指导人们建立高效的机器学习算法平台,并设计与之配套的高效的机器学习解决方案。目前来说,学术界虽然已经发表了一些该领域的综述和调研报告,但是它们都多多少少存在着一些问题,而且不够全面。首先,它们都只关注大规模机器学习的一个方面,而忽略了各个方面之间的联系和互补。这就限制了它们对这一领域的系统理解,也让它们难以宏观地把握大规模机器学习的全貌,从而提出有助于该领域未来发展的建设性意见。比如,有些文章只关注预测模型部分,而忽略了之前的模型训练和优化部分;有些文章则忽略了处理高维数据的优化算法;还有的文章的关注点则比较独立和专一:仅局限于Hadoop生态系统中的分布式数据分析,而没有涉及其他工具和系统中的相关研究。在本文中,我们从计算技术的角度对200多篇关于大规模机器学习的论文进行了深入的分析,并讨论了该领域未来的研究和发展方向。同时,本文也为这个领域的研究者和从业人员列出了一系列查找表,以方便根据自己的需求和现有资源对号入座、有选择性地挑选合适的预测模型、优化算法和学习策略。我们将贡献总结如下:第一、我们从三个计算角度对大规模机器学习进行了全面的综述:1、模型简化:通过简化预测模型来降低计算复杂性;2、近似优化:通过设计更好的优化算法(大多数都是近似算法)来提高计算效率;3、计算并行性:通过调度多台计算设备来提高系统的整体计算能力。第二,我们对现有的大规模机器学习方法进行了深入的分析。为此,我们根据目标场景将每个上述分类中的方法进行更精细的划分。我们分析了它们加速机器学习过程的动机和内在方法,并且据此对它们进行分门别类的介绍。在介绍中我们会结合它们各自领域中的代表性成果和特点进行深入的介绍。此外,我们还回顾了这些方法的混合方法即结合各个部分的优势,协同地对系统计算性能进行优化研究。第三,我们分析了大规模机器学习方法在各个方面的局限性,并在其扩展的基础上提出了该方向未来可能的发展方向。此外,我们还讨论了相关领域中的一些有待解决的问题,希望我们的这个总结能够为读者们带来一些指引,为大规模机器学习的发展“抛砖引玉”,提供一些参考。
2
大规模机器学习的三个方面在本节中,我们将详细回顾大规模机器学习。具体来说,我们先详细介绍了前文所述的三种分类中的方法,并且在最后介绍各方法之间的协同方法。对于其中的每个部分,我们根据目标场景对这些方法进行了分类,并且根据他们的技术方法和内在策略对其进行分门别类的具体介绍。我们也进行了一些实验,来证明这些策略的有效性,并且总结各自的利弊。为了方便起见,我们在图1中展示了本小节的组成结构,采用头脑风暴图,由浅入深。 图1. 介绍结构图,我们从三个方面展示了将普通机器学习扩展到大规模机器学习的方法。2.1 模型简化在前文中,我们从计算复杂性的角度回顾了各种大规模机器学习方法。现在我们来讨论上述方法的优缺点。首先,相对于深度模型来说,基于核技术和基于图的相关模型拥有更好的扩展性和可优化性。此外,利用基于核以及基于图相关的模型时,人类专家能够将自己的先验知识和领域经验量化进去,融入模型,省得从零开始进行复杂的模型训练。在数学中,半正定矩阵的和仍然是半正定矩阵,因此,当我们将不同类型特征的相似性合并到一个模型中的时候,这种方法将会十分容易和便利。值得我们注意的是,尽管基于图的方法相对于基于核的方法所需的内存开销更少,但是它们只能处理满足聚类假设(Cluster Assumption)的数据场景,如果数据不满足该假设,图方法也就束手无策了。其次,由于结构示例的层次特征提取的优秀性质,深度模型能够据此获得更好的分类精度。但是天下没有免费的午餐,因为加大了网络规模,所以就得需要花费大量的时间来训练这些过参数化的模型(over -parameterized models)。滤波器分解方法虽然能够显著地减少系统的计算量,但是与此同时必须对要体系结构进行仔细的设计。此外,一些深层模型在数学上等同于核化岭回归,它们可以从数据中学习到自己的核,但是它们只能在有限维空间中构建该核,而且这些核的构建结果通常是很晦涩、让人难以理解的,这就使得系统的可解释性进一步下降,也让预测的逻辑更难被理性解释。相比之下,基于树的分层分割模型则更易于解释。此外,这些模型还可以直接集成到许多其他的加速方法中,例如使用二元分类器的标签树算法中。 表1. 一种用于模型简化的大规模机器学习方法查找表。 2.2 最优化近似为了在提高计算效率的同时保持解的可靠性,本节中介绍的方法更倾向于减少优化误差的计算。首先,MGD和CGD方法都考虑了算法中使用实例或参数的重要性,并据此引入了不少决策方法来减少计算时间的成本。同时,上述两者都可以利用Nesterov的外推步骤(extrapolation steps),用累积梯度调整学习速率,或者使用直线搜索来加快收敛的速度。其次,CGD更适合在参数量较大的模型优化场景中使用,特别是对于以倒排索引存储的线性模型数据。相比之下,如果特征的数量远远小于样本数量,那么就应该基于MGD进行求解。第三,对于处理具有大量实例的大型模型,我们自然而然地想到将MGD和CGD联合在一起,即在每次迭代中用几个实例更新参数子集。例如,最近学术界提出了一种叫做“小批量随机块坐标下降(mini-batch randomized block coordinate descent)”的方法:每次迭代中都基于随机小批量数据来估计所选参数的部分梯度。最后,小批量梯度MCMC算法提高了样本的质量,加快了贝叶斯推理的执行速度。此外,这些算法通常能够从不同的角度,比如说加性噪声和动量等方面来近似等价MGD。然而,由于这些来自于本机的部分数据是有局限性的,它们很可能无法收敛到期望的分布,因此,我们必须引入一些必要的修正项来替代矫正步骤。除此之外,如何将前文所述的这些额外算法与贝叶斯算法与优化算法区分开是一个重要的课题,这个方面仍然有待研究。
道翰天琼CiGril认知智能机器人API用户需要按步骤获取基本信息:
请求地址:http://www.weilaitec.com/cigirlrobot.cgr
请求方式:post
请求参数:
参数 |
类型 |
默认值 |
描述 |
userid |
String |
无 |
平台注册账号 |
appid |
String |
无 |
平台创建的应用id |
key |
String |
无 |
平台应用生成的秘钥 |
msg |
String |
"" |
用户端消息内容 |
ip |
String |
"" |
客户端ip要求唯一性,无ip等可以用QQ账号,微信账号,手机MAC地址等代替。 |
接口连接示例:http://www.weilaitec.com/cigirlrobot.cgr?key=UTNJK34THXK010T566ZI39VES50BLRBE8R66H5R3FOAO84J3BV&msg=你好&ip=119.25.36.48&userid=jackli&appid=52454214552
注意事项:参数名称都要小写,五个参数不能遗漏,参数名称都要写对,且各个参数的值不能为空字符串。否则无法请求成功。userid,appid,key三个参数要到平台注册登录创建应用之后,然后查看应用详情就可以看到。userid就是平台注册账号。
示例代码JAVA:
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class apitest {
/**
* Get请求,获得返回数据
* @param urlStr
* @return
*/
private static String opUrl(String urlStr)
{
URL url = null;
HttpURLConnection conn = null;
InputStream is = null;
ByteArrayOutputStream baos = null;
try
{
url = new URL(urlStr);
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(5 * 10000);
conn.setConnectTimeout(5 * 10000);
conn.setRequestMethod("POST");
if (conn.getResponseCode() == 200)
{
is = conn.getInputStream();
baos = new ByteArrayOutputStream();
int len = -1;
byte[] buf = new byte[128];
while ((len = is.read(buf)) != -1)
{
baos.write(buf, 0, len);
}
baos.flush();
String result = baos.toString();
return result;
} else
{
throw new Exception("服务器连接错误!");
}
} catch (Exception e)
{
e.printStackTrace();
} finally
{
try
{
if (is != null)
is.close();
} catch (IOException e)
{
e.printStackTrace();
}
try
{
if (baos != null)
baos.close();
} catch (IOException e)
{
e.printStackTrace();
}
conn.disconnect();
}
return "";
}
public static void main(String args []){
//msg参数就是传输过去的对话内容。
System.out.println(opUrl("http://www.weilaitec.com/cigirlrobot.cgr?key=UTNJK34THXK010T566ZI39VES50BLRBE8R66H5R3FOAO84J3BV&msg=你好&ip=119.25.36.48&userid=jackli&appid=52454214552"));
}
}