我在看代码,发现了这个:
model.add(Dense(13, input_dim=13, kernel_initializer='normal', activation='relu'))
我很想知道kernel_initializer
但无法理解它的重要性?
我在看代码,发现了这个:
model.add(Dense(13, input_dim=13, kernel_initializer='normal', activation='relu'))
我很想知道kernel_initializer
但无法理解它的重要性?
神经网络需要从一些权重开始,然后迭代地将它们更新为更好的值。术语 kernel_initializer 是一个花哨的术语,用于初始化权重的统计分布或函数。在统计分布的情况下,库将从该统计分布生成数字并用作起始权重。
例如在上面的代码中,正态分布将用于初始化权重。您也可以使用其他函数(常数,如 1 或 0)和分布(均匀)。所有可能的选项都记录在这里。
附加说明:术语内核是其他经典方法(如 SVM)的继承。这个想法是将给定输入空间中的数据转换到另一个使用核函数实现转换的空间。我们可以将神经网络层视为进行这些转换的非线性映射,因此使用了术语内核。
在激活函数中,初始化对于训练神经网络很重要。我从 DeeplearingAI 网页粘贴了关于内核的建议。
使用不适当的值初始化内核权重将导致神经网络训练出现分歧或减慢。用简单的对称权重矩阵说明了梯度爆炸/消失问题,观察可以推广到任何太小或太大的初始化值。
案例 1:过大的初始化导致梯度爆炸
考虑每个内核权重初始化略大于单位矩阵的情况,例如:
当激活用于反向传播时,这会导致梯度爆炸问题。也就是说,成本相对于参数的梯度太大。这导致成本在其最小值附近波动。
案例 2:太小的初始化导致梯度消失
类似地,考虑每个内核权重初始化略小于单位矩阵的情况。
当这些激活用于反向传播时,这会导致梯度消失问题。成本相对于参数的梯度太小,导致成本在达到最小值之前收敛。