从baseline入门深度学习
深度学习
概念
深度学习(Deep Learning)是一种机器学习方法,通过使用人工神经网络(Artificial Neural Networks)来模拟人脑的功能,从而进行数据处理和模式识别。它属于人工智能(Artificial Intelligence)的一个分支,主要通过大量数据和计算资源来训练多层神经网络模型,以实现复杂的任务。
主要特点
1. 多层次结构:深度学习模型通常具有多层结构,包括输入层、隐藏层和输出层。隐藏层的数量可以非常多,这也是“深度”的含义。
2. 自动特征提取:深度学习能够自动从数据中提取特征,而不需要人为地进行特征工程。
3. 大数据处理:深度学习通常需要大量的数据进行训练,数据越多,模型的性能通常越好。
4. 高计算需求:深度学习的训练过程通常需要高性能的计算资源,如GPU(图形处理单元)和TPU(张量处理单元)。
相关应用
1. 计算机视觉:图像识别、物体检测、图像生成等。
2. 自然语言处理:机器翻译、文本生成、情感分析等。
3. 语音识别:语音转文字、语音合成等。
4. 推荐系统:个性化推荐、广告投放等。 自动驾驶:环境感知、路径规划等。
常用框架
1. TensorFlow:由Google开发的开源深度学习框架,广泛用于研究和生产。
2. PyTorch:由Facebook开发的深度学习框架,以其灵活性和易用性受到研究人员的青睐。
3. Keras:一个高级神经网络API,能够运行在TensorFlow、CNTK和Theano之上,易于快速原型设计。
模型训练过程
1. 数据准备
- 数据收集:获取大量高质量的数据,可以是公开数据集、自行收集或企业内部数据。
- 数据清洗:处理缺失数据、异常值、重复数据等,确保数据的质量。
- 数据预处理:标准化、归一化、图像增强等,使数据适合输入到神经网络中。
2. 模型构建
- 选择模型:根据任务选择合适的模型结构,如卷积神经网络(CNN)用于图像处理,循环神经网络(RNN)或其变体(如LSTM、GRU)用于序列数据处理。
- 定义层次结构:设置输入层、隐藏层(若干层)和输出层,选择激活函数(如ReLU、Sigmoid、Tanh)和损失函数。
3. 模型编译
- 选择优化器:常用的优化器包括随机梯度下降(SGD)、Adam、RMSprop等,用于调整模型的权重以最小化损失函数。
- 设置学习率:学习率决定了每次更新模型权重的步长,是一个非常关键的超参数。
4. 模型训练
- 前向传播:输入数据经过各层神经网络的计算,生成预测输出。
- 计算损失:将预测输出与真实标签进行比较,计算损失(误差)。
- 反向传播:通过梯度下降算法,根据损失对模型参数进行更新,从输出层反向传播到输入层。
- 迭代更新:以上步骤重复进行,通常通过批量(Batch)处理来提高效率。整个数据集的一个完整遍历称为一个Epoch。
5. 模型评估
- 验证集评估:在训练过程中,使用一部分数据作为验证集,实时评估模型性能,以防止过拟合。
- 性能指标: 分类任务常使用准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1-score、混淆矩阵(Confusion Matrix)、AUC(Area Under the ROC Curve)等指标评估模型; 回归任务常使用均方误差(Mean Squared Error, MSE)、均方根误差(Root Mean Squared Error, RMSE)、平均绝对误差(Mean Absolute Error, MAE)、平均绝对百分比误差(Mean Absolute Percentage Error, MAPE)、R² or Coefficient of Determination等指标评估模型。
6. 模型调优
- 超参数调整:通过调整学习率、批量大小、网络层数、每层神经元数量等超参数来优化模型。
- 正则化:使用L1/L2正则化、Dropout等方法来防止过拟合。
- 交叉验证:使用交叉验证方法进一步验证模型的稳定性和性能。
7. 模型部署
- 保存模型:将训练好的模型保存为文件,以便在实际应用中加载和使用。
- 部署到生产环境:将模型部署到服务器、云平台或嵌入式设备上,用于实际任务,如预测、分类等。
迁移学习
概念
迁移学习(Transfer Learning)是一种机器学习技术,它利用在源任务(source task)上学习到的知识来帮助或改善目标任务(target task)的学习效果。
在下面代码中,timm.create_model(‘resnet18’, pretrained=True, num_classes=2)表示加载一个预训练的ResNet-18模型,其中pretrained=True表示使用在ImageNet数据集上预训练的权重,num_classes=2表示模型的输出层被修改为有2个类别的输出,以适应二分类任务(例如区分真实和Deepfake图像)。通过model = model.cuda()将模型移动到GPU上进行加速。
import timm
model = timm.create_model('resnet18', pretrained=True, num_classes=2)
model = model.cuda()
关键点
- 源任务与目标任务:源任务通常是指那些拥有大量数据,并且已经被充分研究的任务,而目标任务则通常是数据稀缺或研究不充分的任务。
- 知识迁移:迁移学习试图将源任务上学到的知识(如模型参数、特征表示、模型结构等)迁移到目标任务上。
- 相关性:源任务和目标任务之间通常有一定的关联性,这使得知识迁移成为可能。
优势
- 数据效率:在数据稀缺的情况下,迁移学习可以显著减少对大量标注数据的依赖。
- 训练效率:通过利用预训练模型,可以减少训练所需的时间和计算资源。
- 性能提升:在目标任务上,迁移学习可以带来比从头开始训练更好的性能。
- 模型泛化:迁移学习可以帮助模型更好地泛化到新的领域或任务。
场景
- 计算机视觉:使用在大型图像数据集(如ImageNet)上预训练的卷积神经网络(CNN)作为特征提取器,用于图像分类、目标检测等任务。
- 自然语言处理:利用预训练的语言模型(如BERT、GPT等)来改进文本分类、情感分析、机器翻译等任务。
- 语音识别:将预训练的语音模型应用于新的语言或方言的识别任务。
方法
- 特征迁移:直接使用在源任务上学习到的特征表示。
- 参数迁移:将源任务的模型参数作为目标任务模型的初始化参数。
- 模型适配:调整预训练模型以适应目标任务,可能包括微调(fine-tuning)等操作。
- 多任务学习:同时学习多个任务,使得知识可以在这些任务之间共享。
常见的图像分类网络
1.LeNet-5:
由Yann LeCun等人在1998年提出。最早的卷积神经网络之一,主要用于手写数字识别(如MNIST数据集)。
2.AlexNet:
由Alex Krizhevsky等人在2012年提出。通过在ImageNet竞赛中获得巨大成功而闻名,是深度学习在计算机视觉领域突破的标志。
3.VGG:
由Oxford大学的Visual Geometry Group (VGG)在2014年提出。VGG16和VGG19是其常用版本,特点是使用3x3的卷积核和深层网络结构。
4.NIN(Network In Network)
由Min Lin等人在2013年提出。主要创新在于引入了称为“网络中的网络”的概念,其主要思想是在每个卷积层之后使用多层感知机(MLP)进行非线性映射,以增强模型的表达能力。
5.GoogLeNet/Inception:
由Google团队在2014年提出。引入了Inception模块,通过不同大小的卷积核和池化操作来捕捉不同尺度的特征。
6.ResNet(Residual Network):
由微软研究院的Kaiming He等人在2015年提出。引入了残差块(Residual Block)结构,解决了深层网络训练中的梯度消失问题,常用版本包括ResNet50、ResNet101和ResNet152。
7.DenseNet(Densely Connected Convolutional Networks):
由Gao Huang等人在2016年提出。特点是每一层都连接到前面所有层,通过密集连接减少了梯度消失,并提高了特征复用,在某种程度上是ResNet的逻辑扩展。
任意函数 𝑓(𝑥) 在 0 处的泰勒展开式可以表示为:
同样,ResNet将函数展开为:
ResNet将 𝑓 分解为两部分:一个简单的线性项和一个复杂的非线性项。
ResNet和DenseNet的关键区别在于,DenseNet的输出是连接,而不是如ResNet的简单相加。 因此,在应用越来越复杂的函数序列后,执行从 𝑥 到其展开式的映射:
最后,将这些展开式结合到多层感知机中,再次减少特征的数量。DenseNet这个名字由变量之间的“稠密连接”而得来,最后一层与之前的所有层紧密相连,如下图所示:
稠密网络主要由2部分构成:稠密块(dense block)和过渡层(transition layer)。 前者定义如何连接输入和输出,而后者则控制通道数量,使其不会太复杂。
注:相关图片来源于Dive into Deep Learning《动手学深度学习》
版权归原作者 FreyDeng1984 所有, 如有侵权,请联系我们删除。