导航:首页 > 网络设置 > 神经网络超参数是多少

神经网络超参数是多少

发布时间:2023-07-01 05:04:14

A. 深层神经网络的超参数调试、正则化及优化

训练集  ( Training set )

       作用是用来拟合模型,通过设置分类器的参数,训练分类模型。后续结合验证集作用时,会选出同一参数的不同取值,拟合出多个分类器。

验证集  ( Dev set )

       作用是当通过训练集训练出多个模型后,为了能找出效果最佳的模型,使用各个模型对验证集数据进行预测,并记录模型准确率。选出效果最佳的模型所对应的参数,即用来调整模型参数。如svm中的参数c和核函数等。

测试集 ( Test set )

       通过训练集和验证集得出最优模型后,使用测试集进行模型预测。用来衡量该最优模型的性能和分类能力。即可以把测试集当做从来不存在的数据集,当已经确定模型参数后,使用测试集进行模型性能评价。

一个有助于理解的形象比喻:

        训练集 ——  课本,学生根据课本里的内容来掌握知识。

        验证集 —— 作业,通过作业可以知道 不同学生学习情况、进步的速度快慢。

        测试集 ——  考试,考的题是平常都没有见过,考察学生举一反三的能力。

        训练集  直接参与了模型调参的过程,显然不能用来反映模型真实的能力(防止课本死记硬背的学生拥有最好的成绩,即防止 过拟合 ) 。

        验证集  参与了人工调参(超参数)的过程,也不能用来最终评判一个模型(刷题库的学生不代表其学习能力强)。

       所以要通过最终的考试 (测试集) 来考察一个学生(模型)真正的能力。

       如何将只有一个包含m个样例的数据集D,产生出训练集S和测试集T(验证集可以省略)?主要有以下三种方法:

自助法 ( bootstrapping )

       给定m个样本的数据集D,我们对它进行采样产生数据集D',每次随机从D中挑选一个样本,将其拷贝入D',然后再将样本放回原始数据集D。显然,该样本在下次采样时任然有可能被采到。这个过程重复m次后,我们就得到了含有m个样本的数据集D',这就是自助采样的结果。         样本有重复采样,也有一次也没有被采到的。从未采到的结果是 ,取极限得到

                                           

因此,使用自助法约有1/3的数据集没有被选中过,它们用于测试,这种方式叫“外包估计”。

       自助法在数据集小,难以划分训练集、测试集的时候有很大的效果,如果数据集足够大的时候,留出法和交叉验证是更好的选择。

留出法 ( hold-out )

       将整个数据集D划分为两个互斥的集合,其中一个作为训练集S,另一个作为测试集T。即,D=S∪T,S∩T=∅。在S上训练出模型,T作为测试集,来评估模型效果。

       当样本数据量较小(10000条左右及以下)时,通常取其中70%作为训练集,30%作为测试集;或60%作为训练集,验证集和测试集各20%。

交叉验证法 ( cross validation )

       如图所示,交叉验证法的实现流程大致如下:

       (1) 将整个数据集分成k个大小相似的子集,即D=D1∪D2∪...∪Dk,Di∩Dj=∅(故又称k折交叉验证法,通常取k=10 )。

       (2) 对于每一个模型Mi,算法执行k次,每次选择一个Sj(1≤j≤k)作为测试集,其它作为训练集来训练模型Mi,把训练得到的模型在Sj上进行测试,这样一来,每次都会得到一个误差E,最后对k次得到的误差求平均,就可以得到模型Mi的泛化误差。

       (3) 算法选择具有最小泛化误差的模型作为最终模型,并且在整个训练集上再次训练该模型,从而得到最终的模型。

       交叉验证的主要的目的是 为了选择不同的模型类型(比如一次线性模型、非线性模型) ,而 不是为了选择具体模型的具体参数 。比如在BP神经网络中,其目的主要为了选择模型的层数、神经元的激活函数、每层模型的神经元个数(即所谓的超参数),每一层网络神经元连接的最终权重是在模型选择(即K折交叉验证)之后,由全部的训练数据重新训练。

       假设这就是数据集,显然用简单分类器(如逻辑回归)并不能很好地拟合上述数据。这种情况称为  欠拟合  。

       相反地,如果采用一个非常复杂的分类器(如深度神经网络或含有隐藏单元的神经网络),拟合效果会非常好。但与此同时,模型的复杂度也会过高,这种称为 过拟合  。

       在两者之间,可能会存在一些复杂程度适中、数据拟合适度的分类器,拟合结果较为合理,称为 适度拟合 。

       如上图所示,训练集误差和验证集误差均较高时为 高偏差(欠拟合)  情况;训练集误差较高,验证集误差较高低时为  高方差(过拟合)  情况。

(1) 如何减小偏差(防止欠拟合)

       ① 增大神经网络规模。

(2) 如何减小方差(防止过拟合)

       ① 增加数据集样本数量;

       ② 正则化。

        参数   是指神经网络中由数据驱动并进行调整的变量,如𝑊和𝑏。

        超参数   是指无需数据驱动,而是在训练前或者训练中人为进行调整的变量。例如算法中的learning rate 𝑎(学习率)、iterations(梯度下降法循环的数量)、𝐿(隐藏层数目)、𝑛[𝑙](隐藏层单元数目)、choice of activation function(激活函数的选择)等都需要人为设置,这些数字实际上控制了最后的参数𝑊和𝑏的值,所以它们被称作超参数。

       神经网络中的超参数主要分为三类:网络参数、优化参数、正则化参数。

​网络参数

       可指网络层与层之间的交互方式(相加、相乘或者串接等)、卷积核数量和卷积核尺寸、网络层数(也称深度)和激活函数等。

优化参数

       一般指学习率(learning rate)、批样本数量(batch size)、不同优化器的参数以及部分损失函数的可调参数等。

正则化参数

       权重衰减系数,随机失活比率(dropout)等。

       正则化有利于减小训练集和验证集准确率的方差,防止过拟合。在无法增加样本数量或增加样本数量的成本过高时,正则化是一种行之有效的方法。

        一般将任意 维向量  的 - 范数定义为

                                                              

       根据定义:

       当 时, 的 范数为 ,表示向量 中非0元素的个数。

       当 时, 的 范数为 ,等于向量 中所有元素的绝对值之和。

        当 时, 的 范数为 ,等于向量 中所有元素的平方和开根号。

       正则化(Regularization) 的主要目的是控制模型复杂度,减小过拟合。最基本的正则化方法是在原目标(代价)函数 中添加惩罚项,对复杂度高的模型进行“惩罚”。

       对于神经网络模型, 正则化即在其代价函数中添加 正则项:

                                  

其中, 。之后再求解优化问题 即可。

       假设某三层神经网络存在过拟合问题,采用dropout正则化会遍历网络的每一层,并设置消除该层中每一个节点的概率(比如0.5),最后得到一个节点更少、规模更小的网络,然后再用反向传播方法进行训练,就能有效防止过拟合。

       最常用的方法是 inverted dropout(反向随机失活) 。对于一个三层神经网络( ),以第三层为例,实施dropout的步骤如下:

① 定义一个三层dropout矩阵d3:

                                     d3=numpy.random.rand(a3.shape[0],a3.shape[1])

其中,a3表示神经网络第三层的激活函数矩阵。

② 设置 ( )的大小。 表示保留某个隐藏单元的概率。将第①步产生的随机矩阵d3的每个元素与 进行比较,小于置1,大于置0,得到新的d3矩阵(1表示保留该节点,0表示删除该节点)。

③ 将a3与新的d3矩阵相乘(矩阵对应元素相乘),得到新的激活函数矩阵:

                                                       a3 =np.multiply(a3,d3)

④ 将新的a3矩阵除以keep-prob:

                                                              a3 /= keep_prob

目的是保证a3的期望值(均值)不变,从而保证第三层的输出不变。

① 使用dropout可以使得部分节点失活,可以起到简化神经网络结构的作用,从而起到正则化的作用。

② 因为dropout是使得神经网络的节点随机失活,这样会让神经网络在训练的时候不会使得某一个节点权重过大。因为该节点输入的特征可能会被清除,所以神经网络的节点不能依赖任何输入的特征。dropout最终会产生收缩权重的平方范数的效果,来压缩权重,达到类似于 正则化的效果。

① dropout在测试阶段不需要使用,因为如果在测试阶段使用dropout可能会导致预测值产生随机变化(因为dropout使节点随机失活)。而且,在训练阶段已经将权重参数除以keep-prob来保证输出的期望值不变,所以在测试阶段没必要再使用dropout。

② 神经网络的不同层在使用dropout的时候,keep-prob可以不同。因为可能有的层参数比较多,比较复杂,keep-prob可以小一些,而对于结构比较简单的层,keep-prob的值可以大一些甚至为1,keep-prob等于1表示不使用dropout,即该层的所有节点都保留。

      加快训练速度。

       对于一个神经网络模型,考虑其代价函数:

                                               

       如果未归一化输入,其代价函数的形状会较为细长狭窄。在这样的代价函数的限制下,为避免陷入局部最优解,梯度下降法的学习率必须设置得非常小。

       如果归一化输入,代价函数便呈现球形轮廓。这种情况下,不论从哪个位置开始梯度下降法,都能使用较大的学习率,从而更快速、直接地找到全局最优解。

      对于包含n个特征的m个样本的数据集,其输入归一化的过程主要分为两步:

① 零均值化

                                                             

                                                            

② 归一化方差

                                                           

                                                              

其中, 代表第 个样本的特征矩阵。

       训练集、验证集、测试集特征矩阵的平均值 和标准差 要保持一致,确保它们归一化后符合同一分布。

B. 卷积神经网络(CNN)基础

在七月初七情人节,牛郎织女相见的一天,我终于学习了CNN(来自CS231n),感觉感触良多,所以赶快记下来,别忘了,最后祝大家情人节快乐5555555.正题开始!

CNN一共有卷积层(CONV)、ReLU层(ReLU)、池化层(Pooling)、全连接层(FC(Full Connection))下面是各个层的详细解释。

卷积,尤其是图像的卷积,需要一个滤波器,用滤波器对整个图像进行遍历,我们假设有一个32*32*3的原始图像A,滤波器的尺寸为5*5*3,用w表示,滤波器中的数据就是CNN的参数的一部分,那么在使用滤波器w对A进行滤波的话,可以用下面的式子表示:

其中x为原始图像的5*5*3的一部分,b是偏置项置为1。在对A进行滤波之后,产生的是一个28*28*1的数据。那么假设我们存在6个滤波器,这六个滤波器之间彼此是独立的,也就是他们内部的数据是不同的且没有相关性的。可以理解为一个滤波器查找整幅图像的垂直边缘,一个查找水平边缘,一个查找红色,一个查找黑色这样。那么我就可以产生6个28*28*1的数据,将它们组合到一起就可以产生28*28*6的数据,这就是卷积层主要做的工作。

CNN可以看作一系列的卷积层和ReLU层对原始数据结构进行处理的神经网络,处理的过程可以用下面这幅图表示

特别要注意的是滤波器的深度一定要与上一层传来的数据的深度相同,就像上图的第二个卷积层在处理传来的28*28*6的数据时要使用5*5*6的滤波器.

滤波器在图像上不断移动对图像滤波,自然存在步长的问题,在上面我们举的例子都是步长为1的情况,如果步长为3的话,32*32*3的图像经过5*5*3的滤波器卷积得到的大小是(32-5)/3+1=10, 注:步长不能为2因为(32-5)/2+1=14.5是小数。

所以当图像大小是N,滤波器尺寸为F时,步长S,那么卷积后大小为(N-F)/S+1

我们从上面的图中可以看到图像的长和宽在逐渐的减小,在经过超过5层之后极可能只剩下1*1的空间尺度,这样是十分不好的,而且也不利于我们接下来的计算,所以我们想让卷积层处理完之后图像在空间尺度上大小不变,所以我们引入了pad the border的操作。pad其实就是在图像周围补0,扩大图像的尺寸,使得卷积后图像大小不变。在CNN中,主要存在4个超参数,滤波器个数K,滤波器大小F,pad大小P和步长S,其中P是整数,当P=1时,对原始数据的操作如图所示:

那么在pad操作后卷积后的图像大小为:(N-F+2*P)/S+1
而要想让卷积层处理后图像空间尺度不变,P的值可以设为P=(F-1)/2

卷积层输入W 1 *H 1 *D 1 大小的数据,输出W 2 *H 2 *D 2 的数据,此时的卷积层共有4个超参数:
K:滤波器个数
P:pad属性值
S:滤波器每次移动的步长
F:滤波器尺寸
此时输出的大小可以用输入和超参计算得到:
W 2 =(W 1 -F+2P)/S+1
H 2 =(H 1 -F+2P)/S+1
D 2 =D 1

1*1的滤波器也是有意义的,它在深度方向做卷积,例如1*1*64的滤波器对56*56*64的数据卷积得到56*56的数据

F通常是奇数,这样可以综合考虑上下左右四个方向的数据。

卷积层从神经元的角度看待可以有两个性质: 参数共享和局域连接 。对待一个滤波器,例如5*5*3的一个滤波器,对32*32*3的数据卷积得到28*28的数据,可以看作存在28*28个神经元,每个对原图像5*5*3的区域进行计算,这28*28个神经元由于使用同一个滤波器,所以参数相同,我们称这一特性为 参数共享

针对不同的滤波器,我们可以看到他们会看到同一区域的图像,相当于在深度方向存在多个神经元,他们看着相同区域叫做 局域连接

参数共享减少了参数的数量,防止了过拟合
局域连接为查找不同特征更丰富的表现图像提供了可能。
卷积就像是对原图像的另一种表达。

激活函数,对于每一个维度经过ReLU函数输出即可。不改变数据的空间尺度。

通过pad操作,输出图像在控件上并没有变化,但是深度发生了变化,越来越庞大的数据给计算带来了困难,也出现了冗余的特征,所以需要进行池化操作,池化不改变深度,只改变长宽,主要有最大值和均值两种方法,一般的池化滤波器大小F为2步长为2,对于最大值池化可以用下面的图像清晰的表示:

卷积层输入W 1 *H 1 *D 1 大小的数据,输出W 2 *H 2 *D 2 的数据,此时的卷积层共有2个超参数:
S:滤波器每次移动的步长
F:滤波器尺寸
此时输出的大小可以用输入和超参计算得到:
W 2 =(W 1 -F)/S+1
H 2 =(H 1 -F)/S+1
D 2 =D 1

将最后一层(CONV、ReLU或Pool)处理后的数据输入全连接层,对于W 2 *H 2 *D 2 数据,我们将其展成1*1*W 2 *H 2 *D 2 大小的数据,输入层共有W 2 *H 2 *D 2 个神经元,最后根据问题确定输出层的规模,输出层可以用softmax表示。也就是说,全连接层就是一个常见的BP神经网络。而这个网络也是参数最多的部分,是接下来想要去掉的部分。完整的神经网络可以用下面的图表示:

[(CONV-ReLU)*N-POOL?]*M-(FC-RELU)*K,SoftMax

1.更小的滤波器与更深的网络
2.只有CONV层而去掉池化与全链接

最早的CNN,用于识别邮编,结构为:
CONV-POOL-CONV-POOL-CONV-FC
滤波器大小5*5,步长为1,池化层2*2,步长为2

2012年由于GPU技术所限,原始AlexNet为两个GPU分开计算,这里介绍合起来的结构。

输入图像为227*227*3

1.首次使用ReLU
2.使用Norm layers,现在已经抛弃,因为效果不大
3.数据经过预处理(例如大小变化,颜色变化等)
4.失活比率0.5
5.batch size 128
6.SGD Momentum 参数0.9(SGD和Momentum见我的其他文章)
7.学习速率 0.01,准确率不在提升时减少10倍,1-2次后达到收敛
8.L2权重减少0.0005
9.错误率15.4%

改进自AlexNet,主要改变:
1.CONV1的滤波器从11*11步长S=4改为7*7步长为2.
2.CONV3,4,5滤波器数量有384,384,256改为512,1024,512(滤波器数量为2的n次幂有利于计算机计算可以提高效率)
错误率:14.8%后继续改进至11.2%

当前最好的最易用的CNN网络,所有卷积层滤波器的大小均为3*3,步长为1,pad=1,池化层为2*2的最大值池化,S=2。

主要参数来自全连接层,这也是想要去掉FC的原因。

具有高度的统一性和线性的组合,易于理解,十分方便有VGG-16,VGG-19等多种结构。
错误率7.3%

完全移除FC层,参数只有500万,使用Inception模块(不太理解,有时间继续看)
准确率6.67%

准确率3.6%
拥有极深的网络结构,且越深准确率越高。是传统CNN不具备的特点,传统CNN并非越深越准确。需要训练时间较长但是快于VGG

1.每个卷积层使用Batch Normalization
2.Xavier/2初始化
3.SGD+Momentum(0.9)
4.Learning rate:0.1,准确率不变减小10倍(因为Batch Normalization所以比AlexNet大)
5.mini-batch size 256
6.Weight decay of 0.00001
7.不适用失活(因为Batch Normalization)

具体的梯度过程学完ResNet再说吧。

C. 机器学习的超参数是什么

机器学习的超参数是什么
自从接触了机器学习后,在很多地方如书籍和文献中经常会看到有一类参数叫超参数(hyperparameter),其中提超参数最多的地方是在支持向量机(SVM)和深度学习(Deep Learning)中,比如支持向量机中的松弛因子:

上式中的C就是松弛因子,这个参数在支持向量机中不像参数W那样,可以通过优化学习得到。还有深度学习中的超参数,如学习率(Learning Rate),在训练深度网络时,这个学习率参数需要提前指定,比如最近设为0.09等。
那么问题来了,到底什么是超参数(hyperparameter)?在很多教材和文献中都是默认你理解超参数的定义的。如果不知道超参数的定义的话,有些文献中的话可能不好理解,比如在机器学习中,尤其是在支持向量机中,为什么有些文献要把数据集分割成训练集,验证集和测试集,而不是直接分割为训练集和测试集?只有理解了何谓超参数,才会明白某些文献中这样分割的道理。
什么是超参数呢?先来看一下超参数的学院风定义:在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,需要对超参数进行优化,给学习机选择一组最优超参数,以提高学习的性能和效果。
超参数的通俗定义:超参数也是一种参数,它具有参数的特性,比如未知,也就是它不是一个已知常量。一种手工可配置的设置,需要为它根据已有或现有的经验指定“正确”的值,也就是人为为它设定一个值,它不是通过系统学习得到的。
下面主要看看超参数在机器学习中的定义及示例:
在机器学习的上下文中,超参数是在开始学习过程之前设置值的参数。 相反,其他参数的值通过训练得出。
超参数:
1. 定义关于模型的更高层次的概念,如复杂性或学习能力。
2. 不能直接从标准模型培训过程中的数据中学习,需要预先定义。
3. 可以通过设置不同的值,训练不同的模型和选择更好的测试值来决定
超参数的一些示例:
1. 树的数量或树的深度
2. 矩阵分解中潜在因素的数量
3. 学习率(多种模式)
4. 深层神经网络隐藏层数
5. k均值聚类中的簇数

D. 深层神经网络

如上图所示,逻辑回归是一个浅层模型,可以理解为是单层神经网络。深层或浅层是一个程度的问题。如果将逻辑回归模型加入一个隐藏层就变了一个双层神经网络,但还是比较浅的。如果加入 5 个隐藏层,则可以说是一个深层模型。通常可以把隐藏层数当作超参数,然后在交叉验证数据集上进行评估,从而选择合适的深度。

上图是一个 4 层的神经网络,包括三个隐藏层和一个输出层,隐藏层的单元数分别是 5 5 3,输出层只有一个单元。通常用 L 表示神经网络的层数,用 表示第 层的单元数,可以把输入层当作第 0 层孙雹。那么图中 L = 4, , , , , 。可以用 表示第 层的激活值,即 ,用 和 表示在 公式中计算 值的权重,即 。输入用 X 表示,X 也是第 0 层,所以 ,最后一层 ,也就是说 即为神经网络的预测值(输出值)。

假设有一个样本 x,那么:

第一层计算: ,其中 x 也可以表示为 , w 和 b 是会影响第 1 层的激活单元的参数,接下来计算: ,后面几层的计算也是如此。

第二层计算: ,

第三层计算: ,

第四层计算: ,

可以总结出,计算规律为:

前向传播的向量化计算:

输入 X 即 ,是将 m 个样本横向堆叠构成的矩阵,前向传播需要一层一层来迭代计算,所以需要用 for 循环从第 1 层迭代计算到第 L 层,深层神经网络只是比浅层神经网络有更多层的迭代计算。

在上图的神经网络中,除去输入层一共有 5 层,其中 4 个隐藏层,一个输出层。第 1 个隐藏层有 3 个隐藏单元,可以表示为 , 是第 1 个隐藏层的激活函数向量,是一个 3 x 1 的列向量,x 有两个输入特征,所以 x 是 2 x 1 的列向量。在第一层的计算中: ,如果忽略偏置项 , 。 乘以一个 2 x 1 的列向量 x,需要等于一个 3 x 1 的列向量,那么 必须是一个 3 x 2 的矩阵,即 的矩阵。 的结果是一个 3 x 1 的向量, 也搜歼是一个 3 x1 的向量,所以结果 也是一个 3 x 1 的向量。可以发现, 必须是 维的矩阵, 必须是 维的列向量,所以 的维数是 5 x 3,即 , 的维数是 5 x 1,即 x 1,所以在第二层的计算中: ,5 x 3 的矩阵 乘以 3 x 1 的列向量 等于一个 5 x 1 的列向量,再加上一个 5 x 1 的偏置项 ,结果 是一个 5 x 1 的列向量。以此类推, 的维数是 4 x 5, 的维数是 2 x 4, 的维数是 1 x 2。

前面证实了, 必须是 维的矩阵, 必须是 维的列向量。而且,在反向传播中, 和 的维度相同, 和 的维度相同。又因为 ,所以 和 的维度也相同,都是 。

以上是神经网络中单个样本的计算,其中 x 表示单个样本,通常为了加速运算,需要将 m 个样本进行向量化计算,可以用 X 表示 m 个样本,第一个隐藏层的向量化计算公式即为: ,其中 还是 维, X 变为 维, 的结果是 的矩阵, 的维度还是 ,但当一个 的矩阵和 相加时,Python会通过广播将 复制成为 的矩阵,然后两个矩阵逐个元素相加。所以 的维度变为 ,即 3 x m。 表示每一个单独的 横向叠加构成的行向量,即 。

单个样本时, 和 的维世凯冲度相同,都是 ,m 个样本时, 和 的维度相同,都是 ,当 等于 0 时, 等于 ,其中 是 x 的输入特征数。反向传播时,dZ、dA 和 Z、A 的维度相同。

从直觉上可以把深度神经网络的前几层当做探测简单的函数,也就是学习一些低层次的简单特征,之后把它们和后几层结合在一起,也就是把简单的特征结合起来,那么总体上就能学习更多复杂的函数,也就是去探测更复杂的东西。可以把深度学习神经网络和人类大脑做类比,人的大脑也是先探测简单的东西,然后组合起来才能探测复杂的物体。

神经网络为何有效的理论来源于电路理论,它和能够用电路元件计算哪些函数有着分不开的联系,根据不同的基本逻辑门(与,或,非),在非正式情况下,这些函数都可以用相对较小(指隐藏单元数量)但很深的神经网络来计算 ,如果用浅层神经网络则需要指数增长的隐藏单元数量才能达到同样的效果。

上图是一个 4 层的神经网络,梯度下降的一个迭代过程即为前向传播和反向传播的计算过程,如下图所示:

在前向传播计算中,从第 1 层开始,第 层的输入为上一层(第 层)的激活函数计算结果 和当前层的参数 ,输出为当前层激活函数计算结果 ,还要缓存 和 以供反向传播使用, 则输入到下一层(第 层),计算过程如下:

向量化计算为:

当计算完所有层的前向传播后,第 L 层的激活函数计算结果 即当前样本的预测值。接下来将进行反向传播计算,从第 L 层开始,第 层的输入为当前层激活函数计算结果的导数值 和当前层的参数 ,输出为上一层(第 层)激活函数计算结果的导数值 ,以及当前层参数的导数值 ,计算过程如下:

首先

由 可知 ,将 da 带入可求得:

向量化计算为:
首先

在每一层中根据梯度下降公式,更新参数:

这就是神经网络中梯度下降一个迭代的计算过程。

神经网络中的参数包括: W 和 b。超参数包括:学习率 ,梯度下降迭代次数(iterations),隐层数(L),隐藏单元数(units),激活函数(activefunction),因为这些参数是在某种程度上决定了参数 W 和 b 的参数,所以叫做超参数。其他超参数包括:momentum,batch size,正则化参数等

可以通过尝试不同的超参数,观察代价函数曲线变化,从而选择表现最好的超参数。

没有。

https://mooc.study.163.com/smartSpec/detail/1001319001.htm

E. 神经网络超参数选择

深度学习模型通常由随机梯度下降算法进行训练。随机梯度下降算法有许多变形:例如 Adam、RMSProp、Adagrad 等等。这些算法都需要你设置学习率。学习率决定了在一个小批量(mini-batch)中权重在梯度方向要移动多远。

如果学习率很低,训练会变得更加可靠,但是优化会耗费较长的时间,因为朝向损失函数最小值的每个步长很小。
如果学习率很高,训练可能根本不会收敛,损失函数一直处于波动中,甚至会发散。权重的改变量可能非常大,使得优化越过最小值,使得损失函数变得更糟。

训练应当从相对较大的学习率开始。这是因为在开始时,初始的随机权重远离最优值。在训练过程中,学习率应当下降,以允许细粒度的权重更新。

参考: https://www.jiqixin.com/articles/2017-11-17-2

批次大小是每一次训练神经网络送入模型的样本数。在 合理的范围之内 ,越大的 batch size 使下降方向越准确,震荡越小,通常取值为[16,32,64,128]。

Batch_Size=全部数据集 缺点:
1) 随着数据集的海量增长和内存限制,一次性载入所有的数据进来变得越来越不可行。
2) 以 Rprop 的方式迭代,会由于各个 Batch 之间的采样差异性,各次梯度修正值相互抵消,无法修正。
Batch_Size = 1 缺点:
使用在线学习,每次修正方向以各自样本的梯度方向修正,横冲直撞各自为政,难以达到收敛。

在合理范围内,增大 Batch_Size 有何好处?
1) 内存利用率提高了,大矩阵乘法的并行化效率提高。
2) 跑完一次 epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
3) 在一定范围内,一般来说 Batch_Size 越大,其确定的下降方向越准,引起训练震荡越小。

盲目增大 Batch_Size 有何坏处?
1) 内存利用率提高了,但是内存容量可能撑不住了。
2) 跑完一次 epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显得更加缓慢。
3) Batch_Size 增大到一定程度,其确定的下降方向已经基本不再变化。

参考: https://blog.csdn.net/juronghui/article/details/78612653

迭代次数是指整个训练集输入到神经网络进行训练的次数,当测试错误率和训练错误率相差较小,且测试准确率趋于稳定时(达到最优),可认为当前迭代次数合适;当测试错误率先变小后变大时则说明迭代次数过大了,需要减小迭代次数,否则容易出现过拟合。

用激活函数给神经网络加入一些非线性因素,使得网络可以更好地解决较为复杂的问题。参考: https://blog.csdn.net/tyhj_sf/article/details/79932893

它能够把输入的连续实值变换为0和1之间的输出。
缺点:
1) 在深度神经网络中梯度反向传递时导致梯度爆炸和梯度消失,其中梯度爆炸发生的概率非常小,而梯度消失发生的概率比较大。
2) Sigmoid 的 output 不是0均值,使得收敛缓慢。batch的输入能缓解这个问题。

它解决了Sigmoid函数的不是zero-centered输出问题,然而梯度消失的问题和幂运算的问题仍然存在。
tanh函数具有中心对称性,适合于有对称性的二分类

虽然简单,但却是近几年的重要成果,有以下几大优点:
1) 解决了梯度消散问题 (在正区间)
2)计算速度非常快,只需要判断输入是否大于0
3)收敛速度远快于sigmoid和tanh
ReLU也有几个需要特别注意的问题:
1)ReLU的输出不是zero-centered
2)Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,这种情况比较少见 (2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。

为了解决Dead ReLU Problem,提出了将ReLU的前半段设为 αx 而非 0 ,如 PReLU 。

1)深度学习往往需要大量时间来处理大量数据,模型的收敛速度是尤为重要的。所以,总体上来讲,训练深度学习网络尽量使用zero-centered数据 (可以经过数据预处理实现) 和zero-centered输出。所以要尽量选择输出具有zero-centered特点的激活函数以加快模型的收敛速度。
2)如果使用 ReLU,那么一定要小心设置 learning rate,而且要注意不要让网络出现很多 “dead” 神经元,如果这个问题不好解决,那么可以试试 Leaky ReLU、PReLU 或者 Maxout.
3)最好不要用 sigmoid,你可以试试 tanh,不过可以预期它的效果会比不上 ReLU 和 Maxout.

公式: https://www.cnblogs.com/xiaobingqianrui/p/10756046.html
优化器比较: https://blog.csdn.net/weixin_40170902/article/details/80092628

F. 神经网络中自适应的梯度下降优化算法(二)

Adagrad算法可以针对不同的参数自适应的采用不同的更新频率,对低频出现的特征采用低的更新率,对高频出现的特征采用高的更新率,因此,对于稀疏的数据它表现的很好,很好的提升了SGD的鲁棒性,在Google的通过Youtube视频识别猫的神经网络训练中有很好的表现。

梯度更新规则:

g(t,i)表示在t时刻目标函数对θ(i)的偏导数。SGD的每个参数的更新过程如下:

Adagrad的每个参数更新过程如下:

G(t)是一个对角矩阵,对角线上的每个元素是t时刻前所有θ(i)的梯度的平方和。ε通常取值在1e-8量级,它的存在是为了避免除数为0。一个有趣的现象是,如果没有平方根操作,算法的表现就非常糟糕。

Adagrad的主要缺点是,它的分母是平方梯度的累积,它的值会一直增加,最终导致学习率衰减到非常小,从而使得学习算法无法进行下去。

TensorFlow实现:

tf.train.AdagradOptimizer(learning_rate, initial_accumulator_value=0.1, use_locking=False, name='Adagrad')

Adadelta算法主要解决Adagrad的缺陷,它不再累加过去所有的梯度,而是仅累积过去固定个数的梯度。

Adadelta不是采用平方梯度的简单累加,而是采用 历史 平方梯度的衰减的平均。

γ通常等于0.9

分母相当于梯度的均方根(root mean squared, RMS),即将所有值平方求和,求其均值,再开平方,就得到均方根值。

梯度更新规则:

将学习率η设置为

,我们就不需要提前设定学习率。

RMSprop是Geoff Hinton提出的一种自适应学习率的方法,它与Adadelta方法都是为了解决Adagrad学习率急剧下降问题的。它与Adadelta方法是一致的。

梯度更新规则

超参数设定值:

Hinton建议设定γ=0.9, 学习率η=0.001。

TensorFlow实现:

tf.train.RMSPropOptimizer.__init__(learning_rate, decay, momentum=0.0, epsilon=1e-10, use_locking=False, name='RMSProp')

Adam也是对不同的参数自适应设置不同的学习率。它对 历史 梯度和 历史 平方梯度同时采用指数梯度衰减(exponentially decaying average)。

梯度更新规则

Adam作者观察到,如果m(t)和v(t)初始化为零向量,并且衰减率很小时(比如β1和β2都非常接近于1时),在开始的迭代中,m(t)和v(t)总是向零偏移,所以需要做偏移校正。

然后用校正后的值进行梯度更新:

Adam作者建议β1=0.9,β2=0.999,ε=10^{-8}

,在实践中,Adam比其它算法的效果要好。

TensorFlow实现:

tf.train.AdamOptimizer(learning_rate=0.001, beta1=0.9, beta2=0.999, epsilon=1e-08, use_locking=False, name='Adam')

Adam更新规则中的梯度缩放与 历史 梯度的L2范数成反比。

我们可以把这个规则泛化到Lp范数。

当p值增大的时候,Lp的值往往会变得不稳定,所以在实践中L1和L2使用的比较普遍。但是Adamax作者发现L∞可以收敛到一个稳定值。

然后我们可以采用u(t)代替

来更新Adam中的梯度。

同时u(t)不需要做零偏校正。默认取值建议:

G. 怎么选取训练神经网络时的Batch size

选取训练神经网络时先选好batch size,再调其他的超参数。并且实践上来说,就两个原则——batch size别太小,也别太大,其他都行。

因为合适的batch size范围和训练数据规模、神经网络层数、单元数都没有显着的关系。合适的batch size范围主要和收敛速度、随机梯度噪音有关。

为什么batch size别太小。别太小的限制在于,batch size太小,会来不及收敛。

所以batch size下限主要受收敛的影响。所以在常见的setting(~100 epochs),batch size一般不会低于16。如果你要选更小的batch size,你需要给自己找到很好的理由。

为什么batch size别太大:

batch size别太大的限制在于两个点。

1、batch size太大,memory容易不够用。这个很显然,就不多说了。

2、batch size太大,深度学习的优化training loss降不下去和泛化generalization gap都会出问题。

随机梯度噪音的magnitude在深度学习的continuous-time dynamics里是正比于learning rate/batch size。batch size太大,噪音就太小了。

而大家已经知道,随机梯度噪音对于逃离saddle points[2]和sharp minima [3]都必不可少的作用。前者可以解释为什么优化出问题,后者则可以解释为什么泛化出问题。



阅读全文

与神经网络超参数是多少相关的资料

热点内容
悦盒连接无线网络 浏览:168
中国电信改移动网络 浏览:289
如果网线没接好网络会出什么问题 浏览:591
疫情期间网络异常活跃 浏览:844
网络打车平台投诉找哪个部门 浏览:683
抢单软件显示网络异常是咋回事 浏览:788
网络分析仪测量相位校准设置 浏览:256
mp3电脑传歌需要网络吗 浏览:31
不能拉黑的网络电话哪个好 浏览:265
周口下楼无线网络管理中心 浏览:697
网络欺诈金额多少钱才能立案 浏览:746
如何做一张网络虚拟电话卡 浏览:46
如何打开共享网络搜索 浏览:30
如何看待网络的普及和危害 浏览:538
苹果xr玩游戏网络卡顿 浏览:369
邢台淘宝网络运营电话多少 浏览:541
手机的网络经常断开 浏览:576
黑鲨手机wifi网络连接受限 浏览:364
怎么查看同一网络下的其他电脑 浏览:73
网络核相仪公司有哪些 浏览:180

友情链接