机器学习40讲_23_22_自适应的基函数神经网络
你好,我是王天一。
今天,我和你分享的主题是自适应的记函数。
神经网络回眸人工神经网络的前半生,不由得让人唏嘘。
造化弄人,初道即巅峰的他,经历了短暂的辉煌之后,便以惊人的速度陨落,几乎沦落到人人喊打的境地。
可吹曾晓,三十年河东三十年河西,一位天才的出现,让神经网络起死回生。
众人的态度也迅速从避之不及,变成趋之若鹜。
如果神经网络果真有一天如人所愿,实现了智能,不知道他会对自己的命运作何评价。
人工神经网络呢是对生物神经网络的模拟,意在通过结构的复制实现功能的复制。
但人类的神经系统在百万年进化当中留下的智能密码并没有那么容易破解。
因而呢神经网络最终也难以跳出统计模型的苛究,成为线性模型。
这个大家族的又一位成员,人工神经网络的祖师也是感知器。
点击文稿。
你可以看到感知器的结构示意图。
感知器的作用是根据输入数据的属性,对它进行二分类。
当这个偏置b等于零的时候,那模型呢首先计算输入属性的线性组合。
这时所有的参数WI共同构成分类边界的法向量,求出来的结果呢再被送入到激活函数当中去计算一个结果。
在感知器当中,它使用的激活函数是符号函数输出的二元。
结果呢就表示了两种不同的类别,点击文稿,你可以看到感知器的学习过程。
在这里训练数据集是个线性可分的数据集,其中的星号和圆圈代表了不同的数据类别。
感知器的初始参数呢它是随机生成的。
用这一组随机参数生成的分类边界,就是图中的红色虚线。
显然呢在分类边界的两侧啊,也就对应着数据的两个类别,都有这个错误分类的点。
直观来看啊,要让这个走错片场的星号,还有圆圈找到自己的组织。
唯一的办法呢就是调整分类边界,让新的边界把原始边界上方不同颜色的点给它区分开来,调整的方法呢一目了然。
既然星号集中在左侧,而圆圈集中在右侧,那就要让分类边界向右侧旋转,把右侧的信号包进来,把左侧的圆圈给它踢出去。
那么右侧子图表示的就是将原始边界试探性的旋转一个角度所得到的结果。
虽然这个小角度的旋转还是没能完全正确的分类,但是呢却对分类的准确率有改善的作用。
所以只要在此基础上进一步进行旋转的话,新的分类边界就可以将两个类别的点完全的区分开来。
由于在分类时无需使用数据的这个概率分布,所以呢感知器它是一种基于判别式的这个分类模型。
但是呢他和前面提到的这个线性判别分析又有所区别。
它的算法呢不是说利用所有数据的统计特性,一鼓作气计算出最优的参数,而是通过不断的试错为参数的优化过程提供反馈,从而呢实现动态的估计的调整。
那么具备自适应的学习能力是感知器和前面介绍的所有模型相比,它独有的优势。
在感知器的动态学习过程当中,作为优化目标,出现的是感知准则。
函数。
之所以没有选择常见的物分类率作为指标呢,是因为它并不适用于参数的动态学习过程,在分类的时候产生每一种分类结果的分类边界都不是唯一的啊,也就是说不同的直线都可以产生同样的分类结果。
这会导致什么呢?误分类率变成了关于参数w的一个分段的常数函数。
只要这个w的取值在一定范围内啊,那我的误分类率都是一样的。
这不仅会让关于w的误分类率呢存在间断点在求解梯度的时候,也不能够给出关于参数移动方向的一个信息感知准则。
他虽然也是建立在误分类率的基础上,却完全的回避了上面的那些缺点。
点击文稿,你可以看到它的表达式感知准则的基本思路是什么呢?让每个误分类别的贡献都大于零。
这就保证了他在整体上的背负性。
在这里面,二元的变量TN可以看成是数据点的真实类别和预测类别。
两者的一个差值。
它的作用呢在于控制每个物分类点的贡献。
如果一个正类的样本被判成负类的话,那TN呢就是大于零的值,所以可以取成正一。
反过来呢负类被判定成正类,TN呢就等于负一。
这有点类似于我们前面在统计的时候所提到的这个一类错误和二类错误啊,纯真和趣伪是不一样。
当这个感知准则取到最小值零的时候,这时呢所有的数据点就都被正确的分类。
那么感知器的算法呢也就完全的收敛。
对上面定义出来的感知准则或求解梯度的话,可以得到每个轮次当中参数的更新方式。
点击文稿呢,你可以看到相关的说明。
根据这个算法回头再来看上面的示意图的话,可以得到更加清晰的解释。
在左侧的子图当中,p一点是一个被误判为负类的正类点。
这时呢它的系数TN是等于正一的,要让这个点被正确分类的话,原始的系数向量w就要和向量p一和学习率的相乘相加。
它的几何意义呢就是这个系数向量要向PE接近。
那么移动的结果呢就是图中的这个w new,哎,就是新的这个向量位于第三象限的这个p二啊,它和p一一样也是误分类别,但是呢是被误判成了正类。
当负类被误判成正类的时候,那TN的取值等于负一。
这时候原始的系数向量w就要和p二还有学习率的乘积啊,做一个减法,两者相减。
这里的减法呢就体现为右侧的子图当中两个天蓝色箭头的这个方向的区别,两个是不一样的。
那么相减的几何意义是让新系数w new远离误分类点PR.那么不难看出这和上面对于p一的操作啊,两者的效果是一样。
感知器模型它可以进一步推广成为多层的感知器,也就是神经网络。
最简单的神经网络呢是多个感知器的线性集成。
神经网络的总输出呢是先对每个感知器单独的输出进行线性组合,再将线性组合的结果送入到输出层的激活函数当中,放在线性模型的大框架下讨论啊。
那么点击文稿呢,你可以看到具有单个隐藏层的神经网络,它的数学表达式在多层感知器中啊输出层激活函数最常见的选择是对数几率函数。
这时候呢输出层实质上就是个逻辑回归的分类器。
除了对数几率函数之外,双曲正阶函数tangent inch啊也是个不错的选择。
但它的值域呢是正一到负一,这让它的特性和对数激率函数略有差别。
对于隐藏层来说,它的激活函数既可以与输出层相同,也可以选取其他类型的非线性函数有较大的这个自由度。
从上面的公式当中不难看出,神经网络的每个神经元都可以看成是做了基扩展的一个线性模型。
非线性的激活函数,它不仅将输出变成了输入属性的非线性函数,同时呢也变成了权重系数的被限性函数,体现出来的是一个整体上的被见性。
当所有的激活函数都取为恒等函数的时候,神经网络就会退化,成为最基础的线性回归。
但是神经网络它和其他模型的区别在于说,它具有动态学习的能力,因而呢就可以自适应的调整模型的参数,调整的对象,也就是线性组合当中的权重系数。
神经网络的创新之处在于隐藏层的引入。
除了输入层和输出层之外,所有没有办法直接观察的这个层都属于隐藏层。
隐藏层的输出可以看成是某种导出的特征,它并不直接的存在于输入之中,却可以根据对输入特征的推导给它挖掘出来。
神经网络的强大之处就在于说能够自适应的提取,并且修正这种导出的特征,或者叫人造的特征。
从而呢适配到数据当中潜在的模式深度学习,他优异的性能也是由此而来。
在解决分类问题的时候啊,对神经网络参数的优化依赖于对交叉熵的最小化。
由于网络输出的分类结果,t它满足两点分布啊,那它关于数据x和参数w的似然概率啊,你可以在文稿当中看到求解这个自然概率的负对数,得到的就是交叉熵的误差函数。
那么点击文稿呢,你可以看到它的表达式交叉熵的这个最小化和自然概率的最大化,两者其实是等价的。
所以误差函数的最小值呢,可以通过反向传播的方法来求解。
那么关于反向传播这个算法,在上一季的专栏当中已经有过介绍,这里呢就不重复了。
神经网络当中隐藏神经元的数目决定着网络的泛化,性能足够多的神经元可以实现任意复杂的函数。
啊,但是呢也会带来严重的过拟和倾向。
所以说通过正则化的手段来控制网络的复杂度和性能是非常必要。
一种简单的策略是权重衰减。
他和前面介绍过的领回归类似,也是通过添加二次的正则画像来避免过拟合。
那么权重衰减的幅度呢是由一个超参数来控制的。
另一种经常应用于神经网络当中的政策化策略呢叫做早停。
早停是建立在验证数据集上的政策化策略。
简单来说呢,就是对每一轮次训练出来的模型都要计算它在验证机上的性能。
并且呢将当前模型的参数还有超参数给它存储下来。
在之后的每一轮训练当中,训练结果在验证集中的性能都被拿来和先前存储模型的性能做一个比较。
比较之后呢,保留两者当中表现较好的这个模型配置。
这种策略实际上跟感知器训练当中的口袋算法是类似的。
如果要从贝叶斯的角度去分析神经网络的话,那么模型的训练的这个任务呢就变成了根据先验假设和训练数据来计算未知参数的后验分布,再对参数的分布进行积分来计算预测的结果。
点击文档。
你可以看到相应的数据表达式,其中积分式的第一项在分类当中就对应着对数基率函数的输出。
第二项呢则是参数的后验概率。
由于对于神经网络的贝叶斯分析呢,会涉及到大量复杂的运算。
所以在这儿啊,我就介绍一些基本的思路,在用于分类的神经网络当中,先验假设就是参数w的概率分布。
这个分布呢通常会被处理成为零均值的高斯分布。
而这个高斯分布的参数,阿尔法又可以用超显眼来定义。
由于分类结果是离散的随机变量,它不像连续变量一样存在着估计值和真实值之间的偏差,所以呢就不需要再对这部分误差来定义鲜验。
虽然说参数本身的鲜艳分布是高斯形式,但是激活函数它的非线性特性会导致给定数据的时候,参数对于数据的后掩盖率就不满足高斯分布了。
这时候呢就需要使用拉普拉斯近似来生成一个高斯分布。
作为对未知后验的模拟啊,因为如果不使用高斯分布的话啊,那这个过程就没有办法去计算啊,在数学上没有办法去计算。
拉普拉斯近似的这个具体细节呢,在这儿呢暂且略过啊,你只要知道它的用处就可以了。
在生成高斯分布的时候,拉布拉斯近似会找到一个后验概率最大的这个最大值。
这就等效于对添加正则画项的误差函数进行最小化。
那么其中这个正则画项呢就是参数w先验分布的体现,利用复杂的数值计算方法,可以求出后验概率的最大值,进而呢确定后验概率。
它的高斯的近似处理完了参数w之后啊,还有这个超参数,阿尔法需要处理。
在后验概率的计算当中和参数w相关的超参数被看成是已知的固定值,我把它当成一个常数来处理。
但是在计算预测结果的时候,那这时候就不能当成固定值了。
需要考虑这个阿尔法的分布。
对于参数w进行积分呢可以得到数据。
关于这个超参数似然分布,也就是边际自然函数对边际自然函数进最优化,又可以得到。
关于超参数阿尔法的点估计,由于非线性的激活函数让积分难以计算啊,我们通常会假设参数的这个后验概率非常窄,是一个近似的德尔塔函数。
再利用是耗验概率最大的参数来计算未知数据的输出。
神经网络呀它是非参数模型的一种,它利用激活函数对线性模型做出了非线性的扩展,让每个输出变成了权重系数的非线性函数,从而呢在整体上拟合出非线性的效果。
更重要的是什么呢?它引入了隐藏的神经元,还有隐藏的层次。
这种特殊的结构能够对原始的特征实现重构,从而呢给数据分析带来了更多的可能。
在SK lean当中啊,实践感知器的类perception属于线性模型模块。
Li model这样设置的原因无疑在于说感知器本身它就是线性派没模型。
由于前面我们使用的这个中锋中位啊,数据集是个线性可分的数据集,所以可以用感知器来进行分类。
下图呢给出了感知器对数据集的分类结果。
从左到右分别是迭代次数为一三五时候的结果。
可以看到,当初始分类结果有误时,感知器的算法会不断将分类边界向误分类点的方向调整,直到分类正确为止。
点击文稿,你可以看到感知器的学习过程,之前使用过的另一个分类数据集。
啊,曼城新郎数据集,这是一个线性不可分的数据集,可以用它呢来验证多层感知器的性能实践。
多层感知器的类叫MLP classifier在神经网络模块neural network之中。
但是由于这个数据集本身呢是近似线性可分的,所以即使使用多层感知器,也不会生成明显的这个非线性判决边界,你可以自己运行一下代码并观察结果。
今天,我和你分享了感知器和神经网络的基本原理,包含了以下四个要点,第一,神经网络是一类非线性模型,利用非线性的激活函数,对输入的线性组合进行分类。
第二,神经网络可以通过误差反向传播自适应的调整网络结构中的参数。
第三,神经网络中隐藏层的作用是构造出新的导出特征。
第四,用贝叶斯方法分析神经网络时,需要使用近似方法来应对非线性导致的计算问题。
在二零一七年啊,也就是去年神经网络的元老,素琪乔布雷辛顿提出了胶囊网络的概念。
胶囊呢是由神经网络当中单个层里面若干的神经元组合而成,可以看成是层中的一个子层胶囊。
它可以执行大量的内部计算,并且输出一个矢量警示的结果。
从而呢获得更多的输出信息。
你可以查阅关于胶囊网络的资料,思考它对于神经网络的发展有何意义?并在这里分享你的见解。