(0)摘要
# 课程内容:
(1)感知机_1
【本节课中,个人也补充了相当多的知识点】
# 自强不息,厚德载物🙂
(1)感知机_1
# (1)总体课程概览。
如下图所示, 本节课主要是讲解:
1)多层感知机、
2)反向传播算法、
3)多层感知机的训练技巧、
4)自编码机模型、
5)深度学习的表达能力;
# (2)最初的感知机的简易模型。
简单的说,就是将人体的一组神经元抽象成下面 {1, x1,...,xd} → y'(即y-hat) 的过程。也就是说:
首先,有一组输入信息 {1, x1,...,xd},与对应权重 {θ0,...,θd} 加权求和得出结果,记为 Σ ;
而后,经过一个激活函数(非线性变换)后变为 y' 的过程。
【右边的式子是抽象模型的数学表达式,一般的论文表达是使用刚才所说的抽象模型,因为这非常的直观】
# (3)激活函数。
在上述的抽象模型中,当时所使用的激活函数就是普通的阶跃函数,比如设定某个阈值,若是自变量大于该阈值,就为 1 ,否则就为 0。但是这种普通的阶跃函数存在不可导的问题。
典型的阶跃函数图像(符号函数sgn(x) ):
# (4)感知机学习算法(PLA---Perceptron Learning Algorithm)
1)感知机学习算法的讲解,如图所示:
第一步:数据准备阶段
首先,输入的话包含两个,分别是学习次数为 T0 次(迭代次数)和训练集{(xi,yi)}。那么图中给出的训练集的表达式,意思是有 m 条学习样本,起始从 1 开始,其中 xi 是输入并且是 d 维的向量,yi 是对应训练集 xi 的输出,是 1 或者 -1(当然也可以是 1 或者 0)
第二步:输出目标
那么输出的话就是权重参数 θ (加粗的为向量),即 {θ0,...,θi}。也就是说一旦我们确定了这组权重,那么对于给定的 xi 我们都能够输出相同的 yi。
第三步:算法思想
开始的时候,我们先初始化权重参数 θ,可以是随机初始化,也可以指定为 0,这里给的例子是初始化 θ = 0;
然后,我们迭代 T0 次,每一次我们都是从训练集中随机采用一组 (xi,yi) ,然后计算 y' = sgn(xt * θ);
最后,比较真值 yt 与 上面计算的预测值 y' 是否相等,如果相等,说明这组 θ 是所要的,否则就要更新这组 θ,更新方法为 θ = θ + yt*xt。然后以此往复,其实也是参数估计的过程。
【定理---收敛率定理?】
知识补充:s.t. 是 subject to 的缩写,在数学中是 "使得满足... " 的意思。
前提一:γ 是最优间隔的意思,就是支持向量机(SVM)的概念。假设有一个超平面能够正确的区分两类样本。那么在这些样本中能够找到离超平面最近的点 x ,这样 x 到超平面的距离就是最优间隔 γ了。【---见前提一补充】
前提二:R 是空间中点到原点的距离的最大值(模长),也可以理解为径向量的模长。
那么定理:
感知机算法,可以在
的迭代次数内达到收敛,定理的证明是在数据样本是线性可分的情况下证明的。显然,如果 R 是一定的,γ 越大,说明需要的迭代次数越少,同时表明了所要解决的问题是较简单的。如果 γ 是一定的,那么 R 越大,说明空间中的点越离散,就需要更多的迭代次数。【如果是线性不可分情况,我们不清楚到底收不收敛】
【前提一补充】
因而就有了下面的公式:即
。那么实际上后者就是空间外一点,到平面的距离公式。 推导过程如下图所示,另外补充求两个向量的余弦值的公式:
,这样配合来理解就很容易了。至于为什么 γ 一定小于等于,这是因为我们假设了 γ 是最优间隔了,也就是点到平面距离的最小值了。
# (5)收敛定理的证明。
1)首先,我们设一共进行了 T 轮迭代,那么在这 T 次迭代中,总有 I 次 θ 是进行了更新的,亦即 I 次就是 | I | = M 。很显然,| I | ≤ T。为了讲好下面证明,我们会对每一步的运算演变进行注解。
2)式子 1 ---使用了柯西—施瓦茨不等式。那么下图是其该不等式的定义。来源:柯西-施瓦茨不等式的四种形式_傅里叶、的博客-CSDN博客_柯西—施瓦茨不等式。那么我们这次主要使用第二种形式的柯西—施瓦茨不等式。【补充:向量的二范数,设
,那么
。这就是向量二范数的定义了,一般二范数我们都略写成 || α ||】
对于式子 1 的左边,中间的
,就是所有更新的 θ 的点距离求和, 由于 γ 是最优间隔,因而易知
,也就是式子 1 的左边得证。对于式子 1 的右边,由上面的例子知道
是 dx1 维的向量,
是个常数,那么我们将
可以变换为
,就是两个向量相乘了(左边是单位向量只改变方向,且内积范数为 1 ,右边是一个普通的 dx1 维向量),根据上面的柯西—施瓦茨不等式的第 2 种形式,我们就得到了
,即
。那么 下面的第一个式子左右两边就得到证明了。
3)式子 2 和 式子 3。我们根据原来
的定义可以知道,如果发生了更新,那么下一次的
就等于上一次的
加上
,也就是说
, 那么式子 1 的右边又可以变为
,如此就知道式子 2 的由来了。然后我们将式子 2 展开,那么式子 2 就等于
,且设
= 0,那么原式 =
, 其实也就是
。
4)式子 4 和 式子 5。对于式子 4 ,其实就是
的一个变形,即以平方差的形式来做列项求和。而后再根据先前
的定义替换,从而得到了式子 5。
5)对于式子 6 ,在此前复习一下向量知识(suppose即假设的意思)。
。那么有了上面的知识,我们将式子 5 化简后就可以得到它的左边 ,
,回顾之前的前提,因为这次的
是变化的,也就是说所预测的 y' 与真值 yt 是相反的(注意符号函数),那么
。因此
。我们再看 R 是什么,R 是 xt 到原点距离的模长的最大值(其实可以理解为就是 xt 的模长),因此必然有
,结合式子 1 又有
,从而有
。
# (6)布尔表达式和 “异或” 问题
1)感知机可以很方便的把与或非三种逻辑运算表达出来,如下所示。但是如果针对于异或(XOR)问题,就遇到困难了。所谓异或就是输入同则为 0,异则为 1。
2)表达异或。我们注意到如果单纯的是使用一个感知机来表达异或是不可能的,可以见下图的左边的 Perceptron 坐标。但如果我们使用多个感知机来表达,就可以轻松解决异或问题,见另一个坐标系,即逻辑表达式
,我们可以列出他们的真值表(这里需要离散数学基础,就是将 0,1 分别代入上面的逻辑表达式,对应所得到的所有结果构成的表),其分布必然与异或定义的逻辑表达式
的真值相同。
# (7)多层感知机(MLP)_上
1)MLP 就是简单粗暴的将多个感知机堆叠起来。然后我们算有多少层的时候,只算隐含层和输出层(即不考虑输入层),比如下面右边的 MLP 模型就是两层。(龙老师讲的更加深刻,输入输出与感知机相当于映射关系,比如第一层映射就是输入{x1 ... xd} 到 z1 的过程,第二层映射是 {z1 ... zd1} 到 {y1, y2},这样计算层数)
2)使用 MLP 来表示异或问题。前面说过异或问题的定义,下图的感知机模型就就可用于表达异或问题。
3)MLP 可以表达任意的逻辑表达式。其实很好理解就是,分开的两个感知机就是表达或的(符号是 | ,但是或也是加的意思),汇聚到一起的就是表达与的(符号 & ,但是与也是乘的意思)。当然这下面要表达非,取得的是负数。有了这个基础,我们再将下面的模型与其对应表达式结合起来理解就轻松很多。另外,下面的模型是稀疏连接,很好理解就是不是所有神经元(感知机)都是有用的。如果给每一个神经元都对应所有的输入,那么这种连接是稠密的也就是全连接网络。
4)激活函数对分类面的影响。我们清楚了感知机是由线性组合和激活函数组成,其中线性组合一定是与高维空间的超平面所对应(简单理解就是有这么一个线把正负例样本分开了,这其实反映的是样本分布的规律),那么激活函数是不改变这个分布规律的,也就是说即使经过了激活函数的非线性变换(仅仅只是细化了这个分布),都不影响这个超平面。因而一个感知机在高维空间中对应的是一个超平面而不是曲面。
5)决策边界。下面的五边形,其实对应了五个超平面,也就是说要表达这个五边形,就需要使用五个感知机模型,即右边的模型。(其中有一个是偏置?)
那么还可以表达更复杂的模型。
# (8)多层感知机(MLP)_下
1)下面是一个比较典型的多层感知机(全连接网络)。设输入层
,当然还有偏置
, 输入为 4 个;权重参数
、
、
,隐藏层有两层,分别有
和
,并且各自有偏置
、
;输出层
;激活函数 a;损失函数
,其中
意思是说在权重参数为 θ ,输入为 i 维向量 x 的情况下,在经过 f 的映射变化后得到的值
。在将偏置和输入合并后,那么整个网络前向的运算过程是如下:
第一: x 是一个(1*4)维的向量,第一层的感知机有 4 个(也就是 1*4 维度,下同),那么对应的权重参数就是
就是 (4*4)维的参数矩阵;
第二:到了隐含层的第一层后,经过了激活函数 a 的运算,我们加上偏置
作为第二个隐含层的输入,维度是 (1*5),第二个隐含层有 3 个感知机,如此权重参数
就是一个 (5*3)的权重矩阵;
第三:同第二个的道理,将最后输出的的结果
,分别进行激活变化 a 后作为预测值
输出。
最后,我们就可以使用上面的损失函数计算预测值和真值的误差了。事实上,映射 f 就是这个多层感知机模型。而映射 J 则是损失函数。
2)激活函数步骤的详解,注意到,我们在考虑输入的时候,就已经将偏置也作为输入了,这样就可以理解下面的
了。下面的的 g(z) 函数就是 sigmoid 函数,也常常被称为 logistic 回归,由于其函数值域属于 (0, 1) 之间,因而可以用来建模概率模型。但是 sigmoid 函数的两边存在梯度饱和的问题,也就是说在这里求导会出现导数为 0 的情况,那么不利于后续的反向传播算法来更新权值参数,这也就是梯度消失,无法训练的问题。
3)其他的激活函数。比较常用的就是整流线性单元 ReLU 函数。
4)特别的激活函数,softmax 函数。其实目的就是想把输入的多个变量归一化到 (0,1) 区间内。比如输入是 z1,z2,z3 ,将他们取指数函数,即
,那么他们的和就是
,如此
,也就是
。
但是 softmax 函数是存在不足的。比如下面的两种情况:
第一种情况:如果某一个分子的值过大,其对应的概率也就越大,势必会抑制其他分子的概率,如此分布就不太合理了。这就是所谓的“赢者通吃”。对于这个问题,我们可以在计算
的时候,令分子除以一个温度常数。
第二种情况:数值溢出。如果出现数值溢出,那么就令
的分子分母同时除以一个
,
,也就是 m 是输入的最大的那个值。