2月25日预训练和微调的深度学习模型
当您想开发需要深度学习的应用程序时,一种选择是从头开始创建自己的神经网络,并在可用或精选示例上对其进行训练。例如,您可以使用ImageNet,这是一个包含超过 1400 万张标记图像的公共数据集。
然而,有一个问题。首先,您必须为任务找到正确的架构,例如卷积、池化和密集层的数量和序列。您还必须确定每层的过滤器和参数数量、学习率、优化器、损失函数和其他超参数。其中很多决策都需要反复试验,这是一个缓慢且昂贵的过程,除非您可以使用强大的图形处理器或 Google 的 TPU 等专用硬件。
为避免重新发明轮子,您可以下载经过验证的模型,例如 AlexNet、ResNet 或 Inception,然后自行训练。但是您仍然需要一组 GPU 或 TPU 才能在可接受的时间内完成训练。为了避免昂贵的训练过程,您可以下载这些模型的预训练版本并将它们集成到您的应用程序中。
或者,您可以使用 Clarifia 和 Amazon Rekognition 等服务,它们为图像识别任务提供应用程序编程接口。这些服务是“黑盒”模型,因为开发人员无法访问网络层和参数,只能通过向它们提供图像并检索结果标签来与它们交互。
现在,假设您想为一项特殊任务创建计算机视觉算法,例如通过脑部扫描检测自闭症或通过乳房 X 线照片检测乳腺癌。在这种情况下,像 AlexNet 这样的通用图像识别模型或像 Clarifai 这样的服务就无法做到这一点。您需要一个针对该问题域的数据训练的深度学习模型。
您将面临的第一个问题是收集足够的数据。一项专门的任务可能不需要 1400 万张带标签的图像,但如果你从头开始训练神经网络,你仍然需要很多。
迁移学习允许您减少训练示例的数量。这个想法是采用预先训练的模型(例如,ResNet)并在来自新域的数据和标签上重新训练它。由于该模型已经在一个大型数据集上进行了训练,因此它的参数已经被调整以检测许多将在新领域中派上用场的特征。因此,为新任务重新训练它需要更少的时间和数据。
虽然听起来很简单,但迁移学习本身就是一个复杂的过程,并不是在所有情况下都能正常工作。根据源域和目标域的接近程度,您需要在迁移学习期间冻结和解冻层,并向模型添加新层。您还需要在此过程中进行大量超参数调整。
在某些情况下,迁移学习的性能可能比从头开始训练神经网络更差。您也无法在无法访问深度学习模型的基于 API 的系统上执行迁移学习。