Shashank Gupta作者卢苗苗校对倪骁然翻译

带你深入浅出理解深度学习(附资源打包下载)

本文提供资源帮助你在放置一个conv2d层或者在Theano里调用T.grad的时候,了解到在代码背后发生了什么。

网络中有着丰富的教程,供我们开始接触深度学习。你可以选择从著名的斯坦福CS221或者CS224课程开始:

  • CS221:

    http://cs231n.stanford.edu/

  • CS224:

    http://cs224d.stanford.edu/

如果你从未接触过这方面的内容,你可以选择快速AI课程或者深度学习AI课程:

  • 快速AI课程:

    http://www.fast.ai/

  • 深度学习AI课程:

    https://www.deeplearning.ai/

除了深度学习AI课程,其它所有课程都是免费的,你可以在家中舒适地学习。你需要的仅仅是一台好的电脑(最好带有一块Nividia的GPU), 以及你已经准备好向深度学习迈出你的第一步。

然而,本文不是为一个纯新手准备的。当你了解了一些深度学习算法的原理,你可能想要知道这些算法是怎么运作的。尽管深度学习的绝大部分工作(大概是90%的工作,除去10%的的数据)是添加像Conv2d这样的层,调节不同优化策略(如ADAM)的超参数,或者通过在Python中添加一行代码(得益于可用的优秀框架)使用batch norm以及其它一些技巧,很多人可能都很想知道在这之后到底发生了什么。

本文列举的这些资源,在你放置一个conv2d层或者在Theano里调用T.grad的时候,可以帮助你了解到在代码背后发生了什么。

总论

毋庸置疑,深度学习》(Deep Learning Book)这本书是最著名、最为人知的资源:

  • Deearning Book:

    http://www.deeplearningbook.org/

其它比较好的资源还有Charniak教授的课程和论文,可以作为深度学习的技术介绍:

  • Charniak教授课程:

    https://cs.brown.edu/courses/csci1460/assets/files/deep-learning.pdf

  • 论文:

    https://arxiv.org/abs/1709.01412

当你想要从一个具体的角度理解深度学习的话可以参考其它一些资源比较好的资源。比如,下面这个教程是从应用数学的角度来攥写的,或者如果你仅仅是想要开始写代码而不是深入研究理论的话,可以阅读下面的文章:

  • 应用数学角度的教程:

    https://arxiv.org/abs/1801.05894

  • 文章链接:

    https://arxiv.org/abs/1703.05298

还有一个比较推荐的是这个基于PyTorch的深度学习课程。这个课程讲解很全面,可以帮助你从一个更加宏观的角度理解:

  • 基于PyTorch的深度学习课程:

    https://documents.epfl.ch/users/f/fl/fleuret/www/dlc/

反向传播的问题

很多时候,人们不确定“为什么梯度下降和反向传播是同一件事情?”,或者,“到底什么是链式法则以及反向传播?”要了解这些基本问题,我们可以选择阅读Rumelhart,Hinton和Williams之前写的关于反向传播的论文。这篇论文简单易懂:

  • Rumelhart,Hinton,Williams关于反向传播的论文:

    https://web.stanford.edu/class/psych209a/ReadingsByDate/02_06/PDPVolIChapter8.pdf

除此之外,其它一些非常有用的资源包括Karpathy的关于反向传播导数的博客,以及这段解释导数反向传播的视频:

  • 博客地址:

    https://medium.com/@karpathy/yes-you-should-understand-backprop-e2f06eab496b

  • 视频地址:

    https://www.youtube.com/watch?v=gl3lfL-g5mA

线性代数和其它数学内容

大家都会给某位立志于学习线性代数的人推荐Strang教授的课程,这大概是关于线性代数最好的资源了:

  • 线性代数课程:

    https://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/

类似的还有Boyd教授的运筹学课程

  • 运筹学课程:

    http://web.stanford.edu/~boyd/cvxbook

Calculus on Manifolds的《Calculus on Manifolds》这本书是关于向量积分的微积分内容(你可以通过Google搜索“Calculus on Manifolds”找到一份pdf)。但是,一开始学习深度学习的时候,我们不需要深入学习这些内容。另一种方法是快速复习深度学习微积分》(Calculus for DeepLearning)这本书:

  • Calculus for DeepLearning:

    https://arxiv.org/abs/1802.01528

这里还有一些关于深度学习凸优化内容的讲座笔记:

  • 凸优化讲座笔记:

    http://people.eecs.berkeley.edu/~elghaoui/Teaching/EE227BT/lectures.html

此外,Sebastian Reuder的论文也是比较好的资源,同时我也喜欢用下面的笔记来理解tensors的导数

  • Sebastian Reuder论文:

    https://arxiv.org/abs/1609.04747

  • tensors导数笔记:

    https://github.com/mtomassoli/tensor-differential-calculus/blob/master/tensor_diff_calc.pdf

自动求导和深度学习

在你做深度学习项目的时候,不必非要了解自动计算导数。大多数框架,像Torch,Theano或者Tensorflow会帮你自动运算好。通常来说,你甚至不需要知道怎样进行导数运算。也就是说,如果你一定要弄清楚深度学习框架是怎样工作的,你可能想在下面这篇文章中理解自动求导是如何实现的

  • 文章链接:

    https://arxiv.org/abs/1502.05767

其它比较好的用来理解深度学习库功能实现的资源可以在下面的博客和视频中找到:

  • 博客链接:

    http://blog.christianperone.com/2018/03/pytorch-internal-architecture-tour

  • 视频链接:

    https://www.youtube.com/watch?v=Lo1rXJdAJ7w

卷积神经网络

在你学习了一些如何使用基本convents的课程后,你可能需要去理解卷积是如何在图像上工作的。“输入应用某种类型的卷积后,输出的维度是多少?”“stride是如何影响卷积的?”“Batch正则化是什么?”“对于这类应用问题,我看到过的最好的资源是下面的教程Ian Goodfellow的演讲

  • 教程链接:

    https://arxiv.org/abs/1603.07285

  • Ian Goodfellow演讲视频:

    https://www.youtube.com/watch?v=Xogn6veSyxA

如果你想得到一个好点子的话,下面链接中关于Convenets的评论更加全面,另外这篇关于物体检测的总结也是比较好的资源:

  • 关于Convenets的评论:

    https://arxiv.org/abs/1803.08834

  • 关于物体检测的总结:

    https://arxiv.org/abs/1803.08834

自然语言处理中的深度学习

我在前文中提出的Stanford 224课程是一个非常好的起点,可以基本让你了解关于自然语言处理深度学习的方方面面。这里还有一个Graham Neubig(他使用dynet)发布在YouTube上的课程

  • Graham Neubig发布的课程:

    https://www.youtube.com/watch?v=Sss2EA4hhBQ

还有一本你可能喜欢的Yoav Goldberg编写的NLPbook以及这本书编写之后的NLP上新的研究进展的回顾

  • NLPbook:

    https://u.cs.biu.ac.il/~yogo/nnlp.pdf

  • NLP上新进展回顾:

    https://arxiv.org/abs/1708.02709

关于是否在文字上使用ConvNets或者RNNs(LSTM/GRUs,也是一个非常普遍的问题,这里有一个不错的概述:

  • 概述:

    https://arxiv.org/pdf/1803.01271.pdf

强化学习

Sutton和Barto所写的《强化学习(Reinforcement Learning)这本书是开始学习这些方法的不错途径。这本书是免费的,可以在下面链接中获取:

  • Reinforcement Learning:

    http://incompleteideas.net/book/the-book-2nd.html

这里还有一篇关于最新的深度强化学习方法的综述以及一个关于强化学习的非常有趣的教程

  • 深度强化学习方法综述:

    https://arxiv.org/abs/1708.05866

  • 强化学习教程:

    https://hackernoon.com/intuitive-rl-intro-to-advantage-actor-critic-a2c-4ff545978752

这里有一篇关于MCTS (Monte CarloTree Search)的综述(除了深度强化学习技巧外,Deepmind使用其作为AlphaGo算法的一部分),但是我喜欢用这个快速教程来学习它们:

  • MCTS综述:

    http://mcts.ai/pubs/mcts-survey-master.pdf

  • 快速教程:

    http://jeffbradberry.com/posts/2015/09/intro-to-monte-carlo-tree-search/?utm_source=top.caibaojian.com/19271 

其它一些好的综述/教程

在ICLR 2016上,Goodfellow给出过一篇关于GANs(生成对抗网络广义上生成模型的教程,可以在下面链接中找到:

  • 教程链接:

    https://www.youtube.com/watch?v=HGYYEUSm-0Q

神经网络可以用来做艺术迁移(例如Prisma app),可以在这里找到一篇关于如何做这个任务的详细的调查

  • 神经网络应用于艺术迁移:

    https://arxiv.org/abs/1705.04058

另一篇关于Reuder写的关于多任务学习的研究(用同一个神经网络结合多个任务)在这里:

  • 关于多任务学习的研究:

    https://arxiv.org/abs/1706.05098

评论

尽管深度学习在许多问题上效果很好,我们知道永远有它还无法解决的问题。一些值得阅读的好评论有Shalev-Shwartz等人写的Failures of Gradient-Based Deep Learning:

  • Failures of Gradient-Based Deep Learning:

    https://arxiv.org/abs/1703.07950

这个Hinton的讲座列举了ConvNets的难点为什么ConvNets不能解释训练集图片的负面影响:

  • ConvNets的难点:

    https://www.youtube.com/watch?v=rTawFwUvnLE

  • ConvNets不能解释训练集图片的原因:

    https://arxiv.org/pdf/1703.06857.pdf

下面是前段时间的另一个评论以及一篇关于滥用深度学习的全面报告

  • 评论链接:

    https://arxiv.org/abs/1801.00631

  • 关于滥用深度学习的全面报告:

    https://arxiv.org/abs/1802.07228

对抗样本

这是一个巨大领域,可以制造欺骗卷积神经网络的人造或真实的数据。我本可将这一节放在评论里,但我没有这样做,原因是:

1. 它们并不是所有应用的都需要面对的技术挑战。

2. 我在这方面不是非常精通。能够使人接触这个话题并引起兴趣的例子在下面这篇文章里,他们生成“对抗物体”来欺骗神经网络

  • 文章链接:

    https://arxiv.org/abs/1703.05298

为了成为一位数据科学家,你还可以在下面链接中阅读关于机器学习算法的例子:

  • 机器学习算法例子:

    https://blog.paralleldots.com/data-science/machine-learning/ten-machine-learning-algorithms-know-become-data-scientist/

THU数据派
THU数据派

THU数据派"基于清华,放眼世界",以扎实的理工功底闯荡“数据江湖”。发布全球大数据资讯,定期组织线下活动,分享前沿产业动态。了解清华大数据,敬请关注姐妹号“数据派THU”。

入门深度学习
11
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

深度强化学习技术

强化学习(Reinforcement Learning)是主体(agent)通过与周围环境的交互来进行学习。强化学习主体(RL agent)每采取一次动作(action)就会得到一个相应的数值奖励(numerical reward),这个奖励表示此次动作的好坏。通过与环境的交互,综合考虑过去的经验(exploitation)和未知的探索(exploration),强化学习主体通过试错的方式(trial and error)学会如何采取下一步的动作,而无需人类显性地告诉它该采取哪个动作。强化学习主体的目标是学习通过执行一系列的动作来最大化累积的奖励(accumulated reward)。 一般来说,真实世界中的强化学习问题包括巨大的状态空间(state spaces)和动作空间(action spaces),传统的强化学习方法会受限于维数灾难(curse of dimensionality)。借助于深度学习中的神经网络,强化学习主体可以直接从原始输入数据(如游戏图像)中提取和学习特征知识,然后根据提取出的特征信息再利用传统的强化学习算法(如TD Learning,SARSA,Q-Learnin)学习控制策略(如游戏策略),而无需人工提取或启发式学习特征。这种结合了深度学习的强化学习方法称为深度强化学习。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

阿尔法围棋技术

阿尔法围棋是于2014年开始由英国伦敦Google DeepMind公司开发的人工智能围棋程序。AlphaGo是第一个打败人类职业棋手的计算机程序,也是第一个打败围棋世界冠军的计算机程序,可以说是历史上最强的棋手。 技术上来说,AlphaGo的算法结合了机器学习(machine learning)和树搜索(tree search)技术,并使用了大量的人类、电脑的对弈来进行训练。AlphaGo使用蒙特卡洛树搜索(MCTS:Monte-Carlo Tree Search),以价值网络(value network)和策略网络(policy network)为指导,其中价值网络用于预测游戏的胜利者,策略网络用于选择下一步行动。价值网络和策略网络都是使用深度神经网络技术实现的,神经网络的输入是经过预处理的围棋面板的描述(description of Go board)。

凸优化技术

凸优化,或叫做凸最优化,凸最小化,是数学最优化的一个子领域,研究定义于凸集中的凸函数最小化的问题。凸优化在某种意义上说较一般情形的数学最优化问题要简单,譬如在凸优化中局部最优值必定是全局最优值。凸函数的凸性使得凸分析中的有力工具在最优化问题中得以应用,如次导数等。 凸优化应用于很多学科领域,诸如自动控制系统,信号处理,通讯和网络,电子电路设计,数据分析和建模,统计学(最优化设计),以及金融。在近来运算能力提高和最优化理论发展的背景下,一般的凸优化已经接近简单的线性规划一样直捷易行。许多最优化问题都可以转化成凸优化(凸最小化)问题,例如求凹函数f最大值的问题就等同于求凸函数 -f最小值的问题。

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

运筹学技术

运筹学,是一门应用数学学科,利用统计学和数学模型等方法,去寻找复杂问题中的最佳或近似最佳的解答。运筹学经常用于解决现实生活中的复杂问题,特别是改善或优化现有系统的效率。研究运筹学的基础知识包括矩阵论和离散数学,在应用方面多与仓储、物流等领域相关。因此运筹学与应用数学、工业工程专业密切相关。

张量技术

张量是一个可用来表示在一些矢量、标量和其他张量之间的线性关系的多线性函数,这些线性关系的基本例子有内积、外积、线性映射以及笛卡儿积。其坐标在 维空间内,有 个分量的一种量,其中每个分量都是坐标的函数,而在坐标变换时,这些分量也依照某些规则作线性变换。称为该张量的秩或阶(与矩阵的秩和阶均无关系)。 在数学里,张量是一种几何实体,或者说广义上的“数量”。张量概念包括标量、矢量和线性算子。张量可以用坐标系统来表达,记作标量的数组,但它是定义为“不依赖于参照系的选择的”。张量在物理和工程学中很重要。例如在扩散张量成像中,表达器官对于水的在各个方向的微分透性的张量可以用来产生大脑的扫描图。工程上最重要的例子可能就是应力张量和应变张量了,它们都是二阶张量,对于一般线性材料他们之间的关系由一个四阶弹性张量来决定。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

梯度下降技术

梯度下降是用于查找函数最小值的一阶迭代优化算法。 要使用梯度下降找到函数的局部最小值,可以采用与当前点的函数梯度(或近似梯度)的负值成比例的步骤。 如果采取的步骤与梯度的正值成比例,则接近该函数的局部最大值,被称为梯度上升。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

规范化技术

规范化:将属性数据按比例缩放,使之落入一个小的特定区间,如-1.0 到1.0 或0.0 到1.0。 通过将属性数据按比例缩放,使之落入一个小的特定区间,如0.0到1.0,对属性规范化。对于距离度量分类算法,如涉及神经网络或诸如最临近分类和聚类的分类算法,规范化特别有用。如果使用神经网络后向传播算法进行分类挖掘,对于训练样本属性输入值规范化将有助于加快学习阶段的速度。对于基于距离的方法,规范化可以帮助防止具有较大初始值域的属性与具有较小初始值域的属相相比,权重过大。有许多数据规范化的方法,包括最小-最大规范化、z-score规范化和按小数定标规范化。

链式法则技术

是求复合函数导数的一个法则, 是微积分中最重要的法则之一。

对抗样本技术

对抗样本是一类被设计来混淆机器学习器的样本,它们看上去与真实样本的几乎相同(无法用肉眼分辨),但其中噪声的加入却会导致机器学习模型做出错误的分类判断。

自然语言处理技术

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

生成模型技术

在概率统计理论中, 生成模型是指能够随机生成观测数据的模型,尤其是在给定某些隐含参数的条件下。 它给观测值和标注数据序列指定一个联合概率分布。 在机器学习中,生成模型可以用来直接对数据建模(例如根据某个变量的概率密度函数进行数据采样),也可以用来建立变量间的条件概率分布。

生成对抗网络技术

生成对抗网络是一种无监督学习方法,是一种通过用对抗网络来训练生成模型的架构。它由两个网络组成:用来拟合数据分布的生成网络G,和用来判断输入是否“真实”的判别网络D。在训练过程中,生成网络-G通过接受一个随机的噪声来尽量模仿训练集中的真实图片去“欺骗”D,而D则尽可能的分辨真实数据和生成网络的输出,从而形成两个网络的博弈过程。理想的情况下,博弈的结果会得到一个可以“以假乱真”的生成模型。

多任务学习技术

强化学习技术

强化学习是一种试错方法,其目标是让软件智能体在特定环境中能够采取回报最大化的行为。强化学习在马尔可夫决策过程环境中主要使用的技术是动态规划(Dynamic Programming)。流行的强化学习方法包括自适应动态规划(ADP)、时间差分(TD)学习、状态-动作-回报-状态-动作(SARSA)算法、Q 学习、深度强化学习(DQN);其应用包括下棋类游戏、机器人控制和工作调度等。

暂无评论
暂无评论~