深度网络 Fine-tuning方法简介

本文探讨了迁移学习中的两种方法:利用预训练卷积网络作为固定特征提取器和微调卷积网络。介绍了如何根据新数据集的大小及与原始数据集的相似度选择适当的迁移学习策略,并提供了具体的实践指导。

转自:http://blog.youkuaiyun.com/wendox/article/details/52840372

迁移学习

有两种方式,一是卷积网络作为固定的特征提取器.拿到一个预训练好的卷积网络,去掉全连接层,吧其余的部分作为一个特征提取器.alex网络会计算一个4096D的特征向量,称之为cnn codes.有了这些特征很容易训练一个线性分类器. 
另外一种方式是fine-tuning卷积网络,是本文主要介绍的内容.该方法中不仅替换掉了顶层的全连接层,而且会改变预训练网络中的权值数据.这里既可以改变全部的网络参数,也可以只改变其中一部分的参数. 
使用已经训练过的模型参数,经过调整,改变模型的结构,重新开始训练,达到新的最优模型.如果原始的网络中没有新的层需要的层,那么就使用随机的权重.降低base_lr学习的速度,提高新引入的层的学习速度lr_mult.

caffe % ./build/tools/caffe train -solver models/finetune_flickr_style/solver.prototxt -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel -gpu 0
 
  • 1
  • 1

使用-weight会告知caffe,需要加载一个网络模型,然后再开始训练

model zoo

可以下载其中预训练的模型来使用.model zoo

When and how to fine-tune

  1. the size of the new dataset (small or big),
  2. its similarity to the original dataset (e.g. ImageNet-like in terms of the content of images and the classes, or very different, such as microscope images). 
    一般根据以上2个因素判断,新使用的数据集的大小,两个数据集合的相似程度.可以知道的是网络的底层要比上层更加 generic 
    注意 
    ConvNet features are more generic in early layers and more original-dataset-specific in later layers

这里给出的建议是 
1. 如果新的数据集比较小,和原始的数据集合类似,那么fine-tuning是不需要的.最好十一训练一个基于cnn codes的线性分类器 
2. 如果新的数据集比较大,和原始的数据集合类似,因此可以自信的开始fine-tuning,而不必担心过拟合. 
3. 如果新的数据集比较小,和原始的数据集合差异性比较大.最好是只训练一个线性分类器.从顶层开始线性分类器是不合适的,最好是从比较低的层开始训练一个SVM分类器. 
4. 如果新的数据集比较小,和原始的数据集合差异性比较大.因此可以从头训练,但是有预训练的参数是有益的.

由预训练网络带的限制,我们需要遵循原始使用的网络结构,但是由于权重共享的使用,输出图像的大小是不受限制的.对于全连接层,仍然是可以的,因为全连接层可以转化为为卷积层. 
训练速度最好降低,是的底层的网络的参数变化比较缓慢.

refer

How transferable are features in deep neural networks? studies the transfer learning performance in detail, including some unintuitive findings about layer co-adaptations.

在机器学习和深度学习领域中,**Fine-Tuning** 和 **Tuning** 是两个常被提及的概念。虽然它们都涉及对模型的调整过程,但在具体含义、应用场景及技术实现上存在显著区别。 ### Fine-Tuning(微调) Fine-Tuning 通常指的是在一个已经预训练好的模型基础上,针对特定任务或数据集进行进一步的参数调整。这一过程通常保留了原始模型的大部分结构和参数,并在此基础上使用新的数据对模型进行再训练,以适应新任务的需求。根据是否调整全部参数,可以分为全参数微调(Full Fine-tuning)和部分/参数高效微调(Parameter-Efficient Fine-tuning, PEFT),例如 LoRA(Low-Rank Adaptation)[^3]。 Fine-Tuning 的主要优势在于它能够利用预训练模型所学到的通用特征表示,并将其迁移到特定任务中,从而减少从头开始训练所需的数据量和计算资源。这种方式非常适合需要高精度或领域特定知识的任务,如医学图像分析、法律文本理解等[^1]。 ### Tuning(调优) Tuning 是一个更广泛的概念,涵盖了所有类型的模型参数调整过程,包括但不限于 Fine-Tuning。它通常指代的是在模型开发过程中,为了提升模型性能而对超参数(如学习率、批处理大小、网络层数、激活函数类型等)进行调整的过程。这些调整可能发生在模型训练的不同阶段,目的是找到最优的模型配置,使得模型在验证集或测试集上的表现达到最佳[^2]。 此外,Tuning 还可能涉及模型架构的选择与优化,比如通过神经网络架构搜索(Neural Architecture Search, NAS)来自动寻找最适合当前任务的网络结构。 ### 区别与应用场景 - **Fine-Tuning** 更侧重于基于已有预训练模型,在目标任务上进行快速适配。适用于有少量目标域数据但希望获得较好性能的情况。 - **Tuning** 则更多关注于整个模型训练过程中的参数和超参数优化,适用于模型开发初期或没有现成预训练模型可用的情形。 两者在实际应用中常常结合使用,例如先对模型进行 Fine-Tuning 以快速适应新任务,然后通过 Tuning 调整超参数以进一步提升模型性能。 ```python # 示例:使用 Hugging Face Transformers 库进行简单的 Fine-Tuning from transformers import AutoTokenizer, AutoModelForSequenceClassification, Trainer, TrainingArguments model_name = "bert-base-uncased" tokenizer = AutoTokenizer.from_pretrained(model_name) model = AutoModelForSequenceClassification.from_pretrained(model_name, num_labels=2) training_args = TrainingArguments( output_dir="./results", num_train_epochs=3, per_device_train_batch_size=16, evaluation_strategy="epoch" ) trainer = Trainer( model=model, args=training_args, train_dataset=train_dataset, eval_dataset=eval_dataset, tokenizer=tokenizer ) trainer.train() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值