导航:首页 > 网络安全 > 训练时如何优化网络

训练时如何优化网络

发布时间:2022-12-31 19:09:48

如何优化Wi-Fi无线网络环境 提升速率

一、摆放好路由器的位置
路由器的位置以及如何摆放,是最基础的,也是最容易忽视的实现高效无线网络的手段。大多数人将路由器放随意放置在第一个不占用房间地盘的位置上,这是个重大的错误。
你可以把无线路由器想象成球体的中心,网络连接从它的天线向各个方向延伸。我的建议是将4G路由器尽可能近地摆放在必须覆盖到的住宅或办公室的物理中心。从建筑平面图或草图入手,画出来自各个角落的对角线来确定中心位置。
当然,一些人不能采用这个建议。也许建筑的中心有堵石墙或砖砌的烟囱,或者网线从可能最糟的位置引入建筑。如果出于某种原因,你不能把天线放置在理想的中央位置的话,请不要失望,后面我们还会介绍其他的解决办法。
现在,请到处看看,为路由器找个好家。避开角落(尤其在老房子中)是第一步,因为角落会在信号穿过时减弱信号。此外,也不要把路由器放在壁橱中,书柜或娱乐中心是不显眼地放置路由器的好地方。
无线路由器需要交流电源插座和与你的有线电缆或DSL数据源的连接。而如果建筑的DSL或有线电缆调制解调器线路处在一个不方便的位置,请不要惊慌,你可以使用定向天线(下次的连载文章我们会提到),或者延长你的DSL和有线电缆线路。
如果你选择了后者,就会发现为使你的路由器可以摆放在正确的地方而穿墙破壁铺设线路是个费力且费钱的工程,并且会造成破坏。作为另一种选择,可以考虑使用细同轴电缆或以太网线缆,这类包裹在胶带中的线缆可以很容易地插入墙壁。
在将线缆引到所需要的位置后,涂上一层薄薄的粘合剂或石膏,然后再涂上颜料,它将成为你的小秘密。
二、设置好路由器的QoS
大多数售出的无线路由器都具有“QoS”功能,但是你可能还是希望能够更新路由器的固件来解决问题。就拿一台才茂CM8565R4G路由器来举例吧,如果想优化无线网络性能,我们可以通过配置程序做一些改变。
首先确定你的设备是支持“WMM”(Wi-Fi多媒体)的,如果支持支持“WMM”,你就可以在“应用和游戏”的选项当中找到QoS的菜单。
然后,将“Internet Access Priority”(互联网接入优先权)配置到你的语音和多媒体应用上。然后在下拉菜单的各个具体应用上进行选择,可以选择优先等级(高、中、普通或者低),再点击“添加”按钮。
比如你可以设置成给“BitTorrent”和其他下载服务一个较低的优先级,同时给你的“VoIP”服务一个较高的优先级,合理分配网络带宽,提高无线网络性能。
说到“WMM”,它其实是IEEE 802.11e标准的一个子集,后者定义了Wi-Fi的服务品质(QoS)。如果没有QoS,所有运行于不同设备的应用程序都拥有相同的传输数据帧的机会。
对于来自 web 浏览器、文件传输或电子邮件等应用程序的数据流量来说,这种方式运行得很好,但对于多媒体应用程序而言,这种方式就力不从心了。VoIP、视频流和互动游戏对延迟时间的增加和吞吐量的降低都高度敏感,WMM缩短了流量优先级高的数据包的传输时间。
目前,支持Wi-Fi功能的VoIP电话、电视机、游戏机等消费电子产品中,有越来越多的产品都支持WMM功能,相关的无线路由器设备也是如此。
此外,通过有些设备还可以帮助你将优先级设置在特定的语音设备上,做到优化无线网络性能的目的。比如直接连到你的无线网络中的VoIP电话。同时,并不是所有的路由器都可以在具体的应用或设备上配置优先级。
不过,你至少可以启动“QoS”或“WMM”功能,它们将帮助你自动地优化多媒体传输流,这些设置在很多路由器里是默认为关闭的,只要开启它们,就有助于合理分配有限的网络带宽,提高无线网络的性能。

Ⅱ 常用优化器算法归纳介绍

优化器是神经网络训练过程中,进行梯度下降以寻找最优解的优化方法。不同方法通过不同方式(如附加动量项,学习率自适应变化等)侧重于解决不同的问题,但最终大都是为了加快训练速度。

这里就介绍几种常见的优化器,包括其原理、数学公式、核心思想及其性能;

核心思想: 即针对每次输入的训练数据,计算输出预测与真值的Loss的梯度;

从表达式来看,网络中参数的更新,是不断向着最小化Loss函数的方向移动的:

优点:
简单易懂,即对于相应的最优解(这里认为是Loss的最小函数),每次变量更新都是沿着局部梯度下降最快的方向,从而最小化损失函数。

缺点:

不同于标准梯度下降法(Gradient Descent)一次计算所有数据样本的Loss并计算相应的梯度,批量梯度下降法(BGD, Batch Gradient Descent)每次只取一个小批次的数据及其真实标签进行训练,称这个批次为mini-batch;

优点:

缺点:
随机梯度下降法的 batch size 选择不当可能导致模型难以收敛;由于这种方法是在一次更新中,就对整个数据集计算梯度,所以计算起来非常慢,遇到很大量的数据集也会非常棘手,而且不能投入新数据实时更新模型。

我们会事先定义一个迭代次数 epoch,首先计算梯度向量 params_grad,然后沿着梯度的方向更新参数 params,learning rate 决定了我们每一步迈多大。

Batch gradient descent 对于凸函数可以收敛到全局极小值,对于非凸函数可以收敛到局部极小值。

和 BGD 的一次用所有数据计算梯度相比,SGD 每次更新时对每个样本进行梯度更新,对于很大的数据集来说,可能会有相似的样本,这样 BGD 在计算梯度时会出现冗余,而 SGD 一次只进行一次更新,就没有冗余,而且比较快,并且可以新增样本。

即训练时,每次只从一批训练样本中随机选取一个样本进行梯度下降;对随机梯度下降来说,只需要一次关注一个训练样本,一点点把参数朝着全局最小值的方向进行修改了。

整体数据集是个循环,其中对每个样本进行一次参数更新

缺点:

梯度下降速度比较慢,而且每次梯度更新时往往只专注与局部最优点,而不会恰好指向全局最优点;

单样本梯度更新时会引入许多噪声(跟训练目标无关的特征也会被归为该样本分类的特征);

SGD 因为更新比较频繁,会造成 cost function 有严重的震荡。

BGD 可以收敛到局部极小值,当然 SGD 的震荡可能会跳到更好的局部极小值处。

当我们稍微减小 learning rate,SGD 和 BGD 的收敛性是一样的。

优点:

当处理大量数据时,比如SSD或者faster-rcnn等目标检测模型,每个样本都有大量候选框参与训练,这时使用随机梯度下降法能够加快梯度的计算。

随机梯度下降是通过每个样本来迭代更新一次,如果样本量很大的情况,那么可能只用其中部分的样本,就已经将 迭代到最优解了,对比上面的批量梯度下降,迭代一次需要用到十几万训练样本,一次迭代不可能最优,如果迭代10次的话就需要遍历训练样本10次。缺点是SGD的噪音较BGD要多,使得SGD并不是每次迭代都向着整体最优化方向。所以虽然训练速度快,但是准确度下降,并不是全局最优。虽然包含一定的随机性,但是从期望上来看,它是等于正确的导数的。

梯度更新规则:

MBGD 每一次利用一小批样本,即 n 个样本进行计算,这样它可以降低参数更新时的方差,收敛更稳定,另一方面可以充分地利用深度学习库中高度优化的矩阵操作来进行更有效的梯度计算。

和 SGD 的区别是每一次循环不是作用于每个样本,而是具有 n 个样本的批次。

超参数设定值: n 一般取值在 50~256

缺点:(两大缺点)

鞍点就是:一个光滑函数的鞍点邻域的曲线,曲面,或超曲面,都位于这点的切线的不同边。例如这个二维图形,像个马鞍:在x-轴方向往上曲,在y-轴方向往下曲,鞍点就是(0,0)。

为了应对上面的两点挑战就有了下面这些算法

核心思想:

不使用动量优化时,每次训练的梯度下降方向,都是按照当前批次训练数据计算的,可能并不能代表整个数据集,并且会有许多噪声,下降曲线波动较大:

添加动量项之后,能够有效减小波动,从而加快训练速度:

当我们将一个小球从山上滚下来时,没有阻力的话,它的动量会越来越大,但是如果遇到了阻力,速度就会变小。
加入的这一项,可以使得梯度方向不变的维度上速度变快,梯度方向有所改变的维度上的更新速度变慢,这样就可以加快收敛并减小震荡。

优点:

通过动量更新,参数向量会在有持续梯度的方向上增加速度;
使梯度下降时的折返情况减轻,从而加快训练速度;

缺点:

如果数据集分类复杂,会导致 和 时刻梯度 向量方向相差较大;在进行向量求和时,得到的 会非常小,反而使训练速度大大下降甚至模型难以收敛。

这种情况相当于小球从山上滚下来时是在盲目地沿着坡滚,如果它能具备一些先知,例如快要上坡时,就知道需要减速了的话,适应性会更好。

目前为止,我们可以做到,在更新梯度时顺应 loss function 的梯度来调整速度,并且对 SGD 进行加速。

核心思想:

自适应学习率优化算法针对于机器学习模型的学习率,采用不同的策略来调整训练过程中的学习率,从而大大提高训练速度。

这个算法就可以对低频的参数做较大的更新,对高频的做较小的更新,也因此,对于稀疏的数据它的表现很好,很好地提高了 SGD 的鲁棒性,例如识别 Youtube 视频里面的猫,训练 GloVe word embeddings,因为它们都是需要在低频的特征上有更大的更新。

Adagrad 的优点是减少了学习率的手动调节

式中, 表示第 个分类, 表示第 迭代同时也表示分类 累计出现的次数。 表示初始的学习率取值(一般为0.01)

AdaGrad的核心思想: 缩放每个参数反比于其所有梯度历史平均值总和的平方根。具有代价函数最大梯度的参数相应地有较大的学习率,而具有小梯度的参数又较小的学习率。

缺点:

它的缺点是分母会不断积累,这样学习率就会收缩并最终会变得非常小。

这个算法是对 Adagrad 的改进,

和 Adagrad 相比,就是分母的 换成了过去的梯度平方的衰减平均值,指数衰减平均值

这个分母相当于梯度的均方根 root mean squared (RMS),在数据统计分析中,将所有值平方求和,求其均值,再开平方,就得到均方根值 ,所以可以用 RMS 简写:

其中 的计算公式如下, 时刻的依赖于前一时刻的平均和当前的梯度:

梯度更新规则:

此外,还将学习率 换成了 RMS[Δθ],这样的话,我们甚至都不需要提前设定学习率了:

超参数设定值: 一般设定为 0.9

RMSprop 是 Geoff Hinton 提出的一种自适应学习率方法。

RMSprop 和 Adadelta 都是为了解决 Adagrad 学习率急剧下降问题的,

梯度更新规则:

RMSprop 与 Adadelta 的第一种形式相同:(使用的是指数加权平均,旨在消除梯度下降中的摆动,与Momentum的效果一样,某一维度的导数比较大,则指数加权平均就大,某一维度的导数比较小,则其指数加权平均就小,这样就保证了各维度导数都在一个量级,进而减少了摆动。允许使用一个更大的学习率η)

超参数设定值:

Hinton 建议设定 为 0.9, 学习率 为 0.001。

这个算法是另一种计算每个参数的自适应学习率的方法。相当于 RMSprop + Momentum

除了像 Adadelta 和 RMSprop 一样存储了过去梯度的平方 vt 的指数衰减平均值 ,也像 momentum 一样保持了过去梯度 mt 的指数衰减平均值:

如果 和 被初始化为 0 向量,那它们就会向 0 偏置,所以做了偏差校正,通过计算偏差校正后的 和 来抵消这些偏差:

梯度更新规则:

超参数设定值:
建议

示例一

示例二

示例三

上面情况都可以看出,Adagrad, Adadelta, RMSprop 几乎很快就找到了正确的方向并前进,收敛速度也相当快,而其它方法要么很慢,要么走了很多弯路才找到。

由图可知自适应学习率方法即 Adagrad, Adadelta, RMSprop, Adam 在这种情景下会更合适而且收敛性更好。

如果数据是稀疏的,就用自适用方法,即 Adagrad, Adadelta, RMSprop, Adam。

RMSprop, Adadelta, Adam 在很多情况下的效果是相似的。

Adam 就是在 RMSprop 的基础上加了 bias-correction 和 momentum,

随着梯度变的稀疏,Adam 比 RMSprop 效果会好。

整体来讲,Adam 是最好的选择。

很多论文里都会用 SGD,没有 momentum 等。SGD 虽然能达到极小值,但是比其它算法用的时间长,而且可能会被困在鞍点。

如果需要更快的收敛,或者是训练更深更复杂的神经网络,需要用一种自适应的算法。

各种优化器Optimizer原理:从SGD到AdamOptimizer

深度学习——优化器算法Optimizer详解(BGD、SGD、MBGD、Momentum、NAG、Adagrad、Adadelta、RMSprop、Adam)

Ⅲ 网络慢如何优化

首要要看楼主的网络慢是什么问题

一般有以下几个原因

一、网络自身问题
您想要连接的目标网站所在的服务器带宽不足或负载过大。处理办法很简单,请换个时间段再上或者换个目标网站。
二、网线问题导致网速变慢
我们知道,双绞线是由四对线按严格的规定紧密地绞和在一起的,用来减少串扰和背景噪音的影响。同时,在T568A标准和T568B标准中仅使用了双绞线的1、2和3、6四条线,其中,1、2用于发送,3、6用于接收,而且1、2必须来自一个绕对,3、6必须来自一个绕对。只有这样,才能最大限度地避免串扰,保证数据传输。不按正确标准(T586A、T586B)制作的网线,存在很大的隐患。表现为:一种情况是刚开始使用时网速就很慢;另一种情况则是开始网速正常,但过了一段时间后,网速变慢。后一种情况在台式电脑上表现非常明显,但用笔记本电脑检查时网速却表现为正常。因不按正确标准制作的网线引起的网速变慢还同时与网卡的质量有关。一般台式计算机的网卡的性能不如笔记本电脑的,因此,在用交换法排除故障时,使用笔记本电脑检测网速正常并不能排除网线不按标准制作这一问题的存在。我们现在要求一律按T586A、T586B标准来压制网线,在检测故障时不能一律用笔记本电脑来代替台式电脑。
三、网络中存在回路导致网速变慢
当网络涉及的节点数不是很多、结构不是很复杂时,这种现象一般很少发生。但在一些比较复杂的网络中,经常有多余的备用线路,如无意间连上时会构成回路。比如网线从网络中心接到计算机一室,再从计算机一室接到计算机二室。同时从网络中心又有一条备用线路直接连到计算机二室,若这几条线同时接通,则构成回路,数据包会不断发送和校验数据,从而影响整体网速。这种情况查找比较困难。为避免这种情况发生,要求我们在铺设网线时一定养成良好的习惯:网线打上明显的标签,有备用线路的地方要做好记载。当怀疑有此类故障发生时,一般采用分区分段逐步排除的方法。
四、网络设备硬件故障引起的广播风暴而导致网速变慢
作为发现未知设备的主要手段,广播在网络中起着非常重要的作用。然而,随着网络中计算机数量的增多,广播包的数量会急剧增加。当广播包的数量达到30%时,网络的传输效率将会明显下降。当网卡或网络设备损坏后,会不停地发送广播包,从而导致广播风暴,使网络通信陷于瘫痪。因此,当网络设备硬件有故障时也会引起网速变慢。当怀疑有此类故障时,首先可采用置换法替换集线器或交换机来排除集线设备故障。如果这些设备没有故障,关掉集线器或交换机的电源后,DOS下用“Ping”命令对所涉及计算机逐一测试,找到有故障网卡的计算机,更换新的网卡即可恢复网速正常。网卡、集线器以及交换机是最容易出现故障引起网速变慢的设备。
五、网络中某个端口形成了瓶颈导致网速变慢
实际上,路由器广域网端口和局域网端口、交换机端口、集线器端口和服务器网卡等都可能成为网络瓶颈。当网速变慢时,我们可在网络使用高峰时段,利用网管软件查看路由器、交换机、服务器端口的数据流量;也可用Netstat命令统计各个端口的数据流量。据此确认网络数据流通瓶颈的位置,设法增加其带宽。具体方法很多,如更换服务器网卡为100M或1000M、安装多个网卡、划分多个VLAN、改变路由器配置来增加带宽等,都可以有效地缓解网络瓶颈,可以最大限度地提高数据传输速度。
六、蠕虫病毒的影响导致网速变慢
通过E-mail散发的蠕虫病毒对网络速度的影响越来越严重,危害性极大。这种病毒导致被感染的用户只要一上网就不停地往外发邮件,病毒选择用户个人电脑中的随机文档附加在用户机子的通讯簿的随机地址上进行邮件发送。成百上千的这种垃圾邮件有的排着队往外发送,有的又批成批地被退回来堆在服务器上。造成个别骨干互联网出现明显拥塞,网速明显变慢,使局域网近于瘫痪。因此,我们必须及时升级所用杀毒软件;计算机也要及时升级、安装系统补丁程序,同时卸载不必要的服务、关闭不必要的端口,以提高系统的安全性和可靠性。
七、防火墙的过多使用
防火墙的过多使用也可导致网速变慢,处理办法不必多说,卸载下不必要的防火墙只保留一个功能强大的足以。
八、系统资源不足
您可能加载了太多的运用程序在后台运行,请合理的加载软件或删除无用的程序及文件,将资源空出,以达到提高网速的目的。

希望对楼主有所帮助~~

Ⅳ 神经网络的训练可以采用二阶优化方法吗

1. 时间复杂度:使用二阶方法通常需要直接计算或者近似估计Hessian矩阵,这部分的时间损耗使得其相比一阶方法在收敛速度上带来的优势完全被抵消;
2. 某些非线性网络层很难(或不可能)使用二阶方法优化:如果这个情况为真,那是否可能针对每个网络层使用不同的优化方案,比如像Fully-Connected Layer这样的简单线性映射操作使用二阶方法,非线性网络层使用传统梯度下降方法?
3. 二阶方法容易被saddle points吸引,难以到达local minimal或者global minimal:NIPS 2014有篇论文([1406.2572] Identifying and attacking the saddle point problem in high-dimensional non-convex optimization)认为在高维情况下,神经网络优化最大的问题不是网络容易到达local minimal,而是容易被saddle points困住,因为在这种情况下,local minimal不管在loss值还是泛化能力上都与global minimal相差不大,反而是非常多的saddle points存在loss较高的空间中。

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

训练集  ( 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个样本的数据集,其输入归一化的过程主要分为两步:

① 零均值化

                                                             

                                                            

② 归一化方差

                                                           

                                                              

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

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

Ⅵ 十分钟一起学会ResNet残差网络

深度卷积网络自然的整合了低中高不同层次的特征,特征的层次可以靠加深网络的层次来丰富。从而,在构建卷积网络时,网络的深度越高,可抽取的特征层次就越丰富。所以一般我们会倾向于使用更深层次的网络结构,以便取得更高层次的特征。但是在使用深层次的网络结构时我们会遇到两个问题,梯度消失,梯度爆炸问题和网络退化的问题。

但是当使用更深层的网络时,会发生梯度消失、爆炸问题,这个问题很大程度通过标准的初始化和正则化层来基本解决,这样可以确保几十层的网络能够收敛,但是随着网络层数的增加,梯度消失或者爆炸的问题仍然存在。

还有一个问题就是网络的退化,举个例子,假设已经有了一个最优化的网络结构,是18层。当我们设计网络结构的时候,我们并不知道具体多少层次的网络时最优化的网络结构,假设设计了34层网络结构。那么多出来的16层其实是冗余的,我们希望训练网络的过程中,模型能够自己训练这五层为恒等映射,也就是经过这层时的输入与输出完全一样。但是往往模型很难将这16层恒等映射的参数学习正确,那么就一定会不比最优化的18层网络结构性能好,这就是随着网络深度增加,模型会产生退化现象。它不是由过拟合产生的,而是由冗余的网络层学习了不是恒等映射的参数造成的。

ResNet是在2015年有何凯明,张翔宇,任少卿,孙剑共同提出的,ResNet使用了一个新的思想,ResNet的思想是假设我们涉及一个网络层,存在最优化的网络层次,那么往往我们设计的深层次网络是有很多网络层为冗余层的。那么我们希望这些冗余层能够完成恒等映射,保证经过该恒等层的输入和输出完全相同。具体哪些层是恒等层,这个会有网络训练的时候自己判断出来。将原网络的几层改成一个残差块,残差块的具体构造如下图所示:

可以看到X是这一层残差块的输入,也称作F(x)为残差,x为输入值,F(X)是经过第一层线性变化并激活后的输出,该图表示在残差网络中,第二层进行线性变化之后激活之前,F(x)加入了这一层输入值X,然后再进行激活后输出。在第二层输出值激活前加入X,这条路径称作shortcut连接。

我们发现,假设该层是冗余的,在引入ResNet之前,我们想让该层学习到的参数能够满足h(x)=x,即输入是x,经过该冗余层后,输出仍然为x。但是可以看见,要想学习h(x)=x恒等映射时的这层参数时比较困难的。ResNet想到避免去学习该层恒等映射的参数,使用了如上图的结构,让h(x)=F(x)+x;这里的F(x)我们称作残差项,我们发现,要想让该冗余层能够恒等映射,我们只需要学习F(x)=0。学习F(x)=0比学习h(x)=x要简单,因为一般每层网络中的参数初始化偏向于0,这样在相比于更新该网络层的参数来学习h(x)=x,该冗余层学习F(x)=0的更新参数能够更快收敛,如图所示:

假设该曾网络只经过线性变换,没有bias也没有激活函数。我们发现因为随机初始化权重一般偏向于0,那么经过该网络的输出值为[0.6 0.6],很明显会更接近与[0 0],而不是[2 1],相比与学习h(x)=x,模型要更快到学习F(x)=0。

并且ReLU能够将负数激活为0,过滤了负数的线性变化,也能够更快的使得F(x)=0。这样当网络自己决定哪些网络层为冗余层时,使用ResNet的网络很大程度上解决了学习恒等映射的问题,用学习残差F(x)=0更新该冗余层的参数来代替学习h(x)=x更新冗余层的参数。

这样当网络自行决定了哪些层为冗余层后,通过学习残差F(x)=0来让该层网络恒等映射上一层的输入,使得有了这些冗余层的网络效果与没有这些冗余层的网络效果相同,这样很大程度上解决了网络的退化问题。

我们发现很深的网络层,由于参数初始化一般更靠近0,这样在训练的过程中更新浅层网络的参数时,很容易随着网络的深入而导致梯度消失,浅层的参数无法更新。

可以看到,假设现在需要更新 参数因为随机初始化偏向于0,通过链式求导我们会发现, 相乘会得到更加接近于0的数,那么所求的这个 的梯度就接近于0,也就产生了梯度消失的现象。

ResNet最终更新某一个节点的参数时,由于 ,由于链式求导后的结果如图所示,不管括号内右边部分的求导参数有多小,因为左边的1的存在,并且将原来的链式求导中的连乘变成了连加状态(正是 ),都能保证该节点参数更新不会发生梯度消失或梯度爆炸现象。

这样ResNet在解决了阻碍更深层次网络优化问题的两个重要问题后,ResNet就能训练更深层次几百层乃至几千层的网络并取得更高的精确度了。

这里是应用了ResNet的网络图,这里如果遇到了h(x)=F(x)+x中x的维度与F(x)不同的维度时,我们需要对identity加入Ws来保持Ws*x的维度与F(x)的维度一致。

x与F(x)维度相同时:

x与F(x)维度不同时:

下边是ResNet的网络结构图:

使用1*1卷积减少参数和计算量:

如果用了更深层次的网络时,考虑到计算量,会先用1 * 1的卷积将输入的256维降到64维,然后通过1*1恢复。这样做的目的是减少参数量和计算量。

左图是ResNet34,右图是ResNet50/101/152。这一个模块称作building block,右图称之为bottleneck design。在面对50,101,152层的深层次网络,意味着有很大的计算量,因此这里使用1 * 1卷积先将输入进行降维,然后再经过3 * 3卷积后再用 卷积进行升维。使用1*1卷积的好处是大大降低参数量计算量。

通过上述的学习,你应该知道了,现如今大家普遍认为更好的网络是建立在更宽更深的网络基础上,当你需要设计一个深度网络结构时,你永远不知道最优的网络层次结构是多少层,一旦你设计的很深入了,那势必会有很多冗余层,这些冗余层一旦没有成功学习恒等变换 ,那就会影响网络的预测性能,不会比浅层的网络学习效果好从而产生退化问题。

ResNet的过人之处,是他很大程度上解决了当今深度网络头疼的网络退化问题和梯度消失问题。使用残差网络结构 代替原来的没有shortcut连接的 ,这样更新冗余层的参数时需要学习 比学习 要容易得多。而shortcut连接的结构也保证了反向传播更新参数时,很难有梯度为0的现象发生,不会导致梯度消失。

这样,ResNet的构建,使我们更朝着符合我们的直觉走下去,即越深的网络对于高级抽象特征的提取和网络性能更好,不用在担心随着网络的加深发生退化问题了。

近段时间,准备持续发表一些CNN常见的网络模型讲解。好了,今天的十分钟就带你一起学会ResNet,下次的十分钟我们再见。

Ⅶ 怎样优化网卡设置提高网络传输速度

可通过以下步骤优化网卡设置提高网络传输速度:
1、点击开始,输入CMD,选择以管理员身份运行;
2、在命令提示符中粘贴以下命令:
netsh interface tcp set global autotuning=disabled
出现确定,为执行成功;
3、点击开始,选择运行,输入:regedit,打开注册表,找到HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\services\A FD\Parameters;
4、创建新的 dword 32bit 字符串在 Parameters 并且命名为:DefaultSendWindow,编辑DefaultSendWindow的值为十进制输入值,点击确定,重启电脑即可。

Ⅷ 在训练时,accuracy不变,loss一直在降低是什么原因

在训练过程中画出accuracy 和loss曲线能够更直观的观察网络训练的状态,以便更好的优化网络的训练。本文主要介绍在基于caffe框架训练网络时,如何利用caffe自带的一些实用的工具包来绘制曲线。
step1:保存日志文件
在训练过程中把终端输出的结果保存为一个日志文件,注意文件的后缀名必须是.log,这是因为后面再解析日志文件时有这个要求。如何把终端保存到日志文件,例子如下:
$TOOLS/caffe train --solver=$SOLVERFILE 2>&1 |tee out.log
step2:解析日志文件
这一步利用caffe中tools/extra文件夹下的parse_log.py来解析日志文件。具体例子如下:
python parse_log.py out.log ./ #两个参数,一个是日志文件,另一个是保存的路径
运行结束之后会发现在你保存的路径中会生成两个文件out.log.train和out.log.test
step3:绘制accuracy 和loss曲线。
利用caffe中tools/extra文件夹下的plot_training_log.py文件来绘制。
python plot_training_log.py 2 testloss.png out.log
这里要解释下,如果你直接运行这个是会报错的。因为在out.log.test文件是这样的。
NumIters,Seconds,TestAccuracy,TestLoss
0.0,2.318823,-1,0.360432
200.0,10.975734,-1,0.0757681
400.0,19.634317,-1,0.0610909
600.0,28.295885,-1,0.0554078
800.0,36.953475,-1,0.0510606
1000.0,45.644651,-1,0.0463909
load_data的时候第一行是不读的,要么你自己第一行加个#,要么就直接不读第一行。另外在split的时候不是用空格而是用‘,’因此做如下修改。
def load_data(data_file, field_idx0, field_idx1):
data = [[], []]
with open(data_file, 'r') as f:
num=len(f)
for line_num in range(1,num):#此处修改
line = f[line_num].strip()
#if line[0] != '#':#此处修改
fields = line.split(',')#此处修改
data[0].append(float(fields[field_idx0].strip()))
data[1].append(float(fields[field_idx1].strip()))
return data
上面还有个地方需要解释就是那个2是什么意思,这个你直接运行下Python plot_training_log.py就会打出帮助信息,就能看见了。
以上就是利用caffe自带的工具包绘制曲线的方法。

阅读全文

与训练时如何优化网络相关的资料

热点内容
仲恺技工学校计算机网络应用 浏览:888
如何使用外置网络 浏览:284
wifi直接插网络接口可以吗 浏览:657
小黄蜂网络接入点设置 浏览:603
电脑共享网络打开了又关闭了 浏览:418
网络版冰点还原软件 浏览:2
老家手机4g网络差怎么解决 浏览:887
科技网络安全工程师 浏览:341
oppo要怎么设置网络 浏览:664
电脑的网络成了红色的叉号怎办 浏览:407
福建网络教育的学校有哪些 浏览:495
如何判断网络盗文 浏览:625
国家网络安全宣传周是9月 浏览:258
福建广电网络光纤猫宽带wifi 浏览:794
投影仪怎么样设置网络 浏览:885
百和网络机顶盒的账号密码在哪看 浏览:583
无线网络有网不能用 浏览:403
网络不好举起手机的图片 浏览:13
如何看待网络辅导班 浏览:331
路由器网络红色亮 浏览:718

友情链接