ZNDS智能电视网 推荐当贝市场

TV应用下载 / 资源分享区

软件下载 | 游戏 | 讨论 | 电视计算器

综合交流 / 评测 / 活动区

交流区 | 测硬件 | 网站活动 | Z币中心

新手入门 / 进阶 / 社区互助

新手 | 你问我答 | 免费刷机救砖 | ROM固件

查看: 9743|回复: 4
上一主题 下一主题
[交流讨论]

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

[复制链接]
跳转到指定楼层
楼主
发表于 2018-12-26 14:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

“互联网+”已经发展的差不多了,应有尽有,空间不大,下个浪潮会不会是“AI+”?那么作为一个普通程序员,如何提前向人工智能(AI)靠拢?

上一篇:有哪些合适老人的智能电视?
下一篇:sony rx1r出现这个情况是为什么?
沙发
发表于 2018-12-26 14:00 | 只看该作者
本人码农,从六月开始正式接触机器学习(其实五年前的本科毕设就是在生物信息领域应用神经网络的项目,但是非常浅薄),深吸一口气,先要声明“人之患在好为人师”,我用的步骤只是适合我,下面的内容仅供参考。

第一步:复习线性代数。(学渣的线代忘了好多-_-||)
懒得看书就直接用了著名的——麻省理工公开课:线性代数,深入浅出效果拔群,以后会用到的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世界的黑科技——因为理论非常简单但是效果惊人的好。
回复 支持 反对

使用道具 举报

板凳
发表于 2018-12-26 14:02 | 只看该作者
说说我学习深度学习的经历吧,从开始学习到现在大概有4个月,只能算新手,刚好可以回答新手问题。

先说编程:自认会用C++, 熟悉Python

英语水平:中等,能很快读懂英文科学文献

最开始对人工智能/深度学习感兴趣是因为想用它试一试自然语言生成,后来想到一个物理方面的题目,预计可以用深度学习技术解决,开始接触深度神经网络。记录一下学习历程,

1. 安装 Tensorflow(google 开源的深度学习程序), 尝试里面最简单的例子MNIST 获得激励。
2. 之后尝试通过读书(看视频)理解最简单的全连接神经网络
先搜索找到答案:为什么要Go Deep?
(1)神经网络中输入层,隐藏层,输出层之间矩阵乘积的维度变化。
(2)Weight, Bias 这些是什么,改变它们有什么结果。
(3)激励函数是什么,有什么作用,有哪些常用的激励函数
(4)误差如何向后传递,网络如何通过最小化误差函数更新,有哪些常用的优化方法
以上这些在一本交互式电子书中可以找到答案:
Neural networks and deep learning
(5)  如何对权重正规化,L1, L2, BatchNormalization, (这些在以后真正应用的时候再看)
Deep Learning chapter 7 for L1, L2 regulation.
Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift (2015) original paper for BN
why does batch normalization help? Quora
Note for BN in Chinese
Implementing Batch Normalization in Tensorflow from R2RT
Layer normalization (2016) Replace Batch Normalization in RNN
Why Does Unsupervised Pre-training Help Deep Learning?
Summary and discussion on pre training

3. 选择一种比较比较底层的神经网络开源库,tensorflow 或 theano,
(1) 读官方文档 https://www.tensorflow.org/versions/r0.11/tutorials/index.html
(2) 看周莫凡的网络教程 https://www.youtube.com/user/MorvanZhou
(3) 重复敲代码,重复实现例子程序
4.  开始理解各种不同神经网络架构所能处理的问题
(1) CNN 图像识别,图像处理,语音处理
(2)RNN,LSTM 自然语言理解与生成
(3)增强学习,玩游戏 :)
5.  尝试各种开源的有意思的神经网络项目,新手可以从下面这个列表开始
(1)Andrej Karpathy blog char-rnn, Deep Reinforcement Learning: Pong from Pixels
(2)Neural Style In tensorflow.

6. 如果能翻墙,注册 twitter, facebook 账号,follow 那些文章中经常出现的大牛的名字。他们每天提供很多新动向及最新技术,很多时候有很 Fancy的应用。试试从这个大牛follow的人开始follow:twitter.com/karpathy

当你对这些都很熟悉的时候,开始阅读艰深的文献:
1. CNN 的原始文献
2. RNN 和 LSTM 的原始文献
3. Reinforcement Learning 的原始文献
4. Google DeepMind 发表在 Nature 上的几篇经典

最后推荐一个高级点的库: Keras Documentation
虽然这个库还在发展阶段,里面仍有不少bug,但前途不可限量,可以很容易实现你之前读文章时候见到的那些复杂的构架。作为例子,这里有个教程:
Deep learning book in ipython-notebook and Keras Many example code in Keras.

这些学习历程中遇到的资料都记录在了我的个人note里,希望大家共勉:web-docs.gsi.de/~lpang/

最后强调一个最最重要的事情:要有自己的想法,有将这种新技术用到自己项目中的强烈愿望,从开始就要Coding,不断尝试才能不断进步。

(看了很多其他的回答,在这里想补充一段)
说实话,作为一个其他行业(物理,工程,化学,医学,农业,卫星地图识别,网络安全领域,社会科学)的普通程序员,在本行业有比较深的理论和实验背景,能接触到海量数据(无论是传感器数据,互联网数据还是蒙特卡洛模拟数据),想做处一些创新性,交叉性的工作,这一轮人工智能的风绝对是要跟的。

作为一个计算机专业的人,可能觉得机器学习,人工智能,深度学习已经炒的过热了。但是对于其他领域,可能大部分人还没有想到把最基本的机器学习算法如:PCA,SVM,k-means...运用到本行业积累的大数据上, 更不要说最近的深度学习。

作为其他行业的普通程序员(除了数学与理论物理),我们不要指望从理论上彻底解决深度学习现存的问题。我们的优势不在这里,我们的优势是计算机专业的人所没有的专业知识,行业大数据。我们需要做的是把机器学习,深度神经网络当作工具,知道它们能做什么,如何去做。参考Andrew Ng 的机器学习笔记,
Machine Learning - complete course notes

举几个简单的例子:

1. 使用深度学习中生成风格化图片的技术,制备具有特定功能的抗癌药物
The cornucopia of meaningful leads: Applying deep adversarial autoencoders for new molecule development in oncology

2.使用反常探测,寻找网络攻击 Cyber-attacks prediction

3. 对于国家来说,更加聪明的互联网关键词过滤

4. 自动探测卫星地图上道路,建筑,车辆,河流。。。

5. 环境科学中寻找雾霾与众多可能因素的非线性关联

我们用卷积神经网络来区分量子色动力学相变是crossover还是一阶相变。(1年之后回来修改)回答这个问题的时候,文章刚刚写好,最近文章已经在《自然-通讯》Nature Communications 杂志发表,网上公开链接是 An equation-of-state-meter of quantum chromodynamics transition from deep learning , 希望能给坚持在这个方向,做 AI + X 交叉学科应用的同学带来精神上的激励。

普通程序员如何正确学习人工智能方向的知识?
回复 支持 反对

使用道具 举报

地板
发表于 2018-12-26 14:03 | 只看该作者
大学是信息安全,可以说是IT众小专业中和机器学习距离最远的一个。读研转机器学习,也许经历对你会有帮助。

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

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

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


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

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

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

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

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

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

使用道具 举报

5#
发表于 2018-12-26 14:03 | 只看该作者
你要考虑一个问题,写下“‘互联网+’已经发展的差不多了,应有尽有,空间不大,下个浪潮会不会是‘AI+’?”这句话的人,很可能当初是因为干不了程序员才改行去做网编。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|新帖|标签|软件|Sitemap|ZNDS智能电视网 ( 苏ICP备2023012627号 )

网络信息服务信用承诺书 | 增值电信业务经营许可证:苏B2-20221768 丨 苏公网安备 32011402011373号

GMT+8, 2024-4-23 19:43 , Processed in 0.060934 second(s), 14 queries , Redis On.

Powered by Discuz!

监督举报:report#znds.com (请将#替换为@)

© 2007-2024 ZNDS.Com

快速回复 返回顶部 返回列表