想要自学深度学习?不用GPU,浏览器就够了

今天要介绍一个近期开源的自学深度学习 GitHub 项目,作者为每种具体算法提供了 Jupyter notebook 实现,可以轻易地在 Google Colab 上运行(免费提供云端 GPU 或 TPU)。所以想自学深度学习,不需要价格几千美元的 GPU,有一个 Chrome 浏览器就够了。

项目地址:https://github.com/GokuMohandas/practicalAI

该项目作者是 Goku Mohandas,是一名硅谷的 AI 研究员,曾就职于苹果公司,并在 O'Reilly Media 从事过教学工作。他开发的这个 GitHub 项目——PracticalAI 目前已经有大约 2500 的收藏量,覆盖了 Jupyter Notebook 和 Google Colab 的使用教程、Python 编程基础、深度学习基础(PyTorch 框架和 CNN、RNN 等算法),以及更高层次的算法和 AI 研究课题。

作者指出,他开发这个教程的目的是让人们能学习到目标导向、产品导向的机器学习思维,而不会停留在课堂。

课程简介

下表概括了整个项目的课程大纲,分成 4 个主要部分:基础、深度学习、高级深度学习算法和 AI 研究课题(蓝色是已经写好 notebook 的部分,可以直接链接到 Colab 页面,黑色是尚未写的部分)。

基础:包括 Jupyter Notebooks 简介、Python 编程基础和基础机器学习算法。作者会介绍 Jupyter Notebooks 的单元格编程界面和操作、执行单元格的方法;然后是 Python 以及两个重要的 Python 库——NumPy、Pandas 的入门;最后是线性回归逻辑回归等基础 ML 算法的讲解,这些算法覆盖面很窄,不包含 SVM、朴素贝叶斯、隐马尔科夫模型等更复杂的算法。但该项目并不是为经典机器学习而设计的课程,读者可以在学习这些简单算法的过程中了解到 AI 算法的训练、数据集、评估、推理、正则化等基本概念,然后进入深度学习课程。

深度学习包括 PyTorch 框架介绍和多种经典的深度学习算法。PyTorch 的介绍主要涉及张量计算和梯度计算。深度学习算法涉及多层感知机、CNN、RNN、词嵌入等,作者还写了两个较高层面的主题,分别是数据和模型的关系,以及目标导向的机器学习,让读者对如何利用这些算法有个基本理解。每种算法针对的任务都比较单一,也没有涉及生成模型,但通过深入的理解单个模型应用的每一个过程,可以让你在进阶学习时不被细节拖后腿。

高级深度学习算法:包括高级 RNN 模型、残差网络、自编码器、生成对抗网络、空间变换网络等。这些算法的模型架构设计建立在基础的深度网络之上。作者目前只写了高级 RNN 模型,涉及条件 RNN、编码器-解码器架构以及注意力机制等,其它模型还需等作者更新。或许作者还可以考虑加上基于流的模型、图神经网络等高级算法。

AI 研究课题:包括计算机视觉、时间序列分析、主题建模、推荐系统、预训练语言模型多任务学习、小样本学习、强化学习等。这些课题不对应具体的模型架构,但会随当前研究现状有所偏好,如计算机视觉领域的主要模型架构就是 CNN 和编码器-解码器,作者目前只写了计算机视觉部分。要把握这些课题,需要读者对要解决的问题本身有很好的理解,从而不限于方法层面的视角。或许作者还可以考虑加上 AutoML、自监督学习迁移学习、AI 游戏等课题。

可以跑的教程

这一套实践教程都能直接在 Colab 上运行,因此结合解释与代码,我们能更好地入门机器学习。那么小白是不是也能看得懂这个教程?我们可以从最基础的 Python 和 NumPy 出发,看看它们都介绍了些什么,纯小白是不是能在较短的篇幅里了解最核心的思想与技术。

在 Pyhon 实践中,作者给出了一个非常精简的教程,其仅涉及 Python 最核心的模块,包括变量、数据结构、基本语句与结构等。即使没有什么基础的小白,了解这些核心模块后至少能看懂大部分代码,剩下困难的只需要在遇到时谷歌一下就行了。

首先对于最基础的变量,它们就像函数中的自变量一样传递不同的值。如下所示,Python 中的变量可以传递整数、浮点数、字符串和布尔值,它们可以用于不同的运算:

而对于 Python 中主要的数据结构,即组织整数、浮点数、字符串和布尔值的结构,主要可以分为列表、元组和字典。其中列表是最常见的数据结构,我们可以想象为一个表格中的一行,表格每一个单元格都是列表中的一个元素,这样的元素不论存放数值、列表还是字典都没问题,它相当于一个容器。

以下展示了如何取列表中存储的元素,第一个表示取列表中所有元素,第二个表示从第三个元素开始取后面所有的元素:


元组和列表非常类似,只不过元组里面的元素不能修改。最后是字典,字典中每一个元素都由 Key 和 Value 组成,即一个键值对。在字典中,我们需要使用 Key 才能取到对应的 Value。

如下所示字典的构建与索引,它会通过「name」这一个键取对应的值 Goku:

随后对于基础语句,例如条件和循环语句,该教程也给出了很直观的解释。最后,如果我们利用数据结构组织变量、利用基础语句组织数据结构,再用函数或类等程序逻辑组织基础语句,那么我们就能得到完整的程序。

如下所示为基础的类,它能将函数和变量统一在一起,并构建完整的流程。在类中,赋值的变量可以称为属性,而函数则称为方法。下图构建了一个 Pets 类,当我们使用狗或猫实例化这个类时,就能直接调用 change_name 方法以实现改名。入门者跑一跑这几段代码就能知道类的大概作用了:

当然除了这些最基础的 Pyhon 语句,机器学习另外一个很重要的基础就是数值计算。我们需要计算大量的数据以获得最终的分析结果,这就少不了 NumPy,可以说入门机器学习第一个学习的包就是 NumPy。

我们可以使用 NumPy 实现大多数机器学习算法,现在很多深度学习框架都继承了 NumPy 的核心概念或数据结构等。了解了它,学习 DL 框架就没什么阻碍了。在 NumPy 中,最重要的是多维数组这个数据结构,它能以向量、矩阵或高阶张量的形式组织大量的数值,并实现高效的运算。此外,NumPy 还有很多针对多维数组所构建的运算,例如索引、矩阵乘法、矩阵转置或广播机制等。

入门读者首先需要了解多维数组,尤其是矩阵的概念,当然要是数学上不了解矩阵,NumPy 也就爱莫能助了。以下代码构建了一个 3×3 矩阵,并输出它的元素类型、矩阵维度形状和矩阵大小等。所有机器学习中的数据都是以多为数组存储的,它们的计算流也都以数组为媒介,所以先搞定最基础的 NumPy 数组吧!

关于理论基础的学习,只跑这些算法肯定是不够的,小编还是建议结合经典教材和课程视频一起学习。但先在浏览器上跑一跑,或许能让你更快体验到 AI 的魅力所在,并带来学习的动力。学习这个课程并不能让你了解深度学习的现状,但可以快速上手具体的项目,这或许正是作者说的「目标导向、产品导向」的意义所在。

入门资源GitHubJupyter
51
相关数据
深度学习技术

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

逻辑回归技术

逻辑回归(英语:Logistic regression 或logit regression),即逻辑模型(英语:Logit model,也译作“评定模型”、“分类评定模型”)是离散选择法模型之一,属于多重变量分析范畴,是社会学、生物统计学、临床、数量心理学、计量经济学、市场营销等统计实证分析的常用方法。

机器学习技术

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

词嵌入技术

词嵌入是自然语言处理(NLP)中语言模型与表征学习技术的统称。概念上而言,它是指把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量。

注意力机制技术

我们可以粗略地把神经注意机制类比成一个可以专注于输入内容的某一子集(或特征)的神经网络. 注意力机制最早是由 DeepMind 为图像分类提出的,这让「神经网络在执行预测任务时可以更多关注输入中的相关部分,更少关注不相关的部分」。当解码器生成一个用于构成目标句子的词时,源句子中仅有少部分是相关的;因此,可以应用一个基于内容的注意力机制来根据源句子动态地生成一个(加权的)语境向量(context vector), 然后网络会根据这个语境向量而不是某个固定长度的向量来预测词。

张量技术

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

计算机视觉技术

计算机视觉(CV)是指机器感知环境的能力。这一技术类别中的经典任务有图像形成、图像处理、图像提取和图像的三维推理。目标识别和面部识别也是很重要的研究领域。

推荐系统技术

推荐系统(RS)主要是指应用协同智能(collaborative intelligence)做推荐的技术。推荐系统的两大主流类型是基于内容的推荐系统和协同过滤(Collaborative Filtering)。另外还有基于知识的推荐系统(包括基于本体和基于案例的推荐系统)是一类特殊的推荐系统,这类系统更加注重知识表征和推理。

线性回归技术

在现实世界中,存在着大量这样的情况:两个变量例如X和Y有一些依赖关系。由X可以部分地决定Y的值,但这种决定往往不很确切。常常用来说明这种依赖关系的最简单、直观的例子是体重与身高,用Y表示他的体重。众所周知,一般说来,当X大时,Y也倾向于大,但由X不能严格地决定Y。又如,城市生活用电量Y与气温X有很大的关系。在夏天气温很高或冬天气温很低时,由于室内空调、冰箱等家用电器的使用,可能用电就高,相反,在春秋季节气温不高也不低,用电量就可能少。但我们不能由气温X准确地决定用电量Y。类似的例子还很多,变量之间的这种关系称为“相关关系”,回归模型就是研究相关关系的一个有力工具。

朴素贝叶斯技术

朴素贝叶斯是一种构建分类器的简单方法。该分类器模型会给问题实例分配用特征值表示的类标签,类标签取自有限集合。它不是训练这种分类器的单一算法,而是一系列基于相同原理的算法:所有朴素贝叶斯分类器都假定样本每个特征与其他特征都不相关。举个例子,如果一种水果其具有红,圆,直径大概3英寸等特征,该水果可以被判定为是苹果。尽管这些特征相互依赖或者有些特征由其他特征决定,然而朴素贝叶斯分类器认为这些属性在判定该水果是否为苹果的概率分布上独立的。

监督学习技术

监督式学习(Supervised learning),是机器学习中的一个方法,可以由标记好的训练集中学到或建立一个模式(函数 / learning model),并依此模式推测新的实例。训练集是由一系列的训练范例组成,每个训练范例则由输入对象(通常是向量)和预期输出所组成。函数的输出可以是一个连续的值(称为回归分析),或是预测一个分类标签(称作分类)。

逻辑技术

人工智能领域用逻辑来理解智能推理问题;它可以提供用于分析编程语言的技术,也可用作分析、表征知识或编程的工具。目前人们常用的逻辑分支有命题逻辑(Propositional Logic )以及一阶逻辑(FOL)等谓词逻辑。

迁移学习技术

迁移学习是一种机器学习方法,就是把为任务 A 开发的模型作为初始点,重新使用在为任务 B 开发模型的过程中。迁移学习是通过从已学习的相关任务中转移知识来改进学习的新任务,虽然大多数机器学习算法都是为了解决单个任务而设计的,但是促进迁移学习的算法的开发是机器学习社区持续关注的话题。 迁移学习对人类来说很常见,例如,我们可能会发现学习识别苹果可能有助于识别梨,或者学习弹奏电子琴可能有助于学习钢琴。

正则化技术

当模型的复杂度增大时,训练误差会逐渐减小并趋向于0;而测试误差会先减小,达到最小值后又增大。当选择的模型复杂度过大时,过拟合现象就会发生。这样,在学习时就要防止过拟合。进行最优模型的选择,即选择复杂度适当的模型,以达到使测试误差最小的学习目的。

图神经网络技术

图网络即可以在社交网络或其它基于图形数据上运行的一般深度学习架构,它是一种基于图结构的广义神经网络。图网络一般是将底层图形作为计算图,并通过在整张图上传递、转换和聚合节点特征信息,从而学习神经网络基元以生成单节点嵌入向量。生成的节点嵌入向量可作为任何可微预测层的输入,并用于节点分类或预测节点之间的连接,完整的模型可以通过端到端的方式训练。

生成模型技术

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

生成对抗网络技术

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

多任务学习技术

强化学习技术

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

Jupyter技术

Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。 Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown。 用途包括:数据清理和转换,数值模拟,统计建模,机器学习等等 。

语言模型技术

语言模型经常使用在许多自然语言处理方面的应用,如语音识别,机器翻译,词性标注,句法分析和资讯检索。由于字词与句子都是任意组合的长度,因此在训练过的语言模型中会出现未曾出现的字串(资料稀疏的问题),也使得在语料库中估算字串的机率变得很困难,这也是要使用近似的平滑n元语法(N-gram)模型之原因。

推荐文章
可以可以 收藏学习一波