当前位置: 首页 > news >正文

网站建设桔子科技网站部兼容ie6

网站建设桔子科技,网站部兼容ie6,源码下载免费,一般网站建设费用预算自然语言处理Andrej Karpathy 是深度学习计算机视觉领域、与领域的研究员。博士期间师从李飞飞。在读博期间#xff0c;两次在谷歌实习#xff0c;研究在 Youtube 视频上的大规模特征学习#xff0c;2015 年在 DeepMind 实习#xff0c;研究深度强化学习。毕业后#xff0…自然语言处理Andrej Karpathy 是深度学习计算机视觉领域、与领域的研究员。博士期间师从李飞飞。在读博期间两次在谷歌实习研究在 Youtube 视频上的大规模特征学习2015 年在 DeepMind 实习研究深度强化学习。毕业后Karpathy 成为 OpenAI 的研究科学家后于 2017 年 6 月加入特斯拉担任人工智能与视觉总监。今日他发布的这篇博客能为深度学习研究者们提供极为明晰的洞见在 Twitter 上也引发了极大的关注。1. 谁说神经网络训练简单了很多人认为开始训练神经网络是很容易的大量库和框架号称可以用 30 行代码段解决你的数据问题这就给大家留下了(错误的)印象训练神经网络这件事是非常简单的不同模块即插即用就能搭个深度模型。简单的建模过程通常如下所示 your_data # plug your awesome dataset here model SuperCrossValidator(SuperDuper.fit, your_data, ResNet50, SGDOptimizer)# conquer world here这些库和示例令我们想起了熟悉标准软件及模块标准软件中通常可以获取简洁的 API 和抽象。例如 Request 库的使用展示如下 r requests.get(https://api.github.com/user, auth(user, pass)) r.status_code200酷这些库和框架的开发者背负起理解用户 Query 字符串、url、GET/POST 请求、HTTP 连接等的大量需求将复杂度隐藏在几行代码后面。这就是我们熟悉与期待的。然而神经网络不一样它们并不是现成的技术。我在 2016 年撰写的一篇博客中试图说明这一点在那篇文章中我认为反向传播是「leaky abstraction」然而现在的情况似乎更加糟糕了。Backprop SGD 不是魔法无法让你的网络运行批归一化也无法奇迹般地使网络更快收敛RNN 也不能神奇地让你直接处理文本。不要因为你可以将自己的问题表示为强化学习就认为你应该这么做。如果你坚持在不理解技术原理的情况下去使用它那么你很可能失败。2. 背着我不 work 的神经网络当你破坏代码或者错误配置代码时你通常会得到某种异常。你在原本应该插入字符串的地方插入了整数导入出错该关键字不存在……此外为了方便 debug你还很可能为某个功能创建单元测试。这还只是开始。训练神经网络时有可能所有代码的句法都正确但整个训练就是不对。可能问题出现在逻辑性(而不是句法)且很难通过单元测试找出来。例如你尝试截损失度而不是梯度这会导致训练期间的异常值被忽视但语法或维度等检测都不会出现错误。又或者你弄错了正则化强度、学习率、衰减率、模型大小等的设置那么幸运的话网络会报错然而大部分时候它会继续训练并默默地变糟……因此「快速激烈」的神经网络训练方式没有用只会导致困难。现在这些经验性困难是使神经网络正常运行的拦路虎你需要更加周密详尽地调试网络才能减少困难需要大量可视化来了解每一件事。在我的经验中深度学习成功的重要因素是耐心和注重细节。如何解决基于以上两点事实我开发了一套将神经网络应用于新问题的特定流程。该流程严肃地执行了上述两项原则耐心和注重细节。具体来说它按照从简单到复杂的方式来构建我们在每一步都对即将发生的事作出准确的假设然后用实验来验证假设或者调查直到发现问题。我们试图尽力阻止大量「未经验证的」复杂性一次来袭这有可能导致永远也找不到的 bug错误配置。如果让你像训练神经网络那样写它的代码你会想使用非常小的学习率然后猜测再在每次迭代后评估整个测试集。1. 梳理数据训练神经网络的第一步是不要碰代码先彻底检查自己的数据。这一步非常关键。我喜欢用大量时间浏览数千个样本理解它们的分布寻找其中的模式。幸运的是人类大脑很擅长做这件事。有一次我发现数据中包含重复的样本还有一次我发现了损坏的图像标签。我会查找数据不均衡和偏差。我通常还会注意自己的数据分类过程它会揭示我们最终探索的架构。比如只需要局部特征就够了还是需要全局语境标签噪声多大此外由于神经网络是数据集的压缩编译版本你能够查看网络(错误)预测理解预测从哪里来。如果网络预测与你在数据中发现的不一致那么一定是什么地方出问题了。在你对数据有了一些感知之后你可以写一些简单的代码来搜索过滤排序标签类型、标注规模、标注数量等并沿任意轴可视化其分布和异常值。异常值通常能够揭示数据质量或预处理中的 bug。2. 配置端到端训练/评估架构、获取基线结果现在我们已经理解了数据那我们就可以开始构建高大上的多尺度 ASPP FPN ResNet 并训练强大的模型了吗当然还不到时候这是一个充满荆棘的道路。我们下一步需要构建一个完整的训练、评估架构并通过一系列实验确定我们对准确率的置信度。在这个阶段你们最好选择一些不会出错的简单模型例如线性分类器或非常精简的 ConvNet 等。我们希望训练这些模型并可视化训练损失、模型预测和其它度量指标(例如准确率)。当然在这个过程中我们还需要基于一些明确假设从而执行一系列对照实验(ablation experiments)。该阶段的一些技巧与注意事项固定随机 seed始终使用固定的随机 seed 能保证很多属性例如在我们两次运行相同代码时能得到相同的输出。这能消除变化因子从进行合理的判断。简化确保禁用不必要的技巧。例如在这个阶段肯定需要关闭数据增强。数据增强可以在后期引入并作为一种强大的正则化策略。不过在这个阶段引入的话它就有机会带来一些愚蠢的 bug。使用多数据、少次数的验证评估当我们在绘制测试损失时我们需要在整个比较大的测试集中执行评估。不要过几个批量就绘制一次测试损失然后再依赖 TensorBoard 的平滑处理。我们虽然追求的是准确率但也要防止犯这些低级错误。在初始化中验证损失验证你的损失函数在初始化中有比较合理的损失值。例如如果你正确地初始化最终层那么你应该通过-log(1/n_classes) 度量初始化的 Softmax 值。L2 回归和 Huber 损失函数等都有相同的默认值。优秀的初始化正确的初始化最终层。例如如果你正在对均值为 50 的一些数据做回归处理那么初始化的最终偏置项就应该为 50。如果你有一个非平衡数据集(两类样本数 110)那么就需要在 logits 上设置偏置项令模型在初始化时预测概率为 0.1。正确配置这些偏置项将加快收敛速度因为网络在前面几次迭代中基本上只在学习偏置。人类基线结果监控损失值等其他度量指标(例如准确度)这些指标应该是人类能解释并检查的。尽可能评估你自己(人类)获得的准确率并与构建的模型做对比。或者对测试数据进行两次标注其中一次为预测值另一次为标注值。独立于输入的基线结果训练一个独立于输入的基线模型例如最简单的方法就是将所有输入都设置为 0。这样的模型应该比实际输入数据表现更差你的模型是否准备好从任何输入中抽取任何信息在批数据上过拟合在单个批数据上使得过拟合(两个或多个少样本)。为此我们需要增加模型拟合能力并验证我们能达到的最低损失值(即 0)。我还想在同一张图中显示标签和预测值并确保损失值一旦达到最小它们就能完美地对齐了。验证训练损失的下降在这一阶段你可能希望在数据集上实现欠拟合该阶段的模型应该是极简的。然后我们尝试增加一点模型的拟合能力再看看训练损失是否稍微下降了一些。在输入网络前可视化在运行模型之前我们需要可视化数据。也就是说我们需要可视化输入到网络的具体数据即可视化原始张量的数据和标签。这是唯一的「真实来源」我有很多次都是因为这个过程而节省了大量时间并揭示了数据预处理和数据增强过程中的问题。可视化预测过程我喜欢在训练过程中对一个固定的测试批数据进行模型预测的可视化。这展示了预测值如何变化的过程能为我们提供关于训练过程的优秀直觉。很多时候如果网络以某种方式小幅度波动那么模型最可能在尝试拟合数据这也展示了一些不稳定性。太低或太高的学习率也很容易注意到因为抖动量比较大。使用反向传播绘制依赖性你的深度学习代码通常包括复杂的、矢量化的、Boardcast 操作。一个常见的 bug 是人们会无意间使用 view 而不是 transpose/permute从而混合了批量数据中的维度信息。然而你的网络仍然可以正常训练只不过它们学会忽略了其它样本中的数据。一种 debug 的方法是将某些样本 i 的损失设置为 1.0然后运行反向传播一直到输入并确保第 i 个样本的梯度不为零。更一般的梯度为我们提供了网络中的依赖性关系它们在 debug 中非常有用。一般化特殊案例这是一种更为通用的代码技巧但是我经常看到人们在使用这些技巧时会新产生 Bug尤其是在从头构建一般函数时。相反我喜欢直接写非常具体的函数它只包含我现在需要做的事情。我会先让这个函数能 work然后再一般化好函数并确保能取得相同的结果。通常这个过程会体现在向量化代码中我会先用循环编写某个过程然后再一次一个循环地将它们转化为向量化化代码。3. 过拟合到了这个阶段我们应该对数据集有所了解了而且有了完整的训练评估流程。对于任何给定的模型我们可以计算出我们信任的度量。而且还为独立于输入的基线准备了性能一些 dumb 基线的性能(最好超过这些)我们人类的表现有大致的了解(并希望达到这一点)。现在我们已经为迭代一个好的模型做好了准备。我准备用来寻找好模型的方法有两个阶段首先获得足够大的模型这样它能够过拟合(即关注训练损失)然后对其进行适当的正则化(弃掉一些训练损失以改进验证损失)。我喜欢这两个阶段的原因是如果我们不能用任何模型实现较低的误差率则可能再次表明一些问题、bug 和配置错误。该阶段的一些技巧与注意事项选择模型为了达到理想的训练损失我们可能希望为数据选择一个合适的架构。当我们在挑选模型时我的第一个建议即别好高骛远。我看到很多人都非常渴望一开始就堆叠一些新的模块或创造性地用于各种异质架构从而想一步到位做好。我建议可以找最相关的论文并直接利用它们的简单架构从而获得良好性能。后面再基于这个架构做修改和改进并将我们的想法加进去就行了。Adam 是一般选择在配置基线模型的早期阶段我喜欢使用 Adam 算法(学习率为 3e-4)。在我的经验中Adam 对超参数的容忍度更高不太好的学习率也能获得一般的效果。对于卷积网络来说一般经过仔细调整的 SGD 几乎总会略优于 Adam但最佳学习率的可能区域要窄得多。一次复杂化一个如果你有多个特性插入分类器我建议你一个个插入从而确保能获得期待的性能提升。不要在最开始时就一次性全加上这样你会弄不清楚性能提升到底是哪个特性带来的。还有其它增加复杂性的方法例如你可以先尝试插入较小的图像然后再慢慢地加大。别相信默认的学习率衰减如果你修改来自其它领域的代码你应该小心使用学习率衰减方法。对于不同问题你不仅希望使用不同的衰减策略同时因为 Epoch 的数量不同衰减过程也会不一样。例如数据集的大小会影响 Epoch 的数量而很多学习率衰减策略是直接与 Epoch 相关的。在我自己的工作中我经常整个地关闭学习率衰减即使用常数学习率。4. 正则化理想情况下我们现在至少有了一个拟合训练集的大模型。现在是时候对它进行正则化并通过放弃一些训练准确率来提升验证准确率了。技巧包括更多数据首先在当前任何实际环境中正则化模型的最好方式是增加更多真实的训练数据。在你能收集更多数据时花费大量工程时间试图从小数据集上取得更好结果是很常见的一个错误。我认为增加更多数据是单调提升一个较好配置神经网络性能的唯一可靠方式。数据增强比真实数据较次的方法是半假数据试验下更激进的数据增强。创造性增强如果半假数据也没有假数据也还可以。人们在寻求扩展数据集的创造性方法。例如域随机化、使用模拟数据、把数据插入场景这样机智的混合方法甚至可以用 GAN。预训练即使你有足够的数据你也可以使用预训练网络基本没什么损失。坚持监督式学习不要对无监督学习过于激动。据我所知没有什么无监督学习方法在当前计算机视觉任务上有很强的结果(尽管 NLP 领域现在有了 BERT 和其他类似模型但这更多归功于文本更成熟的本质以及对噪声比更好的信号)。更小的输入维度移除可能包含假信号的特征。如果你的数据集很小任何加入的假输入只会增加过拟合的可能。类似地如果低级细节作用不大试试输入更小的图像。更小的模型在许多情况下你可以在网络上使用域知识约束来降低模型大小。例如在 ImageNet 主干网络顶部使用全连接层一度很流行但它们后来被简单的平均池化取代消除了这一过程中大量的参数。减小批大小由于 BN 基于批量大小来做归一化较小的批量大小具有更强的正则化效果。这主要因为一个批量的统计均值与标准差是实际均值和标准差的近似所以缩放量和偏移量在小批量内波动地更大。drop增加 dropout。在卷积网络上使用 dropout2d(空间 dropout)。保守谨慎的使用 dropout因为它对 batch 归一化好像不太友好。权重衰减增加权重衰减惩罚。早停(early stopping)基于你得到的验证损失停止训练从而在即将过拟合之前获取模型。尝试更大的模型我过去多次发现更大模型最终都会很大程度的过拟合但它们「早停」后的性能要比小模型好得多。最后为了更加确保网络是个合理的分类器我喜欢可视化网络第一层的权重确保自己获得了有意义的边缘。如果第一层的滤波器看起来像噪声那需要去掉些东西。类似地网络内的激活函数有时候也会揭示出一些问题。5. 精调现在你应该位于数据集一环探索取得较低验证损失的架构模型空间。这一步的一些技巧包括随机网格搜索在同时精调多个超参数时使用网格搜索听起来更诱惑能够确保覆盖到所有环境。但记住使用随机搜索反而是最佳方式。直观上因为神经网络对一些参数更为敏感。在极限情况下如果参数 a 很重要改变 b 却没有影响然后相比于多次在固定点采样你宁可彻底采样 a。超参数优化如今社区内有大量好的贝叶斯超参数优化工具箱我的一些朋友用过后觉得很成功。但我的个人经验是探索好的、宽的模型空间和超参数的最佳方法是找个实习生。开玩笑而已哈哈哈。6. 最后的压榨一旦你找到最好的架构类型和超参数依然可以使用更多的技巧让系统变得更好集成模型集成是能将准确率稳定提升 2% 的一种好方式。如果你承担不起测试阶段的计算成本试着使用《Distilling the Knowledge in a Neural Network》中的方法把你的模型蒸馏到一个网络。一直训练我经常看到一些人在验证损失趋平时会中断模型训练以我的经验来看网络会长时间保持非直观的训练。寒假时有一次我忘了关掉模型训练一月回来后发现它取得了 SOTA 结果。结论一旦你做到了这些你就具备了成功的所有要素对神经网络、数据集和问题有了足够深的了解配置好了完整的训练/评估体系取得高置信度的准确率逐渐探索更复杂的模型提升每一步的表现。现在万事俱备就可以去读大量论文尝试大量实验并取得 SOTA 结果了。
http://www.pierceye.com/news/16899/

相关文章:

  • 好看的学校网站模板免费下载最新注册公司流程及费用
  • 广告建设网站建设网站建设发布教程视频
  • 做网站前怎么写文档电子商务网站建设报告范文
  • iis添加网站建设中郑州网络营销推广
  • 北京云建站模板蜀山传奇网页游戏
  • 建设网站要钱么深圳市建筑工程交易服务
  • 莆田外贸自建网站用ps做企业网站分辨率是多少钱
  • 网站建设软硬件平台有哪些贵州省网站集约化建设
  • 三合一网站cms漂亮的手机网站模板下载
  • 所有网站名称大全wordpress开头空两格
  • seo外链优化培训烟台网站的优化
  • 做3d兼职网站微网站开发方案
  • 西安网站建设多钱设计类型的网站
  • 东莞建设企业网站公司畜牧业网站建设
  • 手机网站源码怎么打开成功的营销网站
  • 怎样在手机上建网站网站搜索怎么做的
  • 赣州行业网站建设企业如何创建网站
  • 贵州营销型网站抖音关键词优化排名
  • 最大的搜索网站排名企业网站建设流程与方法 论文
  • 网站的开发费用吗网上商城毕业设计论文
  • 个人网站企业备案区别网站订单系统模板
  • 英迈思网站做不下去可以退款吗推广计划和推广单元什么区别
  • 方维网站后台提示验证码错误scala网站开发
  • 汽车最好网站建设公司弄个网站多少钱
  • iis 临时网站重庆建设工程安全信息网查询
  • 域名进行网站备案广州建立网站
  • 国外做滑板网站济南企业网站
  • 域名注册平台的网站怎么做wordpress自适应菜单
  • 自助 建站怎样做网站排名优化
  • 水利工程建设监理网站设计网名的软件