预训练模型

1 预训练模型由来

预训练模型是深度学习架构,已经过训练以执行大量数据上的特定任务(例如,识别图片中的分类问题)。这种训练不容易执行,并且通常需要大量资源,超出许多可用于深度学习模型的人可用的资源,我就没有大批次GPU。在谈论预训练模型时,通常指的是在Imagenet上训练的CNN(用于视觉相关任务的架构)。ImageNet数据集包含超过1400万个图像,其中120万个图像分为1000个类别(大约100万个图像含边界框和注释)。

2 预训练模型定义

那么什么是预训练模型?这是在训练结束时结果比较好的一组权重值,研究人员分享出来供其他人使用。我们可以在github上找到许多具有权重的库,但是获取预训练模型的最简单方法可能是直接来自您选择的深度学习库。

现在,上面是预训练模型的规范定义。您还可以找到预训练的模型来执行其他任务,例如物体检测姿势估计

此外,最近研究人员已开始突破预训练模型的界限。在自然语言处理(使用文本的模型)的上下文中,我们已经有一段时间使用嵌入层。Word嵌入是一组数字的表示,其中的想法是类似的单词将以某种有用的方式表达。例如,我们可能希望'鹰派','鹰','蓝杰伊'的表现形式有一些相似之处,并且在其他方​​面也有所不同。用矢量表示单词的开创性论文是word2vec,这篇嵌入层的论文是我最喜欢的论文之一,最早源于80年代,Geoffrey Hinton 的论文

尽管通过对大型数据集进行训练获得的单词的表示非常有用(并且以与预训练模型类似的方式共享),但是将单词嵌入作为预训练模型会有点拉伸。然而,通过杰里米霍华德塞巴斯蒂安鲁德的工作,真正的预训练模型已经到达NLP世界。它们往往非常强大,围绕着首先训练语言模型(在某种意义上理解某种语言中的文本而不仅仅是单词之间的相似性)的概念,并将其作为更高级任务的基础。有一种非常好的方法可以在大量数据上训练语言模型,而不需要对数据集进行人工注释。这意味着我们可以在尽可能多的数据上训练语言模型,比如整个维基百科!然后我们可以为特定任务(例如,情感分析)构建分类器并对模型进行微调,其中获取数据的成本更高。要了解有关这项非常有趣的工作的更多信息,请参阅论文虽然我建议先看看随附的网站,了解全局。

3 预训练模型最好结果

2018年NLP领域取得最重大突破!谷歌AI团队新发布的BERT模型,在机器阅读理解顶级水平测试SQuAD1.1中表现出惊人的成绩:全部两个衡量指标上全面超越人类,并且还在11种不同NLP测试中创出最佳成绩。毋庸置疑,BERT模型开启了NLP的新时代!而谷歌提出的BERT就是在OpenAI的GPT的基础上对预训练的目标进行了修改,并用更大的模型以及更多的数据去进行预训练,从而得到了目前为止最好的效果。

旁注:如何从头开始训练架构以获得预训练的重量?这根本不容易回答,而且相关信息相当稀少。从纸张到纸张需要大量的跳跃才能将训练的所有方面(增强,训练 - 测试分裂,重量衰减,时间表等)拼凑在一起。我试着破解其中一些我过去做过的实验,你可以在这里这里看看这些尝试。更有趣的是DAWNBench比赛网站。在这里,各个团队已经尝试将他们的神经网络训练到某种程度的准确性,同时提高资源使用效率和优化速度。这通常不是架构最初如何训练,而是一个非常有用的信息源(因为代码也可用)。

4 预训练模型

4.1 官方版本综合版本

4.1.1 pytorch

Network Top-1 error Top-5 error
AlexNet 43.45 20.91
VGG-11 30.98 11.37
VGG-13 30.07 10.75
VGG-16 28.41 9.62
VGG-19 27.62 9.12
VGG-11 with batch normalization 29.62 10.19
VGG-13 with batch normalization 28.45 9.63
VGG-16 with batch normalization 26.63 8.50
VGG-19 with batch normalization 25.76 8.15
ResNet-18 30.24 10.92
ResNet-34 26.70 8.58
ResNet-50 23.85 7.13
ResNet-101 22.63 6.44
ResNet-152 21.69 5.94
SqueezeNet 1.0 41.90 19.58
SqueezeNet 1.1 41.81 19.38
Densenet-121 25.35 7.83
Densenet-169 24.00 7.00
Densenet-201 22.80 6.43
Densenet-161 22.35 6.20
Inception v3 22.55 6.44

4.1.2 fastai

4.1.3 tensorflow

Model TF-Slim File Checkpoint Top-1 Accuracy Top-5 Accuracy
Inception V1 Code inception_v1_2016_08_28.tar.gz 69.8 89.6
Inception V2 Code inception_v2_2016_08_28.tar.gz 73.9 91.8
Inception V3 Code inception_v3_2016_08_28.tar.gz 78.0 93.9
Inception V4 Code inception_v4_2016_09_09.tar.gz 80.2 95.2
Inception-ResNet-v2 Code inception_resnet_v2_2016_08_30.tar.gz 80.4 95.3
ResNet V1 50 Code resnet_v1_50_2016_08_28.tar.gz 75.2 92.2
ResNet V1 101 Code resnet_v1_101_2016_08_28.tar.gz 76.4 92.9
ResNet V1 152 Code resnet_v1_152_2016_08_28.tar.gz 76.8 93.2
ResNet V2 50^ Code resnet_v2_50_2017_04_14.tar.gz 75.6 92.8
ResNet V2 101^ Code resnet_v2_101_2017_04_14.tar.gz 77.0 93.7
ResNet V2 152^ Code resnet_v2_152_2017_04_14.tar.gz 77.8 94.1
ResNet V2 200 Code TBA 79.9* 95.2*
VGG 16 Code vgg_16_2016_08_28.tar.gz 71.5 89.8
VGG 19 Code vgg_19_2016_08_28.tar.gz 71.1 89.8
MobileNet_v1_1.0_224 Code mobilenet_v1_1.0_224.tgz 70.9 89.9
MobileNet_v1_0.50_160 Code mobilenet_v1_0.50_160.tgz 59.1 81.9
MobileNet_v1_0.25_128 Code mobilenet_v1_0.25_128.tgz 41.5 66.3
MobileNet_v2_1.4_224^* Code mobilenet_v2_1.4_224.tgz 74.9 92.5
MobileNet_v2_1.0_224^* Code mobilenet_v2_1.0_224.tgz 71.9 91.0
NASNet-A_Mobile_224# Code nasnet-a_mobile_04_10_2017.tar.gz 74.0 91.6
NASNet-A_Large_331# Code nasnet-a_large_04_10_2017.tar.gz 82.7 96.2
PNASNet-5_Large_331 Code pnasnet-5_large_2017_12_13.tar.gz 82.9 96.2
PNASNet-5_Mobile_224 Code pnasnet-5_mobile_2017_12_13.tar.gz 74.2 91.9

4.1.4 keras

Model Size Top-1 Accuracy Top-5 Accuracy Parameters Depth
Xception 88 MB 0.790 0.945 22,910,480 126
VGG16 528 MB 0.713 0.901 138,357,544 23
VGG19 549 MB 0.713 0.900 143,667,240 26
ResNet50 99 MB 0.749 0.921 25,636,712 168
InceptionV3 92 MB 0.779 0.937 23,851,784 159
InceptionResNetV2 215 MB 0.803 0.953 55,873,736 572
MobileNet 16 MB 0.704 0.895 4,253,864 88
MobileNetV2 14 MB 0.713 0.901 3,538,984 88
DenseNet121 33 MB 0.750 0.923 8,062,504 121
DenseNet169 57 MB 0.762 0.932 14,307,880 169
DenseNet201 80 MB 0.773 0.936 20,242,984 201
NASNetMobile 23 MB 0.744 0.919 5,326,716 -
NASNetLarge 343 MB 0.825 0.960 88,949,818 -

4.1.5 ONNX

4.2 图片分类

Model Class Reference Description
MobileNet Sandler et al. 顾名思义,MobileNet是为移动设备设计的架构。而搭建它的正是移动设备行业龙头谷歌。而我们之前附上链接的模型,带有对流行的 ImageNet(包含两万个类的数百万张图片的巨型数据库) 数据集的预训练权重。正如上文所提,MobileNet不止可以用于目标检测,同样它也适用于类似面部识别、地标识别、细致纹理分类等多种计算机视觉任务。.
Top-5 error from paper - ~10%
ResNet He et al., He et al. Very deep CNN model (up to 152 layers), won the ImageNet Challenge in 2015.
Top-5 error from paper - ~6%
SqueezeNet Iandola et al. A light-weight CNN providing Alexnet level accuracy with 50X fewer parameters.
Top-5 error from paper - ~20%
VGG Simonyan et al. Deep CNN model (upto 19 layers) which won the ImageNet Challenge in 2014.
Top-5 error from paper - ~8%
Bvlc_AlexNet Krizhevsky et al. Deep CNN model for Image Classification
Bvlc_GoogleNet Szegedy et al. Deep CNN model for Image Classification
Bvlc_reference_CaffeNet Krizhevsky et al. Deep CNN model for Image Classification
Bvlc_reference_RCNN_ILSVRC13 Girshick et al. Deep CNN model for Image Classification
DenseNet121 Huang et al. Deep CNN model for Image Classification
Inception_v1 Szegedy et al. Deep CNN model for Image Classification
Inception_v2 Szegedy et al. Deep CNN model for Image Classification
ShuffleNet Zhang et al. Deep CNN model for Image Classification
ZFNet512 Zeiler et al. Deep CNN model for Image Classification

4.3 语义分割

Model Class Reference Description
DUC Wang et al. Deep CNN based model with >80% mIOU (mean Intersection Over Union) trained on urban street images
FCN Long et al. contribute

4.3.1 对象检测和分段

Model Class Reference Description
Tiny_YOLOv2 Redmon et al. Deep CNN model for Object Detection
SSD Liu et al. contribute
Faster-RCNN Ren et al.  
Mask-RCNN He et al. Mask R-CNN 是为目标实例分割而开发的灵活框架。这个预训练模型是使用 Python 和 Keras 对 Mask R-CNN 技术的实现。它为给定图像中的目标的每个实例生成边界框和分割掩模,这个 GitHub 存储库提供了大量的资源来帮助新手入门。它包括 Mask R-CNN 的源代码,用于MS COCO 数据集的训练代码和预训练权重,Jupyter notebook 用于可视化检测流程的每个步骤。
YOLO v2 Redmon et al. 说到 YOLO,这是一个广泛运用于深度学习的目标检测框架,这个库包含Keras 中的YOLOv2 实现。尽管开发者已经在各种目标图像上测试了这一框架,比如袋鼠检测、自动驾驶汽车,红细胞检测等等,他们依然发布了浣熊检测的预训练模型。这里你可以下载浣熊的数据集,并且开始训练这个预训练模型。这一数据集包含200个图片(160个训练集,40个测试集)。同样,你可以下载整个模型的预训练权重。而根据模型开发者所说,这些权重可以用于一类物体的目标检测。
YOLO v3 Redmon et al. contribute
VGG-Face 人脸识别模型 从头开始创建一个人脸识别模型其实是一个令人害怕的任务。为了最终构建出令人满意的模型,你需要去寻找搜集并且标注大量的图像。因此,在这个领域使用预训练模型是非常有道理的。VGG-Face是一个有超过2百万张人脸图像,包含2622个独立身份的数据集。预训练模型已经通过以下方法构建完成 vgg-face-keras: 将vgg-face模型直接转化成keras模型,vgg-face-keras-fc:首先将vgg-face Caffe模型转化成mxnet模型,再将其转化成keras模型
Deeplabv3+ 语义图像分割 义图像分割是指将语义标签分配给图像的每个像素的任务。这些语义标签可以是‘天空’,‘汽车’,‘道路’,‘长颈鹿’等等。这项技术所要做的就是找到对象的边界因而需要对精度要求做出约束(这也就是与图像层面的分类任务的区别所在,分类任务对精度的要求更加宽松)。Deeplabv3 是Google最新的语义图像分割模型。 它最初是使用TensorFlow实现并且现在也已经通过keras实现了。这个GitHub仓库包含如何获取标签,如何使用自定义类别数的预训练模型的代码,当然也包含如何去追踪自己模型的代码。

4.3.2 汽车识别

Model Class Reference Description
ArcFace 汽车识别 众所周知,对一辆车分门别类有很多方法:譬如车体设计风格、车门数量、是否敞篷、车座数量等等。对于这一问题,我们需要将车辆图片分门别类,比如考虑品牌、设计模式、年限等等的分类。2012年,Tesla Model S 使用了斯坦福大学的车辆数据集(其中包含196类汽车的16185张图片)正是为了开发这一模型。Tesla Model S使用预训练过的VGG16、VGG19、InceptionV3模型进行训练。由于仅仅使用 3*3的卷积层增加深度,VGG这一简单特点为人所知,这里16和19分别代表两种VGG网络的层数。由于数据量较少,最简单的模型——VGG16是最精确的。这一神经网络的训练,使得在交叉验证集上达到了66.11%的准确度。而由于偏差方差的问题,反而使得比较复杂的模型譬如InceptionV3得到的准确率较低。

4.3.3 面部检测和识别

Model Class Reference Description
ArcFace Deng et al. ArcFace is a CNN based model for face recognition which learns discriminative features of faces and produces embeddings for input face images.
CNN Cascade Li et al. contribute

4.3.4 表情识别

Model Class Reference Description
Emotion FerPlus Barsoum et al. Deep CNN model for Emotion recognition

4.3.5 性别区别

Model Class Reference Description
Age and Gender Classification using Convolutional Neural Networks Levi et al. contribute

4.3.6 手写数字识别

Model Class Reference Description
MNIST- Hand Written Digit Recognition Convolutional Neural Network with MNIST Deep CNN model for hand written digit identification

4.3.7 超分辨率

Model Class Reference Description
Image Super resolution using deep convolutional networks Dong et al. contribute

4.3.8 风格迁移

Model Class Reference Description
Unpaired Image to Image Translation using Cycle consistent Adversarial Network Zhu et al. contribute

4.3.9 生熟番茄分类

Model Class Reference Description
生熟番茄分类   假定我们有几百个数据集的番茄图片,现在考虑如何如何区分它们,比方说按是否瑕疵,或者按成熟与否区分。这里我们考虑使用深度学习模型,而解决这个问题的关键技术就是图像处理。应对于这一分类问题,我们可以利用在Keras上预训练好的 VGG16模型来区分给定图片的番茄是生是熟。通过在ImageNet数据集上抓取的390张或生或熟的番茄图像进行训练,并在18张不同的验证集上进行测试。这些验证集图像上的总体结果如下所示:

4.4 机器翻译

Model Class Reference Description
Neural Machine Translation by jointly learning to align and translate Bahdanau et al. contribute
Google's Neural Machine Translation System Wu et al. contribute

4.4.1 语音处理

Model Class Reference Description
Speech recognition with deep recurrent neural networks Graves et al. contribute
Deep voice: Real time neural text to speech Arik et al. contribute

4.4.2 语言模型

Model Class Reference Description
Deep Neural Network Language Models Arisoy et al. contribute

4.4.3 视觉问答

Model Class Reference Description
VQA: Visual Question Answering Agrawal et al. contribute
Yin and Yang: Balancing and Answering Binary Visual Questions Zhang et al. contribute
Making the V in VQA Matter Goyal et al. contribute
Visual Dialog Das et al. contribute

4.4.4 其他有意思的模型

Model Class Reference Description
Text to Image Generative Adversarial Text to image Synthesis contribute
Sound Generative models WaveNet: A Generative Model for Raw Audio contribute
Time Series Forecasting Modeling Long- and Short-Term Temporal Patterns with Deep Neural Networks contribute
Recommender systems DropoutNet: Addressing Cold Start in Recommender Systems contribute
Collaborative filtering   contribute
Autoencoders   contribute

4.5 Model Visualization

You can see visualizations of each model's network architecture by using Netron.

4.6 CV

名称 环境 精度 错误率
物体检测 c cuda    
姿势估计 keras    
斯坦福CIFAR10 pytorch tensorflow 95.29%  
斯坦福ImageNet pytorch tensorflow MXNet caffe 93.94%  

4.7 NLP

4.7.1 多用途模型

多用途模型是自然语言处理领域的热门话题。这些模型为机器翻译、问答系统、聊天机器人、情绪分析等我们感兴趣的自然语言处理应用提供了动力。这些多用途自然语言处理模型的核心组件是语言建模的概念。

4.7.1.1 ULMFiT

https://github.com/fastai/fastai/tree/master/courses/dl2/imdb_scripts
ULMFiT 由 fast.ai 的 Jeremy Howard 和 DeepMind 的 Sebastian Ruder 提出并设计。你可以说 ULMFiT 是去年启动迁移学习派对的发行版。
正如我们在本文中所述,ULMFiT 使用新的自然语言生成技术实现了最先进的结果。该方法包括在 Wikitext 103 数据集上训练的预处理语言模型进行微调,使其不会忘记以前所学的内容,从而将其微调为一个新的数据集。

4.7.1.2 Transformer

GitHub 项目地址:https://github.com/tensorflow/models/tree/master/official/transformer

Transformer 架构是自然语言处理领域最近几乎所有主要发展的核心,2017 年由 Google 推出。当时,RNN 递归神经网络被用于语言任务,如机器翻译和问答系统。

这种 Transformer 架构的性能优于 RNN 和 CNN(卷积神经网络)。而且训练模型所需的计算资源也大为减少。对自然语言处理的每个人来讲,这种结果是双赢的局面。
根据 Google 的说法,Transformer“应用了一种自注意力(self-attention)机制,可以直接模拟句子中所有单词之间的关系,无论这些单词的位置如何”。它使用固定大小的上下文(也就是前面的单词)来实现这一点。是不是觉得太复杂了?让我们举个例子来简化这个。
“She found the shells on the bank of the river.”模型需要理解这里的“bank”是指河岸,而不是金融机构。Transformer 只需一步就能理解这一点。我建议你阅读下面给出链接的完整论文,以了解 Transformer 的工作原理。它会让你大吃一惊。
Google 去年发布了一款 Universal Transformer 的改进版。还有一个更新、更直观的版本,叫做 Transformer-XL,我们将稍后予以介绍。

有关 Transformer 的更多信息,请参阅以下资源:

4.7.1.3 BERT

GitHub 项目地址:https://github.com/google-research/bert

自 Google 公布他们的结果以来,BERT 就一直在掀起波澜,然后 Google 开源了它背后的代码。我们可以讨论这是否标志着“自然语言处理领域的新时代”,但毫无疑问的是,BERT 是一个非常有用的框架,可以很好地推广到各种自然语言处理任务。
BERT,是 Bidirectional Encoder Representations(双向编码器表示)的缩写,它从单词的两边(左边和右边)来考虑上下文。以前所有的努力方向,都是一次只考虑单词的一边,要么是左边,要么是右边。这种双向性有助于模型更好地理解使用单词的上下文。此外,BERT 的设计目标是能够进行多任务学习,也就是说,它可以同时执行不同的自然语言处理任务。

BERT 是第一个无监督、深度双向的自然语言处理模型预训练系统。它只使用纯文本语料库进行训练。

在发布的时候,BERT 在 11 个自然语言处理任务上取得了最先进的结果。这真是相当了不起的成就!你可以在短短几个小时内(在单个 GPU 上)使用 BERT 训练自己的自然语言处理模型(例如问答系统)。

4.7.1.4 Google Transformer-XL

GitHub 项目地址:https://github.com/kimiyoung/transformer-xl

从长远来看,Google 的这一发行版对自然语言处理领域来说可能是一个非常重要的版本。如果你是一名菜鸟,这个概念可能会变得有点棘手,所以我建议你多读几遍来掌握它。我还会在这一节中提供一些资源,帮助你开始入门 Transformer-XL。

想象一下,你正在读一本书,读到一半的时候,书中突然出现了某个单词或句子,而这些在这本书的开头都提到过。这时候,你我都能回忆起那些单词或句子指的是什么意思。但机器很难建立模拟长期依赖(long-term dependency)的模型,这是可以理解的。

如上所述,实现这一点的一种方法是使用 Transformer。但它们是在固定长度的上下文实现的。换句话说,如果使用这种方法,就没有多少灵活性而言。

而 Transformer-XL 很好地弥补了这一缺陷。它由 Google AI 团队开发,是一种新型的自然语言处理架构,可以帮助机器理解超出固定长度限制的上下文。Transformer-XL 比普通的 Transformer 要快上 1800 倍。
如你现在所预测的,Transformer-XL 在各种语言建模基准 / 数据集上实现了最新的、最先进的结果。下面是他们网页上的一张表,展示了这一点:

image

上面的链接和下面提到的 Transformer-XL GitHub 存储库包含 PyTorch 和 TensorFlow 中的代码。

有关 Transformer-XL 的更多信息,请参阅以下资源:

4.7.1.5 OpenAI GPT-2

GitHub 项目地址:https://github.com/openai/gpt-2

目前这是一个颇有争议的条目。一些人可能会认为 GPT-2 的发布就是 OpenAI 的营销噱头。我当然理解他们的想法。然而,我还是认为,至少尝试一下 OpenAI 发布的代码还是很重要的。
首先,我得为那些不知道我在说什么的人们提供一些背景信息。OpenAI 在 2 月份的时候发表了一篇博文,声称他们已经设计了一个自然语言处理模型,表现非常出色,以至于他们担心被恶意使用,而没有选择发布完整版本。这当然引起了社区的关注。

GPT-2 经过训练后,可以预测 40GB 互联网文本数据的下一个出现的单词。这个框架也是基于 Transformer 的模型,该模型在 800 万个 Web 页面的数据集进行训练。他们在网站公布的结果令人震撼。这个模型能够根据我们输入的寥寥可数的句子就编织出一个完全清晰的故事,请看看下面的这个例子:

4.7.2 词嵌入

我们使用的大多数机器学习和深度学习算法都无法直接处理字符串和纯文本。这些技术要求我们必须先将文本数据转换为数字,然后才能执行任何任务(如回归和分类)。
因此,简单来说,词嵌入就是为了将文本块转换为用于执行自然语言处理任务的数字。词嵌入格式通常尝试使用字典将单词映射到向量。
你可以在下面的文章中,更深入地理解词嵌入、它的不同类型以及如何在数据集中使用它们。如果你不熟悉这个概念的话,我认为这份指南对你来说是必读的:

《An Intuitive Understanding of Word Embeddings: From Count Vectors to Word2Vec》(《直观理解词嵌入:从计数向量到 Word2Vec》:https://www.analyticsvidhya.com/blog/2017/06/word-embeddings-count-word2veec/?utm_source=blog&utm_medium=top-pretrained-models-nlp-article

在这一节中,我们将介绍自然语言处理领域中两个最先进的词嵌入。我还提供了教程的链接,这样你就可以对每个主题有实际的理解。

4.7.2.1 ELMo

GitHub 项目地址:https://github.com/allenai/allennlp/blob/master/tutorials/how_to/elmo.md
不,这个 ELMo 可不是《Sesame Street》(《芝麻街》,美国芝麻街工作制坐坐的一档著名的儿童教育电视节目)的角色。但这个 ELMo(是 Embedding from Language Models 的缩写)在构建自然语言处理模的上下文非常有用。
ELMo 词向量表示(word representations)考虑用于计算词嵌入的完整输入语句。因此“read”这个词在不同的上下文中有不同的 ELMo 向量。这点与旧词嵌入截然不同,对旧词嵌入而言,无论单词在什么上下文中使用,这个单词都会分配到相同的向量。
有关 ELMo 更多的信息,请参阅以下资源:

4.7.2.2 Flair

Flair 并不完全是词嵌入,而是词嵌入的组合。我们可以称 Flair 更多的是一个自然语言处理程序库,它结合了 GloVe、BERT、EMLo 等嵌入。Zalando Research 的优秀人员开发并开源了 Flair。
该团队已经为以下自然语言处理任务发布了几个预训练模型:

4.7.3 FairSeq Seq2Seq模型

4.7.4

4.7.5

名称 环境 精度 错误率
Thomas Wolf      
Junseong Kim      

4.7.5



作者:readilen
链接:https://www.jianshu.com/p/7e13a498bd63
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

发布了7 篇原创文章 · 获赞 19 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/w275840140/article/details/89532040