Tensorflow:什么是tf.nn.dropout output_keep_prob?

时间:2018-04-16 18:43:10

标签: python tensorflow deep-learning pytorch dropout

我想了解output_keep_prob

的概念

所以,如果我的例子是简单的RNN:

    with tf.variable_scope('encoder') as scope:
        cells = rnn.LSTMCell(num_units=500)
        cell = rnn.DropoutWrapper(cell=cells, output_keep_prob=0.5)

        model = tf.nn.bidirectional_dynamic_rnn(cell, cell, inputs=embedding_lookup, sequence_length=sequence_le,
                                                dtype=tf.float32)

我的困惑是,如果我给output_keep_prob=0.5实际意味着什么?我知道通过添加一个丢失,它不太容易过度拟合(称为正规化)。它会在训练过程中随机关闭神经元的激活,好吧我得到了这一点,但是当我给出时我很困惑

output_keep_prob=0.5和我的no_of_nodes = 500然后0.5意味着它将在每次迭代时随机转动50%的节点,或者意味着它将只保留那些概率大于或等于0.5的连接

keep_layers whose probability =>0.5  

turn off 50% randomly nodes unit at each iteration ??

我试图通过这个stackoverflow answer来理解这个概念,但也有同样的混淆,实际上0.5意味着什么?它应该在每次迭代时丢弃50%的节点,或者只保留那些概率大于或等于0.5

的节点

如果答案是第二个keep only those nodes which have probability more or equal to 0.5

那么这意味着假设我已经给出了500个节点单元,只有30个节点有0.5个概率,所以它将剩下470个节点,并且只使用30个节点进行传入和传出连接?

因为this answer说:

  

假设图层中有10个单位并将keep_prob设置为0.1,   然后将设置10个随机选择的单元中的10个的激活   到0,剩下的一个将按10倍缩放。我想   更准确的描述是你只保持激活10   节点的百分比。

虽然@mrry的另一方this answer说:

  

它意味着层之间的每个连接(在这种情况下之间)   最后一个密集连接的层和读出层)将仅被使用   训练时概率为0.5。

任何人都可以清楚地解释哪一个是正确的,这个值在keep_prob中实际代表什么?

2 个答案:

答案 0 :(得分:2)

Keep_prop表示保留任何给定神经元输出的概率(而不是丢弃,即归零)。换句话说,keep_prob = 1 - drop_prob

tf.nn.dropout()说明指出

  

默认情况下,每个元素都是独立保存或删除的。

所以如果你考虑一下,如果你有一个大量的神经元,比如一层中的10,000,而keep_prob就是说,0.3,那么3,000就是保持神经元数量的预期值。因此,或多或少地说,keep_prob为0.3意味着保持10,000个神经元中随机选择的3,000个值的值。但不完全是这样,因为实际数字可能会有一些变化,而不是3,000。

缩放进入画面,因为如果你丢弃一定数量的神经元,那么该层的预期总和将会减少。因此剩下的那些乘以向前馈送相同数量的值,否则它们将相反。如果您加载预训练网络并希望继续训练但现在具有不同的keep_prob值,这一点尤为重要。

(请注意,您可以决定使用noise_shape参数将非独立性引入丢弃概率,请参阅tf.nn.drouput() description,但这超出了此问题的范围。)< / p>

每次调用网络都会重新计算丢弃神经元的随机决定,因此每次迭代都会丢弃一组不同的神经元。辍学背后的想法是后续的层不能过度拟合并学会观察某些激活的任意星座。你通过改变之前可用的激活来破坏“懒惰神经元过度拟合的秘密计划”。

答案 1 :(得分:0)

辍学效率的直观解释如下:

想象一下,你有一个工人团队,总体目标是学习如何建造一座建筑物。当每个工人过于专业化,如果一个人生病或犯错误,整个建筑物将受到严重影响。 “辍学”技术提出的解决方案是每周随机挑选一些工人并将他们送到商务旅行。希望整个团队仍然学会如何建造这座建筑,从而更能适应噪音或工人度假。

由于其简单性和有效性,今天在各种架构中使用了丢失,通常在完全连接的层之后立即使用。

机器学习的泛化指的是模型学习的概念应用于训练期间未见的示例。大多数机器学习模型的目标是从训练数据中很好地概括,以便在将来对看不见的数据做出良好的预测。当模型很好地从训练数据中学习细节和噪声时会发生过度拟合,但它并不能很好地概括,因此测试数据的性能很差。当数据集与需要学习的模型参数的数量相比太小时,这是一个非常常见的问题。这个问题在深度神经网络中尤其严重,在这种情况下,拥有数百万个参数并不罕见。

这是我发现的视觉解释:

enter image description here

More info此处。