像堆乐高一样:从零开始解释神经网络的数学过程
副标题[/!--empirenews.page--]
神经网络是线性模块和非线性模块的巧妙排列。当聪明地选择并连接这些模块时,我们就得到了一个强大的工具来逼近任何一个数学函数,如一个能够借助非线性决策边界进行分类的神经网络。 运行代码的步骤如下:
尽管反向传播技术具有直观、模块化的特质,但是它负责更新可训练的参数,这是一个一直未被深入解释的主题。让我们以乐高积木为喻,一次增加一块,从零构建一个神经网络来一探其内部功能。 神经网络就像是由乐高积木组成的 上图描述了训练一个神经网络时所用到的部分数学过程。我们将在本文中解释这个。读者可能感到有趣的一点是:一个神经网络就是很多模块以不同的目标堆叠起来。
此时,这些运算只是组成了一个一般线性系统,无法对非线性交互建模。当我们再叠加一层,给模块的结构增加深度的时候这一点就会改变。网络越深,我们就会学到越多微妙的非线性交互,能解决的问题也就越复杂,或许这也是深度神经模型兴起的原因之一。 为什么我要读这篇文章? 如果你理解一个神经网络的内部部分,你就能够在遇到问题的时候快速知道先去改变哪里,并且能够制定策略来测试你所知道的这个算法的部分不变量和预期的行为。 因为调试机器学习模型是一项复杂的任务。根据经验,数学模型在首次尝试的时候不会奏效。它们可能会对新数据给出较低的准确率,会耗费很长的训练时间或者太多的内存,返回一个很大的错误负数值或者 NAN 的预测……在有些情况下,了解算法的运行机制可以让我们的任务变得更加便利:
具体的例子:学习异或函数 让我们打开黑盒子。我们现在要从零开始构建一个学习异或函数的神经网络。选择这个非线性函数可绝对不是随机的。没有反向传播的话,就很难学会用一条直线分类。 为了描述这个重要的概念,请注意下图中,一条直线是为何不能对异或函数输出中的 0 和 1 进行分类。现实生活中的问题也是非线性可分的。 这个网络的拓扑结构非常简单:
下图更加直观: 我们现在来训练这个模型。在我们这个简单的例子中,可训练的参数就是权重,但是应该知道的是,目前的研究正在探索更多可以被优化的参数类型。例如层之间的快捷连接、正则化分布、拓扑结构、残差、学习率等等。 反向传播是这样的一种方法:在给定的一批具有标签的观察值上,朝着将预定义的错误指标(就是损失函数)最小化的方向(梯度)更新权重。该算法已经多次被重复发现,这是另一种更通用的被称为自动微分的技术在反向积累模式下的特例。 网络初始化 让我们用随机数来初始化网络权重 前向步骤: 这一步的目标就是把输入变量 X 向前传递到网络的每一层,直至计算出输出层 h_2 的向量。 这就是其中发生的计算过程: 以权重 W_1 为线性核对输入数据 X 做线性变换: 使用 Sigmoid 激活函数对加权和进行缩放,得到了第一个隐藏层 h_1 的值。请注意,原始的 2D 向量现在映射到了 3D 空间。 第 2 层 h_2 中发生了类似的过程。让我们首先来计算第一个隐藏层的加权和 z_2,它现在是输入数据。 (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |