文章目录
前言
随着人工智能的不断发展,深度学习这门技术也越来越重要,很多人都开启了学习深度学习,本文就介绍了深度学习的基础内容。
一、什么是深度学习框架
(一)含义
深度学习框架是一种用于构建、训练和部署深度神经网络模型的工具集合。它提供了丰富的函数和工具,使开发者能够方便地创建、调整和优化神经网络模型。
(二)主流框架及特点
- TensorFlow:由Google开发,是最流行的深度学习框架之一。它支持多种语言,尤其是Python,并且有着强大的社区支持和丰富的文档资源。TensorFlow适合大规模数值计算,特别是分布式计算,广泛应用于研究和工业领域。
- Keras:是一个高层神经网络API,它能够运行在多个后端之上,如TensorFlow、Theano或CNTK。Keras以其用户友好和简洁的代码而受到欢迎,非常适合初学者快速上手。
- PyTorch:由Facebook开发,因其动态计算图和易于调试的特性而在研究人员中非常流行。PyTorch的设计使得复杂的模型更容易实现,并且它的社区也在不断增长。
- Caffe:是一个由伯克利AI研究所开发的开源深度学习框架,特别适合图像分类任务。Caffe的优势在于其性能优化和对GPU的支持。
- Theano:是最早的深度学习框架之一,由Yoshua Bengio和Ian Goodfellow等人开发。它是一个基于Python的底层计算库,支持CPU和GPU计算。
- MXNet:由亚马逊支持,是一个可扩展的、高性能的深度学习框架,适用于各种规模的设备,从云服务器到移动设备。
- PaddlePaddle:是由百度开发的深度学习平台,特别适合中文社区的用户。它支持多种深度学习模型,并且优化了移动端的部署。
- ONNX:是一个开放的模型格式,旨在促进不同深度学习框架之间的互操作性。它允许模型在不同的框架之间迁移,无需重新训练。
- CNTK:微软的认知工具包(Cognitive Toolkit),是一个统一的深度学习框架,用于商业级的应用。
(三)核心功能
- 自动微分:自动计算梯度,这是训练神经网络时反向传播算法的关键部分。
- 高效的数值计算:利用GPU等硬件加速技术,提高模型训练和推理的速度。
- 支持多种模型和算法:内置了多种常用的神经网络层、激活函数、损失函数等组件。
- 易于部署:支持将训练好的模型导出为各种格式,以便在不同的平台和设备上运行。
二、PyTorch的特点和概述
(一)简介
PyTorch是一个开源的Python机器学习库,基于Torch,用于自然语言处理等应用程序。PyTorch既可以看作加入了GPU支持的numpy,同时也可以看成一个拥有自动求导功能的强大的深度神经网络。PyTorch是一个开源的深度学习框架,它使用Python语言编写,并支持GPU加速计算。具有先进设计理念的框架,其历史可追溯到2002年就诞生于纽约大学的Torch。
(二)特点
- 动态计算图:与一些其他深度学习框架使用的静态计算图不同,PyTorch采用动态计算图,这使得代码更加直观和易于调试。
- 易用性:PyTorch的设计哲学之一是易用性,其接口通常被认为是直观的,这使得学习和使用PyTorch相对容易。
- 灵活性:PyTorch提供了灵活的深度学习构件块,允许用户以模块化的方式构建复杂的模型。
- 社区支持:由Facebook开发并得到广泛社区支持,包括学术机构和行业公司,这意味着有大量的资源和第三方库可以辅助使用。
- GPU加速:PyTorch能够利用GPU进行计算加速,这对于处理大规模数据集和复杂模型至关重要。
- 多种应用场景:适用于多种深度学习应用场景,包括但不限于计算机视觉、自然语言处理、生成对抗网络等。
- 教育资源丰富:由于其广泛的应用,网络上有大量的教程、课程和指南帮助初学者和研究者学习如何使用PyTorch。
三、模型评估与模型参数选择
(一)模型评估
1.损失函数:机器学习和深度学习中用于衡量模型预测结果与真实标签之间差异的函数。
2.误差:训练集上的平均误差被称为训练误差;测试集上的误差称为泛化误差。泛化误差是衡量一个模型泛化能力的重要标准。
3.数据集划分
- 训练集:用于拟合模型参数,即在模型训练过程中,算法会尝试最小化训练集上的误差。
- 验证集:用于挑选最优模型超参数,在模型开发过程中,通过验证集可以评估不同模型或不同训练方法的效果,以选择最佳的模型配置。
- 测试集:用于评估模型的泛化能力,即在我们完成模型训练和验证后,使用测试集来测试模型在未见数据上的性能。
4.评估指标: 准确率、精确率、召回率、F1
5.模型评估出现的问题
(1) 过拟合
表现:在训练集上表现很好,在测试集上表现不好。
原因:a. 训练数据太少(比如只有几百组)
b.模型的复杂度太高(比如隐藏层层数设置的过多,神经元的数量设置的过大)
c. 数据不纯
解决方案:a. 移除特征,降低模型的复杂度,减少神经元的个数,减少隐藏层的层数
b.训练集增加更多的数据
c. 重新清洗数据
d.数据增强
e. 正则化
f.早停
(2) 欠拟合
原因: a. 数据未做归一化处理
b. 神经网络拟合能力不足
c. 数据的特征项不够
解决方法:
a. 寻找最优的权重初始化方案
b. 增加网络层数、epoch
c. 使用适当的激活函数、优化器和学习率
d. 减少正则化参数
e. 增加特征
四、验证
(一) 简介
模型不能过拟合于训练集,否则将不能在测试集上得到最优结果。因此参数的选择(即调参)必须在一个独立于训练集和测试集的数据集上进行,这样的用于模型调参的数据集被称为开发集或验证集。
(二)方法
交叉验证:重复使用训练集和测试集
常用的交叉验证法:1、简单交叉验证
2、K-重交叉验证
将数据集分为训练集和测试集,将测试集放在一边 将训练集分为 k 份 每次使用 k 份中的 1 份作为验证集,其他全部作为训练集。 通过 k 次训练后,我们得到了 k 个不同的模型。 评估 k 个模型的效果,从中挑选效果最好的超参数 使用最优的超参数,然后将 k 份数据全部作为训练集重新训练模型,得到最终模型。
3、留出法(Holdout cross validation) 按照固定比例将数据集静态的划分为训练集、验证集、测试集。
4、自组法(bootstrapping) 适合于样本数目较少,有放回的取法。
五、正则化
(一)原理
它通过在损失函数中添加一个额外的惩罚项来实现,这个惩罚项通常与模型参数的大小有关。这样,在优化过程中,模型不仅要最小化经验误差,还要最小化这个正则化项,从而推动模型参数向更小或更稀疏的方向调整。
(二)目的
通过限制参数值域空间,显式地 控制了 模型复杂度,从而避免了过拟合。
(三)常见方法
- L1正则化:它会推动模型参数绝对值之和的最小化,倾向于产生稀疏参数,即许多参数会变成零。
- L2正则化:它会推动模型参数平方和的最小化,倾向于让参数值接近于零,但不完全为零。
- Dropout:这是一种在神经网络中使用的正则化技术,通过在训练过程中随机“丢弃”网络中的一些神经元,来防止过拟合。
(四) 优化目标
在保证模型在训练集上的性能的同时,通过惩罚项来控制模型的复杂度,从而达到更好的泛化效果。
(五)实现方法
在实际应用中,正则化通常通过在损失函数中加入正则项来实现,然后通过梯度下降法、牛顿法等优化算法来求解最优参数。
六、监督学习与无监督学习
监督学习
(一)定义
指通过带有标签或对应结果的样本训练得到一个最优模型,再利用这个模型将所有的输入映射为相应的输出,以实现分类。
(二)适用问题
1、回归————输出连续值
(1)目标
回归问题在监督学习中的主要目标是预测连续型的输出变量。这涉及到建立一个模型,该模型能够根据输入变量预测出连续的数值结果。
(2)常用算法
线性回归是回归问题中最基础的算法,它试图找到最佳拟合直线,以最小化预测值与实际值之间的差异。除了线性回归,还有岭回归(Ridge Regression)和套索回归(Lasso Regression),它们通过添加正则化项来解决过拟合问题。
(3)评估方法
回归问题的常用评估指标包括均方误差(MSE)、均方根误差(RMSE)和决定系数(R²)。这些指标帮助量化模型预测的准确性和稳定性。
(4)应用场景
预测房价、预测销售额
2.分类————输出离散值
(1)目标
将数据分门别类,用于预测离散型标签的任务
(2)评估指标
非监督学习
(一)定义
非监督学习是机器学习中的一种方法,它不依赖于标记数据来训练模型。与监督学习相比,非监督学习不需要提供带有正确答案的示例,而是通过分析数据本身来发现数据中的模式和结构。
(二)适用问题
- 聚类:这是无监督学习中最常见的应用之一,目标是将数据分组,使得同一组内的数据点彼此相似,而不同组的数据点差异较大。常用的聚类算法包括K-means、层次聚类和DBSCAN等。
- 降维:在处理高维数据时,降维可以帮助简化数据结构,去除冗余信息,同时保留最重要的特征。主成分分析(PCA)和t-分布邻域嵌入算法(t-SNE)是两种常用的降维技术。
- 密度估计:这是一种估算数据点在空间中分布情况的方法,它可以用于异常检测或生成新的数据点。
- 自组织映射(SOM):SOM是一种神经网络,能够将高维数据映射到低维空间,同时保留数据的拓扑结构。
- 关联规则学习:这种方法用于发现大数据集中变量之间的有趣关系,常用于市场篮子分析等领域。
(三)衡量指标
1.直观检测
这是一种非量化的方法。 例如对文本的主题进行聚类,我们可以在直观上判断属于同一个类的文本是否具有某个共同的主题,这样的分类是否有明显的语义上的共同点。
2.基于任务的评价
如果聚类得到的模型被用于某个特定的任务,我们可以维持该任务中其他的设定不变,使用不同的聚类模型,通过某种指标度量该任务的最终结果来间接判断聚类模型的优劣。
3.人工标注测试集
有时候采用非监督学习的原因是人工标注成本过高,导致标注数据缺乏,只能使用无标注数据来训练。 在这种情况下,可以人工标注少量的数据作为测试集,用于建立量化的评价指标。
总结
深度学习框架是一套工具或库,用于简化和优化深度学习任务的编程过程。提供了构建、训练和部署深度学习模型所需的基础设施。这些框架通常包括预编写的代码,用于处理神经网络中的各种常见任务,如前向传播、反向传播和参数更新。使用深度学习框架可以显著减少编写自定义代码的需要,从而提高开发效率并降低入门门槛。
PyTorch是一种流行的深度学习框架,其特点包括动态计算图和易于调试。动态计算图允许在运行时定义和修改计算图,这使得代码更加直观和灵活。此外,PyTorch提供了强大的GPU加速功能,可以显著提高模型训练的速度。它还拥有丰富的预训练模型库,以及活跃的社区支持。
在深度学习中,模型评估与模型参数选择是关键的步骤。模型评估涉及使用测试数据来检查模型的性能,通常使用准确率、召回率等指标来衡量。模型参数选择则是通过调整模型的超参数来优化性能。这通常涉及到交叉验证等技术,以找到最佳的参数组合。
验证是模型开发过程中的一个重要步骤,它确保了模型在未知数据上的泛化能力。常见的验证方法包括留出法、交叉验证法和自助法。
正则化是防止模型过拟合的一种技术。它通过在损失函数中添加额外的惩罚项来实现,常见的正则化方法包括L1正则化和L2正则化。
监督学习和无监督学习是机器学习的两个主要分支。监督学习利用标记数据来训练模型,常见的任务包括分类和回归。无监督学习则不依赖于标记数据,而是通过分析数据的内在结构和关系来发现模式,常见的任务包括聚类和降维。