最后更新:2022-07-22 14:34:05 手机定位技术交流文章
将数据分成训练、验证和测试组,可以减少确定超参数的迭代过程。
数据可以分为100到100个数据样本7:3 =训练组:验证组或60:20:20 = 训练:验证:测试
但是,在大型数据时代,样品数量可以达到一百万,因此,验证和测试组的比重在总数据中 tends to be smaller。 验证组是选择最佳模型,测试组是评价模型,也许少量数据样品足够
假设你正在开发一个包含猫的图像的网站,测试集是一个在线下载的小猫图像,测试集和验证集是用户上传的图像。
互联网上的图片在后期处理,非常漂亮;而用户上传的图片是手工制作的。 因此,训练组和测试组有不同的数据(不是相同的分布)。
针对这种情况,确保验证和测试数据来自相同的分布机器学习在同样的分布下学习得更快。
可能没有测试集,但测试集只是模型的公正估计。 训练集的适当参数和验证集迭代可以选择适当模型。
第一种情况:
使用逻辑回归来划分图数据,显而易见的效果并不很好;欠拟合问题,即高偏差
第二种情况:
使用一个相当复杂的模型来描述分类问题,如下图所示;每个样品完全分开并搜索过拟合问题,高方差。
高偏差(high bias):
越小,就越好最佳模型的距离
.
高方差(high variance):
规模越小,模型的通用性就越好
例如,猫的分类问题是,如果图中有一个猫,它输出y=1,否则y=0。
当训练集误差为1%,验证集误差为11%;可以看出训练集的效果比较好,而验证集效果较差。问题是我们可能过度的拟合了训练集,称之为高方差(high variance),即泛化能力差。
当训练集误差为15%,验证集误差为16%;可以看出训练集和验证集效果较差。可能存在模型欠拟合问题,没有很好的拟合训练集数据,称之为高偏差(high bias)。
当训练集误差为15%,验证集误差为30%;验证集比训练集误差要高很多,这种情况会认为是算法偏差高,因为在训练集上不理想,验证集上也不理想。
当训练组误差为0时,验证组误差为1%;验证组和测试组的结果良好,模型偏差和方程非常低。
例如,在下面所示的紫边界线中,高偏差是因为它几乎是线性分类器,并不能与数据相匹配;高偏差是因为它有些样品是过度匹配的。
对高方程问题的第一个解决方法可能是规范化;另一个解决方法是编写更多的数据,这也是一个非常可靠的方法,但可能不能编写足够的数据或获得更多的数据以高成本,所以规范化是一个很好的选择。


图中的λ是一个正規化参数,通常使用验证集或交叉验证来配置。
python中lambda是关键字,一般使用lambd代替
对逆传播过程的修正:

最直观的理解是,当神经节点的数量太大时,神经网络变得过于复杂,从而过度适应训练组的样品,导致过度适应。当λ设置的足够大,权重矩阵W被设置为接近于0的值,从而使神经网络中的部分节点失效,降低模型复杂度减少过拟合然而,如果 λ 太大,模型可能变得太简单,导致高偏差的状态。
一些节点的正常化失败并不会导致它们消失,而是通过减少w来减少它们的影响。
如果我们使用的激活函数是坦赫:
当λ过大,w[l]就变的很小,而z[l]= w[l]a[l-1]+b[l],因此z变得非常小,然后使用激活函数的范围将压缩到上面图片的红色部分,这个部分类似于线性函数;而当我们的神经节点激活函数使用线性函数时,所以整个网络是一个线性函数,最后,我们只能计算线性函数,因此, 不会 发生 重叠 。
假设我们正在训练下面的神经网络,并且存在一个重构问题。
dropout将穿过网络的每个层并设置神经网络中消除节点的概率。
例如,每个网层中的每个节点的概率是通过投掷一枚硬币来设置的,每个节点被保留和消除的概率是零。
最后,我们消除了一些节点,然后删除进入节点的连接,最后得到较小的节点,较小的网络。
dropout 的 实施 :
例如,一个三层神经网络首先定义d3为第三层脱落向量,如下图所示:
keepprob是一个特定的数目,表示保留隐藏单元的可能性。在前面的例子中,它是0.5,在这个例子中设置为0,上述d3矩阵的值是一个逻辑表达式,矩阵中的随机数小于0。 八到一,否则 0, 使得 d3 矩阵中的 1 的分布为 80% 。
最后a3的输出是 a3=a3*d3点乘法的函数是在d3中筛选所有等于0的元素。
接下来可以将a3除柜子外,为什么?
如下文所示,我们的期望是[3]减少20%,即[3]其中20%的元素是零的,以避免影响z[4]我们需要使用预期值[4]a[3]除了零,它会解决我们所需要的20%。
除脱落外理解:(在原 shot中感觉很好)
也就是说,要削弱某些单位,同时加强其他单位的影响
dropout的不同的训练样本对于不同的 dropout矩阵不同,即不同的训练样本消除隐藏的单元。 例如,如果第三层有50个单元,d3的尺寸是50*m
不要在测试期间使用退出函数因为在测试阶段,你不想输出是随机的。确保在测试中不执行排斥,以调整数值范围激活函数的预期结果不会改变。不愿给任何输入添加太多的重量,因为它可能被随机清除节点将以这种方式传递重量,并增加一个重量给输入。 通过扩散所有权重量, dropout将产生L的收缩重量2模型效果[脱落函数与L相似2正则化】在实施退学时,每个模板的层可以不同;如果你担心一个层会更大程度上重叠,Keepprob设置可能较低;如果匹配问题不考虑,Keepprob可以设置为1。对于输入层,keepprob=1是常见的输入值,或者使用更大的0.9值。


一种在训练神经网络的过程中加快培训的方法是整合输入。
归一化方式:(输入-等价)/标准偏差
s:标准差
s2:方差
分类的目的是使特征的范围不相异,以二维数据为例子,如图所示:
左边是非标准的,数据分布范围非常不同,把下降回归想象成小球落下,就是这个狭窄的山谷小球落下很长时间。 右边是标准的,数据分布均匀,像半圆一样,从它开始落下的地方,球很快到达山谷底部。
假设我们训练了该图的神经网络,并把激活函数设置为线性激活函数,而b为0,以简化。
最后y=W[l]W[l-1]W[l-2]……W[2]W[1]X
结论:深层神经网络的激活功能随W重量略高于1而爆炸性增加,而深层神经网络的激活功能随W重量略低于1而指数下降。
以逻辑回归为例,简化了忽略b的讨论。
为了避免z太大或太小,我们需要w当n特别大时i能够小,需要将wi这个设置不是比1大得多,也不是比1小得多。
Xaviar初始化:将wi的变量设置为1/n(n表示前一层神经节点的个数),神经结点是tanh激活函数可以使用这个方法;大致代码如下:np.random().randn()随机出来的数服从标准正态分布,即期望等于0,方差等于1。
方差为σ2的群数乘以a,而群差数变为a2*σ2所以上面的代码乘以根数
wi的方程设置为2/n,代码如下变量为2(n[l-1]+n[l]),代码如下在神经网络中进行反向传播时,为了确保反向传播的梯度的正确性,会进行梯度检验以确保反向传播细节的正确性。
近似梯度数的方法:


双边精度比单变量精度高,接近实际值的结果更准确。在进行梯度测试时使用更准确的双边误差。
梯度检验用于检验backdrop(反向传播)的实施是否正确
首先,参数组合成一个大的参数 θ 和 dθ :
下一个需要讨论的问题是: dθ与成本函数J的坡度之间的关系是什么
梯度检测:
对于每个参数θi梯子从 dθ 得到在横向计算中approx,看dθapprox是否约等于dθ
如何定义两个向量是否接近?一般做下列操作:
上图的||x||2欧洲距离. ε的值可能是10-7在执行上述操作时,该操作的结果为10-7或者更小,这很好,这意味着导数近似可能是正确的。
若它的值在10-5范围,然后小心,也许这个值是好的,但您应该检查这个向量的所有项目,以确保没有太大的错误,如果有一个太大的错误,那么这里可能有错误。
如果你不随机掉下来或者不按某种模式掉下来,你可以检查梯度,但吴先生不会这么做
本文由 在线网速测试 整理编辑,转载请注明出处。