前不久,不少人被一段机器人后空翻的视频刷屏了。视频中,双足人形机器人阿特拉斯又是走“梅花桩”,又是秀后空翻,完成了一段精彩绝伦的体操表演。
超强机器人出现!分分钟被 AI 惊呆…
要知道阿特拉斯在 2014 年的时候仅仅能够单腿站立。
在 2016 年就可以随主人一起去踏雪了。
而到今年,他已经可以完成后空翻了。
而这一切都需要依靠 AI(人工智能)技术来完成的。
人工智能到底有多火?
近日,一份 2018 届互联网校招高薪清单在网络上流传,引发众多毕业生及互联网从业者关注。
从拿到这些企业 offer 的同学反馈来看,这份清单显示的年薪水平还是比较准确的。
另外,今年互联网企业中研究深度学习、机器学习、人工智能等岗位比较火热,在他们看来,校招年薪 25 万人民币只是白菜价。
其中,谷歌中国的人工智能岗位年薪最高,达 56 万元人民币,其次是微软的算法工程师岗位,年薪 51 万,第三是谷歌的算法工程师岗位,年薪 50 万,排在第四、第五的是腾讯公司的基础应用研究(SSP)岗位和腾讯云后台研发工程师岗位,年薪分别是 45-50 万、32.4 万。整体来看,算法工程师岗位最吃香。
看完校招,再来看下最新出炉的 2018 年薪酬指南!人工智能行业工资涨幅最高,如下图:
人工智能到底有多火?从上面可见一斑!无人驾驶汽车、无人超市、机器人伴侣......人工智能来得比我们预计要快很多。
以后会有很多工作岗位即将被机器人替代。比如: 客服人员、收银员、汽车驾驶员、翻译、会计甚至部分程序员。
AI 让程序员既兴奋又害怕
让 AI 自动编程是人工智能领域长久以来的梦想之一。前不久,来自彭博和英特尔实验室的两位研究人员,号称实现了首个能够自动生成完整软件程序的 AI 系统“AI Programmer”。
这个“AI 程序员”利用遗传算法和图灵完备语言,开发的程序理论上能够完成任何类型的任务。AI 自动编程的时代,大幕已开。
随后,谷歌 AutoML 系统也出产了一系列机器学习代码,其效率甚至比研究人员自身还要高。
显然,这是对“人类优越论”的又一次打击,因为机器人“学生”们已经成为了“自我复制”的大师。所以,未来将会有一大批低段位的程序员被下岗。
刚刚,Stack Overflow 年度开发者报告发布。这次,全球共有十万名程序员参与了这个一年一度的大调查,最终形成 2018 年度报告。
在这个报告中,详实反映了开发者们的学习、工作和生活。这份报告共分为六大部分,包括几十个不同类型的问题,下面主要列出关于人工智能的部分:
TensorFlow 荣登程序员最爱框架
开发者不怕编程自动化
AI 让程序员既兴奋又害怕
机器学习框架在开发者们心目中形象不错,TensorFlow 荣登程序员最爱榜榜首,有 73.5% 正在用它的程序员表示还想继续用,Torch/PyTorch 排在第 3 名,68% 用户打算继续用下去。
程序员对 AI 是什么态度?随着机器学习越来越热,投身其中的程序员越来越多,今年的调查增加了一些新题目,比如说对人工智能的看法、编程中的道德问题等等。
对于工作越来越自动化这件事,程序员们是不太怕的,只有 19.8% 的人认为这很危险,而认为工作自动化 exciting 的多达 40.8%。
程序员们最担心的,是让算法做重要的决定,28.6% 的人都认为这有点危险,但同时也有 23.5% 的人认为非常 exciting。另外,23.5% 的人担心 AI 和人类决策对公平性的影响。
担心公平问题的,和担心AI超越人类的完全是两拨不同的程序员。从调查结果来看,数据科学家、机器学习从业者、工程主管、学术圈的人、产品负责人等更担心公平性,而移动开发者、设计师更担心 AI 超越人类。
那么,如果 AI 真出了什么问题,应该谁负责呢?
47.8% 的程序员认为,自己的孩子自己管,开发者或者创造了这个 AI 的人应该负责,也有 27.9% 的人认为责任在于政府或者监管机构。对于人工智能的未来,开发者们基本是乐观的。
72.8% 的程序员对 AI 带来种种可能性的激动,要大于对危险的担心。当然,还有 8.2% 洒脱的程序员表示根本不在乎,完全没想过。
人工智能大火,程序员该如何入门?
据调查显示,2017 年,AI 工程师平均年薪为 34 万元,接近 IT 工程技术类的两倍,而有 10 年以上经验的 AI 工程师,年薪高达 140 万元,而 IT 工程师还不到 55 万元。
业内人士表示,由于人才匮乏,人工智能工程师的年薪水涨船高。博士毕业进入企业,起薪或可高达百万元,“否则根本留不住人”。而且,即便这样的人也很难“上手就用”,都要在公司经过数月至一年的专业培训。
如此火爆的人工智能专业,到底是学什么的?人工智能的三个基础点:
算法,包括深度学习
大数据,这是人工智能的支撑
运算能力和硬件
人工智能行业到底缺少什么样的人才?主要缺四个方面的人才:
逻辑算法方面的人才,做底层技术算法研究。
基于一些核心技术平台如人脸识别、语音识别等线上云端能够使用的人才,基于平台开发的人才。
大数据人才,人工智能产品基本都涉及数据分析、处理。
人工智能硬件产品人才,对新的终端产品有所了解,比如机器人、手机等。
要说现在最处于风口浪尖的行业非人工智能莫属。科技龙头企业纷纷将人工智能纳入自己的扩张版图,积极部署人工智能实验室,科研成果落地为产品的时间大大缩短。
但现在无论是大型科技企业,还是初创公司都面临一个窘境:AI 人才极度紧缺。全球 AI 领域人才约 30 万,而市场需求在百万量级。其中,高校领域约 10 万人,产业界约 20 万人,远远不能满足市场对人才的需求。
客观来说,深度学习是近年来人工智能领域最令人瞩目的方向之一,学术界和工业界近年来运用深度学习技术逐渐在语音识别、图像识别、自然语言处理等领域均获得重大突破性进展。
深度学习也因此成为了炙手可热的高薪职位。
已有不少人嗅到了深度学习带来的大量机遇,开始转向人工智能领域。
随着机器学习在生活中越来越广泛得被应用在各个领域,比如:
资讯类 App,每日的消息推送都是我们自己喜欢且关注的内容(人工智能的学习和记忆)。
百度搜索结果的排序推送是基于用户历史的点击数据,会更多地推送个人喜欢或认为正确的结果。
百度广告根据每个人喜好去最大化点击的概率。
美图秀秀根据用户储存的自动美化后的照片来优化算法。
滴滴帮助司机选择路线、规划车辆调度方案。
未来的自动驾驶技术重新定义智能出行、智能城市。
App 背后的判断、预测、抉择、分类。
当前发展比较热门的应用,语音识别、自然语言理解、知识图谱、个性推荐、个性化排序各种领域的进步。
越来越多的程序员加入 AI 领域,那么入行 AI 领域需要哪些技能呢?肯定你们也听到了,人工智能、机器学习、深度学习这样的关键词,它们之间的关系是什么?
从图上可以看到,人工智能是一个很大的概念,机器学习是其中一个子集,而深度学习又是机器学习里的一种。
什么是机器学习(Machine Learning,ML)?深度学习的基础是机器学习,事实上深度学习只是机器学习的一个分支。
因此我们要入门深度学习就要先了解一些机器学习的基础知识。机器学习最基本的做法,是使用算法来解析数据、从中学习,然后对真实世界中的事件做出决策和预测。
与传统的为解决特定任务、硬编码的软件程序不同,机器学习是用大量的数据来“训练”,通过各种算法从数据中学习如何完成任务。
有人曾举过一个例子,很形象生动,当你使用手机的语音识别进行唤醒时,有没有想过实现这一功能的全部内部流程呢?
我们日常交互的大部分计算机程序,都可以使用最基本的命令来实现,但是基于机器学习的程序却没有那么简单,想象下如何写一个程序来回应唤醒词,例如“Okay,Google”,“Siri”,和“Alexa”。
如果在一个只有你自己和代码编辑器的房间里,仅使用最基本的指令编写这个程序,你该怎么做?不妨思考一下……这个问题非常困难。
你可能会想象下面的程序:
ifinput_command=='Okey,Google':
run_voice_assistant()
但实际上,你能拿到的只有麦克风里采集到的原始语音信号,可能是每秒 44,000 个样本点。
怎样才能识别出语音内容?或者简单点,判断这些信号中是否包含唤醒词。
如果你被这个问题难住了,不用担心。这就是我们为什么需要机器学习。
虽然我们不知道怎么告诉机器去把语音信号转成对应的字符串,但我们自己可以。
换句话说,就算你不清楚怎么编写程序,好让机器识别出唤醒词“Alexa”,你自己完全能够识别出“Alexa”这个词。
由此,我们可以收集一个巨大的数据集(dataset),里面包含了大量语音信号,以及每个语音信号是否对应我们需要的唤醒词。
使用机器学习的解决方式,我们并非直接设计一个系统去准确地辨别唤醒词,而是写一个灵活的程序,并带有大量的参数(parameters)。通过调整这些参数,我们能够改变程序的行为。
我们将这样的程序称为模型。总体上看,我们的模型仅仅是一个机器,通过某种方式,将输入转换为输出。
在上面的例子中,这个模型的输入是一段语音信号,它的输出则是一个回答{yes, no},告诉我们这段语音信号是否包含了唤醒词。
如果我们选择了正确的模型,必然有一组参数设定,每当它听见“Alexa”时,都能触发 yes 的回答;也会有另一组参数,针对“Apricot”触发 yes。
我们希望这个模型既可以辨别“Alexa”,也可以辨别“Apricot”,因为它们是类似的任务。
这时候你大概能猜到了,如果我们随机地设定这些参数,模型可能无法辨别“Alexa”,“Apricot”,甚至任何英文单词。而在大多数的深度学习中,学习就是在训练过程中更新模型的行为(通过调整参数)。
换言之,我们需要用数据训练机器学习模型,其过程通常如下:
初始化一个几乎什么也不能做的模型。
抓一些有标注的数据集(例如音频段落及其是否为唤醒词的标注)。
修改模型使得它在抓取的数据集上能够更准确执行任务。
重复以上步骤 2 和 3,直到模型看起来不错。
什么是机器学习算法?从本质上讲,机器学习采用了可以从数据中学习和预测数据的算法。这些算法通常来自于统计学,从简单的回归算法到决策树等等。
什么是机器学习模型?一般来说,它是指在训练机器学习算法后创建的模型构件。一旦有了一个经过训练的机器学习模型,你就可以用它来根据新的输入进行预测。机器学习的目的是正确训练机器学习算法来创建这样的模型。
机器学习已广泛应用于数据挖掘、计算机视觉、自然语言处理、生物特征识别、搜索引擎、医学诊断、检测信用卡欺诈、证券市场分析、DNA 序列测序、语音和手写识别、战略游戏和机器人等领域。
虽然深度学习技术的发展,也促进了语音和文本领域的发展,但变化最显著的还是属于计算机视觉领域。
这里不深入介绍语音和自然语言处理领域的过多细节,就简要介绍下计算机视觉领域的技术发展和相关的应用,后续的实验环节,大部分也会是基于深度学习的图像应用为主。
机器学习四要素:针对识别唤醒语的任务,我们将语音片段和标注(label)放在一起组成数据集。
接着我们训练一个机器学习模型,给定一段语音,预测它的标注。这种给定样例预测标注的方式,仅仅是机器学习的一种,称为监督学习。
成功的机器学习有四个要素:数据、转换数据的模型、衡量模型好坏的损失函数和一个调整模型权重来最小化损失函数的算法。
数据(Data)
越多越好。事实上,数据是深度学习复兴的核心,因为复杂的非线性模型比其他机器学习需要更多的数据。
模型(Models)
通常,我们拿到的数据和最终想要的结果相差甚远。例如,想知道照片中的人是不是开心,我们希望有一个模型,能将成千上万的低级特征(像素值),转化为高度抽象的输出(开心程度)。
选择正确模型并不简单,不同的模型适合不同的数据集。这里我们会主要聚焦于深度神经网络模型。
这些模型包含了自上而下联结的数据多层连续变换,因此称之为深度学习。在讨论深度神经网络之前,我们也会讨论一些简单、浅显的模型。
损失函数(Loss Functions)
我们需要对比模型的输出和真实值之间的误差。损失函数可以衡量输出结果对比真实数据的好坏。
例如,我们训练了一个基于图片预测病人心率的模型。如果模型预测某个病人的心率是 100bpm,而实际上仅有 60bpm,这时候,我们就需要某个方法来提点一下这个的模型了。
类似的,一个模型通过给电子邮件打分来预测是不是垃圾邮件,我们同样需要某个方法判断模型的结果是否准确。
典型的机器学习过程包括将损失函数最小化。通常,模型包含很多参数。我们通过最小化损失函数来“学习”这些参数。
可惜,将损失降到最小,并不能保证我们的模型在遇到(未见过的)测试数据时表现良好。
由此,我们需要跟踪两项数据:
训练误差(training error):这是模型在用于训练的数据集上的误差。类似于考试前我们在模拟试卷上拿到的分数。有一定的指向性,但不一定保证真实考试分数。
测试误差(test error):这是模型在没见过的新数据上的误差,可能会跟训练误差很不一样(统计上称之为过拟合)。类似于考前模考次次拿高分,但实际考起来却失误了。
优化算法(Optimization Algorithms)。
最后,我们需要算法来通盘考虑模型本身和损失函数,对参数进行搜索,从而逐渐最小化损失。最常见的神经网络优化使用梯度下降法作为优化算法。
简单地说,轻微地改动参数,观察训练集的损失将如何移动。然后将参数向减小损失的方向调整。
什么是深度学习?这是机器学习的一个子领域,近年来表现出了很大的潜力。它涉及到大脑中神经元结构和功能的算法。
Andrew Ng 曾用下图对比说明传统机器学习算法和深度学习算法的特点。从图中可以看出,随着数据的增多,到达一定量后,深度学习算法的表现会明显优于传统的机器学习算法。
深度学习中最令人激动的特性之一就是它在特征学习上的表现。该算法在从原始数据中检测特征方面表现地特别好。
有一个很好的例子,就是通过深度学习技术来识别汽车图片中的车轮。下图说明了典型机器学习与深度学习之间的区别:
在机器学习中特征选择部分一般需要人的先验知识的介入来设计好的特征提取方法。
比如人知道轮子一般是圆的,一般出现在交通工具上,有轮胎、轮毂等部件,基于先验知识,人可以选取适合提取轮子特征的方法,再设计分类器以识别轮子。
而深度学习通常由多个层组成。它们通常将更简单的模型组合在一起,通过将数据从一层传递到另一层来构建更复杂的模型。
通过大量数据的训练自动得到一个能识别轮子的模型,不需要人工设计特征提取环节。这是深度学习随着数据量的增加而优于其他学习算法的主要原因之一。
随着深度学习的发展,为了方便算法人员训练模型,调整参数等,很多公司开源了优秀的深度学习框架,到目前为止,主要的深度学习框架如下图所示:
目前工业界用的比较多的是 Caffe 和 TensorFlow,Caffe 主要在计算机视觉上用的较多,TensorFlow 由谷歌开源,相关文档较好,适用范围广,基于 Python 语音,入门简单,建议新手入门可以选择 TensorFlow。
面对不同程序员,下面有两种不同的人工智能入门路径:
路径一:一步一个脚印,扎扎实实从基础学起,逐步提高学习难度
Step1:了解行业资讯,先来一波科普
所以在学习人工智能之前,你先了解一下行业的相关资讯,对这个行业有一个基本的认识,那么接下来你要准备学习了。
Step2:务实基础—高数+Python 来当道
机器学习里面涉及了很多算法,而这些算法又是数学推导出来,所以你要理解算法,就需要先学习一部分高数知识。
不管是你在机器里面编辑一个算法还是应用算法,你都需要通过写程序来和机器进行对话,那么你需要编程,假如你的造诣比较高,可以用 C 语言。
如果你是转行过来或者以前没有编程基础,那么学习 Python 会不错,因为 Python 语言相对比较简单。
Step3:机器学习算法+实践
掌握以上基础以后,就要开始学习机器学习的算法,并通过案例实践来加深理解和掌握。
还有很多机器学习的小案例等着你来挑战,前面掌握的好,后面当然轻松很多,步入深度学习。
Step4:深度学习
深度学习需要机器大量的经过标注的数据来训练模型,所以你要掌握一些数据挖掘和数据分析的技能,然后你再用来训练模式。
在这里你可能会有疑问,据说深度学习,好像有很多神经网络,看着好复杂,编辑这些神经网络那不是太难了,你大可放心,谷歌、亚马逊、微软等大公司已经把这些神经网络模型封装在他们各自的框架里面了,你只需要调用就可以了。
Step5:行业大型项目实践
当你学习完深度学习,此时你就可以自己动手训练一个小模型了。有条件的话,从一个项目的前期数据挖掘,到中间模型训练,并做出一个有意思的原型,就能把一整套的流程跑通,那么恭喜你,你已经具备人工智能初级工程师的水准了。
为了方便理解,我列举了学习课程的大纲:
人工智能基础 — 高等数学必知必会
数据分析(就是高数):
常数 e
导数
梯度
Taylor
gini 系数
信息熵与组合数
梯度下降
牛顿法
概率论:
微积分与逼近论
极限、微分、积分基本概念
利用逼近的思想理解微分,利用积分的方式理解概率
概率论基础
古典模型
常见概率分布
大数定理和中心极限定理
协方差(矩阵)和相关系数
最大似然估计和最大后验估计
线性代数及矩:
线性空间及线性变换
矩阵的基本概念
状态转移矩阵
特征向量
矩阵的相关乘法
矩阵的 QR 分解
对称矩阵、正交矩阵、正定矩阵
矩阵的 SVD 分解
矩阵的求导
矩阵映射/投影
凸优化(看不懂不要紧,掌握基础即可):
凸优化基本概念
凸集
凸函数
凸优化问题标准形式
凸优化之 Lagerange 对偶化
凸优化之牛顿法、梯度下降法求解
人工智能基础-Python 入门及实践课程
Python 快速入门
科学计算库 Numpy
数据分析处理库 Pandas
可视化库 Matplotlib
更简单的可视化 Seaborn
人工智能提升 — Python 项目
Python 爬虫项目
机器学习基础入门-算法讲解
线性回归算法
梯度下降原理
逻辑回归算法
案例实战:Python 实现逻辑回归
案例实战:对比不同梯度下降策略
案例实战:Python 分析科比生涯数据
案例实战:信用卡欺诈检测
决策树构造原理
案例实战:决策树构造实例
随机森林与集成算法
案例实战:泰坦尼克号获救预测
贝叶斯算法推导
案例实战:新闻分类任务
Kmeans 聚类及其可视化展示
DBSCAN 聚类及其可视化展示
案例实战:聚类实践
降维算法:线性判别分析
案例实战:Python 实现线性判别分析
降维算法:PCA 主成分分析
案例实战:Python 实现 PCA 算法
机器学习进阶提升-项目演练
EM 算法原理推导
GMM 聚类实践
推荐系统
案例实战:Python 实战推荐系统
支持向量机原理推导
案例实战:SVM 实例
时间序列 ARIMA 模型
案例实战:时间序列预测任务
Xgbooost 提升算法
案例实战:Xgboost 调参实战
计算机视觉挑战
神经网络必备基础
神经网络整体架构
案例实战:CIFAR 图像分类任务
语言模型
自然语言处理-word2vec
案例实战:Gensim 词向量模型
案例实战:word2vec 分类任务
探索性数据分析:赛事数据集
探索性数据分析:农粮组织数据集
深度学习基础
计算机视觉-卷积神经网络
三代物体检测框架
卷积神经网络基本原理
卷积参数详解
案例实战 CNN 网络
网络模型训练技巧
经典网络架构与物体检测任务
深度学习框架 Tensorflow 基本操作
Tensorflow 框架构造回归模型
Tensorflow 神经网络模型
Tensorflow 构建 CNN 网络
Tensorflow 构建 RNN 网络
Tensorflow 加载训练好的模型
深度学习项目实战-验证码识别
深度学习框架 Caffe 网络配置
Caffe 制作数据源
Caffe 框架小技巧
Caffe 框架常用工具
深度学习项目演练
项目演练:人脸检测数据源制作与网络训练(基于 Caffe)
项目演练:实现人脸检测(基于 Caffe)
项目演练:关键点检测第一阶段网络训练(基于 Caffe)
项目演练:关键点检测第二阶段模型实现(基于 Caffe)
项目演练:对抗生成网络(基于 Tensorflow)
项目演练:LSTM 情感分析(基于 Tensorflow)
项目演练:机器人写唐诗(基于 Tensorflow)
项目演练:文本分类任务解读与环境配置
项目演练:文本分类实战(基于 Tensorflow)
项目演练:强化学习基础(基于 Tensorflow)
项目演练:DQN 让 AI 自己玩游戏(基于 Tensorflow)
人工智能综合项目实战
语音识别、人脸识别
电商网站数据挖掘及推荐算法
金融 P2P 平台的智能投资顾问
自动驾驶技术
医疗行业疾病诊断监测
教育行业智能学习系统
路径二、如果你希望快速学习完进行项目实践,请直接学习深度学习(哪里不懂,单独学习不懂的地方就可以了)
最后推荐一份知识图谱,让大家了解人工智能深渊: