深度学习算法解决多分类问题的一般流程和相关方法

释放双眼,带上耳机,听听看~!
本文介绍利用深度学习算法解决多分类问题的一般流程和相关方法,适合对深度学习还不熟悉或接触不多的读者。

前言

过去这段时间,本人计划使用深度学习(DL)方法解决时间序列的多分类问题(与本文无关,就不详细说了)。此前我从未完整地参与过模型的训练,这个过程中碰到了大大小小的问题,现在回想还真是有点头痛,所以一方面为了总结和复盘过去这段时间里的经验,另一方面为了帮助更多的人少走弯路,快速上手,才有了此文。

本文面向人群是:对DL还很陌生或接触不多,不知道从哪里下手的小白或准新人。

本文意在叙述解决分类问题的一般流程和相关方法,对于其背后的理论支持,一概不讲,不涉及复杂的数学模型,具体代码可见深度学习大揭秘:轻松解决多分类难题的绝佳方法(代码篇)

相关概念(可跳过)

学习使用深度学习算法解决多分类问题首先得了解几个概念,迅速地过一下。

借一张nvidia的图,下图描述人工智能、机器学习、深度学习之间的关系。
深度学习算法解决多分类问题的一般流程和相关方法

人工智能:由人制造出来的机器所表现出来的智能,与人的智能相对。

机器学习:使用数据或以往的经验优化用于解决某一任务的计算机程序的性能,这个过程称作“学习”。

机器学习可以分成几种类别:

  • 监督学习 从给定的训练数据集中学习出一个函数,当新的数据到来时,可以根据这个函数预测结果。监督学习的训练集要求是包括输入和输出,也可以说是特征和目标。训练集中的目标是由人标注的。常见的监督学习算法包括回归分析统计分类(这两者区别在于目标不同,前者是连续的值,后者是离散的值)

  • 无监督学习 与监督学习相比,训练集没有人为标注的结果。常见的无监督学习算法有生成对抗网络(GAN)、聚类

  • 半监督学习 介于监督学习与无监督学习之间。

  • 强化学习 不像监督学习直接给出目标,而是评价式的反馈。机器为了达成目标,通过与所处环境的交互,不断探索性地试错,根据每一个行动之后所得到的回馈是正向的或负向的而逐步调整其行为。

监督学习和非监督学习的差别就是训练集目标是否有人为标注都有训练集 且都有输入和输出

深度学习:机器学习的一个分支,是一类以人工神经网络为架构,对数据进行特征学习的算法。

任务剖析

看到这儿,你不需要理解上一个小节里提及的所有概念,有个整体认知就行,关键是理解本文要着重讲的内容:

利用深度学习算法解决分类问题就是把已有的数据集中的特征和标签(也就是前文所说的目标)喂给模型,使它建立起特征与对应标签的联系(也就是函数),模型内部经过对特征数据的一系列较复杂的计算和转换,最后输出一个离散的、非连续的结果(标签),属于监督学习中的统计分类

我们的最终目的是:获得一个有较好泛化能力的模型(或者说具备举一反三能力的函数,即当模型遇到一条不包含于数据集中的新数据时,也能够准确预测)。

其中数据集同时有特征feature(可能有很多维,采集得来)和标签label(人工标注得来)。

举例:使用深度学习算法处理芒果品质分类问题:其数据集可能长这样:

产地 大小 颜色 味道 品质
巴西 绿色 优质
墨西哥 黄色 优质
泰国 橙色 优质
印尼 绿色 次品

纵向划分成两部分:

  • 特征(产地、大小、颜色、味道,共4维)
  • 标签(品质,分优质、次品两种类别)

至于模型的选择,我们需要根据自己要解决的问题的类型去选择合适的模型和算法。

对于这一部分,可以直接去找是否有人做过类似题目,看看别人是如何选择的,或者直接利用各种AI如chatGPT生成一套模板,基于此模板进一步改进。记住,如果只是运用,一开始不要深究模型背后的原理(写代码和懂理论是两码事儿),先上代码(知道怎么利用现有的库实现,每行代码发挥什么样的作用就行),完成任务,后续如果感兴趣再深入学习。

所以基本上工作分成了两部分,一部分是数据处理相关工作,一部分是模型构建训练相关任务。

一般流程

首先,来张图:

深度学习算法解决多分类问题的一般流程和相关方法

这张图展示了一个相对完整的模型训练过程,记住这张图,它不仅仅能用于分类问题,也能用于回归问题(都属于监督学习的范畴,本人还未尝试其他类型的机器学习)

按照这个步骤,构造、封装和调用各个函数,最终解决问题(其实很简单,只是有很多细节需要调整)。

再来一张图:

深度学习算法解决多分类问题的一般流程和相关方法
这张图举例说明了用于解决分类问题的模型在训练过程中各阶段可能用到的工具(包括可能用到的类库、函数,只列举了部分,根据自己的任务需求去选择、调整或者干脆不用)。这里就不展开介绍其中某个工具的概念了,可以自行网上搜索或者问AI。

注意不用研究得很细(比如它如何计算出来的),只需有个整体把握,了解该工具的意义和背后的意思就行(根据实际情况再去不断调整,达成优化模型的目的)。

例如,损失函数这一项,常用的激活函数如下图:

深度学习算法解决多分类问题的一般流程和相关方法

总体原则是:如果在复杂度不高(这里指没有用到各种优化模型的手段,如特征工程、数据增强)的情况下就能很好的解决问题(模型有较好的泛化能力或者预测效果),那么就不需要采用更多手段去提高模型的复杂度。

如果想要参考具体代码,可见深度学习大揭秘:轻松解决多分类难题的绝佳方法(代码篇)

小结

总结上次训练模型的经验:
数据集相关处理占了很大一部分任务量(因为数据是自己收集来的,不是已有、公开的数据集,除了预处理还需要特征工程等操作),其次是模型调参(这个地方有点玄学,需要耐心点儿)。

总结一下自身的一些感受:

  • 善用AI,无论是问AI一些概念上的问题,还是直接让它生成一个代码模板(如果封装成函数,记得提前设计好函数的参数列表,返回值),都很方便,能够节省许多时间。
  • 善于模仿,一开始不会写代码没关系,多看别人怎么写的,看AI怎么写的。
  • 不求甚解,刚开始训练AI不需要对模型背后的理论理解的很透彻,只需要理解可能要用到的各种工具能起到什么样的作用,如何最大程度发挥它这种作用提升训练效果,
  • 积极尝试,模型训练不是一蹴而就的事儿,反复尝试,多次调参。

为了避免重复,本人非常推荐一本书补充文章未提及的内容:斋藤康毅所著的深度学习入门:基于Python的理论与实现

欢迎各位朋友评论区留言,另外,本文如有表述不准确、存在技术性问题的情况,烦请指出以及时更正,非常感谢。

本网站的内容主要来自互联网上的各种资源,仅供参考和信息分享之用,不代表本网站拥有相关版权或知识产权。如您认为内容侵犯您的权益,请联系我们,我们将尽快采取行动,包括删除或更正。
AI教程

卷积神经网络(CNN)结构与工作原理详解

2023-11-25 18:48:14

AI教程

探讨充足理由律与最优原则的关系

2023-11-25 19:04:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索