机器学习基本知识
最近由于一些需要在学习机器学习,B站上找了一个系列的视频,感觉还行,对机器学习、深度学习好好学习学习,做一些简单的记录。
机器学习
机器学习(Machine Learning, ML)
是多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或者技能,重新组织已有的知识结构使之不断改善自身的性能。
机器学习是人工智能
的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,主要使用归纳、综合而不是演绎。机器学习、机器学习,那么这里的学习到底指什么样的一个过程呢?
学习:针对经验
E
和一系列任务T
以及一定表现的衡量P
,如果随之经验E
的积累,针对定义好的任务T
可以提高表现P
,就说明计算机具有学习能力。
机器学习被这样定义:探究和开发一系列算法来如何使计算机不需要通过外部明显地知识,而可以通过数据进行学习、建模,并且利用建立的模型对新输入的数据进行预测的学科。
当今,机器学习已经广为,现在常见并且火热的应用如下:
- 语音识别
- 自动驾驶
- 语言翻译
- 计算机视觉
- 推荐系统
- 无人机
- 垃圾邮件识别
一些基本概念
机器学习、包括下面提到的深度学习都有自己的一些元素,也算是一些概念,主要是:训练集
、测试集
、特征值
、监督学习
、非监督学习
、半监督学习
、分类
、回归
。下面对主要概念进行解释:
概念学习:从有关某个布尔函数的输入输出训练样例中推断出该布尔函数,概念定义在实例集合之上;
训练集(training set
):又称训练样例,用来训练、产生模型或算法的数据集;
测试集(testing set
):又称测试样例,专门用来测试训练好的模型或算法的数据集;
特征向量(feature vector
):属性的集合,通常用一个向量来表示,附属于一个实例;
标记(label
):实例类别的标记,即结果的类型,包括正例(positive example)和反例(negative example);
分类(classification
):目标标记为类别型数据(category);
回归(regression
):目标标记为连续性数值(continuous numeric value);
有监督学习(supervised learning
):训练集数据有类别标记,即训练集的样例存在最终的结果;
无监督学习(unsupervised learning
):训练集数据无类别标记;
半监督学习(semi-supervised learning
):训练集数据部分有类别标记、部分没有类别标记。
机器学习步骤
- 1、把数据集拆分为
训练集
和测试集
- 2、用训练集和训练集的
特征向量
来训练算法 - 3、用训练出的算法在测试集上进行评估(可能涉及调整参数,用到
验证集
(parameter set
))
算法评估
对一个机器学习算法性能的评估,主要考虑一下五个方面:
- 1、
准确率
:执行结果的准确度 - 2、
速度
:执行速度的快慢 - 3、
强壮性
:数据的个别值缺失时能否对数据进行准确处理 - 4、
可规模性
:数据集很大的时候算法是否仍然有效 - 5、
可解释性
:算法处理数据的结果可解释的程度
深度学习
了解了机器学习的基本知识,再往深里说是深度学习(Deep Learning, DL)
,它是基于机器学习延伸出的一个新领域,由以人脑结构为启发的神经网络算法(NNs)
为起源加之模型结构深度的增加发展,并伴随大数据和计算能力的提高而产生的一系列算法。
深度学习被广泛应用于图像处理与计算机视觉、自然语言处理以及语音识别等领域。
对于深度学习,主要对神经网络
相关的算法进行学习,这也是目前应用最为广泛的机器学习算法了。
神经网络
神经网络
(NNs
),也称人工神经网络
(Artificial Neural Networks
,简写为ANNs
)或称作连接模型
(Connection Model
),它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。
它机器学习得以发展出深度学习的关键所在,以人脑中的神经网络为启发产生的机器学习算法。
多层向前神经网络(Muiltilayer Feed-Forward Neural Network)
主要有三部分组成:输入层
(input layer
),隐藏层
(hidden layers
),输出层
(output layer
)
每层由单元
(unit
,也称为神经元
)组成,输入层将训练集的实例特征向量进行传入,经过连接结点的权重
(weight
)传入下一层,上一层的输出是下一层的输入。隐藏层的数量是任意的,输入层和输出层只有一层,不过一般算层数时不将输入层计算在内。
其工作过程大致是:将输入的实例值进行加权求和,再经过非线性方程转化输出到下一层。理论上讲,当隐藏层足够多、训练集足够大时,可以模拟出任何方程。
设计神经网络结构
使用神经网络训练数据之前,必须确定神经网络的层数,以及每层单元的个数。
特征向量在被传入输入层时通常被先标准化
(normalize
)到0
和1
之间,目的是加速学习的过程,但是输入的特征值类型可能是离散型
的,也可能是连续型
的。对于离散型的变量,可以通过编码成每一个输入单元对应一个特征值可能赋的值。例如
特征值
A
可能取三个值(a0、a1、a2)
,那么可以使用3
个输入单元来表示A
。如果A=a0
,则表示a0
的单元值取1
,其余取0
;如果A=a1
,则表示a1
的单元值取1
,其余取0
。
神经网络既可以解决分类问题
,也可以解决回归问题
。分类问题即为结果是离散型的问题,比如预测哪个品牌的电脑卖得更好;回归问题即结果是连续型的问题,比如预测某地的房价。
分类问题居多,因此主要学习分类问题的解决,对于该类问题,如果是两类,用一个输出单元表示即可,即0
和1
;多于两类则每一个类别用一个输出单元表示,因此输出层的单元数量通常等于类别的数量。
对于隐藏层数的设置,如果没有明确规则,则可以根据实验测试和误差,以及准确度来实验并作出调整。准确度的测试可以利用测试集来进行测试。不过还有一种常用的测试方法:交叉验证方法
。
交叉验证方法(Cross-Validation)
将数据集分为n
份,第一次将第一份作为测试集其余作为训练集进行训练和测试,第二层选择第二份作为测试集其余作为训练集进行训练和测试,依次类推进行。
Backpropagation算法
该算法可以说是其他神经网络算法的基本,通过迭代性
的训练集输入来处理训练集中的实例,对比通过神经网络处理后输出层的预测值与训练集真实值之间的差,来反向地
以最小化误差调节每个连接之间的权重,以此方式逐渐地进行训练。
算法的要素如下:
输入:数据集
D
、学习率L
、一个多层向前神经网络
输出:一个训练好的神经网络
起始状态时需要初始化权重
、偏向
(Bias
,每个单元都有一个偏向,相当于上层传到当前结点的一个偏移):随机初始化值在-1
到1
之间,或者-0.5
到0.5
之间。
对于一个训练实例,执行以下步骤:
- 1、由输入层向前传送,传送时需要对每个单元进行加权,然后加上传入到的目标结点的偏向值,最后对加权值进行非线性的转化,然后传送给下层结点。如下图:
- 2、根据误差进行反向传送
- 3、按照上述两步,输出训练集不同的数据进行多次的向前传送和反向传送进行更新,终止条件:
- 权重的更新低于某个阈值
- 预测的错误率低于某个阈值
- 达到预设一定的循环次数
非线性转化方程
sigmoid
函数(S曲线
)用来作为转化方程,sigmoid函数曲线形如下图:
关于机器学习的知识很多,我主要学习一些神经网络的东西,后面会继续记录。
- Post Title: 机器学习基本知识
- Post Author: ggb0n
- Post Link: http://ggb0n.cool/2020/04/09/机器学习基本知识/
- Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
1.TCTF2020部分题解
2.第五空间pwn题练习
3.堆溢出-Tcache_Attack
4.堆溢出-Housese_Of_XXX
5.堆溢出基础
6.入坑二进制