淘优惠

淘优惠

java sql优化的步骤 sql优化和索引优化

热门文章 0

不知道你有没有拼接过字符串,特别是那种有多个参数,字符串比较长的情况。

比如现在有个需求:要用get请求调用第三方接口,url后需要拼接多个参数。

以前我们的请求地址是这样拼接的:

String url = &#【【网址】】?userName="+userName+"&age="+age+"&address="+address+"&sex="+sex+"&roledId="+roleId;

字符串使用+号拼接,非常容易出错。

后面优化了一下,改为使用StringBuilder拼接字符串:

StringBuilder urlBuilder = new StringBuilder(&#【【网址】】?"); urlBuilder.append("userName=") .append(userName) .append("&age=") .append(age) .append("&address=") .append(address) .append("&sex=") .append(sex) .append("&roledId=") .append(roledId);

代码优化之后,稍微直观点。

但还是看起来比较别扭。

这时可以使用String.format方法优化:

String re【【微信】】 = &#【【网址】】?userName=%s&age=%s&address=%s&sex=%s&roledId=%s"; String url = String.format(re【【微信】】,userName,age,address,sex,roledId);

代码的可读性,一下子提升了很多。

我们平常可以使用String.format方法拼接url请求参数,日志打印等字符串。

但不建议在for循环中用它拼接字符串,因为它的执行效率,比使用+号拼接字符串,或者使用StringBuilder拼接字符串都要慢一些。

IO流想必大家都使用得比较多,我们经常需要把数据写入某个文件,或者从某个文件中读取数据到内存中,甚至还有可能把文件a,从目录b,复制到目录c下等。

JDK给我们提供了非常丰富的API,可以去操作IO流。

例如:

public class IoTest1 {     public static void main(String[] args) {         FileInputStream fis = null;         FileOutputStream fos = null; Dropout Reduces Underfitting论文解读dropout,dropout层,dropout层的作用,dropout层中文名
  • Dropout Reduces Underfitting(2023.3.2)
    • 写在前面
    • 摘要
    • 一、简介
    • 二、重新审视过拟合和欠拟合
    • 三、Dropout如何减少欠拟合
    • 四、方法
    • 五、实验
      • 早期随机失活
      • 分析
      • 晚期随机失活(Late Dropout)
    • 六、下游任务
    • 七、相关工作
    • 八、结论

本文提出了早期dropout的思想,把dropout处理过拟合的能力转移到减少欠拟合。这个思想可以应用到分类任务(Resnet等)、目标检测(YOLOV5)、以及分割、NLP领域。

  • dropout在训练开始时使用时也可以缓解欠拟合问题
  • early dropout:更低的最终训练损失
  • late dropout:提高了泛化准确性

由Hinton等人在2012年提出,dropout已经成为神经网络中防止过拟合的正则化方法并经过了时间的考验。在本研究中,我们证明了在训练开始时使用dropout也可以缓解欠拟合的问题。在早期阶段,我们发现dropout可以减少小批量梯度的方向差异,并帮助将小批量梯度与整个数据集的梯度对齐。这有助于抵消随机梯度下降的随机性,并限制单个批次对模型训练的影响。我们的研究结果为解决欠拟合模型的性能提供了一个解决方案 - 早期dropout:dropout仅在训练的初始阶段应用,然后关闭。与没有dropout的对照组相比,装备早期dropout的模型达到了更低的最终训练损失。此外,我们还探索了一种用于正则化过拟合模型的对称技术 - 晚期dropout,其中在早期迭代中不使用dropout,仅在训练后期激活。在ImageNet和各种视觉任务上的实验证明,我们的方法始终提高了泛化准确性。我们的研究结果鼓励对深度学习中正则化的理解进行更多的研究,并且我们的方法可以成为未来神经网络训练的有用工具,特别是在大数据时代。

随机深度s.d.:Stochastic depth是一种深度神经网络的正则化技术。在这种技术中,网络中的某些层有一定的概率被随机跳过,这可以被视为模型的一种集成方法,类似于dropout。stochastic depth rate指的是在stochastic depth中被跳过的层数所占的比例。

dropout的历史以及由于训练数据越来越多,比率逐渐降低,从0.5到0.1。

很快会面临更多的欠拟合问题而不是过拟合问题。

dropout降低了mini-batch之间的梯度方差,抵消了SGD的影响,并防止了早期训练中因随机采样mini-batches而导致过度正则化的问题。

对于已经使用标准dropout的模型,我们建议在早期训练时期去除dropout,以减轻过拟合

我们将这种方法称为“late dropout”,并证明它可以提高大型模型的泛化精度。

2022年标志着自AlexNet的关键“ImageNet时刻”(Krizhevsky等人,2012)以来的整整十年,它开启了深度学习的新时代。毫不巧合的是,2022年dropout(Hinton等人,2012)也迎来了它的十周岁生日:AlexNet使用dropout显著减少了过拟合,这在其赢得ILS【【微信】】竞赛中发挥了至关重要的作用。如果没有dropout的发明,我们目前在深度学习方面看到的进步可能会被推迟数年。

dropout已经成为广泛采用的正则化器,以减轻神经网络中的过拟合。它随机地用概率p停用每个神经元,防止不同的特征互相适应(Hinton等人,2012; Sri【【微信】】等人,2014)。应用dropout后,训练损失通常会增加,而测试误差会降低,缩小模型的泛化差距。

深度学习以惊人的速度发展。不断引入新的技术和架构,应用不断扩展,基准也在变化,甚至卷积也可能消失(Doso【【微信】】等人,2021)-但是dropout仍然存在。它继续发挥作用,在最新的AI成就中,包括AlphaFold的蛋白质结构预测(Jumper等人,2021)和DALL-E 2的图像生成(Ramesh等人,2022),证明了它的多功能性和有效性。

尽管dropout一直很受欢迎,但它的强度,即丢弃率p,一般随着时间的推移而减小。在最初的dropout工作(Hinton等人,2012)中,使用了默认的丢弃率0.5。然而,近年来经常采用较低的丢弃率,例如0.1,如训练BERT(Devlin等人,2018)和【【微信】】(Doso【【微信】】等人,2021)等。这个趋势的主要驱动因素是可用训练数据的爆炸式增长,使得过拟合越来越困难。此外,数据增强技术(Zhang等人,2018; Cubuk等人,2020)和用未标记或弱标记数据进行学习的算法(Brown等人,2020; Radford等人,2021; He等人,2021)的进步提供了比模型更多的数据来训练。因此,我们可能很快会面临更多的欠拟合问题而不是过拟合问题。

如果出现这种情况,dropout会失去其相关性吗?在本研究中,我们展示了一个应对欠拟合的使用dropout的替代方法。我们从梯度范数上做出一个有趣的观察,进而得出一个关键的实证发现:在训练的初始阶段,dropout降低了mini-batch之间的梯度方差,使得模型能够更一致地朝着更好的方向更新。这些方向也更加符合整个数据集的梯度方向(图1)。因此,模型可以更有效地优化训练损失,而不是受到单个mini-batch的影响。换句话说,dropout抵消了SGD的影响,并防止了早期训练中因随机采样mini-batches而导致过度正则化的问题。基于这一洞见,我们引入了“early dropout”-仅在早期训练时使用dropout-来帮助欠拟合的模型更好地拟合。与没有dropout和标准dropout相比,early dropout可以降低最终的训练损失。相反,对于已经使用标准dropout的模型,我们建议在早期训练时期去除dropout,以减轻过拟合。我们将这种方法称为“late dropout”,并证明它可以提高大型模型的泛化精度。图2提供了标准dropout、early dropout和late dropout的比较。

我们使用不同的模型在图像分类和下游任务中评估了early dropout和late dropout。我们的方法始终比标准dropout和没有dropout产生更好的结果。我们希望我们的发现可以提供有关dropout和过拟合的新见解,并激发进一步研究开发神经网络正则化方法。

图一

  • 图二

更大的模型和较小的数据集往往会导致过拟合

随机深度,dropout的变种,对于每个样本或小批量,网络随机选择一些残差块跳过,使模型变得更浅,可以视为在残差块级别上的特殊dropout

dropout概率p很大程度上取决于网络模型大小和数据集大小

未来的模型可能更难适当地拟合数据,需要工具来帮助模型更好地拟合大量的数据并减少欠拟合

过拟合当一个模型过度拟合训练数据,但在未见过的数据上泛化能力差时,就会发生过拟合。模型的容量和数据集的规模是决定过拟合的最重要因素之一,此外还有训练长度等其他因素。更大的模型和较小的数据集往往会导致更多的过拟合。我们进行了几个简单的实验,以清晰地说明这种趋势。首先,当模型保持不变,但使用的数据减少时,训练精度和测试精度之间的差距会增加,导致过拟合。图3(顶部)展示了在各种ImageNet数据量上训练的【【微信】】/32结果的趋势。其次,当模型容量增加,而数据集大小保持不变时,差距也会扩大。图3(底部)展示了在相同的100% ImageNet数据上训练的【【微信】】(T)、Small(S)和Base(B)/32模型的情况。我们使用固定的4,000个迭代次数进行训练,不使用数据增强。

随机深度已经有各种尝试设计dropout的变种(Wan等人,2013;He等人,2014;Ghiasi等人,2018)。在这项研究中,我们也考虑了一种dropout变种,称为随机深度(s.d.)(Huang等人,2016),它是为了规范残差网络(He等人,2016)而设计的。对于每个样本或小批量,网络随机选择一些残差块跳过,使模型变得更浅,因此得名“随机深度”。它通常在现代视觉网络中出现,包括DeiT(【【微信】】等人,2020)、ConvNeXt(Liu等人,2022)和MLP-Mixer(Tolstikhin等人,2021)。几个最近的模型(Steiner等人,2021;Tolstikhin等人,2021)将s.d.与dropout一起使用。由于s.d.可以视为在残差块级别上的特殊dropout,因此我们后面使用的“dropout”一词也可能包括s.d.,具体取决于上下文。

丢失率在dropout中将神经元设置为零的概率被称为丢失率p,这是一个非常重要的超参数。例如,在Swin Transformer和ConvNeXt中,唯一随着模型大小变化的训练超参数是随机深度的丢失率。

版权声明:除非特别标注原创,其它均来自互联网,转载时请以链接形式注明文章出处。