liner、dense、mlp、fc区别

Linear:线性层,最原始的称谓,单层即无隐层。熟悉torch的同学都清楚torch.nn.Linear就是提供了一个in_dim * out_dim的tensor layer而已。

Dense:密集层,可以指单层linear也可以指多层堆叠,可无隐层也可有但一般多指后者。dense层其实就是多层线性层的堆叠。隐层一般大于2

MLP:多层感知器(Multi-layer perceptron neural networks),指多层linear的堆叠,有隐层。mlp 三层也可以,输入层,隐层,输出层。。。。
FC:全连接层(fully connected layer),单层多层均可以表示,是对Linear Classifier最笼统的一种称谓。

原文:https://blog.youkuaiyun.com/weixin_43301333/article/details/114394629?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163749555916780271599921%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=163749555916780271599921&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-3-114394629.pc_search_result_cache&utm_term=%23%23%23%23+%E5%85%B3%E4%BA%8EDL%E9%87%8C%E9%9D%A2%E5%90%84%E7%A7%8Dclassifier%E7%BA%BF%E6%80%A7%E5%B1%82%E7%9A%84%E7%A7%B0%E8%B0%93Linear%2CDense%2CMLP%2CFC%E4%B9%8B%E9%97%B4%E7%9A%84%E5%8C%BA%E5%88%AB%E3%80%82&spm=1018.2226.3001.4187

### Fine-Tuning Linear Probing 的定义 Fine-tuning 是一种迁移学习方法,在预训练模型的基础上调整其所有参数以适应特定下游任务的需求[^1]。相比之下,Linear probing 则是一种更轻量级的方法,仅在冻结的预训练模型之上附加一个线性分类器(通常是全连接层),并通过优化该分类器来完成目标任务的学习。 #### 主要差异 1. **可更新参数的数量** - 在 fine-tuning 中,整个神经网络的所有权重都会被微调,这意味着大量的参数会被更新以适配新的任务需求。 - 而在 linear probing 中,只有新增加的最后一层(即线性分类器)会参与训练,其余部分保持固定不变。 2. **计算资源消耗** - 由于需要更新大量参数,fine-tuning 需求更多的 GPU/TPU 时间以及内存空间,尤其当处理大规模 Transformer 架构时更加明显. - 对于 linear probing 来说,因为只涉及少量额外参数(通常是一个矩阵乘法操作),所以它所需的硬件成本显著低于前者. 3. **泛化能力 vs 特定领域表现** - 当有足够的标注样本可用时,fine-tuned 模型往往能够展现出更好的性能因为它可以针对具体应用场景做出全局性的改变;但是这也可能导致过拟合现象如果数据规模较小的话. - 反之,line-probed 解决方案倾向于保留原始特征表示而仅仅专注于如何最好地区分类别标签因此可能不会达到最佳效果但在某些情况下却能提供更快的结果获取途径并减少灾难遗忘的风险. 4. **适用场景的选择依据** - 如果目标是构建高度定制化的解决方案并且拥有充足的数据支持那么应该优先考虑采用 full fine-tuning 方法以便充分利用这些优势获得尽可能高的准确性水平; - 然而对于那些希望快速评估某个概念或者受限于预算无法承担昂贵运算费用的研究人员来说,则可以选择执行简单的linear head evaluation作为初步筛选手段之一然后再决定是否深入探索其他可能性更大的方向上去进一步改进成果质量.[^2] ```python import torch.nn as nn class FineTuneModel(nn.Module): def __init__(self, pretrained_model): super(FineTuneModel, self).__init__() self.pretrained = pretrained_model self.classifier = nn.Linear(pretrained_model.output_dim, num_classes) def forward(self, x): features = self.pretrained(x) output = self.classifier(features) return output class LinearProbeModel(nn.Module): def __init__(self, frozen_pretrained_model): super(LinearProbeModel, self).__init__() self.frozen_base = frozen_pretrained_model.eval() # Freeze the base model parameters for param in self.frozen_base.parameters(): param.requires_grad = False self.linear_head = nn.Linear(frozen_pretrained_model.output_dim, num_classes) def forward(self, x): with torch.no_grad(): # Disable gradient computation during inference of frozen layers features = self.frozen_base(x) logits = self.linear_head(features) return logits ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值