大数据和人工智能工程上的一些点
Posted 远洋号
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据和人工智能工程上的一些点相关的知识,希望对你有一定的参考价值。
大数据这个词最早出现在上世纪90年代的美国,直到2012年后才火起来。大数据没有一个明确的概念,之所以称之为大是因为数据量太大超过了单台计算机的资源,这时就需要分布式的数据处理工具,以便能在用户可容忍的时间内进行数据处理。大数据从业人员肯定会去了解谷歌的mapreduce论文和hadoop开源工具。然而海量数据本来是静态,只有通过对数据进行分析和利用才能让数据产生价值。正所谓量变产生质变。
人工智能人工智能在1956年的达特茅斯会议上被提出来,它研究的是如何制造智能机器或模拟人类的智能行为。大数据与人工智能之间可以说是相辅相成,人工智能的基础是数据,而数据的利用又离不开人工智能。各个领域海量数据的收集,并进行人工处理标识后成为人工智能学习的指导数据。人工智能研究的方向主要有:模式识别、机器学习、机器翻译、自然语言处理、计算机视觉、专家系统、逻辑推理等等。
机器学习机器学习就是利用事物本身具有的数据特征用数学来表达并构建模型,然后完成既定任务,总的来说模型就是特征到任务结果的某种数学规律。对于实际工程中,我们的模型是能尽量简单就尽量简单,模型并非是看起来高端才牛逼,真正牛逼的模型是简单又有效。机器学习的数学知识涉及到高等数学、线性代数、概率论、数理统计、最优化理论、数理逻辑等等。
常见机器学习算法机器学习常见的算法涉及以下:
线性回归,比较简单且直观的回归算法,线性回归可以有n个属性值,然后每个属性的线性组合组成一个预测函数,通过定义误差函数然后最小化样本整体的误差来确定预测函数的参数。
逻辑斯蒂回归,可以说它是广义线性模型,原来的线性回归无法用于分类任务,那么通过一个sigmoid函数可以将其用于分类任务,这便是逻辑斯蒂回归。线性函数被映射到了S函数中,以0.5为分割点可作为二分类。逻辑斯蒂回归往多分类推广则变为softmax回归,可用于多分类任务。
朴素贝叶斯,它是概率论中非常经典的方法,核心就是贝叶斯定理,通过条件独立假设来简化模型,通过样本来学习联合概率分布,其中涉及到先验概率分布和条件概率分布。
决策树,根据属性构造一个树形的决策策略,按各个属性值不断往下便能确定最终的结果。训练时可以以信息增益作为准则。
支持向量机,它规定了最优分类线不仅能正确将两类分开,而且还要使分类间隔最大,当然对于高维空间则是超平面。它的本质问题是凸二次规划问题的极小问题,这方面涉及到凸优化理论。对于线性不可分的情况可以引入核函数,将低维空间线性不可分的点映射到高维空间中,从而使得它们可分。
集成学习(boosting、bagging、stacking),集成学习核心思想是结合多个模型算法来完成任务,这个假设了单个算法学习的知识是局限的,多个算法组合则能发挥各个算法模型的长处,从而增加模型性能。boosting、bagging、stacking分别是三种不同的集成方式,boosting的个体学习器有强依赖关系,每个个体学习器依赖于前一个个体学习器的输出,bagging个体学习器之间没有依赖关系且通过一定的结合策略产生最终输出,stacking则是一种分层特征学习的结构。
神经网络(感知机、BP神经网络、卷积神经网络、循环神经网络),神经网络基础版本是感知机和BP神经网络,通过模拟人脑神经一样构建起一个神经网络,并通过梯度下降之类的学习模型参数。后面通过加深网络层数和引入卷积等操作发展成卷积神经网络,此外还有改造成循环神经网络等,也就是后来的深度学习。
聚类(kmeans、密度聚类、层次聚类),聚类就是通过一定的算法将属性相近的个体聚集到一起,并将属性不同的个体尽量隔离远一点。kmeans是基于距离的聚类,密度聚类则是寻找被低密度区域分离的高密度区域,层次聚类congratulation上往下将大集群进行分割。
降维(PCA、LDA),PCA主成分分析将数据congratulation原来的坐标转换到新坐标使得可以用更少维度来表示数据,LDA线性判别分析将高维样本投印到最佳鉴别矢量空间以达到压缩特征空间维度的效果。
数据获取,从不同数据源收集数据获取数据到统一装置中。
数据存储,借助存储介质将收集到的数据持久化保存,比如硬盘。
数据清洗,将不符合规范的数据进行特定处理,使得数据达到准确完整一致等要求。
数据建模,定义满足业务所需要的数据要求的过程,一般需要业务建模师参与。
数据处理,对数据的采集、存储、检索、加工、变换、传输等操作,从海量数据中抽取提取有价值的数据。
数据分析,使用数据挖掘技术从海量数据中获取有价值的信息。
数据可视化,将数据以直观的可视化方式展示给用户。
hadoop受谷歌MapReduce论文启发而实现的经典的开源大数据处理工具,目前大数据工具主要包括以下。
HDFS,分布式文件系统。
HBase,分布式数据库。
MapReduce,由用户编写的运行在hadoop集群上的并行程序。
zookeeper,作为分布式程序的协调中心。
hive,基于hadoop的数据仓库管理工具。
pig,大数据分析工具。
yarn,hadoop集群资源管理系统。
sqoop,hadoop与传统数据库之间进行数据交换的工具。
chukawa,分布式数据收集分析系统。
hcatalog,管理hadoop产生的数据表存储管理系统。
redis,分布式缓存系统。
kafka,分布式消息系统。
Cassandra,分布式结构和数据存储。
neo4j,nosql图数据库。
spark,分布式计算引擎。
storm,分布式实时计算系统。
elasticsearch,分布式全文搜索。
flume,分布式日志采集系统。
flink,分布式流处理引擎。
本公众号专注于人工智能、读书与感想、聊聊数学、计算机科学、分布式、机器学习、深度学习、自然语言处理、算法与数据结构、Java深度、Tomcat内核等。
作者简介:笔名seaboat,擅长人工智能、计算机科学、数学原理、基础算法。出版书籍:《Tomcat内核设计剖析》、《图解数据结构与算法》、《人工智能原理科普》。
支持作者,购买作者书籍!
机器学习工程师第一年的 12 点体会
作者 | 人工智能大数据与深度学习 来源 | Datawhale 机器学习和数据科学都是广义上的术语,它们涉及超级多的领域以及知识,一位数据
参考技术A作者 | 人工智能大数据与深度学习
来源 | Datawhale
机器学习和数据科学都是广义上的术语,它们涉及超级多的领域以及知识,一位数据科学家所做的事情可能与另一位有很大的不同,机器学习工程师也是如此。通常使用过去(数据)来理解或预测(构建模型)未来。
为了将上面刚刚提到的要点融入上下文中,我必须要解释我的角色是什么。曾经我待在一个小机器学习咨询团队。我们做到了从数据收集到清洗、构建模型再到你能想到的多个行业的服务部署。因为团队很小,所以每个人头上都有很多头衔。
机器学习工程师的日常:
早上9点,我走进办公室,向同事问好,把食物放在冰箱里,倒一杯咖啡,走到我的办公桌前。然后我坐下来,看看前一天的笔记,打开Slack,阅读未读的消息并打开团队共享的论文或博客文章链接,因为这个领域发展很快,所以要多看一些前沿的东西。
我通常都是在读完未读消息后,会花一点时间来浏览论文和博客文章,并仔细研究那些理解起来困难的内容。不得不说这其中,有一些内容对我正在做的工作有很大的帮助。一般来说,阅读会花费我大概一个小时甚至更久,这取决于文章本身。有些朋友会问我为什么这么久?
在我看来,阅读是一种终极元技能。因为一旦有更好的方式来完成我当前在做的事情,我会立即通过学习使用它,从而节约更多的时间和精力。但也有特殊情况,如果有一个项目的截止日期临近,那么我将把阅读时间缩短来推进该项目。
完成阅读之后,我会检查前一天的工作,检查我的记事本,看看我需要从什么地方开始工作,为什么我可以这样做?因为我的记事本是流水账式的日记。
例如:「将数据处理为正确格式,现在需要在模型中训练这些数据。」如果我在工作过程中遇到了困难,则会写下类似于:「发生了数据不匹配的情况,接下来我将尝试修复混合匹配,并在尝试新模型之前获得基线。」
大约在下午4点的时候我会整理一下我的代码,大概涉及:让混乱代码变得清晰,添加注释,组合。为什么要这样做?因为这个问题我经常会问自己:如果其他人看不懂这个怎么办?如果是我要读这段代码,我最需要什么?有了这样的思考后,我觉得花费一段时间来整理代码变的格外有意义。大约在下午5点,我的代码应该会被上传到GitHub上。
这是理想的一天,但并不是每一天都是如此。有时候你会在下午4点有一个极好的想法,然后跟随它,然后就有可能是通宵。
现在你应该已经大致了解了机器学习工程师一天的日常了吧,接下来我会将我在其中获得的心得分享给你:
1.睁眼闭眼全是数据
很多时候,机器学习工程师都会专注于构建更好的模型,而不是改进构建它的数据。尽管可以通过投入足够的计算能力让模型提供令人兴奋的短期结果,但这始终不会是我们想要的目标。
首次接触项目时,必须要花费大量时间熟悉数据。因为从长远来看,熟悉这些数据在未来会将节省你更多的时间。
这并不意味着你不应该从细节着手,对于任何新数据集,你的目标应该是成为这方面的「专家」。检查分布、找到不同类型的特征、异常值、为什么它们是异常值等等此类问题。如果你无法讲出当前这些数据的故事,那又怎么让模型更好的处理这些数据呢?
探索性数据分析生命周期的示例(每次遇到新数据集时都会执行的操作)。更多关于探索性数据分析的详细介绍。
2.沟通比解决技术问题更难
我遇到的大多数障碍都不是技术性的,而是涉及到沟通问题。当然,这其中也存在技术挑战,但作为工程师解决技术难题是我们的本职工作。
但永远不要低估内部和外部沟通的重要性。没有什么比技术选型错误更糟的了,因为这是要解决错误的技术挑战。到底什么情况会出现这样的情况呢?
从外部来看,这是因为客户所追求的与我们可以提供的东西之间的不匹配。而在内部,因为很多人都身兼数职,所以很难确保每个人都可以全身贯注于一件事情。
碰到这些问题时到底如何解决呢?
对于外部问题,我们只能不断的与客户沟通。你的客户是否了解你可以提供的服务?你了解你的客户的需求吗?他们是否了解机器学习可以提供什么以及它不能提供什么?怎么样才能更有效的传达你的想法?
对于内部问题,你可以根据我们使用解决问题的软件工具的数量来判断内部通信有多难:Asana,Jira,Trello,Slack,Basecamp,Monday,Microsoft Teams。我找到的最有效的方法之一是在一天结束时在相关项目频道中进行简单的消息更新。
它完美吗?不,但似乎有效。它给了我一个机会来反思我做了什么,并告诉大家我接下来的什么工作需要谁的支持,甚至可以从大家那里得到建议。
无论你是多么优秀的工程师,你维持和获得新业务的能力都与你沟通的技能能力有关。
3.稳定性>最先进的技术
现在有一个自然语言问题:将文本分类到不同的类别,目标是让用户将一段文本发送到服务并将其自动分类为两个类别之一。如果模型对预测没有信心,请将文本传递给人类分类器,每天的负载约为1000-3000个请求。
BERT虽然在最近一年很火。但是,如果没有谷歌那样规模的计算,用BERT训练模型来解决我们想要解决的问题时还是很复杂的,因为在投入生产之前,我们需要修改很多内容。相反,我们使用了另一种方法ULMFiT,尽管它不是最先进的,但仍然可以得到令人满意的结果,并且更容易使用。
4.机器学习初学者最常见的两个坑
将机器学习运用到实际生产中存在两个坑:一是从课程工作到项目工作的差距,二是从笔记本中的模型到生产模型(模型部署)的差距。
我在互联网上学习机器学习课程,以此来完成自己的AI硕士学位。但即使在完成了许多最好的课程之后,当我开始担任机器学习工程师时,我发现我的技能是建立在课程的结构化主干上,而项目并没有课程那样井井有条。
我缺乏很多在课程中无法学到的具体的知识,例如:如何质疑数据,探索什么数据与利用什么数据。
如何弥补这个缺陷呢?我很幸运能够成为澳大利亚最优秀的人才,但我也愿意学习并愿意做错。当然,错误不是目标,但为了正确,你必须弄清楚什么是错的。
如果你正在通过一门课程学习机器学习,那么继续学习这门课程,不过你需要通过自己的项目来学习你正在学习的知识,从而弥补课程中的不足。
至于如何进行部署?在这点上我仍然做的不是很好。还好我注意到了一种趋势:机器学习工程和软件工程正在融合。通过像Seldon,Kubeflow和Kubernetes这样的服务,很快机器学习将成为堆栈的另一部分。在Jupyter中构建模型是很简单的,但是如何让数千甚至数百万人使用该模型?这才是机器学习工程师应该思考的事情,这也是机器学习创造价值的前提。但是,根据最近在Cloud Native活动上的讨论情况来看,大公司以外的人并不知道如何做到这一点。
5. 20%的时间
20%的时间,这意味着我们20%的时间都花在了学习上。客观意义上,学习是一个松散的术语,只要是关于机器学习的都可以纳入到学习范畴内,相关业务也要不断的学习,作为机器学习工程师,懂业务可以极大的提高你的工作效率。
如果你的业务优势在于你现在所做的最好,那么未来的业务取决于你继续做你最擅长的事情,这意味着需要不断学习。
6.十分之一的论文值得阅读,但少用
这是一个粗略的指标。但是,探索任何数据集或者模型时,你很快就会发现这个规律是普遍存在的。换句话说,在每年数以千计的提交中,你可能会得到10篇开创性的论文。在这10篇开创性的论文中,有5篇可能来自于同一所研究所或者个人。
你无法跟上每一个新的突破,但可以在基本原则的坚实基础应用它们,这些基本原则经受住了时间的考验。
接下来是探索与开发的问题。
7. 成为你自己最大的质疑者
探索与开发问题是尝试新事物和已经发挥作用事物之间的两难选择,你可以通过成为自己最大的怀疑者来处理这些问题。不断的向自己提问,选择这些取代旧的可以带来哪些好处?
开发
一般来说,运行你已经使用过的模型并获得高精度数字很容易,然后可以将其作为新基准报告给团队。但是如果你得到了一个好的结果,记得检查你的工作,并再次让你的团队也这样做。因为你是一名工程师,你应该有这样的意识。
探索
20%的时间花费在探索上是一个不错的决定,但是如果是70/20/10可能会更好。这意味着你需要在核心产品上花费70%的时间,在核心产品的二次开发上花费20%,在moonshots(未来要用的事情)上花费10%,虽然这些东西可能不会立即起作用。说起来很惭愧,我从来没有在我的角色中练习这个,但这是我正朝着这个方向发展的。
8.“玩具问题”非常有用
玩具问题可以帮你理解很多问题,特别是帮助解决一个复杂的问题。首先先建立一个简单的问题,它可能是关于你的数据或不相关数据集的一小部分。找出这个问题的解决方法,然后把他扩展到整个数据集中。在一个小团队中,处理问题的诀窍是抽象问题,然后理出头绪解决。
9.橡皮鸭
如果你遇到问题,坐下来盯着代码可能会解决问题,可能不会。这时,如果同你的同事探讨一下,假装他们是你的橡皮鸭,那么问题可能很容易就被解决了。
“Ron,我正在尝试遍历这个数组,并在循环通过另一个数组并跟踪状态,然后我想将这些状态组合成一个元组列表。”
“循环中的循环?你为什么不把它矢量化呢?“
“我能这样做吗?”
“让我们来尝试下吧。”
10.从0开始构建的模型数量正在下降
这与机器学习工程与软件工程正在融合有关。
除非你的数据问题非常具体,否则许多问题非常相似,分类、回归、时间序列预测、建议。
谷歌和微软的AutoML等服务正在为每个可以上传数据集并选择目标变量的人提供世界一流的机器学习。在面向开发人员方面,有像fast.ai这样的库,它们可以在几行代码中提供最先进的模型,以及各种模型动画(一组预先构建的模型),如PyTorch hub和TensorFlow集线器提供相同的功能。
这意味着我们不需要了解数据科学和机器学习的更深层次原理,只需要知道他们的基本原理即可,我们应该更关心如何将它们应用到实际问题中去创造价值。
11.数学还是代码?
对于我所处理的客户问题,我们都是代码优先,而且所有的机器学习和数据科学代码都是Python。有时我会通过阅读论文并复现它来涉足数学,但是现有的框架大都包含了数学。这并不是说数学是不必要的,毕竟机器学习和深度学习都是应用数学的形式。
掌握最小矩阵的操作、一些线性代数和微积分,特别是链式法则足以成为一个机器学习从业者。
请记住,大多数时候或者大多数从业者的目标不是发明一种新的机器学习算法,而是向客户展示潜在的机器学习对他们的业务有没有帮助。
12.你去年所做的工作明年可能会无效
这是大趋势,因为软件工程和机器学习工程的融合,这种情况正在变得越来越明显。
但这也是你进入这个行业的原因,框架将发生变化,各种实用库将发生变化,但基础统计数据、概率学、数学、这些事情都是不变的。最大的挑战仍然是:如何应用它们创造价值。
现在怎么办?机器学习工程师的成长道路上应该还有很多坑需要去探,如果你是一个新手,先掌握这12条就足够了。
以上是关于大数据和人工智能工程上的一些点的主要内容,如果未能解决你的问题,请参考以下文章