Keras 的 dropout 实现正确吗?

2023-11-27

The KerasDropout参考的实施这张纸.

以下摘录自该论文:

这个想法是在测试时使用单个神经网络而不丢失。 该网络的权重是经过训练的按比例缩小的版本 重量。如果在训练期间以概率 p 保留一个单元,则 该单元的输出重量在测试时乘以 p 为 如图2所示。

Keras 文档提到 dropout 仅在训练时使用,以及 Dropout 实现中的以下行

x = K.in_train_phase(K.dropout(x, level=self.p), x)

似乎表明实际上层的输出在测试期间只是简单地传递。

此外,我找不到按照论文建议在训练完成后缩小权重的代码。我的理解是,这个缩放步骤对于使 dropout 发挥作用从根本上来说是必要的,因为它相当于在“子网络”集合中获取中间层的预期输出。没有它,计算就不能再被认为是从这个“子网络”集合中采样的。

那么,我的问题是 Keras 中实现的 dropout 的缩放效果(如果有的话)在哪里?

更新1:好的,所以 Keras 使用反向 dropout,尽管它在 Keras 文档和代码中称为 dropout。链接http://cs231n.github.io/neural-networks-2/#reg似乎并不表明两者是等价的。答案也不在https://stats.stackexchange.com/questions/205932/dropout-scaling-the-activation-versus-inverting-the-dropout。我可以看到他们做类似的事情,但我还没有看到有人说他们完全一样。我认为他们不是。

那么一个新问题:dropout 和 inverted dropout 等价吗?需要明确的是,我正在寻找数学理由来证明它们是或不是。


是的。它得到了正确的实施。从 Dropout 被发明的时候起,人们就从实现的角度对其进行了改进。 Keras 正在使用其中一种技术。它被称为反向辍学你可能会读到相关内容here.

UPDATE:

老实说 - 从严格的数学意义上来说,这两种方法并不等同。在倒置大小写您将每个隐藏激活乘以 dropout 参数的倒数。但由于导数是线性的,它相当于将所有梯度乘以相同的因子。为了克服这种差异,你必须设置不同的学习权重。从这个角度来看,这种方法有所不同。但从实际角度来看,这种方法是等效的,因为:

  1. 如果您使用自动设置学习率的方法(如 RMSProp 或 Adagrad),那么算法几乎不会发生任何变化。
  2. 如果您使用自动设置学习率的方法 - 您必须考虑 dropout 的随机性,并且由于某些神经元在训练阶段将被关闭(在测试/评估阶段不会发生什么) - 你必须重新调整你的学习率才能克服这种差异。概率论为我们提供了最佳的重新调用因子 - 它是 dropout 参数的倒数,它使得损失函数梯度长度的期望值在训练和测试/评估阶段相同。

当然——以上两点都是关于反向辍学技术。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Keras 的 dropout 实现正确吗? 的相关文章

随机推荐

  • 错误:在最新检查期间无法捕获任务“transformClassesWithDexForDebug”的输出文件快照

    我是 Android 应用程序开发新手 试图构建一个简单的界面 但遇到了这个错误 我该如何解决它 整个错误声明是这样的 错误 在最新检查期间无法捕获任务 transformClassesWithDexForDebug 的输出文件快照 jav
  • 主干视图继承

    我正在尝试为对象浏览器编写一个 Backbone 视图 该视图旨在在具有不同对象类型和略有不同操作的多个地方实现 我尝试简单地扩展浏览器中的主干视图 然后在我的实现中扩展浏览器 但这给我留下了一些共享的属性 这是不期望的效果 因为每次创建浏
  • JSON.stringify() 值作为数字?

    我在用JSON stringify 在 HTML 上
  • 如何在所有元素上用“js”替换“no-js”类名? [复制]

    这个问题在这里已经有答案了 我想做的是获取具有类名的元素no js并将其替换为js 我不知道该怎么做 我尝试谷歌搜索但找不到任何东西 所以有人知道该怎么做吗 我的目标是让菜单在单击时显示下拉导航 但如果禁用 JavaScript 我希望它在
  • Kadane算法中如何返回最大子数组?

    public class Kadane double maxSubarray double a double max so far 0 double max ending here 0 for int i 0 i lt a length i
  • 将元素添加到状态 React

    我已经有了这样的状态 this setState conversation div conversation map element gt if element id this props id return div div div div
  • 旧应用程序的 PAM 身份验证

    我有一个遗留应用程序 它通过网络异步接收用户名 密码请求 由于我已经将用户名和密码存储为变量 那么在 Linux Debian 6 上使用 PAM 进行身份验证的最佳方法是什么 我尝试编写自己的对话函数 但我不确定将密码输入其中的最佳方法
  • YouTube 链接的正则表达式

    是否有人有一个正则表达式 可以从 几乎 所有可能的 Youtube 链接方式获取 Youtube 视频 非嵌入对象 的链接 我认为这是一个非常常见的问题 并且我确信有很多方法可以将其联系起来 起点是 http www youtube com
  • 修改 String 的 List 迭代

    我无法以这种方式修改列表的元素 for String s list s x s 执行后此列表中的代码元素未更改 如何用最简单的方式通过List实现modyfing的迭代 Since String对象是不可变的 您无法更改正在迭代的值 此外
  • 如何通过 TFS API 获取最新的变更集编号

    如何通过 TFS API 获取最新的变更集编号 你能给我举个例子吗 干得好 TeamProjectPicker tpp new TeamProjectPicker TeamProjectPickerMode SingleProject tr
  • jqGrid:如何在不同页面上使用多选

    简单的问题 很难找到答案 如果我尝试以编程方式选择一行 我会使用以下命令 grid jqGrid setSelection rowId 问题是它只选择当前可见页面上的行 如果rowId在另一页上 则不会被选择 更多信息 我的目标是在第一次加
  • C++函数计算字符串中的所有单词

    我在一次采访中被问到这个问题 显然这是一个简单的问题 但对我来说不是 而且仍然不明显 给定一个字符串 计算其中的所有单词 即使重复也没关系 只是总数 就像文本文件的字数一样 单词是由空格分隔的任何内容 标点符号并不重要 只要它是单词的一部分
  • Python for 循环中的变量赋值

    我知道在Python中 常规的C 风格的变量赋值被对东西的引用所取代 即 a 1 2 3 b a a append 4 print b gives 1 2 3 4 print a gives 1 2 3 4 但我仍然很困惑为什么基本类型会出
  • 如何将自定义模板页面添加到夹层?

    我已经在夹层上玩了几天了 我一直在关注这个blog 这非常有帮助 我现在需要制作一堆需要基于自定义模板的页面 我的自定义模板称为content html 我已经把它放进去了myProject gt myApp theme folder gt
  • 使用 Json.net 将 JSON 数组中的多个项目添加到 C# 中的对象

    谁能告诉我如何反序列化包含多个属性的对象 鉴于下面的场景 代码可以正常工作 public ActionResult Index string json name Person 2 email email protected var emp
  • 我需要在react-native项目中保留.watchmanconfig文件吗

    默认反应本机项目生成 watchmanconfig只是空对象的文件 我可以安全地删除它吗 一个子问题是 我可以做 参考任何看守配置来以某种方式改善反应本机项目体验吗 watchmanconfig可以安全删除 If Watchman没有找到
  • Keycloak - 将所有用户映射到角色

    我知道keycloak已经暴露了下面的api
  • 自定义功能区 onAction 语法问题

    我跟着这里的路线为 Access 应用程序创建自定义功能区 但所有按钮都不起作用 我不断收到一条错误消息 指出 Access 无法找到该函数或宏 即使它是公共的且位于标准模块中 最终我发现如果我使用以下语法它会起作用 onAction fn
  • ViewPager2 无法动态添加删除片段

    在索引处删除 添加片段会导致 Viewpager2 中出现意外行为 这是不可能的ViewPager但预计将与Viewpager2 它会导致重复片段和不同步TabLayout 这是一个演示项目重现了这个问题 有一个切换按钮 可以删除片段并将其
  • Keras 的 dropout 实现正确吗?

    The KerasDropout参考的实施这张纸 以下摘录自该论文 这个想法是在测试时使用单个神经网络而不丢失 该网络的权重是经过训练的按比例缩小的版本 重量 如果在训练期间以概率 p 保留一个单元 则 该单元的输出重量在测试时乘以 p 为