临沂网站建设对实体企业,互联网公司运营是做什么的,软件开发职业学校,北京网站建设与维护fine-tuning 介绍 什么情况下使用微调 微调指导事项 不同数据集下使用微调 涉及到的其他知识 学习率#xff08;learning-rate#xff09; 卷积神经网络的核心 迁移学习与微调 什么是迁移学习 为什么要迁移学习 详细解释 自己的理解#xff08;不知道对不对#xff09; 介绍…fine-tuning 介绍 什么情况下使用微调 微调指导事项 不同数据集下使用微调 涉及到的其他知识 学习率learning-rate 卷积神经网络的核心 迁移学习与微调 什么是迁移学习 为什么要迁移学习 详细解释 自己的理解不知道对不对 介绍 fine-tuning的过程就是用训练好的参数从已训练好的模型中获得初始化自己的网络然后用自己的数据接着训练参数的调整方法与from scratch训练过程一样梯度下降。对于初始化过程我们可以称自己的网络为目标网络训练好的模型对应网络为源网络要求目标网络待初始化的层要与源网络的层相同层的名字、类型以及层的设置参数等等均相同。
fine-tuning已经成为了使用DL网络的一个常用技巧trick。使用深度网络做图像处理任务时使用一个在大的数据集上预训练好的模型在自己数据上微调往往可以得到比直接用自己数据训练更好的效果这是因为在imagenet上预训练的模型参数从微调一开始就处于一个较好的位置这样微调能够更快的使网络收敛。对于相同类别的任务我们可以默认这样去做比较好。然而当我们要做一个不同的任务那么可能直接拿预训练的模型进行微调就不是最好的了。
一般我们在训练from scratch的时候往往要在一些超大型的数据集上训练一个目的是为了让训练得到的特征尤其是底层特征更加多样。而从generative pre-training生成式预训练到discriminative fine-tuning判别微调的过程是一个对泛化特征进行面向任务的特化的过程。首先如果你将底层特征可视化出来会发现底层特征多是一些边、角之类的基础几何形状高层特征可能会发生一些有趣的变化直接反映出你的task。 在大数据集上进行预训练的目的之一是为了获得丰富、一般化的底层特征换言之就是学到丰富的“基础几何形状”。有了这些丰富的基础几何形状等过渡到小数据集上 finetune 的时候就可以通过它们组合出上层具有强判别力的特征。此时如果你再将组合出来的上层特征可视化就会发现它们已经有模有样了。底层特征非常重要如果底层特征不够好特征类型不够充分很可能训练不出来好的高层抽象。这就是为什么需要在大规模数据集上进行genertive training的原因之一。
网络越深底层的参数越难得到有效训练,这也是为什么经常有人用 vggNet finetune 的原因之一。使用 backpropagation反向传播进行训练的时候残差逐层传递,有可能到底层的时候残差就很小了(gradient vanishing)导致底层的参数不动。
finetune 就是直接从别人已经训练好的网络上拷贝参数然后针对自己的数据训练新的模型。这时候需要比较小的learning_rate, 因为要在不破坏原有模型的情况下 fit 自己的数据finetune 的好处就是可以直接获得我们难以或者无法训练的底层参数。
什么情况下使用微调 1你要使用的数据集和预训练模型的数据集相似如果不太相似比如你用的预训练的参数是自然景物的图片你却要做人脸的识别效果可能就没有那么好了因为人脸的特征和自然景物的特征提取是不同的所以相应的参数训练后也是不同的。 2自己搭建或者使用的CNN模型正确率太低。 3数据集相似但数据集数量太少。 4计算资源太少。
微调指导事项 1.通常的做法是截断预先训练好的网络的最后一层( softmax层并用与我们自己的问题相关的新的softmax层替换它。例如ImageNet上预先训练好的网络带有1000个类别的softmax图层。如果我们的任务是对10个类别的分类则网络的新softmax层将由10个类别组成而不是1000个类别。然后我们在网络上运行预先训练的权重。确保执行交叉验证以便网络能够很好地推广。 ⒉.使用较小的学习率来训练网络。由于我们预计预先训练的权重相对于随机初始化的权重已经相当不错我们不想过快地扭曲它们太多。通常的做法是使初始学习率比用于从头开始训练(Training from scratch )的初始学习率小10倍。 3.如果数据集数量过少我们进来只训练最后一层如果数据集数量中等冻结预训练网络的前几层的权重也是一种常见做法。这是因为前几个图层捕捉了与我们的新问题相关的通用特征如曲线和边。我们希望保持这些权重不变。相反我们会让网络专注于学习后续深层中特定于数据集的特征。
不同数据集下使用微调 1.数据量少但数据相似度非常高。在这种情况下我们所做的只是修改最后几层或最终的softmax图层的输出类别。 2.数据量少数据相似度低。在这种情况下我们可以冻结预训练模型的初始层比如k层并再次训练剩余的( n-k )层。由于新数据集的相似度较低因此根据新数据集对较高层进行重新训练具有重要意义。 3.数据量大数据相似度低。在这种情况下由于我们有一个大的数据集我们的神经网络训练将会很有效。但是由于我们的数据与用于训练我们的预训练模型的数据相比有很大不同。使用预训练模型进行的预测不会有效。因此最好根据你的数据从头开始训练神经网络(Training from scatch )。 4.数据量大数据相似度高。这是理想情况。在这种情况下预训练模型应该是最有效的。使用模型的最好方法是保留模型的体系结构和模型的初始权重。然后我们可以使用在预先训练的模型中的权重来重新训练该模型。
涉及到的其他知识 学习率learning-rate 将输出误差反向传播给网络参数以此来拟合样本的输出。本质上是最优化的一个过程逐步趋向于最优解。但是每一次更新参数利用多少误差就需要通过一个参数来控制这个参数就是学习率Learning rate也称为步长。
学习率越大输出误差对参数的影响就越大参数更新的就越快但同时受到异常数据的影响也就越大梯度可能会在最小值附近来回震荡甚至可能无法收敛。当学习率设置的过小时收敛过程将变得十分缓慢。
最理想的学习率不是固定值而是一个随着训练次数衰减的变化的值也就是在训练初期学习率比较大随着训练的进行学习率不断减小直到模型收敛。
学习率大 学习率小 学习速度 快 慢 使用时间点 刚开始训练时 一定轮数过后 副作用 1.易损失值爆炸2.易振荡 1.易过拟合2.收敛速度慢 如果是迁移学习 由于模型已在原始数据上收敛此时应设置较小学习率 (≤10^−4) 在新数据上进行微调 。
卷积神经网络的核心 1浅层卷积层提取基础特征比如边缘轮廓等基础特征。 2深层卷积层提取抽象特征比如整个脸型。 3全连接层根据特征组合进行评分分类。
迁移学习与微调 什么是迁移学习 迁移学习(Transfer learning) 顾名思义就是把已训练好的模型参数迁移到新的模型来帮助新模型训练。考虑到大部分数据或任务都是存在相关性的所以通过迁移学习我们可以将已经学到的模型参数也可理解为模型学到的知识通过某种方式来分享给新模型从而加快并优化模型的学习效率不用像大多数网络那样从零学习。 为什么要迁移学习 1站在巨人的肩膀上前人花很大精力训练出来的模型在大概率上会比你自己从零开始搭的模型要好。 2训练成本可以很低如果采用导出特征向量的方法进行迁移学习后期的训练成本非常低用CPU都完全无压力没有深度学习机器也可以做。 3适用于小数据集对于数据集本身很小几千张图片的情况从头开始训练具有几千万参数的大型神经网络是不现实的因为越大的模型对数据量的要求越大过拟合无法避免。这时候如果还想用上大型神经网络的超强特征提取能力只能靠迁移学习。
详细解释
1Transfer Learning冻结预训练模型的全部卷积层只训练自己定制的全连接层。 2Extract Feature Vector先计算出预训练模型的卷积层对所有训练和测试数据的特征向量然后抛开预训练模型只训练自己定制的简配版全连接网络。 3Fine-tune冻结预训练模型的部分卷积层通常是靠近输入的多数卷积层训练剩下的卷积层通常是靠近输出的部分卷积层和全连接层。
注Transfer Learning关心的问题是什么是“知识”以及如何更好地运用之前得到的“知识”这可以有很多方法和手段egSVM贝叶斯CNN等。而fine-tune只是其中的一种手段更常用于形容迁移学习的后期微调中。 自己的理解不知道对不对 1.迁移学习学习的是整个结构包括函数权重参数等 而fine-tuning学习的是前n层的参数。 2.fine-tuning是迁移学习的方法之一。 ———————————————— 版权声明本文为CSDN博主「好耶OvO」的原创文章遵循CC 4.0 BY-SA版权协议转载请附上原文出处链接及本声明。 原文链接https://blog.csdn.net/qq_45652492/article/details/123379156