作者 | Shival Gupta
翻译|Fanny(谢健芬)
本译文首发于“AI前线”公众号,首发链接:https://mp.weixin.qq.com/s/Yi4f9Mmgt-qzwRAjcIOdYg
查看英文原文:https://hackernoon.com/how-i-started-with-learning-ai-in-the-last-2-months-251d19b23597
当今的社会,每个人都为自己的工作和生活忙碌着,但在这些世俗日常以外,人工智能(AI)的概念已经日渐火热,你会突然发现,在接下来的两年内,你的技能集将会变得越来越过时。
当我关掉我的创业公司Zeading时,我突然猛烈地意识到了这一点,那感觉就像突然发现自己错过了非常重要的事情一样。
如今的全栈工程师将越来越不能适应未来的变化,两年之后,不具备AI技能就不能称之为全栈。
是时候该行动了。于是我采取了目前我认为唯一可行的办法:让我的工程师技能、产品思维模式、以及商业哲学,都变得数据驱动。
AI与金融科技领域的著名风险投资人与意见领袖Spiros Margaris曾眉飞色舞地对我说道:
企业或创业公司想依靠先进的AI或机器学习算法去竞争是不够的。AI在未来将不会是一个竞争优势,而是一个必需品。你听过有公司会把电力作为他们的竞争力吗?
构建我的第一个神经网络
一般的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的结果出现的时候,我意识到这个网络已经学会了怎么做“与”操作而且知道要忽略多余的第三个输入。
这基本就是机器学习的要点:你向系统提供一个数据集,系统以此来调整内部参数、使错误率降至最低,从而能够处理新的数据。
而后来我知道,这个方法就是梯度下降法。
图片来自 — Sebastian Raschka为AI作准备
在完成了我的第一个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在某次谈话中跟我说:
在人工智能时代,“聪明”的含义将完全不同。他们需要具备高阶的批判性、创造性思维,并能完成需要高情感投入才能完成的工作。
你不得不沉醉于电脑如何学会自己工作这个事情,坚持耐心与好奇心这两个基本原则。
这将是一个很长、很长的旅程,非常辛苦,非常恼人,而且还特别的费时间。
但好消息是,千里之行,仅仅始于足下。
网友评论