思源 晓坤参与

不同的领域、框架,这是一份超全的深度学习模型GitHub集合

一直以来,研究者与开发者都经常在 GitHub 宝库中搜索比较有意思的项目与实现,但我们可能需要一个确切的主题,并做一些筛选。近日有开发者发布了一个模型聚合平台,我们可以分领域在上面搜索到当前最为流行的开源模型。作者根据 GitHub 项目收藏量、项目所属领域、实现框架等特点对这些模型分类,因此我们能快速定位合适的模型。

项目地址:https://modelzoo.co/

深度学习近来是机器学习最流行的子领域,因为针对高维数据拥有强大的建模能力,它在很多不同的任务与领域都绽放了夺目的光彩,例如计算机视觉自然语言处理与智能体学习等。深度学习模型是一种表示学习方法,即根据模型学习表示的本身,而不仅仅如同传统机器学习那样将表示映射到输出。

目前深度学习主要通过不同层级的神经元从原始数据自动抽取特征,它学习到的表示往往比传统 ML 手动设计的表示有更好的性能。目前 GitHub 上受关注的 ML 实现大部分都是深度学习模型,它们以不同的层级结构与网络架构建立起一个个解决具体问题的模型。例如 2D 卷积层以分层的形式堆叠就能由简单到复杂抽取二维数据(如图像)的特征,而循环单元的堆叠就适合处理机器翻译等序列标注问题。再加上残差连接、门控机制和注意力机制等模块就能针对具体任务学习特定知识。

这些层级表征的深度模型在近来有非常多的研究,很多开发者与研究者都分享了他们的代码与创意。ModelZoo 旨在为搜索优秀深度模型提供一个集中式的平台,并希望为复现论文、构建复杂神经网络、学习模型代码与直接使用预训练模型提供资源。

Model Zoo 是新构建的平台,因此它包含的模型库将不断发展。如果读者发现有其它一些优秀的模型还没有收录进去,可以在网站上提交并通知作者。此外,这个网站的开发者目前还只是新加坡的一名本科生,他希望能借这样一个平台帮助更多的学习者。

Model Zoo 所收集的所有模型都能在 GitHub 中找到,作者 Jing Yu 根据 GitHub 项目收藏量、项目所属领域、实现框架等特征对模型做了整理,此外我们也能使用关键词搜索确定需要查找的模型。每一个模型都在页面上展示了对应 GitHub 项目的 README 文档,因此读者可快速判断项目的基本信息与要求。此外,作者还构建了 Newsletter 模块,每月整理一次当月最流行与重要的模型。

目前,该项目内的深度学习模型有五大分类:计算机视觉自然语言处理生成模型强化学习和无监督学习。这些类别或领域相互之间是有交叉的,例如很多生成模型都可以归为无监督学习,实际上很多模型确实归为了多个类别。

目前收录的实现框架有 Tensorflow、Caffe、Caffe2、PyTorch、MXNet、Keras。虽然还有很多框架没有收录,例如 CycleGAN 的原实现因为使用的是 Lua 语言与 Torch 框架,即使该项目的收藏量达到了 6453,这个平台同样没有收录。

可以从 Browse Frameworks 和 Browse Categories 分别进入以上的框架分类界面和模型分类界面,并按其分类进行浏览。下方的搜索框支持模型名称的搜索。


模型基本是按 GitHub 的收藏量(如 Magenta 的 10164 star)排序的,预览界面还包含项目简介、实现框架和分类等信息。点击后可进入项目细节(即对应 GitHub 项目的 README 文档)。后文我们将针对各领域简要介绍其中最流行的项目:

计算机视觉

  • GitHub star:10164

  • 实现框架:TensorFlow

Magenta 是一个用于探索机器学习在艺术、音乐创作中的作用的研究项目,因为应用众多作者将其划分为计算机视觉强化学习领域。其主要涉及为生成歌曲、图像、素描等开发新的深度学习强化学习算法。但它也在尝试构建智能工具和接口,以帮助艺术家和音乐家扩展他们使用这些模型的方式。Magenta 由来自谷歌大脑团队的一些研究员和工程师启动,但也有很多其他人为该项目做出了重要的贡献。

目前该项目有非常多的应用实现与演示,读者可查看 https://magenta.tensorflow.org/blog。

Mask-RCNN

  • GitHub star:6104

  • 实现框架:Keras

Mask R-CNN 是一个两阶段的框架,第一个阶段扫描图像并生成候选区域(proposals,即有可能包含一个目标的区域),第二阶段分类候选区域并生成边界框和掩码。Mask R-CNN 扩展自 Faster R-CNN,由同一作者在去年提出。Faster R-CNN 是一个流行的目标检测框架,Mask R-CNN 将其扩展为实例分割框架。

该项目是 Mask R-CNN 的在 Python3、Keras 和 TensorFlow 上的实现。该模型可以为图像中的目标实例生成边框和分割掩码。其架构基于特征金字塔网络(FPN)和 ResNet101 骨干网络。

该 repo 包含:Mask R-CNN 建立在 FPN 和 ResNet101 上的源代码;数据集 MS COCO 的训练代码;MS COCO 的预训练权重;可视化检测流程的每个步骤的 Jupyter notebook;多 GPU 训练的 ParallelModel 类;在 MS COCO 指标(AP)上的评估;训练自定义数据集的示例。

自然语言处理

WaveNet

  • GitHub star:3692

  • 实现框架:TensorFlow

下图展示了 WaveNet 的主要结构,这是一个完全卷积的神经网络,其中的卷积层有不同的扩张系数(dilation factors),这让其感受野可根据层级深度指数式地增长并可覆盖数千个时间步骤。此外 Wave Net 还是第一个提出因果卷积的模型,从直观上来说,它类似于将卷积运算「劈」去一半,令其只能对过去时间步的输入进行运算。其实后来很多使用卷积网络处理序列标注问题的模型都借鉴了 WaveNet 所提出的这两个结构。

DeepMind 提出的 WaveNet 神经网络架构可以直接生成新的音频波形,在文本到语音转换和音频生成中有优越的表现。在训练时间,其输入序列是由人类说话者录制的真实波形。训练之后,我们可以对这个网络进行采样以生成合成话语。在采样的每一个时间步骤,都会从该网络所计算出的概率分布中取出一个值。然后这个值会被反馈进入输入,并为下一个步骤生成一个新的预测。像这样一次一步地构建样本具有很高的计算成本,但这对生成复杂的、听起来真实感强的音频而言至关重要。

Sentence Classification with CNN

  • GitHub star:3416

  • 实现框架:TensorFlow

论文《Convolutional Neural Networks for Sentence Classification》的简化版 TensorFlow 实现。

生成模型

DCGAN-tensorflow

  • GitHub star:4263

  • 实现框架:TensorFlow

Goodfellow 等人提出来的 GAN 是通过对抗过程估计生成模型的新框架。在这种框架下,我们需要同时训练两个模型,即一个能捕获数据分布的生成模型 G 和一个能估计数据来源于真实样本概率的判别模型 D。生成器 G 的训练过程是最大化判别器犯错误的概率,即判别器误以为数据是真实样本而不是生成器生成的假样本。因此,这一框架就对应于两个参与者的极小极大博弈(minimax game)。而 DCGAN 主要使用卷积神经网络作为生成器 G 与判别器 D 的架构,因此能生成比较清晰与优秀的图像。

论文《Deep Convolutional Generative Adversarial Networks》的 TensorFlow 实现,这是一个稳定的生成对抗网络

上图展示了生成器 G 的架构,它使用四个转置卷积进行上采样,即将 100 维的随机变量恢复到图像。这个项目为了防止判别器器网络收敛过快,当判别器迭代一次生成器网络会连续迭代两次,这和原论文不太一样。

Image-to-Image Translation with Conditional Adversarial Networks

  • GitHub star:4242

  • 实现框架:PyTorch

因为 CycleGAN 的原实现是用 Lua 写的,因此很多研究者使用该项目复现图像到图像的转换。CycleGAN 的主要想法是训练两对生成器-判别器模型以将图像从一个领域转换为另一个领域。在这过程中我们要求循环一致性,即在对图像应用生成器后,我们应该得到一个相似于原始 L1 损失的图像。因此我们需要一个循环损失函数(cyclic loss),它能确保生成器不会将一个领域的图像转换到另一个和原始图像完全不相关的领域。

该项目是配对、非配对的图像到图像转换的 PyTorch 实现。

强化学习

Deep Reinforcement Learning for Keras

  • GitHub star:2639

  • 实现框架:Keras

keras-rl 让人们可以轻松使用当前最佳的深度强化学习算法,使用 Keras 实现,并结合了 OpenAI Gym 来构建项目。

目前该项目实现了以下算法:

  • Deep Q Learning (DQN)

  • Double DQN

  • Deep Deterministic Policy Gradient (DDPG)

  • Continuous DQN (CDQN or NAF)

  • Cross-Entropy Method (CEM)

  • Dueling network DQN (Dueling DQN)

  • Deep SARSA

DQN-tensorflow

  • GitHub star:1610

  • 实现框架:TensorFlow

论文《Human-Level Control through Deep Reinforcement Learning》的 TensorFlow 实现。


该实现包括:Deep Q-network 和 Q-learning

  • 经验重放记忆

  • 减少持续更新的相关性

  • 用于 Q-learning 目标的网络由于区间问题而经过修改

  • 减少目标和预测 Q 值之间的关联

监督学习

MUSE: Multilingual Unsupervised and Supervised Embeddings

  • GitHub star:1298

  • 实现框架:PyTorch

MUSE 是一个多语言词嵌入的 Python 库,其目的是为社区提供当前最佳的基于 fastText 的多语言词嵌入,以及用于训练和评估的大规模高质量双语词典。

该项目使用了两种方法,一种是使用双语词典或相同字符串的监督方法,另一种是没有使用任何平行数据的无监督方法。

Domain Transfer Network (DTN)

  • GitHub star:654

  • 实现框架:TensorFlow

论文《Unsupervised Cross-Domain Image Generation》的 TensorFlow 实现,下图是其模型架构概览。

以上是各类别主要流行的模型简介,还有很多优秀的项目并没有展示,读者根据该平台与具体的需求筛选模型。

工程GitHub计算机视觉NLP模型
12
相关数据
深度学习技术

深度学习(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)学习控制策略(如游戏策略),而无需人工提取或启发式学习特征。这种结合了深度学习的强化学习方法称为深度强化学习。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

机器学习技术

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

判别模型技术

在机器学习领域,有一种分类方法将模型分为判别模型和生成模型(generative model)两种。 判别模型是一种对未知数据y与已知数据x之间关系进行建模的方法,是一种基于概率理论的方法。已知输入变量x,判别模型通过构建条件概率P(y|x)分布预测结果,或试图直接从输入x的空间学习映射到标签{0,1}(如感知器算法)的函数。生成模型则是考虑x与y之间的联合分布。 在实际应用中判别模型非常常见,如:逻辑回归(logistic regression),支持向量机(support vector machine), 提升方法(Boosting),条件随机场(conditional random fields),神经网络(neural network),随机森林(random forests)典型的生成模型则包括:高斯混合模型(Gaussian Mixture Model),隐马尔科夫模型(hidden markov model),简单贝叶斯(naive Bayes)等。不难看出两者的区别。

SARSA算法技术

SARSA 很像 Q-learning。SARSA 和 Q-learning 之间的关键区别是 SARSA 是一种在策略算法。这意味着 SARSA 根据当前策略执行的动作而不是贪心策略来学习 Q 值。

词嵌入技术

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

收敛技术

在数学,计算机科学和逻辑学中,收敛指的是不同的变换序列在有限的时间内达到一个结论(变换终止),并且得出的结论是独立于达到它的路径(他们是融合的)。 通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

TensorFlow技术

TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google 相册和搜索,其中许多产品曾使用过其前任软件DistBelief。

注意力机制技术

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

张量技术

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

计算机视觉技术

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

机器翻译技术

机器翻译(MT)是利用机器的力量「自动将一种自然语言(源语言)的文本翻译成另一种语言(目标语言)」。机器翻译方法通常可分成三大类:基于规则的机器翻译(RBMT)、统计机器翻译(SMT)和神经机器翻译(NMT)。

神经网络技术

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

卷积神经网络技术

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

映射技术

映射指的是具有某种特殊结构的函数,或泛指类函数思想的范畴论中的态射。 逻辑和图论中也有一些不太常规的用法。其数学定义为:两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,y称为元素x在映射f下的象,记作:y=f(x)。x称为y关于映射f的原象*。*集合A中所有元素的象的集合称为映射f的值域,记作f(A)。同样的,在机器学习中,映射就是输入与输出之间的对应关系。

监督学习技术

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

分类问题技术

分类问题是数据挖掘处理的一个重要组成部分,在机器学习领域,分类问题通常被认为属于监督式学习(supervised learning),也就是说,分类问题的目标是根据已知样本的某些特征,判断一个新的样本属于哪种已知的样本类。根据类别的数量还可以进一步将分类问题划分为二元分类(binary classification)和多元分类(multiclass classification)。

神经元技术

(人工)神经元是一个类比于生物神经元的数学计算模型,是神经网络的基本组成单元。 对于生物神经网络,每个神经元与其他神经元相连,当它“兴奋”时会向相连的神经元发送化学物质,从而改变这些神经元的电位;神经元的“兴奋”由其电位决定,当它的电位超过一个“阈值”(threshold)便会被激活,亦即“兴奋”。 目前最常见的神经元模型是基于1943年 Warren McCulloch 和 Walter Pitts提出的“M-P 神经元模型”。 在这个模型中,神经元通过带权重的连接接处理来自n个其他神经元的输入信号,其总输入值将与神经元的阈值进行比较,最后通过“激活函数”(activation function)产生神经元的输出。

MXNet技术

MXNet是开源的,用来训练部署深层神经网络的深度学习框架。它是可扩展的,允许快速模型训练,并灵活支持多种语言(C ++,Python,Julia,Matlab,JavaScript, Go,R,Scala,Perl,Wolfram语言)

自然语言处理技术

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

Mask R-CNN技术

Mask R-CNN是一个概念上简单,灵活和通用的对象实例分割框架。 该方法能够高效地检测图像中的对象,同时为每个实例生成高质量的分割蒙版。 这种方法通过添加一个用于预测对象蒙版的分支来扩展R-CNN使之更快,该分支与现有的用于边界框识别的分支并行。

生成模型技术

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

生成对抗网络技术

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

强化学习技术

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

堆叠技术

堆叠泛化是一种用于最小化一个或多个泛化器的泛化误差率的方法。它通过推导泛化器相对于所提供的学习集的偏差来发挥其作用。这个推导的过程包括:在第二层中将第一层的原始泛化器对部分学习集的猜测进行泛化,以及尝试对学习集的剩余部分进行猜测,并且输出正确的结果。当与多个泛化器一起使用时,堆叠泛化可以被看作是一个交叉验证的复杂版本,利用比交叉验证更为复杂的策略来组合各个泛化器。当与单个泛化器一起使用时,堆叠泛化是一种用于估计(然后纠正)泛化器的错误的方法,该泛化器已经在特定学习集上进行了训练并被询问了特定问题。

推荐文章