0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

从数学角度来充分了解神经网络是如何工作的

nlfO_thejiangme 来源:未知 作者:李倩 2018-08-31 11:03 次阅读

如今,即便是结构非常复杂的神经网络,只要使用Keras,TensorFlow,MxNet或PyTorch等先进的专业库和框架,仅需几行代码就能轻松实现。而且,你不需要担心权重矩阵的参数大小,也不需要刻意记住要用到的激活函数公式,这可以极大的避免我们走弯路并大大简化了建立神经网络的工作。然而,我们还是需要对神经网络内部有足够的了解,这对诸如网络结构选择、超参数调整或优化等任务会有很大帮助。本文我们将会从数学角度来充分了解神经网络是如何工作的。

图1. 训练集的可视化

如图1所示,是一个典型的数据二分类问题,两类的点分别形成了各自的圆,这种数据分布对于许多传统的机器学习算法来说很难,但对于轻量级的神经网络却很容易胜任。为了解决该问题,我们将使用具有图2所示结构的神经网络,包括五个全连接层,每层具有不同数量的单元。对于隐藏层,我们将使用ReLU作为其激活函数,而使用Sigmoid作为输出层。 这是一个非常简单的结构,但对于我们要解决的问题而言却已经拥有足够的能力了。

图2. 神经网络结构

正如之前提到的,只需几行代码便足以创建和训练一个模型,就能实现测试集中的分类结果几乎达到100%的准确度。而我们的任务,就是为所选的网络设定超参数,如层数、每层的神经元数、激活函数和迭代次数等。现在让我们看一个很酷的可视化,来看看学习过程究竟发生了什么。

图3. 训练过程可视化

什么是神经网络?

让我们首先回答这个关键问题:什么是神经网络? 它是一种在生物学启发下构建计算机程序的方法,能够学习并找到数据中的联系。 如图2所示,网络是按层排列的“神经元”的集合,通过权重互联互通的联系在了一起形成网络。

每个神经元接收一组编号从1到n 的x值作为输入,用来计算预测的y(^)值。向量x实际上包含来自训练集的m个样本之一的特征值。比较重要的是,每个神经元都有自己的一组参数,通常称为w(权重列向量)和b(偏差),它们会学习过程中发生变化。每次迭代中,神经元基于其当前权重向量w来计算输入向量x加权平均后的值并加上偏置b。最后,该计算结果会通过非线性激活函数g,本文的后面部分会提及一些最常用的激活函数。

图4. 单个神经元

我们已经对单个神经元的工作有所了解了,下面让我们再深入学习一下如何对整个神经网络层进行计算,并将所有图进行向量化,最后将计算合并到矩阵方程中。 为了统一符号,方程中[l]表示为所选层,下标表示该层中神经元的索引

图5 单层

对单个单元而言,我们使用x和y(^)分别表示特征列向量和预测值。然后使用向量a表示相应的层,而向量x对应层0的输入,即输入层。层中的每个神经元根据以下等式执行计算:

为了清楚起见,以第2层为例展开:

如您所见,对于每层我们都必须执行类似操作,那么使用for循环效率就会不高。为了加快计算速度,我们将使用向量化的方法。 首先,通过将转置后的权重w行向量堆叠在一起就 构建得到矩阵W. 类似地,我们将层中的每个神经元的偏置堆叠在一起,从而得到列向量b。 这样我们就能构建出一个矩阵方程,能够一次便对层中所有神经元进行计算。下面我们写下使用的矩阵和向量的维数。

到目前为止,得到的方程只适用于这一个例子。 在神经网络的学习过程中,您通常使用大量数据,最多可达数百万条。因此,下一步要做的将是跨多个示例的矢量化。 假设我们的数据集包含m个示例,每个示例都具有nx特征。首先,我们将每层的列向量x,a和z组合在一起,分别创建X,A和Z矩阵,然后我们重写先前的方程。

激活函数

激活函数是神经网络的关键元素之一。没有它们,我们的神经网络只能成为线性函数的组合,就只能具备有限的扩展性,也不会拥有超越逻辑回归的强大能力。引入非线性元素则会使得学习过程中拥有更大的灵活性和创建复杂表示的功能。 激活函数也会对学习速度产生重大影响,这也是主要的选择标准之一。下图6中,显示了一些常用的激活函数。目前,最受欢迎的隐藏层可能是ReLU。但如果我们要处理二分类问题时,尤其是我们希望从模型返回的值在0到1的范围内时,我们有时仍然使用sigmoid激活函数。

图6.目前最流行的激活函数及其衍生的图解

损失函数

我们主要通过损失函数的值来观察学习过程的进展。一般来说,损失函数旨在显示我们与“理想”解决方案的距离。在本文的例子中,我们使用二进制交叉熵作为损失函数,但根据不同的问题可以应用不同的函数。本文使用的函数由下列公式描述,并且在学习过程中其值的变化过程可视化显示在图7中,显示了损失函数如何随迭代次数而准确度逐渐提高。

图7.学习过程中准确度和损失函数值的变化

神经网络是如何学习的?

整个学习过程是围绕如何调整参数W和b使得损失函数最小化进行的。为了实现这一目标,我们将结合微积分并使用梯度下降法来找到函数最小值。在每次迭代中,相对于神经网络的每个参数计算损失函数对应的偏导数值。导数具备很好的描述函数斜率的能力。通过可视化,我们可以清楚地看到梯度下降是如何改变参数变量使得目标函数的值在图中向下移动。如图8所示,可以看到每次成功的迭代都朝着最小值点方向进行。在我们的神经网络中,它以相同的方式工作,每次迭代时计算的梯度代表应该移动的方向。主要区别在于,在我们的神经网络范例中,我们有更多的参数需要操作。因此变得更为复杂,那么究竟怎样才能计算出最优参数呢?

图8. 模型训练中的梯度下降

这时候我们就需要引入计算最优参数的算法——反向传播(BP),它允许我们计算一个非常复杂的梯度,也正是我们需要的。根据以下公式来调整神经网络的参数。

在上面的等式中,α表示学习率,这个超参数可以自定义调整。选择合适的学习率是至关重要的,如果我们将其设置得太低,那么我们的神经网络会学习得非常慢,如果设置得太高那么损失函数就不会到达最小值了。 dW和db分别是W和b相对于损失函数的偏导数,可以上述公式推导而的。 dW和db的尺寸也是分别和W和b对应的。图9显示了神经网络中的操作顺序,我们可以清楚地看到前向传播和反向传播是如何协同工作以优化损失函数的。

图9. 前向传播和反向传播

通过前向传播的预测和反向传播纠正信号,就能不断的根据数据来调整网络,最终实现了神经网络从数据中学习的能力。

在使用神经网络时,至少要了解内部运行过程的基础知识才能得心应手。尽管在本文中提到了一些比较重要的知识,但这仅仅是冰山一角。 如果希望深入理解神经网络的运行机理,请使用像Numpy一样的基础工具来编写一个自己的小型神经网络吧!你会得到想不到的收获!

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 神经网络
    +关注

    关注

    42

    文章

    4572

    浏览量

    98720
  • 函数
    +关注

    关注

    3

    文章

    3866

    浏览量

    61308
  • 神经元
    +关注

    关注

    1

    文章

    284

    浏览量

    18319

原文标题:从数学角度看神经网络是如何工作的?

文章出处:【微信号:thejiangmen,微信公众号:将门创投】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    matlab 中亮剑数学 全面掌握控制 神经网络就在脚下

    `如果想学控制,你的数学就是造诣,神经网络的基础离散数学数学建模实际问题分析,如何matlab求解,这里给你解答,这里是数学视频,偏导数分
    发表于 07-30 11:46

    关于开关磁阻电机的matlab BP神经网络数学建模方面的资料

    求大神们 给点关于开关磁阻电机的matlab BP神经网络数学建模方面的资料
    发表于 11-17 11:16

    labview BP神经网络的实现

    是classes(层级吗?),希望有前辈能够详细的帮我讲解下这个范例!!!谢谢!!!!(本人已对BP神经网络的理论知识有了了解
    发表于 02-22 16:08

    人工神经网络算法的学习方法与应用实例(pdf彩版)

    的基本处理单元,它是神经网络的设计基础。神经元是以生物的神经系统的神经细胞为基础的生物模型。在人们对生物神经系统进行研究,以探讨人工智能的机
    发表于 10-23 16:16

    【PYNQ-Z2试用体验】神经网络基础知识

    前言前面我们通过notebook,完成了在PYNQ-Z2开发板上编写并运行python程序。我们的最终目的是基于神经网络,完成手写的数字识别。在这之前,有必要讲一下神经网络的基本概念和工作原理。何为
    发表于 03-03 22:10

    卷积神经网络如何使用

    卷积神经网络(CNN)究竟是什么,鉴于神经网络在工程上经历了曲折的历史,您为什么还会在意它呢? 对于这些非常中肯的问题,我们似乎可以给出相对简明的答案。
    发表于 07-17 07:21

    【案例分享】基于BP算法的前馈神经网络

    传播的,不会回流),区别于循环神经网络RNN。BP算法(Back Propagation):误差反向传播算法,用于更新网络中的权重。BP神经网络思想:表面上:1. 数据信息的前向传播,
    发表于 07-21 04:00

    【案例分享】ART神经网络与SOM神经网络

    今天学习了两个神经网络,分别是自适应谐振(ART)神经网络与自组织映射(SOM)神经网络。整体感觉不是很难,只不过一些最基础的概念容易理解不清。首先ART神经网络是竞争学习的一个代表,
    发表于 07-21 04:30

    人工神经网络实现方法有哪些?

    人工神经网络(Artificial Neural Network,ANN)是一种类似生物神经网络的信息处理结构,它的提出是为了解决一些非线性,非平稳,复杂的实际问题。那有哪些办法能实现人工神经
    发表于 08-01 08:06

    BP神经网络的基础数学知识分享

    一文看懂BP神经网络的基础数学知识
    发表于 06-16 07:14

    如何构建神经网络

    原文链接:http://tecdat.cn/?p=5725 神经网络是一种基于现有数据创建预测的计算系统。如何构建神经网络神经网络包括:输入层:根据现有数据获取输入的层隐藏层:使用反向传播优化输入变量权重的层,以提高模型的预测
    发表于 07-12 08:02

    基于BP神经网络的PID控制

    最近在学习电机的智能控制,上周学习了基于单神经元的PID控制,这周研究基于BP神经网络的PID控制。神经网络具有任意非线性表达能力,可以通过对系统性能的学习实现具有最佳组合的PID控
    发表于 09-07 07:43

    神经网络移植到STM32的方法

    问题,一个是神经网络的移植,另一个是STM32的计算速度。神经网络的移植网络采用的是最简单的BP神经网络,基本原理可以自己去了解一下,大概就
    发表于 01-11 06:20

    卷积神经网络模型发展及应用

    等[16- 18]进行分类。特征提取和分类器的 设计是图片分类等任务的关键,对分类结果的好坏 有着最为直接的影响。卷积神经网络可以自动地 训练样本中学习特征并且分类,解决了人工特征设计 的局限性
    发表于 08-02 10:39

    深度:了解训练神经网络时所用到的数学过程

    模型的训练、调参是一项非常费时费力的工作了解神经网络内部的数学原理有利于快速找出问题所在。
    的头像 发表于 07-15 15:22 3835次阅读
    深度:<b class='flag-5'>了解</b>训练<b class='flag-5'>神经网络</b>时所用到的<b class='flag-5'>数学</b>过程