开启辅助访问
 找回密码
 立即注册

普通程序员如何正确学习人工智能方向的知识?

欧阳寿 回答数20 浏览数288610
“互联网+”已经发展的差不多了,应有尽有,空间不大,下个浪潮会不会是“AI+”?那么作为一个普通程序员,如何提前向人工智能(AI)靠拢?
aoyonghua | 未知
本人码农,从六月开始正式接触机器学习(其实五年前的本科毕设就是在生物信息领域应用神经网络的项目,但是非常浅薄),深吸一口气,先要声明“人之患在好为人师”,我用的步骤只是适合我,下面的内容仅供参考。

第一步:复习线性代数。(学渣的线代忘了好多-_-||)
    懒得看书就直接用了著名的——麻省理工公开课:线性代数,深入浅出效果拔群,以后会用到的SVD、希尔伯特空间等都有介绍;广告:边看边总结了一套笔记 GitHub - zlotus/notes-linear-algebra: 线性代数笔记。
第二步:入门机器学习算法。
    还是因为比较懒,也就直接用了著名的——斯坦福大学公开课 :机器学习课程,吴恩达教授的老版cs229的视频,讲的非常细(算法的目标->数学推演->伪代码)。这套教程唯一的缺点在于没有介绍最近大火的神经网络,但其实这也算是优点,让我明白了算法都有各自的应用领域,并不是所有问题都需要用神经网络来解决;多说一点,这个课程里详细介绍的内容有:一般线性模型、高斯系列模型、SVM理论及实现、聚类算法以及EM算法的各种相关应用、PCA/ICA、学习理论、马尔可夫系列模型。课堂笔记在:CS 229: Machine Learning (Course handouts),同样非常详细。广告:边看边总结了一套笔记 GitHub - zlotus/notes-LSJU-machine-learning: 机器学习笔记
第三步:尝试用代码实现算法。
    依然因为比较懒,继续直接使用了著名的——机器学习 | Coursera ,还是吴恩达教授的课程,只不过这个是极简版的cs229,几乎就是教怎么在matlab里快速实现一个模型(这套教程里有神经网络基本概念及实现)。这套课程的缺点是难度比较低,推导过程非常简略,但是这也是它的优点——让我专注于把理论转化成代码。广告:作业参考 GitHub - zlotus/Coursera_Machine_Learning_Exercises: Machine Learning by Andrew Ng from Coursera
第四步:自己实现功能完整的模型——进行中。
    还是因为比较懒,搜到了cs231n的课程视频 CS231n Winter 2016 - YouTube ,李飞飞教授的课,主讲还有Andrej Karpathy和Justin Johnson,主要介绍卷积神经网络在图像识别/机器视觉领域的应用(前面神经网络的代码没写够?这门课包你嗨到爆~到处都是从零手写~)。这门课程的作业就更贴心了,直接用Jupyter Notebook布置的,可以本地运行并自己检查错误。主要使用Python以及Python系列的科学计算库(Scipy/Numpy/Matplotlib)。课堂笔记的翻译可以参考 智能单元 - 知乎专栏,主要由知友杜客翻译,写的非常好~在多说一点,这门课对程序员来说比较走心,因为这个不像上一步中用matlab实现的作业那样偏向算法和模型,这门课用Python实现的模型同时注重软件工程,包括常见的封装layer的forward/backward、自定义组合layer、如何将layer组成网络、如何在网络中集成batch-normalization及dropout等功能、如何在复杂模型下做梯度检查等等;最后一个作业中还有手动实现RNN及其基友LSTM、编写有助于调试的CNN可视化功能、Google的DeepDream等等。(做完作业基本就可以看懂现在流行的各种图片风格变换程序了,如 cysmith/neural-style-tf)另外,这门课的作业实现非常推崇computational graph,不知道是不是我的幻觉……要注意的是讲师A.K的语速奇快无比,好在YouTube有自动生成解说词的功能,准确率还不错,可以当字幕看。广告:作业参考 GitHub - zlotus/cs231n: CS231n Convolutional Neural Networks for Visual Recognition (winter 2016) (我的在作业的notebook上加了一些推导演算哦~可以用来参考:D)

因为最近手头有论文要撕,时间比较紧,第四步做完就先告一段落。后面打算做继续业界传奇Geoffrey Hinton教授的Neural Networks for Machine Learning | Coursera,再看看NLP的课程 Stanford University CS224d: Deep Learning for Natural Language Processing,先把基础补完,然后在东瞅瞅西逛逛看看有什么好玩的……

PS:一直没提诸如TensorFlow之类的神器,早就装了一个(可以直接在conda中为Tensorflow新建一个env,然后再装上Jupyter、sklearn等常用的库,把这些在学习和实践ML时所用到的库都放在一个环境下管理,会方便很多),然而一直没时间学习使用,还是打算先忍着把基础部分看完,抖M总是喜欢把最好的留在最后一个人偷偷享受2333333(手动奸笑

PS**2:关于用到的系统性知识,主要有:
    线性代数,非常重要,模型计算全靠它~一定要复习扎实,如果平常不用可能忘的比较多;
    高数+概率,这俩只要掌握基础就行了,比如积分和求导、各种分布、参数估计等等。(评论中有知友提到概率与数理统计的重要性,我举四肢赞成,因为cs229中几乎所有算法的推演都是从参数估计及其在概率模型中的意义起手的,参数的更新规则具有概率上的可解释性。对于算法的设计和改进工作,概统是核心课程,没有之一。答主这里想要说的是,当拿到现成的算法时,仅需要概率基础知识就能看懂,然后需要比较多的线代知识才能让模型高效的跑起来。比如最近做卷积的作业, 我手写的比作业里给出的带各种trick的fast函数慢几个数量级,作业还安慰我不要在意效率,岂可修!)
需要用到的编程知识也就是Matlab和Numpy了吧,Matlab是可以现学现卖的;至于Python,就看题主想用来做什么了,如果就是用来做机器学习,完全可以一天入门,如果想要做更多好玩的事,一天不行那就两天。(贴一个Python/Numpy的简要教程:Python Numpy Tutorial,是cs231n的课堂福利。)

我感觉机器学习的先修就这么点,记得Adobe的冯东大神也说过机器学习简直是21世界的黑科技——因为理论非常简单但是效果惊人的好。

====

既然提到好玩的,墙裂推荐 Kaggle: Your Home for Data Science ,引用维基上的介绍:
Kaggle是一个数据建模和数据分析竞赛平台。企业和研究者可在其上发布数据,统计学者和数据挖掘专家可在其上进行竞赛以产生最好的模型。这一众包模式依赖于这一事实,即有众多策略可以用于解决几乎所有预测建模的问题,而研究者不可能在一开始就了解什么方法对于特定问题是最为有效的。Kaggle的目标则是试图通过众包的形式来解决这一难题,进而使数据科学成为一场运动。
用Deepseek满血版问问看
回复
使用道具 举报
rngBvRpc | 未知
排名较高的几个回答有一些问题:1.起点较高,不适合题主所问的普通程序员;2.资源很多,但是没有主次之分,全部学习的话时间久,难度曲线也高低不平;3.缺乏对AI领域的介绍,AI并不仅仅是机器学习。本人也算是一名普通程序员,也刚转入AI领域,因此结合自身经验,想回答这个问题。我的回答有以下特色:较为简单,介绍学习资源不多,但有主次之分。

一. 本文的目的

本文的目的是给出一个简单的,平滑的,易于实现的学习方法,帮助“普通”程序员踏入AI领域这个门。这里,我对普通程序员的定义是:拥有大学本科知识;平时工作较忙;自己能获取的数据有限。因此,本文更像是一篇 “from the scratch” 的AI入门教程。

二. AI领域的特点

AI,也就是人工智能,并不仅仅包括机器学习。曾经,符号与逻辑被认为是人工智能实现的关键,而如今则是基于统计的机器学习占据了主导地位。最近火热的深度学习正是机器学习中的一个子项。目前可以说,学习AI主要的是学习机器学习。但是,人工智能并不等同于机器学习,这点在进入这个领域时一定要认识清楚。关于AI领域的发展历史介绍推荐看周老师写的《机器学习简介》。下面一个问题是:AI的门好跨么?其实很不好跨。我们以机器学习为例。在学习过程中,你会面对大量复杂的公式,在实际项目中会面对数据的缺乏,以及艰辛的调参等。如果仅仅是因为觉得这个方向未来会“火”的话,那么这些困难会容易让人放弃。考虑到普通程序员的特点,而要学习如此困难的学科,是否就是没有门路的?答案是否定的。只要制定合适的学习方法即可。

三. 学习方法

学习方法的设定简单说就是回答以下几个问题:我要学的是什么?我怎样学习?我如何去学习?这三个问题概括说就是:学习目标,学习方针与学习计划。学习目标比较清楚,就是踏入AI领域这个门。这个目标不大,因此实现起来也较为容易。“过大的目标时就是为了你日后放弃它时找到了足够的理由”。学习方针可以总结为 “兴趣为先,践学结合”。简单说就是先培养兴趣,然后学习中把实践穿插进来,螺旋式提高。这种方式学习效果好,而且不容易让人放弃。有了学习方针以后,就可以制定学习计划,也称为学习路线。下面就是学习路线的介绍。

四. 学习路线

我推荐的学习路线是这样的,如下图:


这个学习路线是这样设计的:首先了解这个领域,建立起全面的视野,培养起充足的兴趣,然后开始学习机器学习的基础,这里选择一门由浅入深的课程来学习,课程最好有足够的实验能够进行实战。基础打下后,对机器学习已经有了充足的了解,可以用机器学习来解决一个实际的问题。这时还是可以把机器学习方法当作一个黑盒子来处理的。实战经验积累以后,可以考虑继续进行学习。这时候有两个选择,深度学习或者继续机器学习。深度学习是目前最火热的机器学习方向,其中一些方法已经跟传统的机器学习不太一样,因此可以单独学习。除了深度学习以外,机器学习还包括统计学习,集成学习等实用方法。如果条件足够,可以同时学习两者,一些规律对两者是共通的。学习完后,你已经具备了较强的知识储备,可以进入较难的实战。这时候有两个选择,工业界的可以选择看开源项目,以改代码为目的来读代码;学术界的可以看特定领域的论文,为解决问题而想发论文。无论哪者,都需要知识过硬,以及较强的编码能力,因此很能考察和锻炼水平。经过这个阶段以后,可以说是踏入AI领域的门了。“师傅领进门,修行在个人”。之后的路就要自己走了。

下面是关于每个阶段的具体介绍:

0. 领域了解:在学习任何一门知识之前,首先第一步就是了解这个知识是什么?它能做什么事?它的价值在什么地方?如果不理解这些的话,那么学习本身就是一个没有方向的舟,不知道驶向何处,也极易有沉船的风险。了解这些问题后,你才能培养出兴趣,兴趣是最好的引路人,学习的动力与持久力才能让你应付接下来的若干个阶段。关于机器学习是什么,能做什么,它与深度学习以及人工智能的关系,可以看我写的博客 从机器学习谈起。

1. 准备工作:如果你离校过久,或者觉得基础不牢,最好事先做一下准备复习工作。“工欲善其事,必先利其器”。以下的准备工作不多,但足以应付后面阶段的学习。

      数学:复习以下基本知识。线性代数:矩阵乘法;高数:求导;概率论:条件与后验概率。其他的一些知识可以在后面的学习的过程中按需再补;英文:常备一个在线英文词典,例如爱词霸,能够不吃力的看一些英文的资料网页;翻墙:可以随时随地上Google,这是一个很重要的工具。不是说百度查的不能看,而是很多情况下Google搜出来的资料比百度搜的几十页的资料还管用,尤其是在查英文关键字时。节省时间可是很重要的学习效率提升;


2. 机器学习:机器学习的第一门课程首推Andrew Ng的机器学习 (Machine Learning - Stanford University | Coursera)。这门课程有以下特点:难度适中,同时有足够的实战例子,非常适合第一次学习的人。在 @子实 的回答下首推了cs229 (斯坦福大学公开课 :机器学习课程) 这门课程,但我这里不推荐,为什么,原因有以下:

      时间:cs229 的时间太早,一些知识已经跟不上当今的发展,目前最为火热的神经网络一笔带过。而Cousera上神经网络可是用了两个课时去讲的!而且非常详细;教学:Ng在cs229 时候的教学稍显青涩,可能是面对网络教学的原因。有很多问题其实他都没有讲清楚,而且下面的人的提问其实也很烦躁,你往往不关心那些人的问题。这点在Coursera上就明显得到了改善,你会发现Ng的教学水平大幅度改善了,他会对你循循善诱,推心置腹,由浅入深的教学,在碰到你不明白的单词术语时也会叫你不要担心,更重要的,推导与图表不要太完善,非常细致清晰,这点真是强力推荐;字幕:cs229 的字幕质量比Coursera上的差了一截。Coursera上中文字幕翻译经过了多人把关,质量很有保证;作业:cs229 没有作业,虽然你可以做一些,但不会有人看。这点远不如Coursera上每周有deadline的那种作业,而且每期作业提交上去都有打分。更重要的是,每期作业都有实际的例子,让你手把手练习,而且能看到自己的成果,成就感满满!


3. 实践做项目:学习完了基础课程,你对机器学习就有了初步了解。现在使用它们是没有问题的,你可以把机器学习算法当作黑盒子,放进去数据,就会有结果。在实战中你更需要去关心如何获取数据,以及怎么调参等。如果有时间,自己动手做一个简单的实践项目是最好的。这里需要选择一个应用方向,是图像(计算机视觉),音频(语音识别),还是文本(自然语言处理)。这里推荐选择图像领域,这里面的开源项目较多,入门也较简单,可以使用OpenCV做开发,里面已经实现好了神经网络,SVM等机器学习算法。项目做好后,可以开源到到 Github 上面,然后不断完善它。实战项目做完后,你可以继续进一步深入学习,这时候有两个选择,深度学习和继续机器学习;

4. 深度学习:深度学习是目前最火热的研究方向。有以下特点:知识更新快,较为零碎,没有系统讲解的书。因此学习的资源也相对零散,下面是一些资源介绍。其中不推荐的部分并不代表不好,而是在这个初学阶段不合适:

      推荐,UFLDL: 很详尽的推导,有翻译,且翻译质量很高;推荐,Deep learning (paper):论文,高屋建瓴,一览众山小;推荐,Neural networks and deep learning:由浅入深;推荐,Recurrent Neural Networks: RNN推导初步学习的最佳教程;



      不推荐,Neural Networks for Machine Learning - University of Toronto | Coursera:太难;不推荐,Deep Learning (book):面面俱到,但缺乏深入;不推荐,CS231n:翻译与字幕问题;


5. 继续机器学习:传统的机器学习有如下特点,知识系统化,有相对经典的书。其中统计学习(代表SVM)与集成学习(代表adaboost)是在实践中使用非常多的技术。下面是相关资源:

      推荐,机器学习:如果是在以前,机器学习方面的经典教材首推PRML,但现在周老师的书出来以后,就不再是这样了。首先推荐读周老师的书。这本书有一个特点,那就是再难的道理也能用浅显精炼的语言表达出来。正如周老师的名言:“体现你水平的地方是把难的东西讲容易了,而不是把容易的东西讲难,想把一个东西讲难实在太简单”;不推荐,Pattern Recognition And Machine Learning:当前阶段不推荐。PRML是以贝叶斯的观点看待很多机器学习方法,这也是它的一大特色。但对于初学者来说,这种观点其实并无必要。而且此书没有中文翻译,当前阶段硬啃很容易放弃;


6.开源项目:
当知识储备较为充足时,学习可以再次转入实践阶段。这时候的实践仍然可以分两步走,学习经典的开源项目或者发表高质量的论文。开源项目的学习应该以尽量以优化为目的,单纯为读代码而学习效果往往不太好。好的开源项目都可以在Github 里搜索。这里以深度学习为例。深度学习的开源优秀库有很多,例如torch,theano等等,这里列举其中的两个:

      推荐,DeepLearnToolbox:较早的一个深度学习库,用matlab语言撰写,较为适合从刚学习的课程转入学习推荐,tensorflow:Google的开源库,时至今日,已经有40000多个star,非常惊人。


7.会议论文:一般较好的课程都会推荐你一些论文。一些著名的技术与方法往往诞生于一些重要的会议。因此,看往年的会议论文是深入学习的方法。在这个阶段,如果是在校学生,可以选择某个课题,以发论文为目的来学习研究。一般来说,论文是工作的产物。有时候一篇基于实验的论文往往需要你写很多代码,利用一些开源项目。因此开源项目的学习与读会议论文的工作两者之间是有相关的。两者可以同时进行学习。关于在哪里看论文,可以看一下CCF推荐排名,了解一下这个领域里有哪些优秀的会议。下面介绍两个图像与机器学习领域的著名顶级会议:

      CVPR:与另两个会议ICCV和ECCV合称计算机视觉领域的三大会。Conference on Neural Information Processing Systems:简称NIPS,许多重要的工作发表在这上面,例如关于CNN的一篇重要论文就是发表在上面。


8.自由学习:到这里了,可以说是进入这个门了。下面可以依据兴趣来自由学习。前阶段不推荐的学习资源也可随意学习,下面是点评。

      cs229 (斯坦福大学公开课 :机器学习课程):Ng写的讲义很不错,其中关于SVM的推导部分很清晰,想学习SVM推荐;Neural networks (Neural Networks for Machine Learning - University of Toronto | Coursera ):大牛的视角跟人就是不一样,看看Hinton对神经网络是怎么看的,往往会让你有种原来如此的感悟。其实看这门课程也等同于读论文,因为几乎每节课的参考资料里都有论文要你读;cs231n (CS231n: Convolutional Neural Networks for Visual Recognition):最新的知识,还有详细的作业。国内应该有团队对字幕进行了翻译,可以找找;PRML (Pattern Recognition And Machine Learning):作为一门经典的机器学习书籍,是很有阅读必要的,会让你对机器学习拥有一个其他的观察视角。


五. 总结

本文的目的是帮助对AI领域了解不深,但又想进入的同学踏入这个门。这里只说踏入,是因为这个领域的专精实在非常困难,需要数年的积累与努力。在进行领域学习前,充分认识自己的特点,制定合适的学习方法是十分重要的。首先得对这个领域进行充分了解,培养兴趣。在学习时,保持着循序渐进的学习方针,不要猛进的学习过难资源;结合着学习与实践相辅的策略,不要只读只看,实际动手才有成就感。学习某个资源时要有充分的目的,不是为了学开源项目而看代码,而是为了写开源项目而看;不是为了发论文而写论文,而是为了做事情而写论文。如果一个学习资源对你过难,并不代表一定是你的问题,可能是学习资源的演讲或撰写人的问题。能把难的问题讲简单的人才是真正有水平的人。所以,一定要学习优质资源,而不是不分青红皂白的学习。最后,牢记以兴趣来学习。学习的时间很长,过程也很艰难,而只有兴趣才是让你持之以恒,攻克难关的最佳助力。

谨以此文与诸位在学海中乘舟的各位共勉。
回复
使用道具 举报
xfc99 | 未知
谢邀,我曾经也只是一个只懂 ACM 竞赛相关算法的普通程序员,误打误撞接触到了数据挖掘,之后才开始系统地了解机器学习相关的知识,如今已经基本走上了正轨,开始了走向 Data Scientist 的征途。
但是最高赞的一篇回答居然是关于 Deep Learning 的,这感觉就想是有人问我这山地车好高级,能不能教我怎么换挡,我告诉他说,这车太low了,我教你开飞机吧。我想即使目前开飞机(Deep Learning)的门槛一再降低,如果你没有一个优秀的基础,即使是老司机也是容易翻车的。
所以我给 @子实的回答点了赞:普通程序员如何向人工智能靠拢? - 子实的回答 - 知乎
简单认真回答一下,首先作为一个普通程序员,C++ / Java / Python 这样的语言技能栈应该是必不可少的,其中 Python 需要重点关注爬虫、数值计算、数据可视化方面的应用,主要是:
<img src="http://pic4.zhimg.com/v2-e83cbfd9e2c33a2f8da49e131e778867_b.png" data-rawwidth="739" data-rawheight="197" class="content_image" width="739" data-original="http://pic4.zhimg.com/v2-e83cbfd9e2c33a2f8da49e131e778867_r.png">可以参考:
可以参考:怎么用最短时间高效而踏实地学习 Python?
如果日常只编写增删改查的代码的话,那可能数学已经忘得差不多了,需要重温线性代数和微积分的基础知识,这会为之后的学习立下汗马功劳。
再然后就是统计学相关基础,我在知乎专栏——BI学习大纲中写过,贴过来仅供参考:
相关性分析(相关系数r、皮尔逊相关系数、余弦相似度、互信息)
    回归分析(线性回归、L1/L2正则、PCA/LDA降维)聚类分析(K-Means)分布(正态分布、t分布、密度函数)指标(协方差、ROC曲线、AUC、变异系数、F1-Score)显著性检验(t检验、z检验、卡方检验)A/B测试
推荐阅读:李航 —《统计学习方法》


如果以上知识都具备了,再往后的路就可以开得很快了,可以一直冲刺到 Deep Learning。但在这之前我们还是需要了解不少机器学习的基础:
    关联规则(Apriori、FP-Growth)
    回归(Linear Regression、Logistics Regression)
    决策树(ID3、C4.5、CART、GBDT、RandomForest)SVM(各种核函数)
    推荐(User-CF、Item-CF)


推荐阅读:《集体智慧编程》、Andrew Ng — Machine Learning Coursera from Stanford
此时的你或许已经有一块可以用的敲门砖了,但离工业界实际应用还有比较大的距离,主要差距就在于 Feature Engineering,这也是我在面试考察有经验的人面前比较注重的点。这一块中有一些比较基础的知识点,简单罗列如下:
    可用性评估:获取难度、覆盖率、准确率
    特征清洗:清洗异常样本采样:数据不均衡、样本权重单个特征:无量纲化(标准化、归一化)、二值化、离散化、缺失值(均值)、哑编码(一个定性特征扩展为N个定量特征)数据变换:log、指数、Box-Cox降维:主成分分析PCA、线性判别分析LDA、SVD分解特征选择:Filter(相关系数、卡方检验)、Wrapper(AUC、设计评价函数A*、Embedded(L1-Lasso、L2-Ridge、决策树、DL)衍生变量:组合特征特征监控:监控重要特征,fa特征质量下降


我放一张公司内部算法培训关于特征工程的 PPT,仅供学习参考:



再往后你就可以在技能树上点几个酷炫的了:
    提升
      Adaboost加法模型xgboost
    SVM
      软间隔损失函数核函数SMO算法libSVM
    聚类
      K-Means并查集K-Medoids聚谱类SC
    EM算法
      Jensen不等式混合高斯分布pLSA
    主题模型
      共轭先验分布贝叶斯停止词和高频词TF-IDF
    词向量
      word2vecn-gram
    HMM
      前向/后向算法Baum-WelchViterbi中文分词
    数据计算平台
      SparkCaffeTensorflow



推荐阅读:周志华——《机器学习》


可以看到,不管你是用 TensorFlow 还是用 Caffe 还是用 MXNET 等等一系列平台来做高大上的 Deep Learning,在我看来都是次要的。想要在这个行业长久地活下去,内功的修炼要比外功重要得多,不然会活得很累,也很难获得一个优秀的晋升空间。


然后你就可以快乐地捣腾一些有意思的项目了,比如最近我们做了这个:
绘绘 - 利用深度学习让大师为你创作艺术作品


最后,关注你所在行业的最新 paper,对最近的算法理论体系发展有一个大致印象,譬如计算广告领域的几大经典问题:



相关 paper 的 gitlist 仅供参考:wnzhang/rtb-papers
最最后,也要时刻关注能帮你偷懒的工具,它将让你拥有更多的时间去调参:
Python 网页爬虫 & 文本处理 & 科学计算 & 机器学习 & 数据挖掘兵器谱 - Python - 伯乐在线
-------------------------------------------------------------------
广告时间:如果你对以上学习路径有什么困惑,或者你对以下问题感兴趣:
* 怎么定义一个算法工程师?它与其它传统研发岗位的区别是什么?
* 算法工程师所需的内功和外功是什么?
* 算法工程师拥有怎样的不可替代性及成长性?
* 如何才能最快速度成长为一名合格的算法工程师?
* 如何才能通过国内大厂的算法岗面试?
欢迎来我的知乎 Live  (。・∀・)ノ゙
SimonS 的知乎 Live - 如何成为当下合格的算法工程师
SimonS 的知乎 Live - 如何快速攻克传统算法和数据结构
SimonS 的知乎 Live - 机器学习入门需要哪些数学基础
回复
使用道具 举报
丫婷﹁]] | 未知
大学是信息安全,可以说是IT众小专业中和机器学习距离最远的一个。读研转机器学习,也许经历对你会有帮助。

假设你有程序员的基础,懂至少一门语言,和基础的数学知识。

首先,可以先找一个机器学习的工具玩起来。比如说现在很火的MXNet,Tensorflow…等
这个过程是为了培养亲切感,对机器学习有初步感性认识。
我来做毕设前,导师让我看语言模型。我对着一篇大牛的博士论文看了半个月,过来之后,导师让我改一个复杂的模型,我是懵逼的。
理论和数学公式我都懂!可是这坨高大上的神经网络在计算机里到底是一个怎样的东西啊?…这是我当时内心真实写照。跑上了工具一切都清晰起来了。
所以现在带本科生,都是先跑上工具,然后继续后面的基础知识完备和深入研究。

有了感性认识以后,可以开始补机器学习的底层基础了。
首先是概率论,不确定你学过没,学过不用的话大概率也忘了,而且大概率当时学的时候并不知道这个有什么用。
矩阵理论和线性代数同理。
最优化理论也是重中之重。


这四个基础数学知识学完之后,可以开始学上层的基础了。
机器学习可远远不止是现在大热的神经网络。
推荐Andrew的笔记,很多节~网上有很多译版,即使是英文原版也非常全面易懂。
或者是最近也很火的西瓜书(周志华的机器学习)

做完以上几点就挺不容易的。

在学晦涩的数学和机器学习基础算法的同时,可以转转工具玩玩,实现一下最近比较火的模型。无论是语音,图像,NLP或者什么自己感兴趣的,调节调节。这个过程中,你一定对工具的上层代码都熟悉了。

到这一步:知道数学原理,精通基础经典机器学习算法,会用机器学习工具,会改工具,已经算一个比较合格的机器学习程序员了吧。

接下来,还想继续深入的话,工程方面可以选择读读工具的底层实现代码,涉及到cuda运算,或者进程调度,分布式编程这方面的。
自己完完全全写个神经网络,或者写个机器学习工具练练手。学习下GPU编程,多线程编程,多机多卡,分布式等等。

科研方面就可以在数学原理,模型结构,或者应用,数据上动动脑子做文章了。


未完待续…
回复
使用道具 举报
HellyWright | 未知
“阿里是讲‘让天下没有难做的生意’,做人工智能的是讲‘让天下没有难吹的牛’。”这是中国科学院深圳先进技术研究院副院长汤晓鸥于2017年10月12日在杭州的云栖大会上发表演讲时说过的一句话。



(学术界的段子手,汤晓鸥)


人工智能(Artificial Intelligence)是这几年科技圈最火的名词之一,以深度学习为代表的机器学习在近几年取得了很多令人震惊的成果,并且普遍应用到了诸如图像识别、增强、风格转换、生成,语音识别、翻译,文章生成以及无人驾驶等诸多领域,在互联网、科技和资本圈内备受重视。


广义的说,人工智能包含诸多不同的方法,其主旨是让程序像一个智能体一样解决问题。机器学习是实现人工智能的一种方法,它不完全依靠预先设计,而是从数据中进行总结,达到模拟记忆、推理的作用。包括诸如支持向量机(SVM)、各类基于决策树的算法(包括Boosting、Bagging、Random Forest等),各类基于人工神经网络的算法(例如简单网络及深度网络等),以及多方法的集成等。


随着硬件设备功能的日渐强大,以及互联网大数据带来丰富的数据来源,无疑让通过多种、多层、多方法集成的机器学习有着更深更广的发展空间。尽管目前大部分人工智能实例使用的并不是基于机器学习的方法,但其中有不少领域在向机器学习迁移。可以预见的是,人工智能将在机器学习等诸多方法的推进下,在更广泛的领域中辅助人类解决问题,在许多工作中,使用几乎能够无限扩展的计算力来替代部分人力。





人工智能的飞速崛起,使得该领域出现了巨大的人才缺口,据说在帝都,一个机器学习算法的岗位拿到100K的薪水也并不是一件很困难的事情,这刺激了普通程序员学习人工智能,迫切希望在人工智能大热时实现转行。可是许多程序员不知道该如何快速有效地学习人工智能。


其实,既然已经具备了普通程序员的功底,再转人工智能方向并非难事,接下来我们就具体分析一下,普通程序员该如何正确学习人工智能方向的知识。


1. 熟练掌握基础理论知识


要成为人工智能领域,尤其是机器学习方向的程序员必须有一定的数学和算法基础,尽管各类框架使得现在的机器学习编程变得越来越简单,表面上可以不用在意太多的数学和算法细节,但实际上,即使是针对工程应用,一定程度的数学和算法理解以及对应的思维方式,能够在解决问题以及选择模型套用时提供许多的帮助。相关的知识理论基础包括:高等数学基础、统计学基础、线性代数、数值计算方法、运筹学。





当然,如果不打算进行特别深入的研究和扩展,以上内容并不需要都精通,但至少需要保持在知晓且能够形象化理解的范围内,只有在掌握这些基础的前提下,理解人工智能和机器学习相关的知识才能更加轻松顺利。


2. 相关基础工具的学习和应用


熟练掌握基础理论的同时,还要掌握相应的编程语言。目前机器学习最为普遍的语言是Python,大多数主流机器学习框架已经提供了Python接口。Python语法简单,上手较为容易,同时有较强的语言表达能力,又很容易与其他语言的项目进行交互,这些特点使之成为了在机器学习领域必学的编程工具之一。关于如何学好Python,可以参考https://www.imooc.com/course/list?c=python 。另外还必须掌握像Jupyter notebook这些常用的开发辅助工具。


在Python中有大量的机器学习相关框架、数学工具和数据处理工具,在这里针对性地推荐一些入门级的关键工具。


numpy、scipy、matplotlib(Python进行科学计算时常用的一些基本工具)


numpy中包含对矩阵(含高阶矩阵)等内容的计算和变换;几乎所有Python上的数据及机器学习处理框架均提供了numpy的ndarray形式的数据交换接口;


scipy中包含更复杂一点的计算模型,诸如傅里叶变换、滤波器等;


matplotlib则是与之配合紧密的绘图库,能够提供较好的可视化功能。


pandas
pandas是一个以数据表形式组织和操作数据,并能够方便地结合numpy、matplotlib进行统计、运算和可视化的工具包。





关于以上内容的学习,推荐自家的免费课程(基本涵盖了以上提到的全部知识点):
Python在数据科学中的应用:https://www.imooc.com/learn/727
Python数据分析-基础技术篇:https://www.imooc.com/learn/843


3. 进阶人工智能的重点:机器学习和深度学习


有了基础理论知识和工具之后,便可以尝试目前最为前沿的AI技能——机器学习和深度学习。


对于机器学习,建议先参考一些入门课程,而后再进阶有难度的课程,并且在学习课程的同时进行一些编程实践,有助于更快地掌握知识。这里做一下部分推荐
初识机器学习-理论篇:https://www.imooc.com/learn/717
Python3入门机器学习经典算法与应用:https://coding.imooc.com/class/169.html


对于目前被人们认为前景最为广阔的深度学习,需要更为复杂的理论基础。推荐以下课程:
AWS云-深度学习&机器学习的AI业务应用:https://www.imooc.com/learn/896
深度学习之神经网络核心原理与算法:https://coding.imooc.com/class/145.html





这里涉及到的一些框架和工具包括:


scikit-learn,又称sklearn,是Python中最常用的基础机器学习工具,以简单易用而闻名。提供了大量基础机器学习算法,包括SVM、k-means、随机森林、Boosting等成熟方法。里面包含了详细的使用帮助、样例及一些基础教程。


同时也推荐自家的经典案例课程:
机器学习入门 Scikit-learn实现经典小案例:https://coding.imooc.com/class/103.html


②Tensorflow、MxNet、PyTorch(皆为深度学习框架)


Tensorflow最接近工程应用,基础接口较为接近底层,灵活度较高,使用者需要理解一些算法的数学原理,但同时也有较为高级的抽象接口(如kears、tflayer等);


MxNet同样适合工程使用,性能优异,但相较之不如Tensorflow灵活;


PyTorch抽象程度较高,同时又保持了较好的灵活性,更适于科研实现,较之其它二者,工程应用相对少一些。


在这里,还要再啰嗦一句,一定要在学习课程的同时进行实践,实践出真知。


如果学习过程进展顺利的话,可以关注并参加Kaggle(http://www.kaggle.com)的比赛。Kaggle是一个公开的、有奖金的数据分析和机器学习比赛平台,并且提供了大量整理好了的公开训练和测试数据。练习和比赛能够快速提高自己对模型的理解能力,丰富调参经验。





至此,对于人工智能,特别是机器学习和深度学习,已经可以算作入门了。接下来如果还想继续发展,则应当认真考虑具体的发展规划,并进行更加系统化的学习。


其实机器学习方面,仍然存在很多工程问题,如新算法的编程实现、大规模并行计算和分布式计算,甚至计算用硬件的研制等等。这个方向上,传统程序员出身仍有良好的基础,可以深入发展;如果对机器学习、深度学习兴趣浓厚,跟读最新的论文,思考和研究新的模型、算法,同样也是很好的出路;如果对数据敏感,专注于数据的分析处理,也是不错的选择。


以上给出的学习方法是按照大部分普通程序员的情况来建议的,并不一定适用于每个人,尤其是编程新手。条条大路通罗马,肯定也还有人能找到其他更适合自己快速学习和转型的方法。


最后,祝大家能够早日在人工智能领域逐梦成功。感谢阅读。



相关回答推荐阅读:
你都用 Python 来做什么?
Node.js 与 Python 作为后端服务的编程语言各有什么优劣?
回复
使用道具 举报
tcbxh2008 | 未知
英文足够好的话,可以去Udacity看AI课教学视频,都是Georgia Tech的研究生/本科高年级课程。另外Georgia Tech的Machine Learning课也不错,讲博弈论的Machine Learning课我估计仅此一家。我上完基本上可以看懂AlphaGo那篇nature。当然英语水平和阅读文献的能力是我之前就有的,这方面还得靠自己额外下功夫。另外,Machine Learning for Trading,Reinforcement Learning等都值得一学。Machine Learning非常火资源又多,不少答案里已经给出我就不多说了。不过不得不提一句,Machine Learning只是AI的一个交集或者说实现的一个途径,不代表AI研究的全部。

最近在上Knowledge-based AI课,需要的数学比较少,也跟狭义的Machine Learning几乎没什么关系。做的project很有意思但比较难,是写AI代码解人类智商测试题“Raven's Progressive Matrices”:纯图形识别,给出三个或八个图形,在给出若干个选项图形中选答案。例子如:

目前我写出的AI能正确回答难度在这个级别的题目。当然我还在修改这个AI,以求解更复杂的题目。

总之Georgia Tech的CS课程质量非常不错,推荐给大家。
回复
使用道具 举报
mn324198y3n | 未知
你要考虑一个问题,写下“‘互联网+’已经发展的差不多了,应有尽有,空间不大,下个浪潮会不会是‘AI+’?”这句话的人,很可能当初是因为干不了程序员才改行去做网编。
回复
使用道具 举报
卓越fdd | 未知
来,给你指一条明路吧!

只要你懂Swift,你就直接能搞当前人工智能界的tennage sex:深度学习,而且你只需要一台最新的iPhone 7手机,就能开发基于深度学习的应用!

苹果正在开发了一套Metal的框架,让你能够搭积木一样搭出一套深度学习的应用,提供了一套接口让你直接操控GPU里的运算单元(得益于A10芯片是苹果自己做的)。


大致了解各种神经网络的适用范围之后,拍脑袋或者测试自己适合的神经网络模式,然后就可以鼓捣深度学习的应用了,就像写Swift代码一样容易。

是的,童叟无欺,你可以做语音识别、图像识别、NLP等各种应用,文末我还会提供源代码!

比如利用Metal这个框架,你可以做语音识别!下面是个Demo:



你还可以调用CNN做图像识别,深度学习技能Get!


(实时演示请看:https://raw.githubusercontent.com/shu223/iOS-10-Sampler/master/README_resources/digit.gif)

其他的图像聚类啊打标签啊也是分分钟的事情啊!

嫌这个图像识别太简单?
你还能开发基于深度学习的实时的图像识别,就是你直接用手机摄像头可以做实时的图像识别。



(实时演示请看:https://raw.githubusercontent.com/shu223/iOS-10-Sampler/master/README_resources/imagerecog.gif)

操作各种图片,滤镜什么的,那是分分钟的事情。




瞬间,你就成了会深度学习懂人工智能的高科技码农,想想是不是有点小激动啊?

不得不说,Metal对于iOS开发者,甚至是所有的程序员来说(可以想象其他厂商也许会跟随,不过也壁垒在于苹果是自己开发的A10芯片才能够操作底层GPU):
这是一件开发者的大事,大快所有人心的大好事。

福利1:

再给大家展示一下用Metal做的一个应用(Picky Album),最新版马上会有这个功能:利用深度学习识别图像!

搜索"cat",手机里所有猫的图片就出来了!



输入"church",所有教堂的图片都出来了!



再也不用翻遍相册找照片。


福利2:

Metal的开发文档:https://developer.apple.com/metal/
Metal的Demo 代码链接:shu223/iOS-10-Sampler

(注意,苹果官方还在改进Metal的性能,提高并发能力,预计明年一二月份会有最新的版本)

福利3
此外,我还提供两个价值百万的idea:

第一:开发和训练一套能够识别品牌商品的SDK,比如爱马仕或者奔驰什么的,在朋友圈或者微博等上面的商品图片识别后立马就能导购了,在合适的时间点卖给这些厂商或者电商网站,或者自己做电商。

第二:训练一套模型,通过你身体的姿势和动作等,来判断你是不是在开车(如何区分是在坐车还是开车,或者是步行),这是一个非常有用的模型,这个功能的重要性相信开发者都懂的,还是那句话,找到合适的时间点,一定能卖出去。


嗯,我自己都忍不住点赞了!


欢迎关注:严肃 - 知乎

AI专栏:Take AI Seriously
回复
使用道具 举报
david.beckham | 未知
首先你要买一台带titan x显卡的电脑,或者至少是1080显卡。

然后你觉得这么好的电脑不打游戏可惜了,于是下了个Stream。
回复
使用道具 举报
123下一页
快速回复
您需要登录后才可以回帖 登录 | 立即注册

当贝投影