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

像堆乐高一样:从零开始解释神经网络的数学过程

发布时间:2019-07-12 16:27:28 所属栏目:建站 来源:机器之心编译
导读:副标题#e# 神经网络是线性模块和非线性模块的巧妙排列。当聪明地选择并连接这些模块时,我们就得到了一个强大的工具来逼近任何一个数学函数,如一个能够借助非线性决策边界进行分类的神经网络。 运行代码的步骤如下: gitclonehttps://github.com/omar-flor

请注意,这个损失函数包括一个正则项,它以岭回归的形式惩罚较大的权重。换言之,平方值比较大的权重会增大损失函数,而这正是我们希望最小化的指标。

像堆乐高一样:从零开始解释神经网络的数学过程

反向步骤:

这一步的目标就是沿着最小化损失函数的方向更新神经网络的权重。正如我们将要看到的,这是一个递归算法,它可以重用之前计算出来的梯度,而且严重依赖微分函数。因为这些更新减小了损失函数,所以一个神经网络便「学会了」去逼近具有已知类别的观察值的标签。这就是被称作泛化的一种属性。

与前向步骤不同的是,这个步骤沿着反向的顺序进行。它首先计算出输出层中损失函数对每个权重的偏导数 (dLoss/dW_2),然后计算隐藏层的偏导数 (dLoss/dW1)。让我们详细地解释每个导数吧。

(1) dLoss/dW_2:

链式法则表明,我们可以将一个神经网络的梯度计算分解成好多个微分部分:

像堆乐高一样:从零开始解释神经网络的数学过程

为了帮助记忆,下表列出了上面用到的一些函数定义以及它们的一阶导数:

像堆乐高一样:从零开始解释神经网络的数学过程

更直观地,我们在下图中要更新权重 W_2(蓝色部分)。为了做到这件事,我们需要沿着导数链计算三个偏导数。

像堆乐高一样:从零开始解释神经网络的数学过程

将数值代入到这些偏导数中,我们就能够计算出 W_2 的偏导数,如下所示:

像堆乐高一样:从零开始解释神经网络的数学过程

结果是一个 3x2 的矩阵 dLoss/dW_2,它将会沿着最小化损失函数的方向更新 W_2 的数值。

像堆乐高一样:从零开始解释神经网络的数学过程

(2) dLoss/dW_1:

(编辑:PHP编程网 - 襄阳站长网)

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