精品电商网站建设,设计网站主页要多少钱,基于wordpress的商城系统,世界上做的最后的网站一、实现注意:展开参数
在上一个视频中#xff0c;讨论了使用反向传播算法计算代价函数的导数。在本视频中#xff0c;将简要介绍一个实现细节#xff0c;即如何将参数从矩阵展开为向量。这样做是为了在高级最优化步骤中更方便地使用这些参数。 二、梯度检验
在神经网络中…一、实现注意:展开参数
在上一个视频中讨论了使用反向传播算法计算代价函数的导数。在本视频中将简要介绍一个实现细节即如何将参数从矩阵展开为向量。这样做是为了在高级最优化步骤中更方便地使用这些参数。 二、梯度检验
在神经网络中使用梯度下降算法时复杂模型可能导致一些难以察觉的错误即使代价函数在减小最终结果也可能并非最优解。为了解决这个问题采用一种称为梯度检验Gradient Checking的数值方法通过估计梯度值来验证我们计算的导数是否准确。
梯度检验方法
梯度检验的基本思想是在代价函数上沿着切线的方向选择离两个非常近的点然后计算两个点的平均值用以估计梯度。对于某个特定的参数 计算在 - 处和 处的代价值其中 是一个很小的值通常选取为 0.001然后求两个代价的平均值以估计在 处的导数。
Octave 中的代码示例如下
gradApprox (J(theta eps) - J(theta - eps)) / (2 * eps)偏导数检验
如果 是一个向量我们需要对每个参数进行偏导数检验。以下是针对 1 的示例
# 对参数1进行偏导数检验的示例
partialDerivativeTheta1 (J(theta1 eps, theta2, ..., thetaN) - J(theta1 - eps, theta2, ..., thetaN)) / (2 * eps)最后还需要对通过反向传播计算出的偏导数进行检验。计算出的偏导数存储在矩阵 () 中。在检验时将该矩阵展开成为向量同时将参数矩阵 展开为向量对每个 计算一个近似的梯度值并将这些值存储于一个近似梯度矩阵中。最终将这个近似梯度矩阵与反向传播计算的梯度矩阵进行比较。
通过梯度检验能够更加确信我们的梯度计算是正确的从而提高神经网络训练的可靠性。 三、随机初始化
在神经网络的训练中任何优化算法都需要一些初始的参数。到目前为止采用的是将所有参数初始化为 0 的方法。然而对于神经网络来说这种初始化方法是不可行的。如果所有参数都初始化为 0那么第二层的所有激活单元都会具有相同的值。同样如果将所有参数初始化为相同的非零值结果也会相似。 为了解决这个问题引入了随机初始化Random Initialization的概念。随机初始化的思想是将参数初始化为介于一定范围内的随机值而不是固定的值。
随机初始化的代码示例
假设要随机初始化一个尺寸为 10×11 的参数矩阵我们可以使用如下的 Octave 代码
Theta1 rand(10, 11) * (2 * eps) - eps上述代码使用 rand 函数生成一个包含介于 0 和 1 之间的随机值的矩阵然后通过乘法和减法操作将其缩放到介于负 eps 到正 eps 之间其中 eps 是一个很小的数通常取 0.01。
通过随机初始化打破了对称性防止了所有参数具有相同初始值的问题有助于神经网络更好地学习数据的特征提高了训练的效果。这是神经网络训练中一个重要的实现注意点。 参考资料
[中英字幕]吴恩达机器学习系列课程
黄海广博士 - 吴恩达机器学习个人笔记