当今的社会,每个人都为自己的工作和生活忙碌着,但在这些世俗日常以外,人工智能(AI)的概念已经日渐火热,你会突然发现,在接下来的两年内,你的技能集将会变得越来越过时。
当我关掉我的创业公司 Zeading 时,我突然猛烈地意识到了这一点,那感觉就像突然发现自己错过了非常重要的事情一样。
如今的全栈工程师将越来越不能适应未来的变化,两年之后,不具备 AI 技能就不能称之为全栈。
是时候该行动了。于是我采取了目前我认为唯一可行的办法:让我的工程师技能、产品思维模式、以及商业哲学,都变得数据驱动。
AI 与金融科技领域的著名风险投资人与意见领袖 Spiros Margaris 曾眉飞色舞地对我说道:
一般的 AI 学习建议是到 Coursera 网站上注册吴恩达(Andrew Ng)的课程。那确实是一个很好入门课程,但看的时间一长我就会昏昏欲睡。并不是说课程做的不好或者什么,只是我实在是很难集中注意力地好好听课。我的学习模式一直都是干中学,因此我想,为什么我不干脆自己动手来实现一个神经网络呢?
我并非直接就从神经网络入手,因为在那之前还有一些内容需要我去学习。我开始熟悉这个领域里面的所有名词,好融入其中。
第一个任务不是学习它,而是熟悉它。
由于我只有 Javascript 和 NodeJS 的背景而且暂时还不想切换技术栈,所以我找到了一个简单的神经网络模块“nn”并利用它实现了一个有模拟输入的“与”门。受这个教程的启发,我接着实现了这么一个功能:对任意的输入 X、Y、Z,输出 X 和 Y 的“逻辑与”结果。
var nn = require('nn')
var opts = {
layers: [ 4 ],
iterations: 300000,
errorThresh: 0.0000005,
activation: 'logistic',
learningRate: 0.4,
momentum: 0.5,
log: 100
}
var net = nn(opts)
net.train([
{ input: [ 0,0,1 ], output: [ 0 ] },
{ input: [ 0,1,1 ], output: [ 0 ] },
{ input: [ 1,0,1 ], output: [ 0 ] },
{ input: [ 0,1,0 ], output: [ 0 ] },
{ input: [ 1,0,0 ], output: [ 0 ] },
{ input: [ 1,1,1 ], output: [ 1 ] },
{ input: [ 0,0,0 ], output: [ 0 ] }
])
// 给一个新的输入,看看它的训练结果
var output = net.send([ 1,1,0])
console.log(output); //0.9971279763719718
成功了!好开心!
这是最能让我建立信心的一步。当 0.9971 的结果出现的时候,我意识到这个网络已经学会了怎么做“与”操作而且知道要忽略多余的第三个输入。
这基本就是机器学习的要点:你向系统提供一个数据集,系统以此来调整内部参数、使错误率降至最低,从而能够处理新的数据。
而后来我知道,这个方法就是梯度下降法。
在完成了我的第一个 AI 程序之后,我信心满满,并想知道作为开发者我还能用机器学习做什么事情。
我解决了几个诸如线性回归、分类之类的监督学习问题。
使用了多元线性回归以及一个非常有限的数据集去预测哪一支队伍会赢得 IPL 比赛。(虽然预测结果很不准,不过这让人感觉很酷)
试用了 Google 的机器学习云服务上的几个 demo,知道 AI 目前都能做些什么事情(Google 把这做成了 SaaS 产品真是太好了)
我偶然发现了 AI Playbook,这是一个由尊敬的风投公司 Andreessen-Horowitz 整理的非常好的学习材料。对开发者和企者来说真的是最有用的一个资料。
开始在 Youtube 上观看 Siraj Rawal 的一个关于深度学习和机器学习的很好的节目。
读了 Hacker Noon 上的这篇描述电视剧《硅谷》的制作团队如何构建 Not Hotdog 的文章。这是我们能做的深度学习中最容易让人理解的一个例子。
我还阅读了特斯拉的 AI 总监 Andrej Karpathy 的博客,尽管刚开始的时候我什么都看不懂而且还看得很头疼,但是我发现一段时间之后我开始能理解这些概念了。
我鼓起勇气开始一步步地实现几个深度学习教程样例(其实就是复制粘贴),训练模型并在本地机器上运行代码。大多数时候这个过程是很痛苦的,因为大多数模型的训练时间都很长、而且我的机器上也没有 GPU。
我逐步地把开发语言从 Javascript 转到了 Python,并在我的 Windows 机器上安装了 Tensorflow。
整个过程中我先是被动地接受知识内容,然后在解决真实用户问题的时候再在脑海里重新建立知识的关联。
正如乔布斯说的,你只有在回顾过去的时候才能把所有的点给串联起来。
我很喜欢电影《她》,所以也想做一个聊天机器人。我开始挑战这个任务,并在不到两个小时内就用 Tensorflow 完成了。在我前几天写的一篇文章里我大概介绍了这个过程以及具体的业务需求。
而幸运的是,这篇文章在 TechInAsia、CodeMentor、KDNuggets 上面都备受欢迎而且还得到了推荐。对我这个刚开始写技术博客的人来说,这真是一个非常有意义的时刻。而且这篇文章也是我的 AI 学习之旅中的一个重要的里程碑。
我因此在 Twitter 和 LinkedIn 上结识了很多朋友,我可以跟他们长久且深入地展开关于 AI 开发的讨论,如果我碰到什么问题我甚至还能向他们寻求帮助,另外我还收到了几个项目咨询的邀约。而最让人高兴的是,一些年轻的开发者和 AI 初学者开始向我咨询我是怎么开始学习 AI 的。
这些种种是促使我写下这篇文章的原因,为了让更多的人在我的经历中得到启发、然后开始他们的学习之旅。
启程是整个旅途中最具挑战性的一步。
这肯定不是一件易事。当我不能继续用 Javascript 进行下去的时候,我几乎一夜之间就转向了 Python 并学会怎么用它来编写代码。还有,有一次我想解决某支队伍能否赢得板球比赛这个问题,但发现我的数据模型无法在我的 i7 机器上训练、或者即便训练了好几个小时,得到的却是“五五开”这种毫无意义的结果。学习 AI 并不像学习一个 Web 框架。
这项技能要求你能从微观层面上理解计算是如何进行的、并找出到底是代码还是数据对输出结果影响更大。
同时 AI 也并非只有一个主题,它涵盖了从简单的回归问题到“有一天机器人会来追杀我们”等多方面内容。像其他学科一样,你在学习 AI 的过程中可能会选取一些领域深入研究,像计算机视觉、自然语言处理、或者如何统治世界(老天保佑没人会这么干)。
一位有名的 AI、金融科技以及密码学领域的引领者、来自 Atlantis Capital 的 Gaurav Sharma 在某次谈话中跟我说:
你不得不沉醉于电脑如何学会自己工作这个事情,坚持耐心与好奇心这两个基本原则。
这将是一个很长、很长的旅程,非常辛苦,非常恼人,而且还特别的费时间。
但好消息是,千里之行,仅仅始于足下。
查看英文原文:https://hackernoon.com/how-i-started-with-learning-ai-in-the-last-2-months-251d19b23597
点击下方图片即可阅读
成立一年时间,微软 AI 研究团队已超 8000 人