转载自:https://zhuanlan.zhihu.com/p/29309218

Python深度学习完全路线指南

介绍

深度学习目前已经成为了人工智能领域的突出话题。它在“计算机视觉”和游戏(AlphaGo)等领域的突出表现而闻名,甚至超越了人类的能力。近几年对深度学习的关注度也在不断上升,这里有一个调查结果可以参考。

这里有一个 Google 的搜索趋势图:

深度学习:Python深度学习完全路线指南[转载]

如果你对这个话题感兴趣,这里有一个很好的非技术性的介绍。如果你有兴趣了解最近的趋势,那么这里有一个很好的汇总

在这篇文章中,我们的目标是为所有深度学习的人提供一条学习之路,同时也是为想要进一步学习的人提供一条探索的路径。如果你准备好了,那么让我们开始吧!

步骤0:先决条件

建议在学习深度学习之前,你应该先了解一些机器学习的基础知识。这篇文章列出了完整的学习机器学习的资源。

如果你想要一个简单的学习版本。那么可以看下面的列表:

建议时间:2-6个月

步骤1:机器配置

在进行下一步学习之前,你应该确保你有一个支持你学习的硬件环境。一般建议你至少拥有以下硬件:

  • 一个足够好的 GPU(4 GB),最好是 Nvidia
  • 一个还可以的 CPU(比如:Intel Core i3,Intel Pentium 可能不适合)
  • 4 GB RAM(这个取决于数据集大小)

如果你还不确定,那么请阅读这个硬件指南

备注:如果你是一个硬件玩家,那么你可能已经拥有了所需的硬件。

如果你没有所需的规格,那么你可以租一个云平台来学习,比如 Amazon Web Service(AWS)。这是使用 AWS 进行深度学习的良好指南

备注:在这个阶段不要安装任何深度学习的库,安装过程我们会在步骤 3 中介绍。

步骤2:初试深度学习

现在,你已经对这个领域有了一个初步的认识,那么你应该进一步深入了解深度学习。

根据自己的偏好,我们可以选择以下几个途径:

除了上述的先学知识,你还应该了解一些流行的深度学习库和运行他们的语言。以下是一个不太完整的列表(你可以通过查看 wiki 获得更加完整的列表):

其他一些著名的库:MochaneonH2OMXNetKerasLasagneNolearn。关于深度学习语言,可以查看这个文章

你也可以查看查看 Stanford 的 CS231n 中的第 12 讲,概要性的了解一些深度学习库。

建议时间:1-3周

步骤3:选择你自己的领域

这是最有趣的部分,深度学习已经应用在各个领域中,并且取得了最先进的研究成果。如果你想更深入的了解,那么作为一个读者,你最适合的路径就是动手实践。这样才能对你现在了解的内容有一个更加深入的认识。

注意:在以下的每个领域中,都会包括一个博客,一个实战项目,一个需要的深度学习库以及一个辅助课程。第一步你应该学习一下博客,然后去安装对应的深度学习库,然后再去做实战项目。如果在这个过程中,你遇到什么问题,那么可以去学习辅助课程。

建议时间:1-2个月

步骤4:深挖深度学习

现在你应该已经已经学会了基础的深度学习算法!但是前面的路程会更加艰苦。现在,你可以尽可能高效的利用这一新获得的技能。这里有一些技巧,你应该做的,可以磨炼你的技能。

建议时间:无限

值得推荐的资源:

结语

希望这个学习路径可以帮到你。我已经尽力让它更加全面,现在你要做的,就是尽可能多的阅读和练习。想要获取神经网络的专业知识,请尝试深度学习的练习题:Identify the Digits

当你对深度学习的概念有一些了解之后,试一下Skilltest: Deep Learning。试着接受深度学习的观念。

好运!

—————————————————————————————————————

为了方便大家学习,我建立了一个Python交流群,目前群内已经有1615个小伙伴,学习寂寞的小伙伴不妨一起来玩~群号:475035830

元胞自动机(Cellular Automaton,复数为Cellular Automata,简称CA,也有人译为细胞自动机、点格自动机、分子自动机或单元自动机)。是一时间和空间都离散的动力系统。散布在规则格网 (Lattice Grid)中的每一元胞(Cell)取有限的离散状态,遵循同样的作用规则,依据确定的局部规则作同步更新。大量元胞通过简单的相互作用而构成精态系统的演化。由冯诺依曼在20世纪50年代发明。

一开始是二维的,后来发展到三维,多维。

两张图片展示一下:

二维:

知识:元胞自动机

三维:

元胞自动机本来是研究在一定规则下元胞的演化的,而且得出了很多有价值的结论。比如参看文章:这个游戏没有玩家,为何在学术圈火了半个世纪?

今天还了解到,元胞自动机已经被使用到各个方面。我关心的是在物理学中的应用。

百度百科介绍到:“除了格子气元胞自动机在流体力学上的成功应用。元胞自动机还应用于磁场、电场等场的模拟,以及热扩散、热传导和机械波的模拟。另外。元胞自动机还用来模拟雪花等枝晶的形成。”

还有一个文章详细讲解了元胞自动机,很生动:http://www.swarma.org/complex/models/ca/ca1.htm

有人给出了二维元胞自动机的一个C++开源例子,原文链接:访问。我分享一下运行视频:

 

我在arXiv.cn上搜索得到的结果:https://arxiv.org/find/all/1/all: AND Cellular Automaton/0/1/0/all/0/1?client_host=cn.arxiv.org

有几个我很有兴趣:

1. Von Neumann Regular Cellular Automata  arXiv:1701.02692

2. Morphognosis: the shape of knowledge in space and time  arXiv:1701.02272

3. Neighborhood-History Quantum Walk  arXiv:1611.07495

4. Quantum cellular automata and free quantum field theory  arXiv:1608.02004

5. Particle models with self sustained current  arXiv:1606.04920

6. Neighborhood approximations for non-linear voter models  arXiv:1604.07778

转载自:电子火花

谷歌的 Project Soli 雷达技术可不光是应用在智能表,如果交到创意无限的人手上,其应用可是既实用又有趣。圣安德鲁斯大学的研究员利用开发者套件来创作了 RadarCat,能分辨靠近的物品是什么。RadarCat 通过机器学习,慢慢就会分辨到放在上面的是苹果或是橙、玻璃杯里有没有水,甚至是人体部位。

团队并没有做出太复杂的东西,他们只把手机和雷达连在一起,就能通过握机的方式和位置来做出不同反应,设备还懂得分辨手掌有没有戴上手套而改变界面呢。在应用范例里,餐厅能知道客人的饮料喝完没有、视障人士也可以在店里分辨到货品。再进一步的,团队认为农场和废料回收场也能应用 RadarCat 来分类物品。希望它能尽快从概念计划变为实际产品,造褔大众吧。

知乎上有个问题:物理专业自学计算机应该学些什么?

题目大概是说他物理本科大四了,申请去美国读物理博士,但自己对计算机有很大兴趣,为了考虑以后的饭碗,想自学计算机。自己对计算机图形学有兴趣,希望得到一些建议。

回答的人不少,有几个人的回答震撼到我了。


第一个回答:

作者:陈然
链接:https://www.zhihu.com/question/23212279/answer/24061341
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

个人站的角度不同,现在的答案基本都是从图形学的角度建议,我换个角度。

从研究生计算机科学做研究的角度来讲,我认为本科最适合的专业首先是物理,其次是数学,再次才是计算机。数学学的太抽象,抽象层次太高,研究现实问题的人往往处在鄙视链的底端。计算机学的太底层,对于概率论、随机过程、线性代数等学科学的太少,不了解建模分析的那套方法论。而物理学一方面的数学知识足够多,另外一方面主要研究的方法也是对这个世界建模,然后进行观测,这与前沿的机器学习领域做的事情几乎是一样的。至于会不会写代码,其实科研里面要写的代码不多,主要都是在推公式,研究如何设计模型使得其拥有很多良好的性质。代码很多时候写写matlab就可以了。

所以恭喜你,如果你想转行做CS的科研,你有很大的优势。事实上,很多CS领域的大神都是学物理的,比如华人图灵奖得主姚期智,CMU Machine Learning领域大神Alex Smola。

如果你真的励志做CS相关的研究的话,物理PhD的选择最好到CS极好的学校,比如UCB, CMU, MIT, Stanford,一般这些学校都可以辅修Machine Learning的Master, 多修CS相关的课程,都是很好的选择。Coursera上的Machine Learning课程都很入门,如果想进阶,你可以看看CMU 10701(Machine Learning), 10702(Statistical Machine Learning), 10708(Probabilitic Graphic Model) 课程的课件、视频、相关阅读和作业,基本都不需要写代码,主要是数学证明、建模和分析。

当然,如果你想做应用而不是做理论什么的,当我以上没说。


第二个回答:

作者:Milo Yip
链接:https://www.zhihu.com/question/23212279/answer/23940891
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

其实在计算机图形学里有很多与物理相关的课题,例如物理模拟(刚体、柔体、流体等)、基于物理的渲染(光源、材质、媒介等),还有一些涉及物理的跨学科课题,例如生物力学、基于物理的声音渲染、光场摄影等等。简单介绍几本书

有空可以看看最前沿的图形学发展,特别是当中涉及物理部分的

看看那些文献的作者网站,可能会发现不少研究者都有物理背景。

我觉得能做理论物理研究的人,其智商做哪种科学问题也不大吧。而计算机科学之本就是算法,无论是哪一个应用方向都是必须的,建议深入学习。个人不建议浪费时间在API、OS、UI编程上面,不竟这些东西许多人都能做,有研究能力的人可以探索新世界。因为游戏、动画、电影这些娱乐工业,计算机图形学的职位在行业上也有需求。


第三个回答:

作者:徐枭涵
链接:https://www.zhihu.com/question/23212279/answer/27455609
来源:知乎
著作权归作者所有,转载请联系作者获得授权。

我是理论物理大二的…给师兄回答这个问题吧。
================================================
当师兄看到很多API繁杂但无从下手,答案是唯一的:多写。
再说说我的建议吧,
掌握一门快速开发语言:强力推荐Python,因为有scipy和numpy存在。可以把这玩意当Matlab用。我做过测试,进行大矩阵乘法numpy的速度比matlab快50%,这二者都比mathematica快20倍…而且python有一个很好的web framework django,结合html css,可以写出不错的网站(比如知乎)如果你是OI的,数据结构神马不用太多虑,直接上计算机图形学吧。
建议可以OpenGL+PhysX(物理引擎)+.NET/Cocoa(win/mac)一起做一个项目,像我做的是一个无人机控制的仿真平台。这个对于学习三这玩意都有效。特别是mvc的构建方式。
另外还有一个很轻巧的构建计算机图形学的方式是webgl,很漂亮。或者直接unity3d(游戏引擎)引擎亦可。
如果你会了html也就是如果你会了javascript,建议入手node-webkit,二十分钟构建一个跨平台桌面应用。对于交互UI我比较倾向于两种,一个是轻量级的html+js的形式,好看简单,一个是unity虚拟现实,我最近做的一个项目就是这两种结合的模式。强力推荐CUDA(GPU计算),物理口必备…想在自己的PC上模拟核聚变CUDA绝对是居家旅行,杀人放火必选。而且CUDA的模型天生是为物理学家设计的。同时需要学点cpp,可以把鄙校丁泽军老师计算物理A书上的习题全部CUDA一遍基本就练习的差不多了
micro.ustc.edu.cnML/DataMining我只看过一些些,这些东西如果自己写算法的话需要用c/cpp如果只是玩玩可以用python+一堆库的方式来搞。主要可能还是数据源吧。嵌入式&单片机,如果不慎入实验物理坑会点单片机嵌入式还是有必要的,入个树莓派玩玩ROS吧。从树莓派+arduino玩的方式入手玩起来很简单无压力,最练手的就是写机器人控制了。这个是从机械折腾到前段的。
树莓派既是典型的嵌入式Arm开发版,优势在于社区庞大。
arduino是一种高度简化后的单片机。比起51等用起来真的简单多了

移动开发:学习学习swift吧。玩玩iOS。。总是觉得Android怪怪的

学习轨迹:
1.熟练使用linux/unix(格式化硬盘一个月内可以生存)
2.选一个自己顺手的IDE(vim/emacs/VS),基本熟练cpp、python(均指一万行代码,可以写写计算物理习题)
3.搭建一个自己的服务器(using aws.amazon.com ec2)
4.写一个桌面app .net/cocoa,(学c#/o-c),在这里折腾OpenGL CUDA等
5.写一个绚烂的个人网站use Django&html5&css3&webgl
6.研究妹子回你短信速度和她对你好感度的关系(使用支持向量机/deep learning)
7.学习CUDA并在你的pc上模拟EAST using MHD model in FEA
(其实能跑出来一个N-S方程出来个卡门涡街就很好了)
8.学习单片机并且控制一架四轴飞行器给那个追了四年没追的女神泼一盆冷水(someone你丫两年以后给我等着)。
可以适当从ROS+树莓派入手,加上一些有意思的硬件比如kinect什么的,就很好玩,推荐学习OpenCV(人脸识别)+讯飞各种接口(语音)。

对了。。。工程控制论,或者什么ML,DataMining的数学比物理口的数学真的是弱爆了。一群不用解偏微分方程的渣渣。

顺便抛我的blog stlover.org(呃最近好像数据库挂了)
就这些差不多了…剩下做点小项目自己也就会了
=====================
操作系统建议看看,就是看看而已。。我大二选了操作系统课最后发现完全没听。
编译原理没有必要,想深入学推荐MIT的计算机结构和解释同时学习LISP


第四个回答:

作者:Joe Physwf
链接:https://www.zhihu.com/question/23212279/answer/102771418
来源:知乎
著作权归作者所有,转载请联系作者获得授权。
如果读完PhD在转计算机,真真是浪费了。计算机对高等物理那些基本不需要,倒是数学是很需要的,但PhD依然是浪费。
那些图形学,虽然涉及到物理,但是最多也是本科就够了,图形学的很多东西都是在投机取巧,那些有颠覆的理论基本上根物理无关,细节的东西都是在拼奇技淫巧。不是不懂物理,而是上帝的高度凡人根本无法企及。你想两面镜子相互反射这种东西,在计算机看来就是无限循环(卡死),但是上帝那里却是realtime的,一点都不卡。
其他很多计算机领域跟物理就更加没有关系了,互联网,大数据,人工智能都没有。如果你对两者都割舍不了的话,那你应该关注计算机基本理论这些东西。你对软硬件结合很感兴趣,但是这些难度不大,而且你一旦了解之后估计很快就失去兴趣了,因为很容易理解掌握。真正难的是计算机物理基础层面的东西,那才是真正软硬结合的地方。半个多世纪之前,贝尔实验室发明了三极管,现在半导体技术已经日渐迟缓了,量子计算机,量子传输这些技术充满想象。当然未来很难说,但发言权在于那些位于基础理论前沿的那些人,很明显你有机会。实用技术有时的确很吸引人,但那些都是细致末节,你穷尽一生改变的只是一枝一叶,并且或早或晚都将坠落。

我的感悟:

第一个回答站在常春藤留学生的视角给出了实用的建议。给我的感觉就是,国外的课程比国内大学的课程领先了太多了,似乎这些课程已经完全成熟和系统化了,而国内还比较杂,很多人还必须去看网络课程来学习。这从一个侧面能看出,国内学生相比国外学生这方面受教育的深度和看问题的视野是有差距的,而且这样网络封闭的话,很不好弥补。

第二个回答罗列了不少书籍,都是物理和游戏、计算等相关的计算机书籍。这类书籍国内也越来越多,不过不得不说的是,大多好的教材,似乎都是外国人写的,中国引入翻译版(书的好坏甚至还要取决于译者的水准)。也就是说,好的教材都是英文的,大家最好学好英文,方便自己掌握知识。这也提醒我们,我们与他们的差距还是很大的。

第三个回答深深震撼到我了。一个大二学生,已经对计算机技术掌握了这么多,真是不简单啊。我感觉他做的事情如果让我去做,没有几年是做不完的。其中他讲到了Python、C#编程,js编程、html、css、javascript(也许他还会java呢),swift,用到了U3D,还会使用SUDA,也玩开源硬件,arm编程,而且非常擅长Python(用Python结合其他框架做了网站,做了GUI编程等)。学习MachineLearning(机器学习)、DataMining(数据挖掘),还会OpenCV、讯飞API。这个答案是答主在2年前回答的,估计现在已经用到了Google、百度的接口(语音接口还是很强大的),做模式识别,可能还有很多我根本没有听过的,也不知道存在的技术。我非常佩服他,

第四个回答比较理性。他简单澄清了物理和计算机的关系,并建议去做最基本的事情。题主感谢了他,而且题主已经走上了计算物理的道路。“我现在业余时间主要关心机器学习方面的东西,因为背后的数学支持挺对我胃口。我自己的科研方向也正是量子计算,我还在尝试涉猎量子计算+机器学习的交叉。”题主这样回答。


我摘下眼镜,停下来想了想。

普通大众忙忙碌碌,做的事情对他们来说可能过于简单了。世界上就是有这么一小部分人,走在人类发展的前列。虽然和大家一样一日三餐,闲了也玩耍逗乐,但静下来的时候,很多人选择看电视打牌睡觉娱乐,而他们选择去钻研他们的兴趣。

上面的只是物理和计算机的话题。其实,无论是摄影,研究昆虫,或者是别的什么,只要是钻进兴趣里了,人生不会太枯燥,追求也就不会太乏味。我不想说谁的生活更有意义,至少,这么些人的其中一些人做的事,会影响很多人。我感觉,他们活着的意义更大一些吧。