Merge pull request #151 from ChaofWang/master

update 第十四章问答
This commit is contained in:
Suseike 2018-11-07 23:30:45 +08:00 committed by GitHub
commit efe71f8bba
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 42 additions and 4 deletions

View File

@ -13,4 +13,11 @@
14.7 为什么卷积核设计尺寸都是奇数
14.8 权重共享的形式有哪些,为什么要权重共享
<----shw2018-2018-11-07---->
新增问答modify by 王超锋
14.9 什么是微调fine-tune
14.10 微调有哪些不同方法?
14.11 微调先冻结底层,训练顶层的原因?
14.12 不同的数据集特性下如何微调?

View File

@ -85,13 +85,44 @@
权重共享一定程度上能增强参数之间的联系,获得更好的共性特征。同时很大程度上降低了网络的参数,节省计算量和计算所需内存(当然,结构化递归并不节省计算量)。此外权重共享能起到很好正则的作用。正则化的目的是为了降低模型复杂度,防止过拟合,而权重共享则正好降低了模型的参数和复杂度。因此一个设计优秀的权重共享方式,在降低计算量的同时,通常会较独享网络有更好的效果。
## 14.9 如何选取卷积核
## 14.9 什么是微调fine-tune
## 14.10 微调为什么需要冻结部分参数
微调fine-tune顾名思义指稍微调整参数即可得到优秀的性能是迁移学习的一种实现方式。微调和从头训练train from scratch的本质区别在于模型参数的初始化train from scratch通常指对网络各类参数进行随机初始化当然随机初始化也存在一定技巧随机初始化模型通常不具有任何预测能力通常需要大量的数据或者特定域的数据进行从零开始的训练这样需要训练到优秀的模型通常是稍困难的。而微调的网络网络各类参数已经在其他数据集例如ImageNet数据集完成较好调整的具备了较优秀的表达能力。因此我们只需要以较小的学习速率在自己所需的数据集领域进行学习即可得到较为优秀的模型。微调通常情况下无须再重新设计网络结构预训练模型提供了优秀的结构只需稍微修改部分层即可。在小数据集上通常微调的效果比从头训练要好很多原因在于数据量较小的前提下训练更多参数容易导致过度拟合。
## 14.11 微调有哪些不同方法
## 14.10 微调有哪些不同方法?
## 14.12 如何搜索超参数?
以图像分类为例,通常情况下由于不同数据集需要的类别数不同,我们需要修改网络的输出顶层。这种情况下有两种微调方式:
- 不冻结网络模型的任何层,对最后的改动层使用较大的学习率,对未改动层以较小的学习率进行训练全模型训练,进行多轮训练即可。即一步完成训练。
- 冻结除了顶部改动层以外的所有层参数,即不对冻结部分的层进行参数训练更新,进行若干轮的微调训练后,放开顶部层以下的若干层或者全部放开所有层的参数,再次进行若干轮训练即可。即分多步训练。
以上两种都属于微调。目前由于存在大量优秀的预训练模型,如何确定哪个模型适合自己的任务并能得到最佳性能需要花大量的时间探索。此时,上述的前者是种不错训练方式,你无须进行过多分步的操作。而当探索到一个比较适合的模型时,你不妨可以再次重新尝试下以第二种方式进行训练,或许能得到相比于前者稍高些的性能,因为小数据集上调整过多的参数过拟合的机率也会增大,当然这并不是绝对的。
## 14.11 微调先冻结底层,训练顶层的原因?
14.10中第二种冻结多步训练的方式。首先冻结除了顶部改动层以外的所有层参数对顶层进行训练这个过程可以理解为顶层的域适应训练主要用来训练适应模型的现有特征空间防止顶层糟糕的初始化对已经具备一定表达能力的层的干扰和破坏影响最终的性能。之后在很多深度学习框架教程中会使用放开顶层往下一半的层数继续进行微调。这样的好处在于越底层的特征通常是越通用的特征越往上其整体的高层次语义越完备这通过感受野很容易理解。所以若预训练模型的数据和微调训练的数据语义差异越大例如ImageNet的预模型用于医学图像的训练那越往顶层的特征语义差异就越大因此通常也需要进行相应的调整。
## 14.12 不同的数据集特性下如何微调?
- 数据集数据量少,数据和原数据集类似。这是通常做法只需修改最后的输出层,训练即可,训练过多参数容易过拟合。
- 数据集数据量少数据和原数据集差异较大。由于数据差异较大可以在完成输出顶层的微调后微调顶层往下一半的层数进行微调原因见14.11。
- 数据集数据量大,数据与原数据集差异较大。这种情况下,通常已经不需要用预训练模型进行微调,通常直接重新训练即可。
- 数据集数据量大,数据与原数据类似。这时预训练模型的参数是个很好的初始化,可利用预训练模型放开所有层以较小的学习率微调即可。
## 14.13 自动化超参数搜索方法有哪些?
目前自动化搜索主要包含网格搜索,随机搜索,基于模型的超参优化
## 14.14 GAN常用调参策略
## 14.15 调试策略
#
  最后,关于如何搜索超参数的问题,我见过大概两种重要的思想流派或人们通常采用的两种重要但不同的方式。