您的位置:首页 > 其它

总结下近期调研的机器学习算法

2015-10-12 11:46 267 查看
最近要定研究方向,而可重构组现在整体大方向是异构平台搭建和大数据硬件加速。一方面因为自己的兴趣,一方面是为就业准备,所以调研的大方向都围绕着后者展开。调研过程分了以下几步:
1. 大数据领域的经典、常用算法
2. 算法调研
1) 了解算法思想
2) 分析算法热点是否适合硬件加速
3) 国内外研究现状


大数据经典、常用算法

主要调研了机器学习方面的。

## 数据挖掘的十大算法 ##



## 常用机器学习算法分类 ##

这个就不细说了,都是从其他博客上学到的,直接上链接吧~

几篇中文版的,大同小异:

http://blog.jobbole.com/77620/

http://blog.jobbole.com/60809/

http://blog.jobbole.com/92021/



## 2015机器学习的十大问题 ##

这是由ML和AI领域最权威之一的吴恩达提出的:

Structured Prediciton

Inductive Transfer

Marginal Map Problem

Learning Architecture of Deep Net

Combining Deep Learning with Statistical Relational Learning

Combining SVM with Probabilistic Graphical Models

Determining Learning Rate

Learning in Presence of Partical Data

Learning Probabilistic Programs

Banishing “black arts” from Machine Learning

好吧,我看不懂上边这些是神马东东,只是感觉很厉害的样子~万一以后会用到呢,留个底~

遗传算法

以前读论文,读到最多的算法是ANN、KNN和K-Means这些,这些不仅是ML领域用的比较多的算法,也是比较适合用FPGA加速的,不过这些的硬件加速已经被上届师兄做过了,再做似乎不太好,所以就只能在找其他算法。

本来是想上边的十大算法入手,后来查资料无意看到了遗传算法,感觉很好玩的样子,就看了看。

遗传算法是将待求解的问题表示为“染色体”适者生存的过程,通过不断的选择、交叉和变异将更优解遗传下去,多次迭代则可得到问题的较优解或最优解。

遗传算法的并行性非常好,假设原始种群中个体数为N,则每代仅对这一代的N个个体进行处理,无需额外存储其他代的个体。虽然代与代直接存在数据依赖,但是每代的繁衍是完全相互独立的。常见的并行方法有两种:一种是粗粒度的,多个子种群并行执行;一种是细粒度的,各个个体并行执行。另外,整个过程只需遍历N个数据一次,所以其计算/访存 = O(N* N *m),m为繁衍次数,属于计算密集型算法,非常适合用FPGA进行加速。

以上是好消息,坏消息要来了~在若干年前,大约零几年的时候,就已经有大牛用FPGA实现遗传算法了,并且加速比可达两个数量级,而近几年遗传算法和FPGA玩起了角色互换,研究方向变为采用遗传算法来对FPGA进行布局布线。和师兄讨论了下,觉得原因应该是遗传算法的加速效果既然已经如此高,那么继续研究的价值已经不太大,就算可以再把加速比提高个几十倍,在上百倍的加速比面前都是没有意义的。另外我觉得可能也和遗传算法应用范围不广也有关系吧~个人猜想。

关联分析

关联分析常用的有三大算法:Apriori,FP-Growth和Eclat,另外还有对它们的一些改进算法。关联分析常用于挖掘数据之间潜在的关系或模式,应用场景很广泛,如分析用户行为、优化网站组织、个性化服务等。

三个算法各有各的特点和缺点。

Apriori算法是最经典的,也是十大算法之一。但是其缺点对于FPGA来说也是比较严重的:一个是Apriori会产生大量的候选集,如何存储这些候选集是一个难题;另一个是需要重复扫描数据库,IO负载较大。针对后一个问题,可以采用划分思想进行优化,使数据库遍历次数减少至2次。

FP-Growth是和Apriori思想不一样的算法,FP-Growth将频繁项集压缩成频繁模式树来保留数据间的关联信息,再将这棵树分化成条件库来进行挖掘。但是FP-Growth中涉及到递归,硬件实现时需要消除递归或者将递归映射到硬件上,二者实现起来都是有点难度的。

Eclat采用倒排的思想,将数据库遍历变为求集合交集,相对于前两个算法来说,更适合FPGA来加速。

查阅相关硬件加速的论文发现,Apriori和FP_Growth的加速效果的确不理想,Eclat的单FPGA加速比可达到20左右,如果采用多FPGA系统,那么加速比还可以进一步提升到30~60。

决策树

决策树是对象属性和对象值之间的一种映射,常用来解决分类和回归问题,可用于商业决策、疾病诊断、故障诊断等。主要分为决策树构建、分类预测两步。

在构建决策树中,主要计算量集中在增益的计算,但其实也只是遍历、计数的过程。在分类预测阶段,可并行预测多个数据,也可采用流水线进一步提高并行性。

FPGA的加速既有针对训练阶段的也有针对预测阶段的,加速效果一般,若采用多FPGA,可进一步提升加速比。

SVM

支持向量机在深度学习火之前是最常用的分类算法,但随着DL的兴起,支持向量机的使用减少了很多,但不能否认SVM是个很牛的分类算法。整个训练过程其实就是为了确定几个参数,核心是采用二次规划算法确定Language因子,主要计算量集中在矩阵向量乘。

目前对SVM的加速多是对点积操作的加速,配以存储优化等措施来减少数据传输等,或采用多SVM级联同时保证精度和速度,等等。未来对SVM的加速可以考虑从以下几个方面入手:优化内存管理、关键路径设计、多FPGA系统以及优化算法映射等。

图计算

实验室一个师兄在北京研究所的时候做的这方面的,目前主要是静态图计算,以后将逐渐转为动态图的计算,这块了解不多,但感觉可做性还是挺大的。

金融领域的Monte-Carlo模拟

之前还花了近一天的时间了解了下金融领域的硬件加速,读了篇论文,太多术语、公式没怎么搞懂,但大概知道其加速的是Monte-Carlo模拟,通过多次迭代Monte-Carlo来求较优解。目前这块的加速不太多,国内的好像更少,但个人认为是个不错的方向。不过当时问一个出国的师兄,他说他在国外待的实验室也做过这个,但不知道是不是做不下去了,最近把这块撤了。所以我也打消这个念头了,哈哈,好怂。其实是担心研究生一年多的时间完成起来可能有难度,毕竟现成的东西有点少,具备的知识也不足,发小论文的时候会比较纠结。

前期学习的大概就这些,不过上周开会,方向有所变化,不再纯是做算法的硬件加速。老板的意思是做仿真平台,再在仿真平台上实现硬件加速。如果不担心小论文的,想抽空看下金融方面的东东~

暂时这些,写的好水,自己都没眼看了。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: