【问题标题】:Default initial value for weights权重的默认初始值
【发布时间】:2018-05-17 23:37:00
【问题描述】:

在设置神经网络或任何使用梯度下降的数值优化系统时,有必要为权重(或要调用的任何系统参数)提供初始值。

一种策略是将它们初始化为随机值(将随机数种子设置为已知值,更改为不同的起点)。但这并不总是可取的(例如,现在我正在比较单精度和双精度的准确性,TensorFlow 随机数生成器在每种情况下输出不同的值)。所以我说的是初始值是非随机的场景。

必须提供一些初始值。在没有任何信息来指定值的情况下,它应该是什么?最明显的值是 0.0 和 1.0。有理由更喜欢其中一个吗?还是有一些其他的值由于某种原因更受欢迎?

【问题讨论】:

  • 不涉及任何编程的机器学习问题最好在 Cross Validated 上提出。 stats.stackexchange.com/questions/47590/…
  • 阅读有关该主题的任何介绍性论文。这将影响学习这些值的大小很重要(并且取决于数据和架构)并且在这里更重要:使用常量向量通常不起作用(你必须打破对称性!)。

标签: machine-learning neural-network


【解决方案1】:

正如 sascha 所观察到的,恒定的初始权重通常不是解决方案,因为您必须打破对称性。针对我遇到问题的特定上下文的更好解决方案:随机数生成器,无论类型如何,都给出相同的序列。

dtype = np.float64

# Random number generator that returns the correct type
# and returns the same sequence regardless of type
def rnd(shape=(), **kwargs):
    if type(shape) == int or type(shape) == float:
        shape = shape,
    x = tf.random_normal(shape, **kwargs, dtype=np.float64)
    if dtype == np.float32:
        x = tf.to_float(x)
    return x.eval()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 2018-09-23
    • 2014-12-29
    相关资源
    最近更新 更多