00:01
继续上一次的内容,看到书上83页神经网络调参。我们将mlp class file应用到本章前面用过的初子数据集上,以此研究MLP的工作原理。
03:05
如你所见,神经网络学到的决策边界完全是非线性的,但相对平滑。我们用到了sova等于LBFGS,默认情况下MLP使用100个引节点,这对于这个小型数据集来说已经相当多了。我们可以减少其数量,从而降低模型复杂度。但仍然得到很好的结果。
04:28
只有十个引单元时,决策边界看起来更加参差不齐。默认的非线性是relu。如果使用单隐层,那么决策函数将由十个直线段组成。如果想得到更加平滑的决策边界。可以添加更多的引单元。添加第二个隐层,或者使用纯金的H非线性。
05:42
在这里,我们尝试使用两个隐层,每层十个单元。
06:47
和上面一样,两个顶层,每层十个单元。只不过这次使用腾的H。非线性。
07:52
最后,我们还可以利用L2惩罚时权重趋向于零,从而控制神经网络的复杂度。正如我们在零回归和线性分类器中所做的那样,M lp class file中调节L2惩罚的参数是阿尔法,与线性回归模型中的相同,它的默认值很小,若正则化。
12:44
这几幅图显示了不同阿尔法值对出木数据集的影响,用的是两个隐层的神经网络,每层包含十个或100个单元。现在你可能已经认识到了,控制神经网络复杂度的方法有很多种。
13:01
隐层的个数,每个隐层中的单元个数与正则化阿尔法实际上还有更多,但这里不在。过多介绍。神经网络的一个重要性质是,在开始学习之前,其权重是随机设置的。这种随机初始化会影响学到的模型。也就是说,即使使用完全相同的参数,如果随机种子不同的话,我们也可能得到非常不一样的模型。如果网络很大,并且复杂度选择合理的话。那么这应该不会对精度有太大影响。但应该记住这一点,特别是对于较小的网络。
15:58
这几幅图显示了几个模型的图像。
16:02
所有模型都使用相同的参数设置进行学习。就是随机种子不同。为了在现实世界的数据上进一步理解神经网络,我们将mlp class file应用在应用在乳腺癌数据集上,首先使用默认的参数。
19:34
MLP的精度相当好,但没有其他模型好,与较早的SVC粒子相同,原因可能在于数据的缩放。神经网络也要求所有输入特征的变化范围相似。最理想的情况是均值为零,方差为一。我们必须对数据进行缩放以满足这些要求。同样,我们这里将人工完成,但在第三章将会介绍standard color自动完成。
20:19
首先计算训练。其中。每个特征的平均值。然后计算训练集中每个特征的标准差。
23:54
注意到。两个数组方法,M和std。
24:00
很简单,平均值std也比较简单,求的是标准差。其中数组对象点命方法等价于囊派点这么一个函数。数组对象点std方法等价于当派点std这么一个函数。我们看到囊派点std派点命之前讲过。这是能判定std的原型参数A,一个类似数组的对象存放要进行求标准差的数据。X类型long type整数整数元组三选一可选参数沿着哪一条轴或哪一些轴构成的超平面、超空间来计算对应的标准差。如果是一个整数元组长度大于一,将会通过多条轴构成的超平面超空间来计算对应的标准差。关于常用的参数取值及其描述,可以看一下表,重点是第一行、第六行和第七行,其他的大家自己看一下。
25:07
首先是第一行输入数组的尾数是N为X等于那。描述计算数组中所有元素的标准差,返回一个数或者一个数组。如果keep de等于true,返回只有一个元素的N为数组,否则返回一个数。看到第六行。输入数组二为X等于零,这个时候把A输入数组A看成是一个由列量组构成的一个矩阵,求这个列向量组中每个列向量的所有分量的标准差返回一个数组。设输入数组A的形状为M行N列,如果T定等于two,返回一个一行N列的二维数组,否则返回一个长度为N的一位数组。输入数组A的为数,2X等于一。这个时候,把A看成一个由行向量组构成的一个矩阵,求这个行向量组中每个行向量的所有分量的标准差返回一个数组。
26:04
设输入数组的形状为M行一列,如果keep定等数,返回一个M行一列的二维数组,否则返回一个长度为M的二维数组。其余情况大家自己看下表。观察这个表格可以看出。之前有推导过类似的结论。大家自己看一下,我就不读了。Live。Access the meeting。看成列向量组求标准差X等于一,看成行向量组求标准差。标准差怎么算,我就不详细说明。结果肯定是对的。参数type数据类型可选参数,用来进行计算的数据类型。如果输入一个整数,数组默认情况下会使用64位浮点数,如果输入一个浮点数,数组默认情况下会和输入数组的元素类型相同。
27:04
Out。选择存放结果的输出数组默认为当,如果提供了一个数组,其形状必须和预期的输出数组一致。如果必要的话,类型将被强制转换。D do,整数可选参数,默认零自由度。在计算过程中,除数为N减d do,其中N是数组中元素的个数。Keeps不好,类型可选参数如果设置为true,会保持数组的维数不变,根据这个变量,结果会直接映射到输入数组中。失利。X等于零看成行向量组。求标准差。所以结果是一行N列。X等于看成列向量组,求标准。X等于零,看着列向量组,求标准差。所以结果是。
28:02
一行。等于。X等于一,看这行向量组求标准,所以结果是N行一列。其他情况包括默认情况会产生为数下降。当输入数组A是一个N为数组的时候。如果keep Dis等于返回一个N位数组。当keep等于false时,如果XS是一个整数或者包含一个整数单元组,返回N减一为的数组,否则,假设XS是一个M元组,返回一个N减M为的数组。特别的,当M等于A或X等于nu的时候,返回一个零为数组,也就是一个数。返回值,返回一个数组或者一个数。如果指定了参数alt,它就会就地修改alt指针指向的数组对象,并返回这个指针。换句话说,返回的指针和alt指针指向了同一个对象。如果不指定参数,Alt返回一个新数组。
29:00
Live。注意,在标准的统计学实践中,D do等于一,可以给出一个对无穷多个样本数据方差的无偏估计,DD等于零,可以给出一个正态分布随机变量方差的极大四量估计。考虑到标准差是估计得到的方差开根号,所以即使d do等于一,它本身也基本不可能是一个无偏估计。对于浮点数类型的输入数组。该参数该函数对应的数据类型取决于输入数组的元素类型,这可能会导致结果不精确,对32位浮点数的输入数组尤其如此。这里可以通过关键字参数type声明一个高精度的累加器例子。朗派点NDl.std self点点点。其实它很简单,假设A是一个数组。a.SSPD点点点等价于number派点S逗号点点点。
30:06
囊派点瑞点命也是同理,A是一个数字,A点命点点点等加囊派点命A逗号省略号。我们回到书上。缩放之后的结果要好很多。而且也相当有竞争力。不过模型给出了一个警告,告诉我们已经达到最大迭代次数。这是用于学习模型的Adam算法的一部分,告诉我们应该增加迭代次数。
31:21
增加迭代次数。对训练机性能和测试性能。训练机性能和泛化性能。都有所改善。但是。没有质的改善。不过模型的表现相当不错,由于训练性能和测试性能之间仍有一些差距。所以我们可以尝试降低模型复杂度来得到更好的泛化性能。这里我们选择增大阿尔法参数,变化范围相当大,从默认的0.0001到一,以此将权重添加更强的正则化。
32:38
就得到了与我们目前最好的模型相同的信呢?现在你可能已经注意到了,许多表现很好的模型都得到完全相同的精度0.972,这说明所有模型犯错的数量完全相同,也就是四个。如果你对比实际预测结果,甚至会发现他们都在相同的地方犯错。这可能是因为数据集非常小,或者是因为这些点与其他点的确是不同的。
33:08
虽然可以分析神经网络学到了什么,但这通常比分析线性模型或基于数的模型更为复杂。要想观察模型学到了什么,一种方法是查看模型的权重。对于乳腺癌数据集,这可能有点难以理解。
35:13
这张图。显示了连接输入和第一个隐层之间的权重。途中的行。对应30个输入特征。列对应100个引单元。浅色代表较大的正直。深色代表副职。我们可以推断。如果某个特征与。如果某个特征对所有引单元的权重都很小。那么这个特征对于模型来说就不太重要。
36:00
可以看到,与其他特征相比,命smoothness命。Comp以及smoothness a和。F arow之间的特征权重都相对的较小。这可能说明这些特征不太重要,也可能是我们没有用神经网络可以使用的方式来表示这些特征。我们还可以将连接隐层和输出层的权重可视化,但他们更加难以解释。虽然mlp class file和MLPS为最常见的神经网络架构提供了易于使用的接口,但他们只包含神经网络潜在应用的一部分。如果你有兴趣使用更灵活或更强大的模型。我们建议你看一下除了S之外的很棒的深度学习库,对于P用户来说。
37:01
最为完善的是KS。拉a g na laana和探flow。蓝色gna是基于signo库构建的,而。既可以用探flow,也可以用signno,这些库提供了更为灵活的接口,可以用来构建神经网络,并跟踪深度学习研究的快速发展。所有流行的深度学习库也都是。允许使用高性能的图形处理单元GPU,而S论不支持GPU,使用GPU可以将计算速度加快十到100倍。GPU对于将深度学习方法应用到。大型数据集上至关重要。优点、缺点和参数在机器学习的许多应用中,神经网络再次成为最先进的模型。它的主要优点之一是能够获取大量数据中包含的信息,并构建无比复杂的模型,给定足够的计算时间和数据。
38:03
并且仔细调节参数。神经网络通常可以打败其他机器学习算法,无论是分类任务还是回归任务。这就引出了下面要说的缺点。神经网络,特别是功能强大的大型神经网络,通常需要很长的训练时间。它还需要仔细的预处理数据。正如我们这里所看到的,与SVM类似,神经网络在均匀数据上性能最好。其中均匀是指所有特征都具有相似的含义。如果数据包含不同种类的特征,那么基于数的模型可能表现的更好。神经网络调参本身也是一门艺术,调节神经网络模型和训练模型的方法有很多种,我们只是蜻蜓点水的尝试了几种而已。估计神经网络的复杂度最重要的参数是层层数和每层的引单元个数。你应该首先设置一个或两个隐层,然后可以逐步增加。每个隐层的节点个数通常与输入特征的个数接近。
39:06
但是。几千个节点。但是在几千个节点时,很少会用于。很少会用多余特征的个数。再考虑。神经网络的模型复杂度时,一个有用的度量是学习到的权重或系数的个数。如果。你有一个包含100个特征的二类数据集模型,有100个引单元,那么输入层和第一个隐层之间就有100乘100等于1万个权重,在隐层和输出层之间还有100乘一等于100个权重。总共约。10100个权重如果添加含有100个引单元的第二个隐层,那么在第一个隐层和第二个隐层之间又有100乘100等于1万个权重。总数变为。20100个权重。如果你使用包含1000个引单元的单隐层,那么在输入层和隐层之间需要学习。
40:05
100乘1000等于10万个权重。隐层到输出层之间需要学习1000乘一等于1000个权重,总共101000个权重,如果再添加第二个影子,就会增加以1000乘1000等于100万个权重总数变为巨大的。1101000个权重。这比含有两个隐层,每层100个单元的模型要大50倍。神经网络调参的常用方法是,首先创建一个大到足以过拟合的网络,确保这个网络可以对任务进行学习。知道训练数据可以被学习之后,要么缩小网络,要么增大阿尔法来增强正则化。这可以提高泛化性能。在我们的实验中,主要关注模型的定义层数、每层节点的个数、正则化和非线性。这些内容定义了我们想要学习的模型。还有一个问题是如何学习模型或用来学习参数的算法?
41:10
这一点由so参数设定,So有两个很好的选项,默认选项是A。在大多数情况下。效果都很好,但对于数据的缩放相当敏感,因此始终将数据缩放为均值为零,方差为一是很重要的。另一个选项是LBFGS,其鲁棒性相当好。但在大型模型或大型数据集上时间会比较长。还有更高级的SGD选项。许多深度学习研究人员都会用到SGD选项,还有许多其他参数需要调节,以便获得最佳结果。你可以在用户指南中找到这些参数及其定义。当你开始使用MLP时,我们建议使用Adam和LBFGS。
42:02
注意fit会重置模型。在模型的一个重要性质是。调用fit总会重置模型之前学到的所有内容。因此。如果你在一个数据集上构建模型,然后在另一个数据集上再次调用,那么模型会忘记从第一个数据集中学习到的所有内容。你可以对一个模型多次调用F,其结果与在新模型上调用F是完全相同的。
我来说两句