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

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

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

下面可以看到一些进行了好多次迭代训练得到的能够近似异或函数的神经网络

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

左图:准确率;中间的图:学习到的决策边界;右图:损失函数

首先,我们来看一下隐藏层具有 3 个神经元的神经网络为何能力较弱。这个模型学会了用一个简单的决策边界来进行二分类,这个边界开始是一条直线,但是随后就表现出了非线性的行为。随着训练的持续,右图中的损失函数也明显地减小。

隐藏层拥有 50 个神经元的神经网络明显地增加了模型学习复杂决策边界的能力。这不仅仅能够得到更准确的结果,而且也使梯度发生了爆炸,这是训练神经网络时的一个显著问题。当梯度非常大的时候,反向传播中的连乘会产生很大的更新权重。这就是最后几步训练时损失函数突然增大的原因(step>90)。损失函数的正则项计算出了已经变得很大的权重的平方值(sum(W²)/2N)。

正如你所看到的一样,这个问题可以通过减小学习率来避免。可以通过实现一个能够随着时间减小学习率的策略来实现。或者通过强制执行一个更强的正则化来实现,可能是 L1 或者 L2。梯度消失和梯度爆炸是很有趣的现象,我们后续会做完整的分析。

原文链接:

https://medium.com/towards-artificial-intelligence/one-lego-at-a-time-explaining-the-math-of-how-neural-networks-learn-with-implementation-from-scratch-39144a1cf80

【本文是51CTO专栏机构“机器之心”的原创译文,微信公众号“机器之心( id: almosthuman2014)”】

戳这里,看该作者更多好文

(编辑:核心网)

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

热点阅读