加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

像堆乐高一样:从零开始表明神经收集的数学进程

发布时间:2019-07-12 13:06:51 所属栏目:建站 来源:机器之心编译
导读:神经收集是线性模块和非线性模块的奇妙分列。当智慧地选择并毗连这些模块时,我们就获得了一个强盛的器材来迫近任何一个数学函数,如一个可以或许借助非线性决定界线举办分类的神经收集。 运行代码的步调如下: gitclonehttps://github.com/omar-florez/scratc

请留意,这个丧失函数包罗一个正则项,它以岭回归的情势处罚较大的权重。换言之,平方值较量大的权重会增大丧失函数,而这正是我们但愿最小化的指标。

像堆乐高一样:从零开始表明神经收集的数学进程

反向步调:

这一步的方针就是沿着最小化丧失函数的偏向更新神经收集的权重。正如我们将要看到的,这是一个递归算法,它可以重用之前计较出来的梯度,并且严峻依靠微分函数。由于这些更新减小了丧失函数,以是一个神经收集便「学会了」去迫近具有已知类此外调查值的标签。这就是被称作泛化的一种属性。

与前向步调差异的是,这个步调沿着反向的次序举办。它起首计较出输出层中丧失函数对每个权重的偏导数 (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

像堆乐高一样:从零开始表明神经收集的数学进程

让我们来运行这份代码!

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读