机器学习和深度学习
文章目录
- 机器学习和深度学习
- 人工智能与机器学习和深度学习的关系
- 侠义的机器学习
- 深度学习的概念
- 常见的神经网络的输入形式
- 想要的输出(任务类别)
- 深度学习的流程
- 线性函数与多层神经元
人工智能与机器学习和深度学习的关系
所谓人工智能就是,让计算机为人类做工作,其中机器学习属于人工智能,深度学习属于机器学习。
传统人工智能系统与机器学习的区别:
- 传统系统是将输入数据以及处理数据的规则交给计算机,然后让计算机得出数据处理结果(输出数据)。
- 机器学习是将输入数据以及数据处理结果(输出数据)交给计算机,然后让计算机得出处理数据的规则。
侠义的机器学习
侠义的机器学习是指除去深度学习的机器学习部分,也就是下图中浅蓝色的中间层部分:
具有一般是基于数学,或者统计学的方法,具有很强的可解释性的特点。所谓的可解释性就像数学公式的推导过程一样,得到的每个结果都是有逻辑的,令人信服的。
这里简述几个经典的传统机器学习算法:
- K最近邻居(K-Nearest Neighbors,简称KNN)
举例如下图:
小明的周围都是北大的,因此小明大概率是北大的;小明的周围大多是清华的,因此小明大概率是清华的;小明周围清华和北大人数接近,因此小明是清华还是北大难以判断;小明周围有很多川大的,对推断小明是清华还是北大没有价值,因此难以判断。
根据以上的例子,我们可以体会它的基本思想是通过测量不同数据点之间的距离来进行预测。此外,KNN是一种监督学习算法,用于分类和回归问题。
而KNN的工作原理可以概括为以下几个步骤:
- 距离度量: KNN使用距离度量(通常是欧氏距离)来衡量数据点之间的相似性。
- 确定邻居数量K
- 投票机制
如下图,图中点的位置可以表示点之间的距离,可以选取不同的邻居数量,然后根据选中的邻居的所在各类的数量判断数据属于哪类可能性。
-
决策树
决策树是将所有可能情况和相应的数据给出,举例判断邮件是否为垃圾邮件如下图:
通过输入的是否认识的人和垃圾关键字两个维度的数据去查找决策树中对应的输出,另外决策树不善于处理未见过的特征。
-
朴素贝叶斯
基于贝叶斯定理,并假设特征之间是条件独立的,举例如下图:
以上介绍的机器学习的算法,具有数学上的可解释性,但准确率不是百分百,且不灵活,因此引入了深度学习。
深度学习的概念
深度学习是机器学习的子集,让机器利用多层神经网络从大量数据中自己进行学习。
最后学习出来的模型,我们直接拿来使用,往后的数据都通过这个学出来的模型得到输出数据,由于成功率比较高,因此我们可以拿来使用,但是完全没有可解释性,因此深度学习是一门实践性的科目。
实际上,深度学习就是找一个函数f。给到机器的是输入数据X和输出数据Y,让其使用神经网络学习,学习得到数据处理的规则,也就是X如何得到Y,这个规则就是所谓的函数f。
深度学习的意义
在一些复杂的场景下,比如给到的输入是一张图片,输出是图中物品的类别,我们要推断输入得到输出的规则是十分困难的,是人类很难得到,因此采用深度学习推断规则。
常见的神经网络的输入形式
-
向量
一组有序的数字,可以表示输入数据的每个特征。
-
矩阵/张量
神经网络处理更高维度数据时的常见输入形式,特别是在涉及到 二维数据(如图像或表格数据)时,图像是用矩阵表示的。
-
序列
具有 时间依赖性 或 顺序关系 的数据。如一句话和视频。
苹果一词放到不同语境有不同的解释,视频是由一帧一帧的图像组成,并且图像之间有严格的前后顺序。
想要的输出(任务类别)
-
回归任务
回归任务好似一道填空题,输出的是一个数在连续的区间内选出一个。如根据以前的温度推测明天的温度大概有多高。
-
分类任务
分类任务好似一道选择题,输出只能是给定的离散的数据中选出一个。如给出一张图片,判断图中是猫还是狗,即使输入是一只狼,输出也只能是猫和狗。
-
生成任务
生成任务好似一道简答题,输出是具有结构化的数据。如一段文字或一张图片。
分类和回归是结构化的基础。 分类时, 是用数字来表示类别。 有的时候需要多个模态的数据, 比如 图片, 文字, 声音。
深度学习的流程
深度学习需要数据,因为要从数据中找到函数。深度学习的流程如下图:
举一个例子来理解深度学习的流程,假设有如下数据:
有6组x和y,x也成为数据(feature),y也成为标签(label),x和y实际的函数关系是
y = 2 ∗ x + 1 + ε y=2*x+1+ε y=2∗x+1+ε
其中,ε为扰动,因为真实数据是不会是完全符合一个特定函数关系的,要做的就是找到x和y之间的函数关系,然后推测出第7组x对应的y。特别注意的是,我们已知的只有x和y,x和y的函数关系是未知的,也就是我们深度学习要求得的。
关于这个例子,我们进行深度学习:
-
定义一个函数模型
函数模型的定义是任意的,可以选择线性模型
y = w ∗ x + b y=w*x+b y=w∗x+b
,也可以选择二次函数模型,三次函数模型甚至更复杂的函数模型,不同的函数模型得到的模型效果有差异,由于实际函数关系是未知的,因此模型的选择是具有猜测性。本例中我们就选择线性模型
y = 3 ∗ x + 2 y=3*x+2 y=3∗x+2
也就是w选取3,b选取2,其中w称为权重(weight),b称为偏置(bias)。 -
定义一个合理的损失函数LOSS
损失函数LOSS的作用判断我们选择的这组参数怎么样。在我们选取的模型中参数就是w和b,我们设计LOSS函数为
L ( w , b ) = ∣ y ^ − y ∣ = ∣ w x + b − y ∣ L(w, b) = |\hat y - y| = | w x+b- y| L(w,b)=∣y^−y∣=∣wx+b−y∣
如果我们设计的模型和真实函数关系十分接近的话,那么用模型求的的
y ^ \hat y y^
和真实的y差值的绝对值,也会很小,也就是LOSS值会很小,由于不止一组x和y因此求LOSS时要取多个LOSS的平均值
L O S S = 1 N ∑ i = 1 N l LOSS = \frac{1}{N}\sum \limits_{i=1}^N l LOSS=N1i=1∑Nl
比如第一个x为1,经过我们设定的模型求的
y ^ \hat y y^
为5,而x对应的y为3.1,因此LOSS值为1.9。 -
根据损失对模型进行优化
为了让设定的模型更加接近真实的函数关系,因此要根据LOSS值不断调整参数,在这里就是w和b,直到LOSS值为我们所能接受的值。下面给出两个常见的LOSS函数:
M A E : L ( w , b ) = ∣ y ^ − y ∣ ( 均绝对误差 ) MAE : L(w, b) = |\hat y - y| (均绝对误差) MAE:L(w,b)=∣y^−y∣(均绝对误差)
M S E : L ( w , b ) = ( y ^ − y ) 2 ( 均方误差 ) MSE : L(w, b) = (\hat y - y )^2(均方误差) MSE:L(w,b)=(y^−y)2(均方误差)
模型优化有公式如下:
w ∗ , b ∗ = a r g m i n L w^*,b^* = arg \ minL w∗,b∗=arg minL
其中 w ∗ , b ∗ w^*,b^* w∗,b∗为L最小时w,b所取的值,根据LOSS调整参数w,b进行的优化模型采用的是梯度下降算法。
梯度下降算法的过程如下(以参数w为例):
-
随机选取一个 w 0 w^0 w0
在定义函数模型为线性模型后,设定的w=3就是所谓的 w 0 w^0 w0(w的第0版)也就是给参数w设定的初始值。
-
计算梯度
在选取的LOSS函数
L ( w , b ) = ∣ y ^ − y ∣ = ∣ w x + b − y ∣ L(w, b) = |\hat y - y| = | w x+b- y| L(w,b)=∣y^−y∣=∣wx+b−y∣
中因为要做的是通过改变w和b来改变函数L的值,因此在这个过程中w,b为自变量,x,y为常数,因为本例要调整参数w,因此要计算函数L对自变量w取档当前值时的梯度
∂ L ∂ w ∣ w = w 0 \frac{\partial L}{\partial w}|w=w^0 ∂w∂L∣w=w0 -
更新w的值
如果梯度值是大于0的,说明函数在邻域内左低右高,w减小,L有可能减小;如果梯度值小于0,说明函数在邻域内左高右低,w增大,L有可能减小。w的更新采用如下公式:
w 1 ← w 0 − η ∂ L ∂ w ∣ w = w 0 w1←w0-η\frac{\partial L}{\partial w}|w=w^0 w1←w0−η∂w∂L∣w=w0
采用该公式时,梯度大于0,w会减小;梯度小于0时,w会增大。其中η为学习率,η的作用是控制参数调整的幅度,学习率的设定和模型的设定一样影响最后的效果,并且没有明确的选取方式。学习率设定的过大或过小都会有问题,学习率设定的过大,会使参数调整时参数的调整幅度过大,导致不断偏离最小值,会导致梯度爆炸;学习率设置的过小,调整的幅度过小,会使得学习时间变长。
**特别要注意的是:**η是一个超参数,超参数在设定后,是不会随着深度学习而改变的,初次之外,模型也是一种超参数,比如设定了为线性结构,学习过程中就不可能再变成其他如二次函数的结构。
- 在完成1,2,3之后,不断执行2,3调整参数,直至LOSS函数值满足要求,或训练轮次达到。
- 模型中的所有参数都要采用梯度下降算法进行调整,采用相同的方法。
- 当参数众多时,梯度计算过程会很复杂,可以使用torch提供的框架来完成。
线性函数与多层神经元
研究深度学习时,总能看到类似如下图的神经网络图:
单取出一个神经元做解释:
一个神经元实际表示的数据公式为
y ^ = w ∗ x + b \hat y=w*x+b y^=w∗x+b
因此在一个神经网络中,一个结点要表示的就是一个线性关系
y = ∑ i = 1 N w i x i + b y=\sum \limits_{i=1}^Nw_ix_i+b y=i=1∑Nwixi+b
b为几个 x i x_i xi的偏置值之和,取其中一个结点举例,关系如下图: