如何自学人工智能?

如何自学人工智能?
零基础自学人工智能,希望能推荐下学习路径。

基础只有兴趣,不要说不可能。

兴趣为解决人类智能缘起的问题。

更新一下~为大家推荐新上线的微软人工智能教育与学习共建社区~

这是一个免费的AI学习干货平台。

microsoft/ai-edu

该社区由微软亚洲研究院人工智能教育团队创立,集合了微软与高校教师、开发者共享的人工智能教学大纲和课件、案例资源、开发工具与环境搭建教程等,更有微软顶级工程师互动答疑,是最酷的AI教育学习第一站!

GitHub一周标星 2300+

部分内容如下:

这么干货的平台,还不点进来愉快滴学习吗?


对于想学习人工智能的同学,我们墙裂为大家推荐——微软AI Lab,适合有基础的同学着手做AI应用开发。

AI Lab是微软在Build 2018大会上发布的人工智能开放项目平台,展示了微软最新AI技术的使用案例。我们希望AI Lab能帮助大家用微软丰富的开放资源和平台来探索自己的第一个人工智能项目。



AI Lab目前开放了五个人工智能项目,展示了微软自定义视觉服务(Custom Vision Service)、AttnGAN、Visual Studio Tools for AI、Cognitive Search、机器阅读理解等最新技术的使用。在每个项目中,你都可以访问GitHub上的开源代码,尝试Demo演示,还可以观看清晰的介绍视频,从而获得对人工智能潜在的商业问题和解决方案的深入理解。


绘画机器人(DrawingBot)是由微软研究院人工智能实验室的研究人员开发的,能根据文本信息绘制出相应图像的模型。DrawingBot的核心技术是GAN网络(Generative Adversarial Network),其中包含两个机器学习模型,一个模型根据文本描述生成图像,另一个模型用文本描述去鉴别生成图像的真实性。如果生成的图像和文字描述相差甚远,就无法通过鉴别模型的检测,因此GAN网络通过两个模型的合作,能够使生成的图像越来越接近本文所描述的内容。然而,GAN网络对“一只蓝色的鸟”、“一棵常青树”这样比较简单的文字描述能生成效果较好的图像,而对于“一只绿冠红腹、黄色翅膀的鸟”这样复杂的描述,生成的图像还不那么尽如人意。


想象一下,如果让我们来根据一段描述画一幅画,我们会怎么做?通常来说,我们会在这个过程中不断地参考文本描述,尤其是正在绘制的区域所对应的那部分文字。基于这个启发,研究人员将GAN网络改进为AttnGAN网络(attentional GAN),用数学表达来模拟人类的这种注意力特征,将输入的文本分解为单个的单词,将单个单词与待生成图像的特定区域相匹配。根据CVPR上的一篇研究论文的测试结果,这种方法使生成图像的质量提高了近三倍。



项目链接:

Microsoft AI lab





为了帮助用户更好地了解美国总统肯尼迪被暗杀的整个事件,微软的研究人员利用Azure搜索服务和微软认知服务开发了一个应用程序,能够自动分析与暗杀有关的所有解密文件,并将原始文档整理成结构化的信息。


JFK文件演示背后的核心技术是Cognitive Search,这是微软在Build大会上发布的一项基于AI的内容理解技术,由内置认知服务功能的Azure搜索提供支持,能从任何内容资源中提取数据,并运用可组合的认知功能从数据中提取需要的知识。这些知识将被整理和存储在索引中,优化搜索数据的体验。Cognitive Search能方便快捷地利用云和AI的强大力量处理数据,当我们第一次将它应用于JFK文件演示系统时,效果令人惊叹,我们提出的许多有趣的问题不仅可以获得回答,还可以在原始文件中看到答案和问题之间的关系。JFK文件演示系统能使我们的客户轻松将其应用到自己的领域、回答他们所需要的问题。



项目链接:

Microsoft AI lab



风格迁移(Style Transfer)是一种对图片风格进行转换的技术,能从一张图片中提取出风格并应用到另一张图片中,也就是我们常见的“滤镜”功能。这个项目展示了如何训练和部署深度学习模型,开发一个简单有趣的风格迁移应用。


风格迁移项目使用Visual Studio Tools for AI来训练和部署深度学习模型。Visual Studio Tools for AI能让开发者在本地开发机器上轻松部署Keras + Tensorflow模型的训练代码,然后上传到Azure VM上,利用强大的Nvidia GPU来训练模型,大大提高工作效率。我们在提高模型训练速度的同时,在生成图像中保留了与原始图像的语义相似性。此外,Visual Studio Tools for AI还能直接从训练好的TensorFlow模型生成C#代码,无需再手动重新编写。使用全新的Microsoft.ML.Scoring库,开发者可以便捷地在应用中使用TensorFlow或ONNX模型,在设备端或者云端运行。



风格迁移只是采用训练机器学习模型方法的应用之一,在应用中使用机器学习技术的过程本质上是相同的。开发者可以使用Tensorflow或CNTK等框架自行训练模型,也可以使用Azure认知服务等预先训练的AI模型。


项目链接:

Microsoft AI lab


机器阅读理解(MRC)是让计算机根据给定的上下文来回答问题,需要对上下文和问题之间的复杂交互进行建模。微软的研究人员采用新的神经网络ReasoNet(Reasoning Network)来模仿人类阅读时的推理过程:ReasoNets会带着问题反复阅读文档,每次关注文档的不同部分,直到给出令人满意的答案。



同时,微软亚洲研究院的研究人员也提出一种独特的R-NET算法,使机器阅读理解能力在SQUAD数据集上超越了人类平均水平。R-NET是一个端到端的深度学习模型。模型分为四层,最下面一层给问题和文本中的每一个词做一个表示,即深度学习里的向量;第二步,将问题中的向量和文本中的向量做一个比对,找出与问题接近的文字部分。接下来,将结果放在全局中进行比对。这些都是通过注意力机制(attention)达到的。最后一步,针对挑出的答案候选区中的每一个词汇进行预测,哪一个词是答案的开始,到哪个词是答案的结束。这样,系统会挑出可能性最高的一段文本,最后将答案输出出来。


当我们将这些机器阅读理解算法用于由沈向洋和Brad Smith撰写的《未来计算:人工智能及社会角色》一书时,机器阅读理解回答了大量有趣的问题。机器阅读理解技术能够应用于企业级数据处理,帮助客户回答特定领域的问题。



项目链接:

Microsoft AI lab


Drones + AirSim是一项有趣的模拟“搜索与拯救”的任务。我们先在AirSim中创建了一个3D环境来模拟微软园区中的足球场,将各种动物放置在球场中;创建了一个Python脚本模拟无人机,它可以在球场中自由拍摄照片。然后我们将无人机拍摄的图像上传至Azure自定义视觉(Custom Vision)服务,训练模型来识别图像中的动物,利用Azure IoT Edge将训练好的模型部署到无人机上。于是,无人机能够在足球场中飞行、拍照,并实时识别出画面中的动物。这一项目能够让用户了解实时自定义的AI如何在无人机这样的边缘设备上运行。



项目链接:

Microsoft AI lab



另外,AI Lab即将开放社区申请,我们期待你的参与!


本账号为微软亚洲研究院的官方知乎账号。本账号立足于计算机领域,特别是人工智能相关的前沿研究,旨在为人工智能的相关研究提供范例,从专业的角度促进公众对人工智能的理解,并为研究人员提供讨论和参与的开放平台,从而共建计算机领域的未来。


微软亚洲研究院的每一位专家都是我们的智囊团,你在这个账号可以阅读到来自计算机科学领域各个不同方向的专家们的见解。请大家不要吝惜手里的“邀请”,让我们在分享中共同进步。


也欢迎大家关注我们的微博和微信 (ID:MSRAsia) 账号,了解更多我们的研究。

GitHub上,有个新发布的深度学习教程,叫PracticalAI,今天刚刚被PyTorch官方推荐,已经收获2600多标星

项目基于PyTorch,是从萌新到老司机的一条进阶之路。这条路上每走一步,都有算法示例可以直接运行。

新手可以从基础的基础开始学起,不止线性规划和随机森林,连笔记本怎么用,NumPy等重要的Python库怎么用,都有手把手教程。

到中后期,可以学着搭高级的RNN,厉害的GAN,这里还有许多实际应用示例可以跑。毕竟,这是一个注重实践的项目。

这里的算法示例,可以用Google Colab来跑,免费借用云端TPU/GPU,只要有个Chrome就够了。没梯子的话,就用Jupyter Notebook来跑咯。

PracticalAI里面的内容,分为四个部分,并将持续更新:

基础 (Basics),深度学习入门 (Deep Learning) ,深度学习高阶 (Advanced) ,以及具体应用 (Topics) 。注:此处非直译。

· 基础部分,除了有Python指南、笔记本用法,以及Numpy、Pandas这些库的用法,还有线性规划、逻辑规划、随机森林、k-means聚类这些机器学习的基本技术。

有了这些,可以走进深度学习的世界了。

· 深度学习入门,包括了PyTorch指南、多层感知器 (MLP) 、数据与模型、面向对象的机器学习、卷积神经网络 (CNN) 、嵌入,以及递归神经网络 (RNN) 。

· 深度学习高阶,会涉及更高级的RNN、自编码器、生成对抗网络 (GAN) ,以及空间变换网络 (Spatial Transformer Networks) 等等。

· 最后是应用。计算机视觉是个重要的方向。除此之外,还会涉及时间序列分析 (Time Series Analysis) ,商品推荐系统,预训练语言模型,多任务学习,强化学习等等示例可以运行。也可以修改示例,写出自己的应用。

细心的小伙伴大概发现了,表格里的有些话题还没有加链接 (如上图) 。项目作者表示,这些部分很快就会更新了。

另外,表上还有没填满的格子,作者也欢迎大家前去添砖加瓦。

项目作者用了三点来描述这个项目:

一是,可以用PyTorch来实现基础的机器学习算法,以及神经网络。
二是,可以用Google Colab直接在网页上运行一切,无需任何设定 (也可以用Jupyter跑) 。
三是,可以学做面向对象的机器学习,与实际应用联系紧密,不止是入门教程而已。

那么如何上手?笔记本跑起来啊:

(步骤几乎是针对Colab写的。Jupyter用户可忽略。)

第一步,项目里进到notebooks目录。
第二步,用Google Colab去跑这些笔记本,也可以直接在本地跑
第三步,点击一个笔记本,把URL里的这一段:
github.com/
替换成这一段:
colab.research.google.com
或者用Open In Colab这个Chrome扩展来一键解决。
第四步,登录谷歌账号。
第五步,点击工具栏里的COPY TO DRIVE按钮,就可以在新标签页里打开笔记本了。



第六步,给这个新笔记本重命名,把名称里的Copy of去掉就行。
第七步,运行代码,修改代码,放飞自我。所有改动都会自动保存到Google Drive。


开始学吧,不然等到内容更新了,要学的就更多了。

项目传送门:
github.com/GokuMohandas

欢迎大家关注我们的知乎号:量子位

从2018年10月中旬开始就进入了完全脱产的自学状态。直到写下这篇文章的时候为止已经整整半年多的时间,除开大约8周的假期时间,在剩下的24周时间里我从零基础开始完成了:

  • 学习编程,主要掌握Python,跟着课程也学习了一些CHTMLCSSJavaScript
  • 学习了数据科学的理论和编程方法,如:Pandas, Numpy, Matplotlib等;
  • 在线学习了四套关于Machine LearningDeep Learning的课程。

现在已经能自己用框架写一些训练模型,读懂一些NLP方向前沿技术的文章,如:Transformer, BERT, GPT 等。

对于一个自学者来说现在真的是一个非常幸福的时代,在网上就可以免费学到各个名牌大学的精品课程,如果不是非要拿到那张文凭其实完全可以不用上大学了。但一路走来,由于缺少有经验的前辈指点,确实也走过不少弯路。所以,如果有人也想像我一样走上自学的道路,我希望我的经验能成为一个参考。

在这篇文章中我将会完整地介绍我真实的学习过程,并且根据学习效果总结出学习心得,希望能让像我一样的初学者少走一些弯路。


首先我将按时间顺序介绍我在自学过程中的所有参考课程及资料。

不过在开始介绍之前我认为有几点需要先说明一下:

  • 课程的心得是我作为一个初学者上完课以后整体感受总结的;
  • 学习时间是按在完全不上班但周末仍然休假的情况下,一周5天,一天8~10小时来计算的,但也可能会同时在上几门课程;
  • 初学者推荐度主要是根据课程的质量、课程的难度、学习的实用性等因素得出的,满分 5 颗 ⭐️;
  • 许多课程都没有中文翻译,所以需要有一定的英语基础。

这个阶段是比较盲目的,因为对这个专业领域的东西一无所知,也没有前辈可以指点迷津,所以基本上就是一个探路的阶段,也是踩坑最多的阶段。

在一开始不知道哪个课程更好的时候,我干脆就选市面上最火的,也就是吴恩达教授在Coursera上的《机器学习》课程。这门课教授的是“传统”的机器学习理论,所谓传统其实也就是近年来在深度学习还没崛起的时代大家所用的机器学习理论和实践。课程比较重理论知识,而且课程里所使用的语言是比较冷门的Octave,所以其实入门门槛比较高以及后续的实用性不足,所以并不推荐初学者学习。

学习时间:约 6 周

初学推荐度:⭐️⭐️


在艰难地学习《机器学习》课程的同时为了更全面地了解计算机科学知识以及编程技术,我选择了edX上这门非常有名的哈佛大学的CS50课程。课程的主讲老师 David 用非常生动的方式介绍了电脑运作的基本原理,简单易懂,相信上过这门课的人都会对计算机产生非常浓厚的兴趣。不过这门课好像只有英语和西班牙语版本,需要一定的语言基础。并且作业的难度也是非常大的,对于像我这种没有任何编程基础的人来说需要额外做非常多的功课才能独立完成。

学习时间:约 9 周

初学推荐度:⭐️⭐️


这门课是非常好的Python入门课程,课程时间不长,但基本把Python的基本知识都覆盖了。虽然在这个阶段的课程都基本没用到Python,但这是为了后面的学习打基础的,因为基本上Machine Learning领域的教学资料和主流框架都是使用Python的。

学习时间:约 4 周

初学推荐度:⭐️⭐️⭐️⭐️


这个阶段主要是大致了解Machine Learning的知识范围,以及所需的知识与技能。总结下来,要学习Machine Learning大致需要掌握:

  • 基础线性代数运算(会矩阵乘法和转置已经能吃透大部分内容了)
  • 基础微积分运算(会求导就可以了)
  • 认识基本的数学符号(类似于Σ的符号能知道是累加的意思)
  • 基础编程能力(为后面的学习打基础)
  • 最后就是英语能力(大部分优质的学习资料都是英文的)

经过了大约两个月时间的学习,已经大概了解了这个领域是怎么一回事儿了。接下来就要开始接触最新的专业方向了。深度学习,从大约1940开始就作为机器学习领域的一种算法被提出,但受阻于当时的计算能力以及数据量的不足这种算法一直都没有得到重视,直到最近几年得益于计算机技术的进步这种算法屡屡打破记录,尤其在 Alpha Go 击败 李世石 以后才真正崛起。

所以我们真正想要学习的其实是机器学习中的深度学习算法。

与吴恩达教授的另一门课Machine Learning课程相比,这门课只讲授了Deep Learning的相关内容。尽管如此,知识量却一点也没有少,而且都是专业领域中比较新的,所以可以通过这门课来了解专业比较近期的发展状态。除此之外,这门课的作业都是用Python以及基于它的深度学习框架如TensorFlow来完成的,所以在对于技术的了解以及后续的实用性上都是非常不错的。虽然在已经上了一门Machine Learning后对这门课的内容还是比较好接受的,但对于完全的初学者来说还是有一定难度。

学习时间:约 6 周

初学推荐度:⭐️⭐️⭐️⭐️


学完了吴恩达教授的课程以后虽然感觉对深度学习有了比较整体的认识,但还是觉得在实践能力上还比较欠缺。到底我学完了以后能做什么?心里还是没有一个比较清晰的答案。因此我又继续寻找其他课程,这次希望能找到一个更加注重实践的,幸运的是,让我找到了。

学了fast.ai的课程最深刻的感觉就是——相见恨晚,这不仅仅体现在学习机器学习的道路上,更是体现在学习这件事上。长久以来我们接受的都是传统的自下为上,也就是从基础知识到高级概念再到实践的教育。而在fast.ai的课程里,Jeremy Howard 提倡的是自上而下的学习方法,也就是回归到人最自然的学习方法。想想我们小时候是如何学习游戏、踢球、画画的,我们都是先按照自己的理解从模仿开始,随着对这样东西越来越熟悉再逐渐深入了解,学习如何把游戏玩得更好,研究踢球动作技巧,研究画画的笔法等等。在课程中,Jeremy 就是贯彻着这样的教学理念,从一开始就让大家先别管具体的原理,按照他所教的方法把机器学习的模型实现出来,让大家以最快的速度感受到这项技术的力量以及降低对它的恐惧感。

不得不说这样的方法非常合我胃口,而且效果也非常好。这门课主要介绍了 Jeremy 自己最常用的两种机器学习的方法,一种是针对规则数据的Random Forest,另一种就是针对大部分非规则数据的Deep Learning。虽然没有吴恩达教授讲解得那么全面,但深入浅出,让学习者很容易理解这项技术的主要作用和原理。

但这门课有一个门槛就是需要学习者最好有一年以上的编程经验,而且最好熟悉Python。不过,对于我这个只学了两个月而且还没有过开发经验的初学者来说感觉也基本能够理解所有实现的代码,但如果看源代码还是比较吃力。另外还有一点就是这门课目前好像对中文的支持还不够友好,不过国内也有热心的朋友在帮忙翻译,希望这么优秀的教材也能让国内的自学者们用起来。

学习时间:约 6 周

初学推荐度:⭐️⭐️⭐️⭐️⭐️


这门课才是fast.ai真正的重点课程,因为在这门课中Jeremy还介绍了他们专门为深度学习开发的一个库,利用这个库可以快速实现建模、导入数据以及训练模型。跟之前的课程一样,他还是采用的自上而下的教学方法,用最快的方式教会你使用他们的库,然后引导你用同样的方法去解决身边的问题。这门课还专门有个论坛让学习者们分享学习心得的,其中就有不少人在上过几堂课以后已经可以使用fast.ai框架训练出各种各样的模型,有的能根据卫星图分辨出图中的城市是属于哪个国家的,有的能根据植物的照片分辨出该植物是否患病,还有的能理解一些稀有语种的文字并自行造句。而这些都只需要上过三四堂课就能学会,上手难度非常低,让你在很短时间内就能领会到所谓的AI到底是什么、但同样的,这门课也是建议最好有一年以上编程经验。

学习时间:约 7 周

初学推荐度:⭐️⭐️⭐️⭐️⭐️


学完以上的课程以后基本上就能理解大部分的技术原理,接下来除了继续练习技术以外,还能根据自己的需要去学习更深层次的东西。


深度学习也是有很多的研究方向的,而我选择的方向主要是自然语言处理(NLP)。这个方向在18年年末,随着Google Brain发布BERT预训练模型后,NLP领域迎来了近几年来最重大的突破,业内称这个突破就像当年ConvNet在计算机视觉领域的突破一样震撼。而且自然语言作为人与机器目前最主要的交互方式,无论在搜索、聊天、语音都会用到,这样的突破肯定会在不久的将来带来非常重要的价值。因此,深入理解这些技术背后的原理也是非常重要的,而要理解这些技术最好的方法就是看文献。

关于看文献最好的方法就是看别人重现文献方法的文章,这里只作简单推荐,因为我自己本身也还在消化这些内容。

这是一篇对Google Brain在18年上半年发布的非常重要的技术Transformer的解释文章。内容比起文献好懂很多,一点点仔细看完以后再重新看文献会感觉茅塞顿开。作者博客中还有对其他文献的解释文章,包括BERT

harvardnlp是专门重现重要文献中提出的模型的博客,如果有耐心一行行代码地学习一定能对这些技术有更深入的理解。


总结整个学习过程,主要踩的坑就是在理论上纠缠了太多时间而忽略了实践的重要性,所以如果你的目的也是想要快速地了解这个领域的话我会推荐以下学习路径。

1. 快速学习编程

编程是基础,但并不是说一定要学到可以找份工作才能学习Deep Learning。所以我建议在开始学习之前用最快的速度掌握基本的Python语法,达到能够写简单的程序的水平。当然除了Python本身,还需要花点时间学习NumpyPandas以及Matplotlib这类数据科学库的使用方法。在学习的过程中如果遇到什么问题,YouTubeGoogle是你最好的朋友(BilibiliBaidu也勉强能用)。

2. 直接上手fast.ai

直接学习上面提到的fast.ai的两门课程,能够快速地让你从应用的角度理解Deep Learning的技术原理。先从整体上了解这项技术的功能,再深入理解技术内的原理是个不错的方法。

3. 加深概念理解

在对技术有个大致的理解后,如果想要进一步深入,可以学习吴恩达教授的Deep Learning,从基本概念开始深入学习。同时fast.ai也有一个进阶的课程讲解具体的概念原理,不过我也还没上过这个课不知道具体的效果怎么样。

4. 进阶深入理解

跟进行业最新动态,最好的办法就是读最新的有重要突破的文献,并且找最简单的方式实验技术的成果。比如BERT就是一个预训练模型,所谓“预训练”就是能够用他们训练出来的模型只作简单的“微调整”训练就可以直接用在多种语言任务上并且获得非常好的表现。所以利用预训练模型,我们自己就可以很轻松地训练出一个处理其他特殊任务的模型,而不需要花费大量资源和时间从头开始训练。


在最后我必须再讲讲一样与机器学习无关东西——英语。我的英语一直都是中等水平,大概6年前考过雅思6.5就基本上没怎么碰过英语了。但直到我开始自学之后才发现,读了这么多年书到头来最有用的还是英语。不得不说,外国人在分享知识这方面真的比我们要积极很多,很多人都乐意分享一些教学视频和文章,而且事无巨细都能找到教程。这都是非常值得利用起来的资源,所以学好英语就打开了另一扇门,能接触到更多的机会。

说了那么多,听起来好像很有经验一样,但其实我也仍然在学习。半年前我甚至对AI的理解都还是“能像人一样思考的机器”,充满了神秘,感觉遥不可及。但今天回想起来自己都觉得可笑,这一切不过是“数据科学”。知识才是力量,相信自己能学会并且坚持学下去,明天的你会感激今天的自己。


此文转载自我的个人博客:

Machine Learning 从零开始

不小心刷到,结合我的学习及工程化落地AI项目的过程,强答一波。

既然是自学,标准回答的话,其实要准确回答这个问题其实还应该需要更多背景资料:

教育背景?当前是学习还是工作状态,用于自学的时间有多少?

自学的目标是仅仅爱好,还是为工作所需,还是为了下一次 offer 的 high salary?

计算机编程相关背景知识水平及比较熟练的语言是?

线性代数以上的数学知识还有多少能记住的?

毅力有多大?能吃多少苦?

以上背景信息对于准确回答问题很重要,或许除了最后一条,其他的也不那么重要,下面开始我的故事。

先简单的说下个人背景情况:

77年生人,2000年大学毕业,本科,工业自动化专业。

自认为高考发挥失常(在当地属于重点中学,平时数理化稳居全班前五水平,文科有点偏,但保证及格以上没问题,高考结束,估分后物理、化学老师异口同声的问我“你是不是把A/B卷记错了,有没有换过来估一下”)勉强上了甘肃工业大学(现在叫:兰州理工),非985/211 。

工作后,先做的PLC组态这些专业对口的工作,后来公司要做软件,逼我改了方向,转行软件。但是,公司看重的是我“机灵、学东西快”,而不是指望我去撸代码,所以我离技术很近,又离核心代码很远。真实定位,好听一点叫:咨询顾问,正常一点叫:需求顾问(现在流行叫:产品经理),通俗一点叫:实施工程师。项目管理、需求、现场改改Bug,加点莫名其妙的需求,就这样眉毛胡子一把抓的工作任务干了几年。

鉴于我的“机灵”,没把自己干“废了”。不让写代码,不见得我不能自己学么;不碰核心代码,不代表我不能研究设计和架构的事情么。程序就是为了解决问题,那我就把问题(需求)理解透彻,确保需求不反复,我在给你交需求的时候,还能告诉你这个需求怎么实现,要注意什么,需要同步动别的哪些部分,加什么字段,状态流转怎么定义,哪些要状态要做互锁……于是,我不小心练就了公司程序员口中的“神功”:出了Bug,直接能“猜”到看什么地方的代码,大概是哪里的处理逻辑有问题,或者哪里处理不对,加个判断就好了。所以,他们喜欢写我提的需求(反复几率非常低),改Bug喜欢拉着我一起。

再后来,鉴于这种“用户、项目、产品、设计、技术、运营”都懂的“复合型”,必然的走向了技术管理这条路。

再交代下自学AI的背景及动机:

16年入职公司,视频相关的方向,产品/项目上都有算法的需求,公司之前的算法都是拿来主义或者买来主义,SDK/DLL/API无所谓,不求最好但求成本低。但是由于行业特殊,项目上需要定制的算法,公开市场是没有的,找人合作对价太高,整个团队就在讨论这个有问题、哪个没测试、还有几个算法没着落,没有结论,人心要散。

入职是总助,协助总经理管研发(避免空降没法开展工作,可以扛着老大的旗帜),然后是产品研发总。也就是说从入职开始,上面的这些问题,基本就是我的问题了,不管别人是看笑话、看热闹还是隔岸观火,我的选择只有两个:要么干出来,要么滚。

更不幸的是,我之前并未很深的接触过视频行业,更别提视频相关的算法问题。

人都倾向于自保,面对这种局面,正常的管理者的做法:梳理任务、分解任务、安排工作、定KPI,要结果。安排的人搞不定,那就向上要HC,招能搞定的人进来搞定。

但这种“套路”化的管理“艺术”不是我的风格和做事方法,我选择的是“寻死”的一条路。

项目情况:

时任项目经理的同学,内部开会张嘴就是“你tmd的……、我tmd的……”搞不下去了,要辞职,合同上的“项目经理”往后缩,死活不顶上去,那行啊,项目经理我来。

给这个“小组长”安排点活,不干:你让我干我就辞职,我只干自己选的这点事。不干就不干,你选的这点事我也能干,你走呗。

换下一个“小组长”安排活(人家的靠山是另一个销售副总,研发总监人家都都不鸟),这个一看形势不对啊,新人这么硬刚不吃威胁这一套啊,半推半就接招了(过了几个月,找到工作了,还是辞职了,但是给我了非常重要的缓冲时间)。

再换下一个安排活,这个更看明白形势了,只能主动表态干了(嗯,三个月后找到工作辞职)。

赢得了时间,我就一边跟项目,参加用户那边的项目每周例会和日常交流,深度的去了解、理解这个项目。白天干工作,晚上再精读多遍项目合同和技术协议,所有不懂的关键点全部Google弄清楚是什么。

就这样,摸清楚了项目的任务,视频领域的核心知识点和专有技术名词都是什么,也基本弄清楚了公司有什么“家底”,有哪些可选方案。

最后发现,大多数的算法基于现有合作伙伴提供的东西,是大概率可以实现的,但是问题是:因为是新东西,之前研发内部各山头在扯皮,怕搞不定担责任,都往后躲。

那只能让你无处可躲才有可能把这事解决了。

明确到某个组,明确时间,要什么资源我去协调,你负责做事,搞定功劳是你的,搞不定所有责任我来扛。然后,果不其然,验证结果是搞得定的,而且证明自己没必要再写MQ的服务,人家那边提供了。

然后,技术总监和我有一个让我心惊肉跳的对话:没想到他们还真搞定了啊,MQ我早就知道有,他们弄是已经确定不用的另一家没有,所以定的方案里要自己实现。

技术总监啊,一个公司技术一把手,项目眼看要砸锅了,心安理得的在看热闹。

有解的问题基本都有解了,下面就是无解的问题怎么变得有解了,也就是我入坑AI的开始。


下面说说我做了哪些事情。

16年国内的人脸AI公司创业已经比较火了,AI也逐渐接替了AR/VR成为了新的风口。

随着对项目需求的理解,对视频行业的理解,对视频分析技术现状的认识,再加上过去多年稀奇古怪的自学的一些看似不相关的乱七八糟的知识积累,就Google(不要问我为什么Google,以及怎么Google,我又不是去找医院,怎么能用主流搜索引擎呢。)各种能想到的关键词,了解有没有能借鉴的,不小心找到了yolo,SSD,茅塞顿开,那一刻似乎一缕阳光照进了我办公室(帝都,办公室窗户朝正北,哪里有阳光照进啊)。

项目上需要解决的问题,似乎可以抽象为:目标检测+OCR+目标状态变化检测。这就算遁入AI之门的契机。

但是,AI这么高大上的,而且都是PhD在玩耍的事情,有那个本事去搞一搞么???

花了一个多月的时间,每天下班看到12点左右再撤退,算是弄大概猜明白了什么是:目标检测、机器学习、深度学习、模型、训练、数据集、lr、深度学习框架,计算机视觉又解决了哪些问题。16、17年不像19年啊,别说中文的入门学习资料,就是英文的能让小白入门的资料都不多,而且我还面临一个问题:

项目是有时间限制的!(这句话不理解,请搜搜PMP的东西)

Caffe虽好,但是开发语言要新学,而且是学术界用的多,死活没找到怎么去项目落地工程使用的案例;

Darknet虽快,也是CPP的,但是资源少啊。

嗯,基本上我估计就是这样:沙漠中看见了一个水源,但是是海市蜃楼的那种感觉。看得见,得不到。

开始试着去深入看Caffe,准备用Caffe去尝试的时候,时间也到了17年初,不死心的还是在花时间去找更多的可能性,看到了Tensorflow,看到了官网的入门教程。几个月的努力和积攒的那点深度学习的名词和模糊的概念,发现Tensorflow简直对小白太友好了,总算有能多少看懂点的东西了,而且关键的是还有比较完整的Demo教程。

Google出品,又那么新手友好,果断决定了就入此坑,别的先不看了。

PS:在这里插一句:这几年看着tensorflow.org的一遍遍的改版和增加的内容,还有Google技术博客等官方平台增加的内容,对于Google真的只能用“卧槽”来形容。不去争论作恶不作恶的问题,人家为未来商业化铺路控制领域话语权的问题,就讲对于开源的投入和热情,只能打开一次,卧槽,又更新了,卧槽,又增加新的内容了,卧槽,老内容又改动的更友好了。

再想想,前几天回答的一个问题,一个企业的“高度”真是那么简单就能达到么?

AI公司PonyAI、RealAI、Face++、商汤未来能否达到Google、微软的高度?

基本觉得想明白了问题的抽象,也选好了技术框架,下面面临的问题就是:

让谁来干?

大半年和团队的磨合和熟悉,也基本清楚了能力及性格,我的判断是这事情交出去,不管安排给谁,基本都面临两个问题:

1、不会啊要从头学,你让我干,我就辞职;
2、你让我干行啊,项目要用就这点时间,你给我加钱么,到时间搞不出来,责任我肯定不扛。

基于这个认识和判断,我做了一个决定:谁都不安排,就我一个人自己干。能干出来,算我狠,干不出来,我认怂,说明视频和算法这碗饭我吃不了,该滚蛋就滚蛋。

我学习的顺序:

首先要说的,我去入坑学习深度学习这件事,第一是工作需要,第二有极大压力,第三不求甚解关键是先弄出来,第四时间是我的敌人(项目我要参与管理,研发/产品还要要管,日常事务性工作要做,项目上线的日子就不远了),所以我的学习顺序应该是不算非常合理,但又不是没道理的。

基于自己对任务的定义,要做可行不可行的验证,第一步我先尝试去做分类

整个过程,和所有当时知道的知识点,就是参考了一篇博客(好像是google技术博客,记不清了),名字大概是:“learning deep learning without a phd”,呵呵,我恰好是渣渣本科,without PhD。

百度/Google了大概600张图片(这就是行业应用的特殊性,找点图片都挺难),照这最简单的图像分类的教程,就靠这点图片,分了4类开始做转移学习,翻朋友圈翻出来点当时的记录(这些图是夏天的了,好像是准备DD的PPT用的了,已经增加了OCR部分的Demo):

当时为了“显摆”自己训练的模型还是靠谱的,特意拿google的1000分类的模型做了对比,最后一张也加了OCR的Demo测试。

嗯,就是这么无知无畏,目标检测还没弄明白呢,OCR也同步下手整了。

可以看到,当时的图片都是大小不一的,为啥呢?因为我当时根本不懂还有归一化这事情。

硬件平台么,自己的12年的8G+i7 2.0的Macbook Air(当年高配哦),为啥不用GPU,心里就没底,哪里好意思向公司伸手要钱配硬件?


识别搞定,下一步就是目标检测了

在公司高管群里把做出来的东西show了下,然后就提要求了:要销售、工程、实施人员在现场给我拍点集装箱的照片回来,数量越多越好,怎么也要来个3000张(嗯,这就是多,再多我也不敢提要求啊)。

对了,Python之前算是看过,也学过一点,基本代码还是能写的(这也算是好奇心重,稀里糊涂做了点技术储备吧。)

等啊等,终于等到了一批照片,照片来了我发现傻逼了。

因为我自己都不知道对数据集的要求,自然没法对照片提要求,拿回来一看五花八门。

虽然我不知道归一化,但是凭直觉我觉得照片大小不一致肯定不是一件好事,于是就先把图片resize到一样尺度(Mac好啊,这种事脚本都不用,一个工作流就搞定)

如果从头跟着tensorflow官网教程跑过的同学,就应该知道上面的这个分类的转移学习,是直接把原图片丢进去训练的,并没有转成TFRecord。标注工具么,找了LabelImg,标成VOC格式,然后再转呗。

就那点Python水平,也很久没有正经写代码,过程还是有点心塞啊。这时候就体现出来有独立办公室的好处了(嗯,咱是高管,领导呢),有沙发,再买个行军床回来,带过来一套出差用的洗漱用品,完美。于是就开始了一段时间的白天上班晚上炼丹的日子。

老旧MBA,那点CPU的算力,训练迭代简直就是煎熬,看着CPU温度没事干就飙到快100度,手都不敢摸了,太烫了。

https://www.zhihu.com/video/1135255835189100544

基本就是这样的速度,一轮跑一天,睡醒回来一看,有可能就过头了。

然后就是验证模型咯。

嗯,在我设计的场景中,我觉得是需要有这4类。

做到这个份上,我已经听到了办公室外的“声音”:没想到还真给他做出来看起来能用的样子了啊。

毕竟要做实时视频流的验证才行啊,申请弄了个双1080Ti的机子,京东两万多搞定,回来享受了一把组装机子的快乐。

然后弄了点视频回来,做视频流的验证:

https://www.zhihu.com/video/1135257797288628224

到这个份上,基本证明深度学习搞出来算法,去实现项目上的需求,是可行的。然后就是解决OCR的问题了,具体不多说,能想的办法都想了,标注这件事情,标的我看着屏幕眼泪直流啊。。。。


毕竟我的本职工作是产研总,不是一个AI入门炼丹人员,我这种渣渣代码水平,0基础,还是下班业余时间花了几个月能大概弄明白了,交出去你们总有信心拿下了把?

那段时间我白天也没闲着,一方面是招聘、换血,一方面我们团队还有一大堆人在同步做别的事情,可能比我这个更难,对公司未来的价值更大(能被整体收购,这个产品技术贡献度不小啊)。

到这个阶段,研发中心早已变成铁军,放几张做视频会议产品的团队的照片,记念以及感谢。


我的从0开始入门AI的过程大体如此。


40岁,0基础,代码还是渣渣水平,也不是什么名校学霸,就一个本科,这个起步基础真不高吧

我也不是一点优势没有,多年的摸爬滚打,对于软件工程的深刻理解,思考能力,对于问题的抽象能力,时间管理能力,解决问题能力以及带兵打仗的能力(如果我没有及时、快速解决团队战斗力的问题,哪里能有心思去无数个通宵尝试解决有可能失败的问题)。这些软实力,是时间积累的财富。(顺便喷一下35岁就是裁员目标的问题,软实力都是靠时间和无数战斗积累,年龄不到,很多事情不是不能干,但是谁去承担年轻带来的风险)


正式回答题主问题:

除本题目下各高赞答案给出的学习路线、方法以及参考资料外,学习任何新知识,最重要的都是:

动机以及毅力,

付出以及方法,

解决什么问题。


毕竟,技术的本质是为了解决问题,而不是为了“炫技”。

分享一下Per Harald Borgen的故事,一位零基础自学机器学习的年轻人,也许能对自学人工智能的同学有所启发:

Per Harald Borgen来自挪威,从事计算机软件方面的工作。2014年他对机器学习产生了兴趣,2015年开始入门,然而,在5天的基础学习中,他发现入门比想象的容易。在之后的一年,边工作边学习,他开发出了自己的机器学习算法并派上了用场。

入门之前,Per Harald Borgen已经通过阅读、视频课程、理论课程,对机器学习有了基本的概念,但他仍然不能将知识转换为代码,于是希望改变。在一周5天的时间里,他的学习路线是这样的:

星期一:学习实例,逐步了解 Scikit 学习。

Per Harald Borgen选择了一个“使用机器学习投资股票”的教程。过程中,他发现,获取和清理数据比机器学习更耗时。因此,编写脚本抓取文件或网络中的数据的能力是一个机器学习“极客”的必备技能。

星期二:尝试用机器学习解决实际问题。

“给定一个人的教育水平,年龄和收入信息,计算机能不能预测其性别?”Per Harald Borgen对这个问题产生了兴趣。观察和清理银行提供的数据集,使用 Scikit Learn map 找到一个适合的算法。虽然最后预测的成功率只有 63%,不过比抛硬币准多了,而且能解决实际问题,他备受鼓舞。

星期三:从头开始,学写算法。

在玩转各种 Scikit Learn 模块后,Per Harald Borgen觉得自己其实不明白后台发生了什么。好在coursera 课程详细介绍了几种算法的工作原理,描述了最底层最基础的概念。他就用Python从头编码了一个线性回归算法。追溯源头、了解后台细节,Per Harald Borgen觉得是一种高效的学习技巧。

星期四:研究Kaggle的入门教程

Kaggle 是一个机器学习的竞赛平台,你可以在其中提交公司或组织发布的问题的解决方案。Per Harald Borgen研究了 Kaggle 的入门教程,还做了一点点自然语言处理。他建议在对机器学习有一些理论和实践经验后再尝试 Kaggle,否则可能没什么收获,反而觉得沮丧。

星期五:继续Kaggle教程的学习。

有什么比一边学习,一边实践,一边交流,更能锻炼和巩固人的呢?用一周时间让自己完全沉浸在一个新的项目当中。Per Harald Borgen学习机器学习的路并不总是顺顺利利,比如成功挂掉了Coursera 机器学习课程。

原因不是课程的错,只是对一个初学者来说,课程内容太难,很难跟上。再加上用的是一门新的编程语言Octave,同样十分具有挑战性,自己也最终放弃了。

适合自己的才是最好的,事后,Per Harald Borgen总结出了经验。要么是用机器学习图书馆来进行编码任务,而不是从头创建算法,又或者至少是用自己了解的编程语言。

对于新手来说,学习一门新的语言,并同时编码机器学习算法,实在是太难了。应该从简单和容易操作的东西开始学,而不是困难和理论性的。

同样挂掉的还有神经网络课程。Per Harald Borgen想要复制在机器学习周取得的成功,将经验用在神经网络,结果失败了。原因在于,时间和精力容易被分散。

不同于机器学习周,当时自己处在一个训练营地,周围都是机器学习的爱好者,每天就专注着学习机器学习。而学习神经网络,却没有这样一个相对封闭的环境和积极的氛围。

但是,至少也开始着手从事了神经网络的研究,并且也慢慢掌握了要领。终于在几个月后,成功编写了自己的第一条网络。

一年后,成功为公司开发了个算法

2015 年圣诞假期,距离一周的入门学习已经过去了10个月,Per Harald Borgen已经积累了一定的实践经验和知识储备,他再一次鼓起勇气,决定试验 Kaggle。

他花了相当一段时间来试验各种算法,用于测试 Kaggle 的住宅报价转换,奥托集团产品分类,以及自行车共享需求竞赛。通过试验各种算法和数据,使结果得到不断改善,这是他最大的收获,也学会了要在做机器学习时相信自己的逻辑。

在做了以上所有工作之后,Per Harald Borgen觉得自己已经准备好在实际工作中做一个机器学习项目。

他通过阅读对企业的描述和简介训练出一套算法,来帮助自己任职的公司Xeneta更好地发现潜在客户,确定销售线索。并且实际证明,这替销售部门的员工节省了大量的时间。

在他的开发日志里写着:“走到这一步确实是一个漫长的旅程,但其实也很快。在我开始一周入门的学习时,我完全没想过自己能在一年的时间内熟练使用机器学习。但是这是100%有可能的。而如果我能做到,你也一定可以。”

(参考文献:dataconomy.com/2016/10/

sohu.com/a/129004140_30

TOP
Copyright © 2020-2023 半岛官方有限公司 版权所有