两个月入门深度学习,全靠动手实践!一位前端小哥的经验分享

本文涉及的产品
NLP自然语言处理_基础版,每接口每天50万次
NLP 自学习平台,3个模型定制额度 1个月
NLP自然语言处理_高级版,每接口累计50万次
简介:
本文来自AI新媒体量子位(QbitAI)

f38f0cf4b7828cbbdfc12d695dc43c3e0f39738d

在当前社会,技术日新月异,一个全栈工程师不及时学习新知识,掌握AI技能,再过两年就算不上“全栈”了。

产品发烧友、前端小哥Shival Gupta在意识到这一点后,通过两个多月的探索,掌握了基本的AI技能,并在Hackernoon上发文分享了自己的学习历程。

量子位搬运过来,各位可以参考他的学习思路。

建立第一个神经网络

ec209c2c3daf4921269366886feca9c13695ed74

大家给初学者的建议,通常是通过吴恩达的Coursera课程来入门。

这样开始很好,但是我在听课时很难保持专注。不是说这个课程不好或存在其他问题,而是我真的非常讨厌专心听课。我习惯于通过实践来学习,所以为什么不这么做呢?

让我们开始动手实现神经网络吧。

我没有直接跳到神经网络,因为还需要熟悉一些基础内容。我先尝试熟悉这个领域的所有专有名词,为下一步的语言学习作铺垫。

也就是说,第一项任务不是学习,而是熟悉这个领域。

我是个用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 ] }
    ])
// send it a new input to see its trained output
var output = net.send([ 1,1,0])
console.log(output); //0.9971279763719718

选择这个问题,是受一份9行代码构建神经网络教程的启发。地址:https://medium.com/technology-invention-and-more/how-to-build-a-simple-neural-network-in-9-lines-of-python-code-cc8f23647ca1

在我看来,上面的构建过程让我对接下来的学习充满了信心。当输出值为0.9971时,我意识到这个网络学会了如何实现一个“与”运算,并忽略无关的额外输入。

这正是机器学习的主旨。通过向计算机程序输入一组数据,并调整程序的内部参数,使它能够以从训练集观察到的误差减小方式,来得到对新问题的答案。

后来我才知道,这种方法也被称为梯度下降(gradient descent)。

34f1bddb3489ffeb76432fae46d83d7c336151e5

 梯度下降示意图

开始AI之路

f6c2046ad463381bf14e281c034f5fd346cca5bd

在我实现了我的第一个AI程序后,我充满信心,想知道作为一个开发人员,还可以用机器学习来做什么。

1. 我解决了若干个关于监督学习的问题,如回归和分类。

2. 基于非常有限的数据集,我尝试使用多变量线性回归来预测哪个团队将赢得某场给定的IPL电子竞技比赛,实际的预测效果很差,但是我觉得很酷。

3. 我试用了Google机器学习云的一些demo,了解当前AI可以做什么。
地址:https://cloud.google.com/products/machine-learning/

4. 我偶然发现了AI Playbook(文末链接5),这是一个由安德森-霍洛维茨风险基金整理的干货网站,确实是针对开发人员和创业者的最方便资源之一。

5658f0bb18749ec08b55f571f331a56ffdacd4a9

 AI Playbook。地址:http://aiplaybook.a16z.com/

5. 我开始在Youtube上观看Siraj Rawal的精彩视频,这是一个以深度学习和机器学习为核心的专栏。
视频地址:
https://www.youtube.com/channel/UCWN3xxRkmTPmbKwht9FuE5A

6. 我读了HackerNoon上一篇讲《硅谷》剧组怎样用Tensorflow做剧中那个Not Hotdog应用的。这是深度学习中我们最容易上手的一个例子。

HBO真的做了这个App(限美国、加拿大):
https://www.seefoodtechnologies.com/nothotdog/

文章地址:
https://medium.com/@timanglade/how-hbos-silicon-valley-built-not-hotdog-with-mobile-tensorflow-keras-react-native-ef03260747f3

7. 我读了Andrej Karpathy的博客(https://karpathy.github.io/),他是特斯拉的AI主管。虽然我无法理解里面的一些内容,这让我很头疼,但是我发现,在多花一些时间以后,我对这些概念有了一定理解。

8. 带着信心,我开始通过复制和粘贴来逐行实现一些深度学习教程中的代码,并在我自己的电脑上运行代码,尝试训练相关模型。很卡……因为大多数模型需要很长的训练时间,我也没有GPU。

渐渐地,我将编程语言从Javascript转换到了Python,并在Windows机器上安装了Tensorflow。

这整个过程集中在被动地接受知识和建立知识库上,因此当我遇到一个实际的用户问题时,可以利用已有知识来解决。

正如乔布斯说过,你只能通过回溯过去理解其中的关联。

抓住chatbot的热潮

c3cd5f0a763c855b13e5d47fdbcae59717d5c73a

作为电影“Her”的狂热粉丝,我想构建一个聊天机器人。我设法在两个小时内学会了Tensorflow的使用,并将这个经历和我对用户需求的理解整理成了一篇文章。

在做这个聊天机器人之前,我对NLP的了解仅仅限于概念层面。

尝试了市面上众多聊天机器人之后,我发现,它们在本质上只是图形用户界面的替代品。如果在图形用户界面上操作超过两步点击,用聊天机器人的用户体验会比较好,反之,用聊天的形式就显得多余了。

开始构建聊天机器人的时候,我先给自己确定了两条原则:

1. 聊天机器人应该说人话,也就是说它得理解自然语言;

2. 要用聊天机器人解决图形UI中需要两步以上操作的问题。

经过分析,我选择构建一个通过自然语言命令找到正确日期的聊天机器人。比如说你可以问它“6天以后是几号?”、“下个9月过完之后再过5周”之类的。

架构是这样的:

7136123cf33d976b70aa66f51b7f07a2b7a2890f

然后,我跟着网上的一份教程,(地址:https://chatbotsmagazine.com/contextual-chat-bots-with-tensorflow-4391749d0077),用基础的NLP技能和基于softmax的神经网络,不到两小时就构建了一个查询意图分类器。

在确定了用户的意图之后,系统会对字符串进行语法分析并输入,然后返回我想要查询的日期。

432657922fb77b3ba0e207aeabd04400ecf8419c

说真的,并不难。如果你用Facebook Messenger Platform、Telegram的Bot Platform,或者api.ai、wit.ai、recast.ai等等工具,可能比我还快。

更多关于构建聊天机器人的心得,见这个链接::
https://hackernoon.com/i-built-a-chatbot-in-2-hours-and-this-is-what-i-learned-f5dbb4ba5fcc

在我的AI学习之旅中,这篇文章具有里程碑式的意义。

它让我在Twitter和LinkedIn上交到了很多朋友,他们长期深入地和我讨论AI技术的发展,甚至可以在我遇到困难时帮我一把。我收到了一些关于咨询项目的Offer,更让我开心是,开始有一些年轻的开发人员和AI初学者来问我是如何入门AI的。

这也促使了我写下这篇文章,希望能帮助更多的人从我的经历中得到线索,并开始他们的学习之路。

万事开头难。

一些理解

9367e65c70cf0d00f18c9736a814cf5cac00042a

这绝不是一件简单的事。

我最开始时用的是Javascript,后来突然换成Python,并学会如何用Python编程。

当我的模型在i7电脑无法训练,或是经过数小时训练,只返回一个无用结果时,我会感到烦躁。

学习AI的过程与学习一个Web框架不同。

这项技能要求你明白在微观层面计算是如何进行的,并确定最为影响输出结果的内容是代码还是数据。

AI也不只是一个学科。这是一个总括性术语,其适用范围可从简单的回归问题到未来的杀手机器人。与其他学科一样,你可能要选择AI中比较热门的领域,如计算机视觉、自然语言处理,或者其他具有潜在发展空间的方向。

在和AI金融公司Atlantis Capital的Gaurav Sharma的交流中,他对我说:

在人工智能时代,“聪明”意味着某些完全不同的东西。我们要求人们去完成非常关键、具备创造性和有个人见解的任务,和那些需要高情感投入的工作。

对于计算机是如何突然学会自主决策的,你要为之着迷。你应该坚持的两个关键原则是耐心和求知欲。

这是一个非常漫长的旅程,很累也很刺激。

但最重要的是,所有旅程都是相同的,千里之行始于足下,想上手AI就开始动手吧。

原文地址:https://hackernoon.com/how-i-started-with-learning-ai-in-the-last-2-months-251d19b23597

本文作者:王新民 
原文发布时间:2017-10-15
相关文章
|
18天前
|
机器学习/深度学习 传感器 数据采集
深度学习在故障检测中的应用:从理论到实践
深度学习在故障检测中的应用:从理论到实践
79 5
|
17天前
|
编解码 前端开发 开发者
探索无界:前端开发中的响应式设计深度实践与思考###
本文将带你领略响应式设计的精髓,一种超越传统页面布局限制的设计策略,它要求开发者以灵活多变的思维,打造能够无缝适应各种设备与屏幕尺寸的Web体验。通过深入浅出的讲解、实际案例分析以及技术实现细节的探讨,本文目的是激发读者对于响应式设计深层次的理解与兴趣,鼓励在实际应用中不断创新与优化。 ###
61 10
|
20天前
|
机器学习/深度学习 人工智能 自然语言处理
揭秘人工智能:深度学习的奥秘与实践
在本文中,我们将深入浅出地探索深度学习的神秘面纱。从基础概念到实际应用,你将获得一份简明扼要的指南,助你理解并运用这一前沿技术。我们避开复杂的数学公式和冗长的论述,以直观的方式呈现深度学习的核心原理和应用实例。无论你是技术新手还是有经验的开发者,这篇文章都将为你打开一扇通往人工智能新世界的大门。
|
21天前
|
机器学习/深度学习 算法 TensorFlow
深度学习中的自编码器:从理论到实践
在这篇文章中,我们将深入探讨深度学习的一个重要分支——自编码器。自编码器是一种无监督学习算法,它可以学习数据的有效表示。我们将首先介绍自编码器的基本概念和工作原理,然后通过一个简单的Python代码示例来展示如何实现一个基本的自编码器。最后,我们将讨论自编码器的一些变体,如稀疏自编码器和降噪自编码器,以及它们在实际应用中的优势。
|
21天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
52 3
|
25天前
|
机器学习/深度学习 人工智能 自然语言处理
揭秘AI:深度学习的奥秘与实践
本文将深入浅出地探讨人工智能中的一个重要分支——深度学习。我们将从基础概念出发,逐步揭示深度学习的原理和工作机制。通过生动的比喻和实际代码示例,本文旨在帮助初学者理解并应用深度学习技术,开启AI之旅。
|
25天前
|
机器学习/深度学习 人工智能 自然语言处理
深入浅出深度学习:从理论到实践的探索之旅
在人工智能的璀璨星空中,深度学习如同一颗耀眼的新星,以其强大的数据处理能力引领着技术革新的浪潮。本文将带您走进深度学习的核心概念,揭示其背后的数学原理,并通过实际案例展示如何应用深度学习模型解决现实世界的问题。无论您是初学者还是有一定基础的开发者,这篇文章都将为您提供宝贵的知识和启发。
52 5
|
20天前
|
机器学习/深度学习 存储 人工智能
探索深度学习的奥秘:从理论到实践的技术感悟
本文深入探讨了深度学习技术的核心原理、发展历程以及在实际应用中的体验与挑战。不同于常规摘要,本文旨在通过作者个人的技术实践经历,为读者揭示深度学习领域的复杂性与魅力,同时提供一些实用的技术见解和解决策略。
29 0
|
28天前
|
编解码 前端开发 UED
探索无界:前端开发中的响应式设计哲学与实践####
本文不拘泥于传统摘要的框架,而是以一种对话的方式,引领读者踏入响应式设计的奇妙世界。想象一下,互联网如同一片浩瀚的海洋,而网页则是航行其中的船只。在这片不断变化的海域中,如何让我们的“船只”既稳固又灵活地适应各种屏幕尺寸和设备?这正是响应式设计的魅力所在。通过深入浅出的探讨,我们将一同揭开它背后的哲学思想与实战技巧,让你的网页在任何设备上都能展现出最佳姿态。 ####
22 0
|
1月前
|
机器学习/深度学习 自然语言处理 算法
深度学习在图像识别中的应用及实践
本文将探讨深度学习在图像识别领域的应用,并分享一个使用Python和Keras库实现的简单代码示例。我们将介绍深度学习的原理、常用模型以及如何在实际应用中解决问题。通过阅读本文,您将了解深度学习在图像识别中的潜力,并学会如何构建一个简单的神经网络模型。
34 0