独家 | 一文为你解析神经网络(附实例、公式)

本文涉及的产品
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介:
人工神经网络风靡一时,人们不禁要问,这个朗朗上口的名字是否在模型自身的营销和应用中起到了一定作用。

据我所知,很多商业经理会说他们的产品使用了人工神经网络和深度学习。显然他们肯定不会说产品使用了“连接圆模型”(Connected Circles Models)或者“失败-惩罚-修正模型”(Fail and Be Penalized Machines)。但毫无疑问,人工神经网络已经在图像识别、自然语言处理等许多领域取得了成功的应用。

作为一个并未完全理解这些技术的专业数据科学家,就像一个没有工具的建筑工人,这让我感到很羞愧。因此,我弥补了这些缺失的功课,并写下这篇文章来帮助别人克服那些我在学习过程中遇到的困难和难题。

注意:本文示例中的R代码可以在 https://github.com/ben519/MLPB/blob/master/Problems/Classify%20Images%20of%20Stairs/intro_to_nnets_article_materials.R找到。

我们从一个激励问题开始。在这里,我们收集了2*2网格像素的灰度图像,每个像素的灰度值在0(白)至255(黑)之间。目标是建立一个识别“阶梯”模式的网络模型。


首先,我们关心的是如何找到一个能够合理拟合数据的模型,至于拟合方法,后面再考虑。

预处理

对每一个图像,给像素打上x1,x2,x3,x4 的标签并且生成一个输入向量喂给模型。希望我们的模型可以把有阶梯模式的图像预测为True,没有阶梯模式的图像预测为False。


单层感知机(模型迭代0)

我们可以构建一个简单的单层感知机模型,它使用输入的加权线性组合返回预测分数。如果预测分数大于选定的阈值,则预测为1,反之预测为0。更正式的表达式如下:


我们重新表述如下:


 即为我们的预测分数。


更形象的描述,我们可以把输入节点喂给输出节点来表示一个感知机。


对应于我们的例子,假设我们建立了如下的模型:


下面是感知机如何在我们训练图像上执行:


这肯定比随机猜测好,而且有一定的逻辑性。在所有阶梯模式的底部都有深色阴影像素,这也对应着x3和x4有较大的正系数。但是,这个模型还是有一些明显的问题:

问题 1.1:这个模型输出一个与似然概念相关的实数(更高的值意味着图像代表阶梯的概率更大),但是将这些值解释为概率是没有依据的,特别是因为它们可能超出范围[ 0, 1 ]。

问题 1.2:这个模型不能捕捉到变量和目标之间的非线性关系,为了看到这个问题,可以考虑一下下面的假设场景:

  • 案例一:从一个图像开始x = [100, 0, 0, 125],x3 从0增加至60。


  • 案例二:还是上一个图像x = [100, 0, 60, 125],x3 从60增加至120。


直观上来看,案例一应该比案例二在上有更大的增长,但是我们的感知机模型是线性方程,在 x3 的等效+ 60的变化导致这两种情况下的等效+ 0.12。

虽然我们的线性感知机还有很多的问题,但是我们先从解决这两个问题开始。

具有Sigmoid激活函数的单层感知机

(模型迭代1)

我们可以通过在感知机中加Sigmoid激活函数来解决上面的问题1.1问题1.2回想一下,Sigmoid函数是一个S形曲线,在0和1之间的垂直轴上有界,因此经常被用来模拟二元事件的概率。


按照这个想法,我们可以用下面的图片和等式更新我们的模型:



看起来有点熟悉?没错,这就是逻辑回归。然而,将模型解释为具有Sigmoid“激活函数”的线性感知器是更合适的,因为这样可以给我们更多的空间去推广。另外,我们现在把解释为概率,那必须相应更新我们的决策规则。


继续我们的示例问题,假设我们提出以下拟合模型:


观察该模型如何在前一节中的同一示例图像上运行:


很明显,已经解决了上面的问题1.1,继续看如何解决问题1.2

  • 案例一:从一个图像开始x = [100, 0, 0, 125],x3 从0增加至60。


  • 案例二:还是上一个图像x = [100, 0, 60, 125],x3 从60增加至120。


注意,当增加时,Sigmoid函数的曲率如何引起案例一“点亮”的(迅速增加)。但是随着z继续增加,增长的速度就变得缓慢了。这符合我们的直觉,即与案例二相比,案例一是阶梯的概率增长幅度更大。


然而,这个模型还是存在问题:

问题 2.1:与每个变量是单调关系,如果我们想要辨识轻微的阴影阶梯该怎么办呢?

问题 2.2:该模型没有考虑变量之间的关系,假定图像底部一行是黑色,又如果左上角的像素是白色的,那么右上角的像素变暗会增加图像是阶梯的概率。如果左上角的像素是黑色的,右上角的像素变暗则会降低图像是阶梯的概率。换句话说,增加 x3 可能增加或减少取决于其他变量的值,很明显目前的模型无法达到这点。

具有Sigmoid激活函数的多层感知机

(模型迭代2)

可以通过向感知机模型再加一层来解决上述问题2.1问题2.2

我们构建一些基本模型,比如上面的一个模型,然后我们将每个基本模型的输出作为另一个感知机的输入。这个模型实际上是一个香草神经网络(“香草”是一种常见的“常规”或“没有任何花哨的东西”的委婉说法),让我们看看它对某些例子可能有什么作用。

示例1 识别阶梯模式

  • 搭建一个模型,当“左侧阶梯”被识别时,该模型“点亮”
  • 搭建一个模型,当“右侧阶梯”确定时该模型“点亮”
  • 把基本模型的分数加起来,这样当都比较大时才会把最后一层网络上Sigmoid函数“点亮”。


或者

  • 搭建一个模型,当最后一列是黑色时模型“点亮”
  • 搭建一个模型,当左上角的像素是黑色,右上角的像素;
  • 亮时模型“点亮”
  • 搭建一个模型,当左上角像素是亮的,右上角的像素是黑色时模型“点亮”
  • 把基本模型的分数加起来,只有当的值大或者的值大时才会让最后一层网络上Sigmoid函数“点亮”。(注意,不会同时很大)


示例2 识别微弱阶梯

  • 搭建几个基本模型,当底部一行是阴影,x1是阴影x2是白色,x2是阴影x1是白色时曲率“开火”
  • 搭建几个基本模型,当底部一行是黑色,x1是黑色x2是白色,x2是黑色x1是白色时曲率“开火”
  • 结合这几个基本模型,当结果输进Sigmoid函数之前把黑色识别器从阴影识别器中去除。


相关概念及方法解释


  • 神经网络:单层感知机只有一个输出层,因此,我们建立的模型也被称为双层感知机因为有一个输出层是另一个输出层的输入。但是,我们可以把这些网络统称为神经网络,并且三层网络分别称为输入层、隐藏层和输出层。


  • 不唯一的激活函数:我们的示例使用了Sigmoid激活函数,我们也可以选择其它类型的激活函数Tanh和Relu。不过激活函数必须是非线性的,否则神经网络将简化为等效的单层感知器。
  • 搭建多分类器:我们可以在输出层增加几个节点,从而很容易把我们的模型扩展为多分类器。每一个输出节点都是我们要预测的一个类别。我们可以使用softmax函数把的一个向量映射为一个向量,并且向量内的元素加和为1,以此来代替用Sigmoid函数把一个实数映射在[0, 1]之间。


  • 使用两层以上的网络(深度学习):你可能会想,“我们是否可以扩展我们的香草神经网络,使它的输出层被送入第四层(第五层,第六层等等)?”答案是Yes,而且这就是我们经常提到的深度学习,并且效果还很好。然而,值得注意的是,任何一个具有多个隐藏层的网络都可以由仅有一个隐藏层的网络模拟,根据Universal Approximation Theorem定理可以用一个隐层的神经网络来逼近任何连续函数。但是,经常用深层神经网络架构来代替单隐层架构,是因为它们在拟合过程中可以更快地收敛到一个比较好的结果。


从拟合模型到训练样本(反向传播)

目前为止,我们讨论了神经网络如何有效的工作,接下来我们说一下如何让网络模型拟合标记的训练样本。换句话说,我们如何根据标记的训练样本,来选择最合适的网络参数。一般大家会选择梯度下降优化算法(MLE最大似然估计也可以),梯度下降过程如下所示:

  • 从一些标记好的训练数据开始
  • 选择一个可微的损失函数找最小值
  • 选择一个网络架构,主要是确定网络有多少层,每层有多少节点
  • 随机初始化网络的权值
  • 在这个模型上运行训练数据,产生样本的预测值,然后根据损失函数计算总体误差(这称为正向传播)
  • 每一个权值的微小变化都决定着损失函数的大小,换句话说,要对每一个权值求梯度。(这称为反向传播)
  • 在负梯度方向上选择一个小的步长,比如,如果而且,这时我们需要减小来使当前的损失函数值降低。更新的方式(0.001是我们预先设置的步长值)
  • 重复这个过程(从第五步开始),直到设定的迭代次数或者损失函数收敛。

以上是基本的想法,实际上,这带来了很多挑战。

挑战 1:计算的复杂性

在拟合过程中,我们需要计算的一个问题是L相对于每个权值的梯度。显然这不容易,因为L依赖于输出层中的每个节点,每个节点依赖于它前面层中的每个节点,以此类推。而我们用到的神经网络可能会有数十层,高达上千个节点,这就意味着计算将会是链式法则的噩梦。

解决这个问题,就要认识到你在使用链式法则求时会重复使用中间导数,这可以让你避免重复计算同一个数。

另外一种解决方法,我们可以找一个特殊的激活函数,它的导数可以用函数值来表示,例如= 。在正向传播过程中,为了计算出预测值必须计算每个向量元素的。它可以用在反向传播中计算梯度值来更新每个节点的权值,这样不仅节省时间还节省内存。

第三种解决方法,把训练集分成“mini batches”,并不断根据每一个batch更新权值。例如,把你的训练集分为{batch1, batch2, batch3},在训练集上第一次过程如下:

  • 使用batch1更新权值
  • 使用batch2更新权值
  • 使用batch3更新权值

每次更新后重新计算L的梯度。

最后一种值得一提的技术是使用GPU而不是CPU,因为GPU更适合并行执行大量计算。

挑战 2:梯度下降可能找不到全局最小值

与其说是神经网络的挑战,不如是梯度下降的挑战。因为在梯度下降过程中,权值的更新可能会陷入局部最小值,也有可能越过最小值。也有解决的办法,可以在训练过程中选择不同的步长值或者增加网络的节点或层数来解决这个问题,在增加网络节点或层数时要注意防止过拟合。另外,一些探索式方法,例如momentum也可以有效解决这个问题。

挑战 3 如何泛化?

我们如何编写一个通用程序来拟合任意数量的节点和网络层的神经网络呢?我的答案是,“你不必这么做,完全可以借助Tensorflow”。但如果你真的想这样做,最困难的部分就是计算损失函数的梯度,所以把梯度表示成递归函数是你要考虑的一个重要问题。 更正式的名字是自动微分,一个五层的神经网络就是四层网络喂进一些感知机中,同样,四层的神经网络是三层的网络喂进一些感知机中,等等。


原文发布时间为:2018-01-11

本文作者:Ben Gorman

本文来自云栖社区合作伙伴“数据派THU”,了解相关信息可以关注“数据派THU”微信公众号

目录
打赏
0
0
0
0
73531
分享
相关文章
阿里云服务器实例选择指南:热门实例性能、适用场景解析对比参考
2025年,在阿里云的活动中,主售的云服务器实例规格除了轻量应用服务器之外,还有经济型e、通用算力型u1、计算型c8i、通用型g8i、计算型c7、计算型c8y、通用型g7、通用型g8y、内存型r7、内存型r8y等,以满足不同用户的需求。然而,面对众多实例规格,用户往往感到困惑,不知道如何选择。本文旨在全面解析阿里云服务器实例的各种类型,包括经济型、通用算力型、计算型、通用型和内存型等,以供参考和选择。
深入解析PDCERF:网络安全应急响应的六阶段方法
PDCERF是网络安全应急响应的六阶段方法,涵盖准备、检测、抑制、根除、恢复和跟进。本文详细解析各阶段目标与操作步骤,并附图例,助读者理解与应用,提升组织应对安全事件的能力。
536 89
深入解析图神经网络注意力机制:数学原理与可视化实现
本文深入解析了图神经网络(GNNs)中自注意力机制的内部运作原理,通过可视化和数学推导揭示其工作机制。文章采用“位置-转移图”概念框架,并使用NumPy实现代码示例,逐步拆解自注意力层的计算过程。文中详细展示了从节点特征矩阵、邻接矩阵到生成注意力权重的具体步骤,并通过四个类(GAL1至GAL4)模拟了整个计算流程。最终,结合实际PyTorch Geometric库中的代码,对比分析了核心逻辑,为理解GNN自注意力机制提供了清晰的学习路径。
241 7
深入解析图神经网络注意力机制:数学原理与可视化实现
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
67 15
阿里云服务器第八代通用型g8i实例评测:性能与适用场景解析
阿里云服务器通用型g8i实例怎么样?g8i实例采用CIPU+飞天技术架构,并搭载最新的Intel 第五代至强可扩展处理器(代号EMR),不仅性能得到大幅提升,同时还拥有AMX加持的AI能力增强,以及全球范围内率先支持的TDX机密虚拟机能力。这些特性使得g8i实例在AI增强和全面安全防护两大方面表现出色,尤其适用于在线音视频及AI相关应用。本文将深入探讨g8i实例的产品特性、优势、适用场景及规格族,以帮助您更好地了解这款产品,以供参考和选择。
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
阿里云CDN:全球加速网络的实践创新与价值解析
在数字化浪潮下,用户体验成为企业竞争力的核心。阿里云CDN凭借技术创新与全球化布局,提供高效稳定的加速解决方案。其三层优化体系(智能调度、缓存策略、安全防护)确保低延迟和高命中率,覆盖2800+全球节点,支持电商、教育、游戏等行业,帮助企业节省带宽成本,提升加载速度和安全性。未来,阿里云CDN将继续引领内容分发的行业标准。
127 7
阿里云网络安全体系解析:如何构建数字时代的"安全盾牌"
在数字经济时代,阿里云作为亚太地区最大的云服务提供商,构建了行业领先的网络安全体系。本文解析其网络安全架构的三大核心维度:基础架构安全、核心技术防护和安全管理体系。通过技术创新与体系化防御,阿里云为企业数字化转型提供坚实的安全屏障,确保数据安全与业务连续性。案例显示,某金融客户借助阿里云成功拦截3200万次攻击,降低运维成本40%,响应时间缩短至8分钟。未来,阿里云将继续推进自适应安全架构,助力企业提升核心竞争力。
阿里云服务器经济型e实例解析:性能、稳定性与兼顾成本
阿里云经济型e云服务器以其高性价比、稳定可靠的性能以及灵活多样的配置选项,成为了众多企业在搭建官网时的首选。那么,阿里云经济型e云服务器究竟怎么样?它是否能够满足企业官网的搭建需求?本文将从性能表现、稳定性与可靠性、成本考虑等多个方面对阿里云经济型e云服务器进行深入剖析,以供大家参考选择。
244 37
深入解析:Linux网络配置工具ifconfig与ip命令的全面对比
虽然 `ifconfig`作为一个经典的网络配置工具,简单易用,但其功能已经不能满足现代网络配置的需求。相比之下,`ip`命令不仅功能全面,而且提供了一致且简洁的语法,适用于各种网络配置场景。因此,在实际使用中,推荐逐步过渡到 `ip`命令,以更好地适应现代网络管理需求。
100 11

数据派

+ 订阅

推荐镜像

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等