什么是深度学习中的多头模型?
到目前为止,我发现的唯一解释是:每个模型都可能被认为是一个主干加上一个头部,如果您对主干进行预训练并放置一个随机头部,则可以对其进行微调,这是一个好主意
有人可以提供更详细的解释吗?
答案 0 :(得分:5)
您找到的解释是正确的。根据您要对数据进行的预测,您需要一个足够的骨干网络和一定数量的预测头。
例如,对于基本分类网络,您可以将ResNet,AlexNet,VGGNet,Inception等作为主干,并将完全连接的层(具有交叉熵损失)作为唯一的预测头。
需要多头的问题的一个很好的例子是本地化,您不仅要对图像中的内容进行分类,而且还希望对对象进行本地化(在其周围找到边界框的坐标)。 / p>
骨干网(“卷积和池化”)负责从包含更高级别摘要信息的图像中提取特征图。每个头部都使用此特征图作为输入来预测其期望的结果。
您要优化的损失通常是每个预测头的单个损失的加权总和。
答案 1 :(得分:2)
Head是网络的顶部。例如,在底部(输入数据的地方)采用某种模型的卷积层,例如resnet。如果您调用ConvLearner.pretrained,CovnetBuilder将为Fast.ai中的数据构建一个具有适当头的网络(如果您正在处理分类问题,则在进行回归时,它将创建具有交叉熵损失的头)。问题,它将创建一个适合该对象的头部。
但是您可以构建一个具有多个头的模型。该模型可以从基本网络(resin conv层)获取输入,并将激活信息提供给某个模型,例如head1,然后将相同数据提供给head2。或者,您可以在resnet上构建一些共享层,而仅将那些层馈送到head1和head2。
您甚至可以将不同的图层馈入不同的头部!对此有一些细微差别(例如,关于fastai库,如果您未指定custom_head参数,则ConvnetBuilder会在基础网络顶部添加AdaptivePooling层,如果您不这样做,则是)总体情况。