像堆乐高一样:从零开始表明神经收集的数学进程
请留意,这个丧失函数包罗一个正则项,它以岭回归的情势处罚较大的权重。换言之,平方值较量大的权重会增大丧失函数,而这正是我们但愿最小化的指标。 反向步调: 这一步的方针就是沿着最小化丧失函数的偏向更新神经收集的权重。正如我们将要看到的,这是一个递归算法,它可以重用之前计较出来的梯度,并且严峻依靠微分函数。由于这些更新减小了丧失函数,以是一个神经收集便「学会了」去迫近具有已知类此外调查值的标签。这就是被称作泛化的一种属性。 与前向步调差异的是,这个步调沿着反向的次序举办。它起首计较出输出层中丧失函数对每个权重的偏导数 (dLoss/dW_2),然后计较潜匿层的偏导数 (dLoss/dW1)。让我们具体地表明每个导数吧。 (1) dLoss/dW_2: 链式法例表白,我们可以将一个神经收集的梯度计较解析成许多几何个微分部门: 为了辅佐影象,下表列出了上面用到的一些函数界说以及它们的一阶导数: 更直观地,我们在下图中要更新权重 W_2(蓝色部门)。为了做到这件事,我们必要沿着导数链计较三个偏导数。 将数值代入到这些偏导数中,我们就可以或许计较出 W_2 的偏导数,如下所示: 功效是一个 3x2 的矩阵 dLoss/dW_2,它将会沿着最小化丧失函数的偏向更新 W_2 的数值。 (2) dLoss/dW_1: 计较用于更新第一个潜匿层 W_1 权重的链式法则就揭示了一再行使已有计较功效的也许。 更直观地,从输出层到权重 W_1 的路径会遇到在后头层中早已计较出来的偏导数。 譬喻,偏导数 dLoss/dh_2 和 dh_2/dz_2 在上一节中已经被计较为输出层 dLoss/dW_2 进修权值的依靠项。 将全部的导数放在一路,我们就可以或许再一次执行链式法例,来为潜匿层的 W_1 更新权重。 最后,我们给权重赋予新的数值,完成了对神经收集的一步实习。 实现 让我们仅行使 numpy 作为线性代数引擎来将上面的数学方程转换成代码。神经收集在一个轮回中举办实习,个中每次迭代会给神经收集展示尺度的输入数据。在这个小例子中,我们只思量每次迭代中的整个数据集。前向步调、丧失函数和反向步调的计较会获得较量好的泛化,由于我们在每一次轮回中都用它们对应的梯度(矩阵 dL_dw1 和 dL_dw2)来更新可实习的参数。 代码生涯在这个 repo 中:https://github.com/omar-florez/scratch_mlp 让我们来运行这份代码! (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |