这是参加原力计划单独投稿的,是我专栏文章的part 2​​​​​​​


2. 机器学习,到底在学些什么?

2.1 什么是学习?

根据定义,学习是从有限的例子中,找出问题和答案之间规律的一个过程,而所找出的规律叫做知识,而知识,在我们的意识层面上叫做知识,但在数学层面,它的名字叫做模型

2.2 什么是机器学习?

经过千万年的进化,人类已经可以熟练利用大脑神经元所组成的生物记忆网络,将感官收集到的信号,如图像、物体、声音、文字,通过长短期的记忆机制进行保存。

通过这些信息,大脑会推演出下一个类似情况、问题发生时,我们该做出的反应。这些反应有先天的,比如面对狮子时,我们的祖先遗留下来的对死亡的基因恐惧,驱使大脑发出逃离的指令

也有后天形成的,比如一朝被蛇咬,十年怕井绳

而对于机器来说,它跳过了进化这一步,目前的水平也远无法还原基因层面的学习模式,因此后天的学习,是机器知识形成的唯一方法。具体来讲,就是利用可搜集的有限数据,依托于以图灵机为原型的计算机(像人脑一样,主要是有记忆功能和计算功能)训练模型,并再应用到同一领域的未知问题,或迁移到不同领域的未知问题。我们常说学习要举一反三,但严格来说,只有举一反三才叫学习。

唯一的区别是,人脑的学习是抽象的,模糊的,输入往往是原生的图片、文字形式,而对于计算机来说,一切都被拆解和映射为数字、向量、矩阵的形式。

2.3 和编程算法有什么不同?

以上引用了知乎上于建国博士的两个观点。以计算机程序为例,为了更进一步说明机器学习系统和普通算法程序的区别,首先明确一个概念,即:输入和输出的可能情况并非只有一个,往往是无数个。

我们常说的算法,其实是一个抽象的概念,泛指解决一类问题的范式结构,比如二元一次方程组就是一类算法,快速排序也是一种算法,我称之为编程算法,一般用来解决计算机科学或数学领域的特定问题,具有很强的预设条件以及输入限制,基本的排序算法只能用来给数字排序,如果要给字母、集合排序,则需要大幅度改写。而机器学习算法的功能,就像莱布尼茨说过的

“没有两片树叶是一模一样的,但我们却可以认识所有的树叶。”

归纳到数学层面,若把所有的树叶(元素)归到一个集合中,用这个集合来表示一类事物,输入是这一类事物中的任意一个。也正是由于这种任意性,输入也被称为变量,输出同理也是变量。

回到编程算法上来,如果我们把每个图像和这个图像是否是树叶记录下来,通过以下程序:

if 符合树叶的特征
then 又认识一个新的树叶
else这不是树叶

那么,哪怕是当今最大的分布式集群,和最快的超级计算机,也无法在可接受的时间内查找和存储这些多的信息,更不要说去泛化到相应的知识(模型)。这恰恰是原有的计算机程序所办不到的事情,因为它们没有办法仅通过演示几个例子就能让计算机搞清楚其他没有演示过的情况,也就是学习能力。

又比如,一个由编程算法所编写的自动驾驶系统会告诉汽车,如果红灯亮,就停车,如果转弯时遇到直行,就避让。依靠事先编好的一条条程序完成自动驾驶。结果你可能想到了,人们无法穷尽所有的路况和场景,这种「专家系统」遇到复杂情况时根本不会处理,因为人没教过。

曾经,计算机所执行的指令都是人类所学到的知识。如今的人工智能所产生的突破并非有了意识,而是能够让计算机自己来从有限的例子中学到知识,然后将学到的知识用于今后的预测中。

如果说,机器学习属于人工智能的范畴,那么,人工智能又来自哪里?答案是来自数学和逻辑学。通过数学形式化的推演,程序不再是简简单单的只会记忆和输出的逻辑范式,而是拥有了类似人脑的学习能力,可以通过有限的数据,学习到对应的知识,来解决未曾遇到的问题。

这,就是机器学习。

3. 为什么要学习算法?

很多人可能认为只有算法工程师需要学习机器学习算法,这句话只说对了一半。

21世纪是一个人工智能主导的时代,以后的很多岗位,即使不被Ai替代,也会需要Ai辅助,比如图像诊断、自动驾考、天眼识别,对应了传统的医生、驾校教练和警察的部分功能。对于想转行算法工程师的同学,学习算法是一件自然而然的事,不但要学,还要精。

对于非转行,只是想了解机器学习算法的同学,如果满足前文所提到的6个学习条件之一,那么也是可以投入一定时间和精力来读一读这篇专栏的。互联网中AI相关的岗位也并不只是算法工程师一职,同时也需要AI系统开发,AI产品,AI设计,AI运维等。世事难料,可能未来某一天,你所从事的工作有一天会成为人工智能范畴下的热门工种,做好准备,是迎接机会的最好方式~

这看上去是个老生常谈的问题,大家跟我一样,平时也听过太多培训机构的吹嘘,但实际上我部分认同他们说的话,即,AI真的很重要,python也真的很重要。机构们唯一的问题就是揠苗助长,随处可见的“三个月精通人工智能”,殊不知编程和算法都是体系化的学习过程,从来都没有速成这一说法。对于任何有着一定理科基础的大学生,填鸭式的教育培训出来的东西,自学未必学不到,甚至能学的更深更多,且此类课程少则几千多则上万,合同中退课的条款又有诸多限制,风险和投入都过大。

回到我们本来的话题上来:我们为什么要学习算法?答案其实很简单

  • 目的1,也是主要目的:待遇。算法工程师的工资很高,不低于开发岗,甚至部分大厂的薪资会超出同级的开发岗
  • 目的2,也是本质目的:兴趣。这和目的1并不冲突,有人说谈兴趣不免虚伪,其实不然。真正的兴趣应该是在接触后也长久的保持热情,这意味着你必须要有与之相对应的收入,这才是一个具有较长半衰期的正反馈。

4. 学习准备

对于机器学习算法的学习,有非常多的工具和语言可用,为了方便讲解和学习,这里推荐大家安装以下几个工具:

4.1 Python

Python 作为一个近年备受好评的语言,它的一些优点让人无法忽视。Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。它的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。Python 是一种解释型语言: 这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。

Python 还是交互式语言: 这意味着,可以在一个Python提示符,直接互动执行写程序。它 是面向对象语言: 这意味着Python支持面向对象的风格或代码封装在对象的编程技术。优点如此的多最终我选择了它。

关于python版本的选择,我以前的一篇博客提到过,大家可以参考:

Python2和Python3的区别,以及为什么选Python3的原因

此外,CSDN上浪导的python入门教程也非常棒,推荐没有编程基础或较弱的同学阅读

跟“风云卫星”数据工程师学Python

PS. 安装推荐使用Anaconda集成环境,里面的环境是自动搭建好的,也有Jupyter和Spyder的IDE可用,是数据科学利器

4.2 python库、包

4.2.1 Scikit-learn

网上有很多关于sklearn的学习教程,大部分都是简单的讲清楚某一方面,其实最好的教程就是官方文档。

官方文档地址:scikit-learn: machine learning in Python — scikit-learn 1.1.2 documentation

自2007年发布以来,scikit-learn已经成为Python重要的机器学习库了,scikit-learn简称sklearn,支持包括分类,回归,降维和聚类四大机器学习算法。还包括了特征提取,数据处理和模型评估者三大模块。

  sklearn是Scipy的扩展,建立在Numpy和matplolib库的基础上。利用这几大模块的优势,可以大大的提高机器学习的效率。sklearn拥有着完善的文档,上手容易,具有着丰富的API,在学术界颇受欢迎。sklearn已经封装了大量的机器学习算法,包括LIBSVM和LIBINEAR。同时sklearn内置了大量数据集,节省了获取和整理数据集的时间。

4.2.2 Numpy

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

NumPy 的前身 Numeric 最早是由 Jim Hugunin 与其它协作者共同开发,2005 年,Travis Oliphant 在 Numeric 中结合了另一个同性质的程序库 Numarray 的特色,并加入了其它扩展而开发了 NumPy。NumPy 为开放源代码并且由许多协作者共同维护开发。NumPy 也是一个运行速度非常快的数学库,主要用于数组计算,包含:

  • 一个强大的N维数组对象 ndarray
  • 广播功能函数
  • 整合 C/C++/Fortran 代码的工具
  • 线性代数、傅里叶变换、随机数生成等功能

4.2.3 Tensorflow

任何曾经试图在 Python 中只利用 NumPy 编写神经网络代码的人都知道那是多么麻烦。编写一个简单的一层前馈网络的代码尚且需要 40 多行代码,当增加层数时,编写代码将会更加困难,执行时间也会更长。TensorFlow 使这一切变得更加简单快捷,从而缩短了想法到部署之间的实现时间。TensorFlow是谷歌2015年开源的通用高性能计算库。最初主要是为构建神经网络(NNs)提供高性能的API。然而,随着时间的推移和机器学习(ML)社区的兴起,TensorFlow已经发展为一个完整的机器学习生态系统。

TensorFlow 是一个开源的、基于 Python 的机器学习框架,它由 Google 开发,并在图形分类、音频处理、推荐系统和自然语言处理等场景下有着丰富的应用,是目前最热门的机器学习框架。除了 Python,TensorFlow 也提供了 C/C++、Java、Go、R 等其它编程语言的接口。

谷歌 research 博客列出了全球一些使用 TensorFlow 开发的有趣项目:

  • Google 翻译运用了 TensorFlow 和 TPU(Tensor Processing Units)。
  • Project Magenta 能够使用强化学习模型生成音乐,运用了 TensorFlow。
  • 澳大利亚海洋生物学家使用了 TensorFlow 来发现和理解濒临灭绝的海牛。
  • 一位日本农民运用 TensorFlow 开发了一个应用程序,使用大小和形状等物理特性对黄瓜进行分类。

参考材料

1. YJango,知乎,学习观15.5:如果从零学习一门外语,这是最符合大脑原理的第一步。 - 知乎
2. Python机器学习笔记:sklearn库的学习
3. 李航,《统计学习方法》 清华大学出版社

「01」机器学习,到底在学些什么?相关推荐

  1. 小学计算机课教孩子们什么,小学生的信息课,到底该学些什么

    [困惑] 信息时代的信息课,该学些什么 调查中呈现的现实两面,正是陈文菊所困惑的.而计算机,又有别于其他的课程.它更需要学生去"玩".会"玩".懂得" ...

  2. 崛起的百万「团长」:到底是一份好工作,还是当炮灰?

    开始分化的「社区团长」,会是一个好职业吗? 在北京打工的宋魏,对社区团购在中老年人群中的渗透力,感到吃惊. 「我妈竟然跟我说,她打算在我爸退休之后,两人在小区整个摊位.别人买了东西就送到这儿来,一兜一 ...

  3. 将AI落地到福州、贵阳的「幕后推手」,到底在想些什么?

    2020-07-10 15:48:51 乾明 金磊 发自 凹非寺 量子位 报道 | 公众号 QbitAI 从抗击新冠肺炎的冲锋陷阵,到日常生活中的效率提升- 依图科技,正在用一次次行动,一座座城市,展 ...

  4. freecodecamp能学php吗,freeCodeCamp 学习记录——初级算法「01」翻转字符串

    从这篇开始与非将逐篇介绍在初级算法闯关中遇到的问题和记录,有疏漏和错误的地方希望大家可以帮忙指正.这里推荐一个MDN web docs网站,博客里的方法释义均来自此,点击相应位置可以获得详细释义. 问 ...

  5. 作为一个自动化本科生到底应该学些什么(讲讲个人经历和感受)

    2019.6.26日深夜 晚上在床上准备休息,一个同跟我聊天说自己大学荒废了,突然有很多感想想写一写.我觉得自己大学也是得过且过地过着的,不过虽然充满艰辛和不满意,但还是挺充实的. 先自我介绍一下,本 ...

  6. 大厂 | 入职前的「背景调查」,到底在查什么?

    互联网求职者在接受某些中大型企业面试后,时常有人接到一通电话,电话那头的声音往往如此告知求职者:「你好,我们是某第三方雇前调查机构,正在依据招聘企业的委托,对您进行背景调查.」 不少应聘者接到这通电话 ...

  7. CV十年发展之观察:1.5万篇论文透视「业界」与「学界」,到底谁更胜一筹?...

    视学算法报道 转载自:机器之心 编辑:杜伟 为了调查计算机视觉领域业界赞助的研究所占的比例,以及它们对该领域产生的影响,加拿大约克大学的一位博士生分析了 2010 至 2019 十年间 Top-5 计 ...

  8. freeCodeCamp 学习记录——初级算法「01」翻转字符串

    从这篇开始与非将逐篇介绍在初级算法闯关中遇到的问题和记录,有疏漏和错误的地方希望大家可以帮忙指正.这里推荐一个MDN web docs网站,博客里的方法释义均来自此,点击相应位置可以获得详细释义. 问 ...

  9. 知名公司入职前的「背景调查」,到底在查什么?

    点击"开发者技术前线",选择"星标????" 在看|星标|留言,  真爱 来源:100offer说 互联网求职者在接受某些中大型企业面试后,时常有人接到一通电话 ...

最新文章

  1. LeetCode 200. Number of Islands--c++ dfs解法
  2. CF932G Palindrome Partition
  3. mysql数据实时同步:Canal安装部署、kafka安装、zk安装、mysql安装、Canal Server+Canal Client HA,Canal+mysql+Kafka,相关验证(学习笔记)
  4. django-url映射给函数给默认值
  5. 2019年新款iPhone高清渲染视频来了 强迫症慎点...
  6. 计算机网络—CSMA/CA协议
  7. Python六大框架对比
  8. 开放 接口 饿了么_饿了么口碑启动生态赋能计划 将在210城开放智慧餐厅业务合作窗口...
  9. cesium 百度地图_Cesium专栏-热力图(附源码下载)
  10. node cluster 数据共享_深入理解Node.js 中的进程与线程
  11. linux常用命令 less,Linux常用基本命令(less)
  12. 如何在Win7自安装驱动
  13. 第二个Arduino小车 两轮自平衡
  14. 远程桌面管理工具源码
  15. isPrime 判断素数的函数
  16. php cdr,cdr文件用什么打开
  17. 学习Windows Phone 8开发资料汇总
  18. unity scripting backend mono vs il2cpp
  19. 算法与数据结构 - 数组详解
  20. 互联网行业中最常用的数据库——MySQL 索引、事务与存储引擎

热门文章

  1. Ubuntu16.04挂载另外一个硬盘
  2. 玩游戏时计算机ram,计算机的32G RAM是否必要? 8G,16G,32G内存游戏,生产率测量比较...
  3. Matlab用surf函数画三维曲面(详细)
  4. DZZOffice(大桌子)企业文档协同平台教程系列(一)——安装部署教程
  5. C语言-谁先倒-PTA题目
  6. 【100%通过率】华为OD机试真题 C 实现【统计友好度最大值】【2022 Q4 | 100分】
  7. element-ui 表单渲染v-if组件,验证报错
  8. 新手如何打造个人IP?
  9. python操作sharepoint对象模型
  10. 基于离散的 Jaya 算法实现柔性车间调度(Matlab代码实现)