Processing math: 4%

浅谈神经网络算法

简介:

我们在设计机器学习系统时,特别希望能够建立类似人脑的一种机制。神经网络就是其中一种。但是考虑到实际情况,一般的神经网络(BP网络)不需要设计的那么复杂,不需要包含反馈和递归。
人工智能的一大重要应用,是分类问题。本文通过分类的例子,来介绍神经网络。

1.最简单的线性分类

一个最简单的分类,是在平面上画一条直线,左边为类0,右边为类1,直线表示为 z=ax+by+c
这是一个分类器,输入(x,y),那么,要求的参数有三个:a,b,c。另外注意c的作用,如果没有c,这条直线一定会过原点。
最简单的神经网络
因此,我们可以设计一个简单的神经网络,包含两层,输入层有三个节点,代表x,y,1,三条线分别代表a,b,cg(z)对传入的值x进行判别,并输出结果。

z=θ

但是,由于z的值可能为[ , + ],为了方便处理,需要将其压缩到一个合理的范围,还需sigmoid函数:
a ( z ) = 1 1 e z

这样的激励函数,能够将刚才的区间,压缩到 [ 0 , 1 ]
至于如何训练,会在之后的章节中讲解。

2.多层级神经网络

刚才展示了最简单的二分类,如果有四个分类,那一条线就无法满足要求了。想象两条直线,就会将平面划分为四个区域,一个三角区域相当于两个子平面求交集。
因此直觉告诉我们,如果有多个神经元,那么这样的问题能表现为问题的“逻辑与”操作。将第一节中介绍的神经网络的输出,再做一个判断层,即多层网络。
单层感知器
但是,如何实现逻辑与呢?用下面的图一目了然:
此处输入图片的描述
仔细看下,这相当于创建一条线,除非 x 1 x 2 都等于1,否则 h θ ( x ) < 0
进一步地,如果我们能够对区域求并集,那么总可以对不同的子区域求并。而实现并操作和与操作是类似的:
此处输入图片的描述
此处就能看到sigmoid函数的作用了,如果没有它对数值的放缩,并和与的操作就无法实现了。
输出还能作为下一级的输入,从而增加了一个隐层,产生了单隐层神经网络,再复杂一些,如果网络层数特别多,则叫做深度学习网络,简称深度学习。
此处输入图片的描述
之前针对一个线性不可分的区域,需要将其变换到更高维度的空间去处理。但如果用神经网络,你总可以通过n条直线,将整个区间围起来。只要直线数量够多,总能绘制出任意复杂的区域。每一个子区域都是凸域:
此处输入图片的描述
简直不能更酷!下面这张图总结了不同类型的神经网络具备的功能:
此处输入图片的描述
数学家证明了,双隐层神经网络能够解决任意复杂的分类问题。但我们的问题到此为止了吗?不见得!
这里还有几个问题:

  • 异或如何实现?异或肯定是不能通过一条直线区分的,因此单层网络无法实现异或,但两层(包含一个隐层)就可以了。
  • 过拟合问题:过多的隐层节点,可能会将训练集里的点全部围进去,这样系统就没有扩展性了。如何防止过拟合?
  • 如何训练:如何计算出合理的神经网络参数?(隐层节点数)

3.如何训练神经网络

如果一个平面,有6个点,分成三类。如何设计呢?
此处输入图片的描述
一种最狂暴的方法,是对每一个点都用四条线围起来,之后,再对六个区域两两取并集。形成下面这张超复杂的图:
此处输入图片的描述
解释一下为什么要有这么多个节点:
第一层:x,y再加bias,三个
第二层:每个点需要四条线围起来,加上bias,总共4*6+1=25个
第三层:一个节点处于该类的条件是在四条线的中间(交集),因此每四个点汇成一个点,24/4+1=7个
第四层:三分类问题,需要对每两个区域求并集,因此需要6/2+1=4个

但这样的解法,使用了3+25+7+4=39个节点,需要111个参数。这样的系统非常复杂,对未知节点几乎没有任何扩展性。
仔细思考这个问题, 我们能够通过更少的节点和层数,来简化这个问题嘛?只要三条直线就可以!节点数量大大减少。不仅训练效率更高,而且可扩展能力很强。对更复杂的例子,我们又不是神仙,怎么知道设计几个隐层和多少个节点呢?
所谓超参数,就是模型之外的参数,在这个例子中,就是隐层的数量和节点的数量。通常来说,线性分类器(回归)只需要两层即可,对于一般的分类问题,三层足够。
一个三层的神经网络,输入和输出节点的数量已经确定,那如何确定中间层(隐层)的节点数量呢?一般有几个经验:

  • 隐层节点数量一定要小于N-1(N为样本数)
  • 训练样本数应当是连接权(输入到第一隐层的权值数目+第一隐层到第二隐层的权值数目+...第N隐层到输出层的权值数目,不就是边的数量么)的2-10倍(也有讲5-10倍的),另外,最好将样本进行分组,对模型训练多次,也比一次性全部送入训练强很多。
  • 节点数量尽可能少,简单的网络泛化能力往往更强
  • 确定隐层节点的下限和上限,依次遍历,找到收敛速度较快,且性能较高的节点数

如何表示一个神经网络?网络有m层,每层的节点分别为 n o d e 0 , n o d e 1 . . . n o d e m ,节点最多的层,有m个节点,那么我们可以将其表达为一个矩阵W,规模为 m n ,内部有些值是没有定义的。

4.训练算法

线性可分

如果输入和输出是线性关系(或者是正相关),那么想象我们在调节一个参数时,当输出过大,那就把输入调小一些,反之调大一些,最后当输出和我们想要的非常接近时,训练结束。这个就好比,在平面上,如果一个点被分配到了错误的输出,就应该对直线平移和扭转,减少该直线到这个点的距离,从而实现重新分区。
进一步地,如果向量的多个分量互相独立,那么方法也和上面的类似 x 1 => y 1 , x 2 => y 2 ,分别调节 x 1 x 2 的参数,最终让结果接近,训练结束。
此处输入图片的描述
而一个感知器结构可表示如下:
感知器结构
反思上面的过程,我们实际上是在衡量误差,根据误差来修改权重。

线性不可分

如果输入和输出的关系比较复杂,如二次函数 y = x 2 ,那当超过x=0的位置之后,反而成了递增了,此时一个线性的判断函数就不起作用了。因此,上面的方法,不能推广到所有的前馈网络中。
怎么办?那就只能使用梯度(LMS)法了。
梯度法,是对于样本集 X 1 , X 2 . . X n ,找到一个 W ,使得 f ( W X ˙ i ) X i 与输出 Y i 尽可能接近,其中 f 是激励函数。误差表示为:

e = 1 2 i = 1 n ( Y i Y i ) 2

为了能够调节误差e,使之尽可能小,则需要求其导数,发现其下降的方向:
g r a d w e = e W = k = 1 n e k W

其中:
e k = 1 2 ( Y k Y k ) 2

对偏导进行求解:
此处输入图片的描述
每次迭代的计算公式为:
此处输入图片的描述
最终:
此处输入图片的描述
其几何意义就是,误差的偏导,等于在 X k 位置上的值,乘以误差,再乘以激励函数的偏导。
所以,每次的权重矩阵 W 的修改,应当通过求误差的偏导(梯度)来实现。比之前的直接通过误差来调整,具备更好的适应性。
但是,这样的梯度法,对于实际学习来说,效率还是太慢,我们需要更快的收敛方法。

BP算法

BP算法就是所谓的反向传播算法,它将误差进行反向传播,从而获取更高的学习效率。这很像烽火台,如果前线战败了,那么消息就通过烽火台传递回指挥部,指挥部去反思问题,最终改变策略。
但这带来一个问题,中间层的误差怎么计算?我们能简单地将权重和残差的乘积,返回给上一层节点(这种想法真暴力,从左到右和从右到左是一样的)。
此处输入图片的描述

这相当于三次传播:

-第一步:从前向后传播FP
-第二步:得到值z,误差为y,将误差反向传播,获得每个节点的偏差$\sigma$
-第三步:再次正向传播,通过上一步的$\sigma$,再乘以步长,修改每一个神经元突触的权重。

下面一张图展示了完整的BP算法的过程,我看了不下20遍:
此处输入图片的描述
更有趣的是,sigmoid求导之后,特别像高斯(正态)分布,而且sigmoid求导非常容易。

5.总结

这样的一篇文章真是够长了,原本还想再介绍一个神经网络的Python实现,可是考虑到篇幅的限制,最终作罢。在下一期继续介绍如何实现BP神经网络和RNN(递归神经网络)。


作者:热情的沙漠
出处:http://www.cnblogs.com/buptzym/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

分类: 算法

本文转自FerventDesert博客园博客,原文链接:http://www.cnblogs.com/buptzym/p/5437973.html,如需转载请自行联系原作者
目录
相关文章
|
2月前
|
运维 监控 算法
解读 C++ 助力的局域网监控电脑网络连接算法
本文探讨了使用C++语言实现局域网监控电脑中网络连接监控的算法。通过将局域网的拓扑结构建模为图(Graph)数据结构,每台电脑作为顶点,网络连接作为边,可高效管理与监控动态变化的网络连接。文章展示了基于深度优先搜索(DFS)的连通性检测算法,用于判断两节点间是否存在路径,助力故障排查与流量优化。C++的高效性能结合图算法,为保障网络秩序与信息安全提供了坚实基础,未来可进一步优化以应对无线网络等新挑战。
|
2月前
|
监控 算法 安全
基于 PHP 语言深度优先搜索算法的局域网网络监控软件研究
在当下数字化时代,局域网作为企业与机构内部信息交互的核心载体,其稳定性与安全性备受关注。局域网网络监控软件随之兴起,成为保障网络正常运转的关键工具。此类软件的高效运行依托于多种数据结构与算法,本文将聚焦深度优先搜索(DFS)算法,探究其在局域网网络监控软件中的应用,并借助 PHP 语言代码示例予以详细阐释。
45 1
|
22天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化TCN-GRU时间卷积神经网络时间序列预测算法matlab仿真
本项目基于MATLAB2022a开发,提供无水印算法运行效果预览及核心程序(含详细中文注释与操作视频)。通过结合时间卷积神经网络(TCN)和遗传算法(GA),实现复杂非线性时间序列的高精度预测。TCN利用因果卷积层与残差连接提取时间特征,GA优化超参数(如卷积核大小、层数等),显著提升模型性能。项目涵盖理论概述、程序代码及完整实现流程,适用于金融、气象、工业等领域的时间序列预测任务。
|
19天前
|
存储 监控 算法
基于 Python 哈希表算法的局域网网络监控工具:实现高效数据管理的核心技术
在当下数字化办公的环境中,局域网网络监控工具已成为保障企业网络安全、确保其高效运行的核心手段。此类工具通过对网络数据的收集、分析与管理,赋予企业实时洞察网络活动的能力。而在其运行机制背后,数据结构与算法发挥着关键作用。本文聚焦于 PHP 语言中的哈希表算法,深入探究其在局域网网络监控工具中的应用方式及所具备的优势。
54 7
|
2月前
|
机器学习/深度学习 算法 JavaScript
基于GA遗传优化TCN时间卷积神经网络时间序列预测算法matlab仿真
本内容介绍了一种基于遗传算法优化的时间卷积神经网络(TCN)用于时间序列预测的方法。算法运行于 Matlab2022a,完整程序无水印,附带核心代码、中文注释及操作视频。TCN通过因果卷积层与残差连接学习时间序列复杂特征,但其性能依赖超参数设置。遗传算法通过对种群迭代优化,确定最佳超参数组合,提升预测精度。此方法适用于金融、气象等领域,实现更准确可靠的未来趋势预测。
|
2月前
|
监控 算法 JavaScript
企业用网络监控软件中的 Node.js 深度优先搜索算法剖析
在数字化办公盛行的当下,企业对网络监控的需求呈显著增长态势。企业级网络监控软件作为维护网络安全、提高办公效率的关键工具,其重要性不言而喻。此类软件需要高效处理复杂的网络拓扑结构与海量网络数据,而算法与数据结构则构成了其核心支撑。本文将深入剖析深度优先搜索(DFS)算法在企业级网络监控软件中的应用,并通过 Node.js 代码示例进行详细阐释。
44 2
|
2月前
|
机器学习/深度学习 存储 算法
基于MobileNet深度学习网络的活体人脸识别检测算法matlab仿真
本内容主要介绍一种基于MobileNet深度学习网络的活体人脸识别检测技术及MQAM调制类型识别方法。完整程序运行效果无水印,需使用Matlab2022a版本。核心代码包含详细中文注释与操作视频。理论概述中提到,传统人脸识别易受非活体攻击影响,而MobileNet通过轻量化的深度可分离卷积结构,在保证准确性的同时提升检测效率。活体人脸与非活体在纹理和光照上存在显著差异,MobileNet可有效提取人脸高级特征,为无线通信领域提供先进的调制类型识别方案。
|
2月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于模糊神经网络的金融序列预测算法matlab仿真
本程序为基于模糊神经网络的金融序列预测算法MATLAB仿真,适用于非线性、不确定性金融数据预测。通过MAD、RSI、KD等指标实现序列预测与收益分析,运行环境为MATLAB2022A,完整程序无水印。算法结合模糊逻辑与神经网络技术,包含输入层、模糊化层、规则层等结构,可有效处理金融市场中的复杂关系,助力投资者制定交易策略。
|
2月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
2月前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GA遗传优化TCN-LSTM时间卷积神经网络时间序列预测算法matlab仿真
本项目基于MATLAB 2022a实现了一种结合遗传算法(GA)优化的时间卷积神经网络(TCN)时间序列预测算法。通过GA全局搜索能力优化TCN超参数(如卷积核大小、层数等),显著提升模型性能,优于传统GA遗传优化TCN方法。项目提供完整代码(含详细中文注释)及操作视频,运行后无水印效果预览。 核心内容包括:1) 时间序列预测理论概述;2) TCN结构(因果卷积层与残差连接);3) GA优化流程(染色体编码、适应度评估等)。最终模型在金融、气象等领域具备广泛应用价值,可实现更精准可靠的预测结果。

热门文章

最新文章

AI助理

你好,我是AI助理

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