zl程序教程

您现在的位置是:首页 >  其他

当前栏目

ML - 一些概念(Some Concepts)

概念 一些 ML some concepts
2023-09-14 08:59:09 时间

01 - 05

01 - AI、ML与DL的关系

从涵盖范围上来讲,人工智能(AI)大于机器学习(ML)大于深度学习(DL)

  • 人工智能(AI):能够感知、推理、行动和适应的程序;
  • 机器学习(ML):能够随着数据量的增加不断改进性能的算法;
  • 深度学习(DL):是机器学习的一个子集,利用多层神经网络从大量数据中进行学习;

 

 

02 - 简要对比机器学习与深度学习

通俗来说,机器学习是一门讨论各式各样的适用于不同问题的函数形式,以及如何使用数据来有效地获取函数参数具体值的学科。
深度学习是指机器学习中的一类函数,它们的形式通常为多层神经网络。
“深度学习是一种特殊的机器学习,通过学习将世界使用嵌套的概念层次来表示并实现巨大的功能和灵活性,其中每个概念都定义为与简单概念相关联,而更为抽象的表示则以较不抽象的方式来计算。

 

03 - ML与DL的主要区别

机器学习(Machine Learning, ML)

  • 一个电脑程序要完成任务(Tasks),如果电脑获取的关于T的经验(Experience)越多就表现(Performmance)得越好,那么就可以说这个程序‘学习’了关于T的经验
  • 首先人工设置或定义一些重要“指标”和“特征”,就这些“特征”进行编码,然后机器通过分析数据中这些特征,来找到相应的模式(怎样的特征组合会导致怎样的结果)
  • 概率论、统计学、逼近论、凸分析、算法复杂度理论等,算法基本固定

深度学习(Deep Learning, DL)

  • 深度学习是一种特殊的机器学习,高性能而且灵活
  • 概念组成的网状层级结构:底层的特征(Low-level features)组合为中间层特征(Mid-level features),然后进一步组合为高层特征(High-level features)
  • 相比机器学习,深度学习试图自己从数据中学习特征,自动找出所需要的重要特征
  • 算法更新快,概括为两个方向,图像处理和语音处理,两者分别主要对应卷积神经网络和递归神经网络的应用

机器学习对比深度学习

机器学习
- 数据依赖:当数据规模较小时,传统的机器学习算法使用制定的规则,性能会比较好
- 硬件依赖:一台普通的笔记本即可
- 特征工程:几乎所有的特征都需要通过行业专家确定然后编码为一种数据类型,大多数机器学习算法的性能依赖于所提取的特征的准确度
- 解决问题的方式:通常会将问题分解为多个子问题并逐个子问题解决最后结合所有子问题的结果获得最终结果
- 训练时间:训练消耗的时间相对较少,依据据场景,几秒钟到几小时不等
- 可理解性:算法的特征和规则清晰明确,可以解释决策背后的推理

深度学习
- 数据依赖:随着数据规模的增加其性能也不断增长,更适合数据量大的场景
- 硬件依赖:需要进行大量的矩阵运算,需要有GPU的参与,更依赖安装GPU的高端机器
- 特征工程:尝试从数据中直接获取高等级的特征,削减了对每一个问题设计特征提取器的工作
- 解决问题的方式:一次性地、端到端地解决问题
- 训练时间:参数很多,因此训练算法需要消耗更长的时间,模型一旦训练好,运行预测任务会很快
- 可理解性:深度学习模型复杂,内部的特征和规则难以理解,可能无法解释结果是如何产生的

 

04 - 特征处理

通常原始数据格式基本不能为建模所用,必须从中构建可用于学习的特征。
事实上,这是机器学习项目中的最花精力的部分。但这也是“最有趣”的部分之一,在这里直觉、创造力和“小技巧”与专业技术是同样重要的东西。

  • 特征处理是将领域知识放入特征提取器里面来减少数据的复杂度并生成使学习算法工作的更好的模式的过程。
  • 特征处理过程很耗时而且需要专业知识。

 

05 - 机器学习与其他学科的关系

机器学习是一种重在寻找数据中的模式并使用这些模式来做出预测的研究和算法的门类。

机器学习是人工智能领域的一部分,并且和知识发现与数据挖掘有所交集。

 

06 - 10

06 - 机器学习的工作方式

  1. 选择数据:将你的数据分成三组:训练数据、验证数据和测试数据
  2. 模型数据:使用训练数据来构建使用相关特征的模型
  3. 验证模型:使用你的验证数据接入你的模型
  4. 测试模型:使用你的测试数据检查被验证的模型的表现
  5. 使用模型:使用完全训练好的模型在新数据上做预测
  6. 调优模型:使用更多数据、不同的特征或调整过的参数来提升算法的性能表

 

07 - 机器学习所处的位置

传统编程:
    软件工程师编写程序来解决问题。
    首先存在一些数据→为了解决一个问题,软件工程师编写一个流程来告诉机器应该怎样做→计算机遵照这一流程执行,然后得出结果
统计学:
    分析师比较变量之间的关系
机器学习:
    数据科学家使用训练数据集来教计算机应该怎么做,然后系统执行该任务。
    首先存在大数据→机器会学习使用训练数据集来进行分类,调节特定的算法来实现目标分类→该计算机可学习识别数据中的关系、趋势和模式
智能应用:
    智能应用使用人工智能所得到的结果,如图是一个精准农业的应用案例示意,该应用基于无人机所收集到的数据

 

08 - 机器学习的流派

流派合作和算法融合是实现真正通用人工智能(AGI)的唯一方式。

  1. 符号主义:使用符号、规则和逻辑来表征知识和进行逻辑推理,最喜欢的算法是:规则和决策树
  2. 贝叶斯派:获取发生的可能性来进行概率推理,最喜欢的算法是:朴素贝叶斯或马尔可夫
  3. 联结主义:使用概率矩阵和加权神经元来动态地识别和归纳模式,最喜欢的算法是:神经网络
  4. 进化主义:生成变化,然后为特定目标获取其中最优的,最喜欢的算法是:遗传算法
  5. Analogizer:根据约束条件来优化函数(尽可能走到更高,但同时不要离开道路),最喜欢的算法是:支持向量

 

09 - 机器学习的演进阶段

1980 年代

  • 主导流派:符号主义
  • 架构:服务器或大型机
  • 主导理论:知识工程
  • 基本决策逻辑:决策支持系统,实用性有限

1990 年代到 2000 年

  • 主导流派:贝叶斯
  • 架构:小型服务器集群
  • 主导理论:概率论
  • 分类:可扩展的比较或对比,对许多任务都足够好了

2010 年代早期到中期

  • 主导流派:联结主义
  • 架构:大型服务器农场
  • 主导理论:神经科学和概率
  • 识别:更加精准的图像和声音识别、翻译、情绪分析等


2010 年代末期

  • 流派之间开始有望合作,并将各自的方法融合到一起
  • 主导流派:联结主义+符号主义
  • 架构:许多云
  • 主导理论:记忆神经网络、大规模集成、基于知识的推理
  • 简单的问答:范围狭窄的、领域特定的知识共享

2020 年代+

  • 主导流派:联结主义+符号主义+贝叶斯+……
  • 架构:云计算和雾计算
  • 主导理论:感知的时候有网络,推理和工作的时候有规则
  • 简单感知、推理和行动:有限制的自动化或人机交互

2040 年代+

  • 主导流派:算法融合
  • 架构:无处不在的服务器
  • 主导理论:最佳组合的元学习
  • 感知和响应:基于通过多种学习方式获得的知识或经验采取行动或做出回答

 

10 - 符号主义

符号式编程:“先确定符号以及符号之间的计算关系,然后才放数据进去计算”。
符号之间的运算关系,称为运算图。
符号式计算的优点:

  • 当确立了输入和输出的计算关系后,在进行运算前可以对这种运算关系进行自动化简,从而减少计算量,提高计算速度。
  • 运算图一旦确定,整个计算过程就都明确了,可用内存复用的方式减少程序占用的内存。

事实上,Keras,Tensorflow和Theano都是符号主义的计算框架。
在Keras,Tensorflow和Theano中,参与符号运算的那些变量统一称作张量(Tensor)。

  • 0阶张量:纯量或标量 (scalar), 也就是一个数值,例如,\'Howdy\' 或 5
  • 1阶张量:向量 (vector)或矢量,也就是一维数组(一组有序排列的数),例如,[2, 3, 5, 7, 11] 或 [5]
  • 2阶张量:矩阵 (matrix),也就是二维数组(有序排列的向量),例如,[[3.1, 8.2, 5.9][4.3, -2.7, 6.5]]
  • 3阶张量:三维的矩阵,也就是把矩阵有序地叠加起来,成为一个“立方体”
  • 以此类推,等等

简而言之,符号主义计算框架的计算过程,就是建立一个从张量到张量的映射函数,然后再放入真实数据进行计算。
对深度学习而言,这个“映射函数”就是一个神经网络,而神经网络中的每个层自然也都是从张量到张量的映射。

 

11 - 15

11 - Optimization(优化问题)

解决“优化问题”,可以使用牛顿法 (Newton’s method), 最小二乘法(Least Squares method), 梯度下降法 (Gradient Descent) 等等,神经网络属于梯度下降法。

 

12 - 误差方程 (Cost Function)

用来计算预测值和实际值的差异,在预测数值的问题中, 常用平方差 (Mean Squared Error) 来代替。

 

13 - 全局最优解(Global minima)与局部最优解(Local minima)

在误差曲线中, 只要找到梯度线躺平的地方, 就能迅速找到误差最小时的 W.
全局最优固然是最好, 但是很多时候, 获得的只是一个局部最优。
虽然不是全局最优, 但神经网络也能让局部最优足够优秀,即使拿着一个局部最优也能出色完成任务。

 

14 - 迁移学习(Transfer Learning)

简单来说,对于一个有分类能力的神经网络,保留它的代表特征转换能力(理解能力),用另外一个神经网络替换掉这个神经网络的输出层,用这种移植的方式再进行训练, 可以让它处理不同的问题。 

 

15 - 梯度爆炸与梯度消失

梯度消失

通常神经网络所用的激活函数是sigmoid函数,这个函数有个特点,就是能将负无穷到正无穷的数映射到0和1之间,并且对这个函数求导的结果是$f'(x) = f(x)(1-f(x))$。
因此两个0到1之间的数相乘,得到的结果就会变得很小了。
神经网络的反向传播是逐层对函数偏导相乘,因此当神经网络层数非常深的时候,最后一层产生的偏差就因为乘了很多的小于1的数而越来越小,最终就会变为0,从而导致层数比较浅的权重没有更新,这就是梯度消失。

梯度爆炸

如果初始化权值过大,前面层会比后面层变化的更快,就会导致权值越来越大,梯度爆炸的现象就发生了。

解决梯度消失或者梯度爆炸的方法

梯度消失一般出现在深层网络和采用了不合适的损失函数,比如sigmoid。
梯度爆炸一般出现在深层网络和权值初始化值太大的情况。
解决梯度消失或者梯度爆炸,可以采用ReLU激活函数来替代sigmoid函数。

 

16 - 20

16 - 神经网络的训练过程

通常分为两个阶段:前向传播和反向传播。
通过前向传播和反向传播不断调整神经网络的权重,最终到达预设的迭代次数或者对样本的学习已经到了比较好的程度后,就停止迭代,此时一个神经网络就基本训练完成。

前向传播

上一层的神经元与本层的神经元有连接,本层的神经元对上一层神经元对应的权值进行加权和运算,然后通过一个非线性函数(激活函数)得到本层神经元的结果,也就是输出。
逐层逐个神经元都通过该操作向前传播,最终得到输出层的结果。

反向传播

由最后一层开始,逐层向前传播进行权值的调整。
前向传播得到的结果与实际的结果得到一个偏差,利用梯度下降法,通过偏导数与残差的乘积从最后一层逐层向前去改变每一层的权重。

 

17 - 优化器(Optimizer)

选取合适的优化器,可以加速神经网络训练 (Speed Up Training)。
Tensorflow可用的Optimizer有很多不同的种类:https://www.tensorflow.org/api_docs/python/tf/train

Stochastic Gradient Descent (SGD)是最基本最常用的。
将数据拆分成小批量的, 然后再分批不断放入神经网络中计算。
每次使用批数据,虽然不能反映整体数据的情况,不过却很大程度上加速了NN的训练过程,而且也不会丢失太多准确率。
但事实证明SGD并不是最快速的训练方法,而是耗时最长的一种。

除了SGD,还有Momentum、AdaGrad、RMSProp、Adam等来加速训练。

18 - 混淆矩阵与准确率,精准率,召回率

混淆矩阵
二分类的模型,将预测情况与实际情况的所有结果两两混合,就组成了混淆矩阵。

  • P(Positive):代表1
  • N(Negative):代表0
  • T(True):代表预测正确
  • F(False):代表错误

准确率(Accuracy)
定义:预测正确的结果占总样本的百分比
公式:准确率=(TP+TN)/(TP+TN+FP+FN)
注意:准确率则代表整体的预测准确程度,但是在样本不平衡的情况下,得到的高准确率结果含有很大的水分,并不能作为很好的指标来衡量结果。

精准率(Precision)、查准率
定义:在所有被预测为正的结果中实际为正的概率,针对的是预测结果
公式:精准率=TP/(TP+FP)
注意:精准率代表对正样本结果中的预测准确程度。

召回率(Recall)、查全率
定义:在实际为正的样本中被预测为正样本的概率,针对的是原样本
公式:召回率=TP/(TP+FN)
注意:召回率越高,代表实际被预测出来的概率越高。

 

参考信息

机器学习算法常用指标总结:https://www.cnblogs.com/maybe2030/p/5375175.html

 

练习

 

19 - xxx

 xxx