[译] 最近两个月中我是如何开始学习 AI 的

5,627 阅读7分钟

简评:人工智能是 21 世纪最重要的技能。在人人都很忙碌的今天,如何把人工智能这个技能点加上?作者用自己的亲身经历告诉大家。

当我关闭我的创业公司 Zeading 时,我被这次失败惊醒的同时感觉心里空落落的,就像失去了一些非常特别的东西。

全栈工程师在面临剧变的时代是不够的。在接下来的两年中,没有人工智能技术的全栈将不再是全栈。

是时候采取行动了。我做出了我认为现在唯一能做的行动 —— 像开发者那样更新我的技能,以像产品经理一样的心态以及像企业家一样的哲学观来面向数据。

正如著名的风险投资家,人工智能和金融科技的思想领袖 Spiros Margaris 雄心勃勃地对我说:

如果创业公司和企业只依赖于最前沿的 AI 和机器学习算法作为竞争 —— 这是不够的。AI 将不是竞争优势,而是基本需求。你听过有人把用电作为竞争优势的吗?

构建我的第一个神经网络

一般是建议在 Coursera 注册 Andrew Ng 的课程。这是个很棒的网站但我发现我很难在观看课程时保持长时间的专注。倒不是说这门课程很糟糕,只是我真的很难在讲座中聚精会神。一直以来我个人 的学习模式就是实践,所以我想干嘛不直接来实现自己的神经网络。

我没有直接跳到神经网络,因为它是一个更高的学习方式。我先熟悉了这个领域的所有概念,这样我才能学习用专业术语谈论这个领域。

第一个任务不是学习。而是去熟悉。

我的知识背景是纯 JavaScript 和 NodeJs,暂时不想换别的。我搜索到一个简单的神经网络模块叫 nn,然后通过模拟输入用它来实现一个与(AND)门。通过这篇指导,我选择了这个问题:对于任意的输入 X,Y,Z,输出结果都是 X AND 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 ] }
    ])
// send it a new input to see its trained output
var output = net.send([ 1,1,0]) 
console.log(output); //0.9971279763719718

幸福来得太快了!

当得到的结果是 0.9971 时,我意识到,这个神经网络学会了如何做一个 AND 操作,并且忽略附加的输入。这样的结果极大地增强了我的自信心。

这就是机器学习主要的宗旨。你给计算机程序一个数据集,然后调整内部的参数,它就能够从一个新的数据集中通过观察原始数据得到一个缩小误差的结论。

这个方法,我后来了解到,它也被称为梯度下降

补充人工智能知识

当我从第一个人工智能程序中获取了满满的自信后,作为开发者,我迫不及待地想要了解能用机器学习做什么更多的东西。

  • 我解决了几个监督学习的问题,比如回归分类

  • 我通过一个有限的数据集来用多元线性回归尝试预测哪支队伍将取得胜利(预测结果相当差,但感觉还是不错的)。

  • 我在 Google 机器学习云上尝试了一些演示,看看 AI 在今天能做什么(作为一个 SaaS 产品,Google 做得足够好了)

  • 我被 AI Playbook 难住了,由 Andreessen-Horowitz 组织的出色的资源,受人尊敬的基金。无愧为开发者和创业者最便捷的资源。

  • 开始在 Youtube 上看 Siraj Rawal’s awesome channel关于深度学习和机器学习的集中讨论。

  • 阅读 Hacker Noon 上的优秀博客,讲述了大佬如何在硅谷创建 Not Hotdog app(不知道咋翻译 = =)。这是我们能做的最接近深度学习的案例之一。

  • 阅读了 Andrej Karpathy 的博客,特斯拉 AI 部门的主管。尽管我尚不能够理解他讲的任何东西,让我很头疼,但是我在多次被血虐后,对一些概念开始有点理解了。

  • 鼓起勇气,我开始逐字实现一些深度学习的教程(复制和粘贴)并尝试在我的机器上训练模型和运行代码。大多数时候,结果很烂,因为大多数模型需要的训练时间很长,而且我没有 GPU。

逐渐地,我从 JavaScript 切换到了 Python,并且在我的 Windows 机器上安装了 Tensorflow

这整个过程都是在被动地消化内容,并在你的脑海里建立参考,当以后遇到一个真正的问题时,可以使用这些知识。

正如 Steve Jobs 所说,你只能往后看才能把这些点连起来。

赶上聊天机器人火车

作为电影 《》 的粉丝,我也想要做一个聊天机器人。我接受了这个挑战,然后设法用 Tensorflow 在不到两小时内完成。几天前我在我其中一篇文章里列出了这个过程的大纲和商业需求。

幸运的是,这篇文章广为好评,被 TechInAsiaCodeMentorKDNuggets 推荐了。这对我个人而言是个很棒的时刻,因为我才刚开始写技术博客。我认为这篇文章可以算是我 AI 学习的里程碑之一。

我在 Twitter 和 LinkedIn 上交了许多朋友,我可以和他们全面而深度讨论 AI 开发,发现自己的不足。我在咨询项目上收获了几个 offer,最重要的是,年轻的开发者和 AI 初学者开始向我提问如何开始学习 AI。

这就是我写这篇文章的原因。为了帮助更多的人从我的经历中找到开始他们的学习旅行的线索。

万事开头难。

其他

这绝不是一个简单的事情。当我在 JavaScript 上卡住时,我几乎一夜之间跳到了 Python,学习如何编写代码。在经过几小时的训练后,我的模型在我的 i7 机器上跑不出结果,这让我很烦躁,它们会返回一个胡乱的结果,就像在一个队伍在板球比赛中赢得比赛一样,这是个 50-50 的概率。学习 AI 不像学习 Web 框架一样。

在微观层次的计算中发现你的什么输出 —— 你的代码还是数据更为合理,这是一种技巧。

AI 同样不只是一门学科。这是一个用来形容任何从简单回归问题到某天杀死我们的杀人机器人的总括术语。像其他你接触的学科一样,你可能想要 cherry pick AI 中任何你想要的足够好的部分,比如计算机视觉或者自然语言处理,或者上帝禁止的,统治世界的等等。

Atlantis Capital 的 Gaurav Sharma 是 AI、金融科技、加密等行业的知名领导者,在与他的对话中,他向我表示:

在人工智能的时代,“变聪明”意味着完全不同。我们需要人们执行高级的、关键的、创造性的、有思考能力的以及需要高度的情感参与的工作。

你必须让自己沉迷于计算机如何突然学会用它们的方式来做事情。耐心和好奇心是你应该坚持的两个关键原则。

这是一段很长很长的旅程。非常累,非常容易烦躁,以及非常花时间的过程。

但好处在于,像世界上其他旅程一样,从一个简单的步伐开始。


知乎专栏:极光日报

原文链接:How I started with learning AI in the last 2 months

极光日报,极光开发者 的 Side Project,每天导读三篇国外技术类文章,欢迎投稿和关注。