浅谈神经网络算法

article/2025/10/6 5:37:16

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

1.最简单的线性分类

一个最简单的分类,是在平面上画一条直线,左边为类0,右边为类1,直线表示为z=ax+by+c


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

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

这样的激励函数,能够将刚才的区间,压缩到 [0,1]


至于如何训练,会在之后的章节中讲解。

2.多层级神经网络

刚才展示了最简单的二分类,如果有四个分类,那一条线就无法满足要求了。想象两条直线,就会将平面划分为四个区域,一个三角区域相当于两个子平面求交集。
因此直觉告诉我们,如果有多个神经元,那么这样的问题能表现为问题的“逻辑与”操作。将第一节中介绍的神经网络的输出,再做一个判断层,即多层网络。
单层感知器
但是,如何实现逻辑与呢?用下面的图一目了然:
此处输入图片的描述
仔细看下,这相当于创建一条线,除非x1

x2 都等于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层,每层的节点分别为node0,node1...nodem

,节点最多的层,有m个节点,那么我们可以将其表达为一个矩阵W,规模为 mn

,内部有些值是没有定义的。

4.训练算法

线性可分

如果输入和输出是线性关系(或者是正相关),那么想象我们在调节一个参数时,当输出过大,那就把输入调小一些,反之调大一些,最后当输出和我们想要的非常接近时,训练结束。这个就好比,在平面上,如果一个点被分配到了错误的输出,就应该对直线平移和扭转,减少该直线到这个点的距离,从而实现重新分区。
进一步地,如果向量的多个分量互相独立,那么方法也和上面的类似x1=>y1,x2=>y2

,分别调节 x1 x2

的参数,最终让结果接近,训练结束。
此处输入图片的描述
而一个感知器结构可表示如下:
感知器结构
反思上面的过程,我们实际上是在衡量误差,根据误差来修改权重。

线性不可分

如果输入和输出的关系比较复杂,如二次函数y=x2

,那当超过x=0的位置之后,反而成了递增了,此时一个线性的判断函数就不起作用了。因此,上面的方法,不能推广到所有的前馈网络中。
怎么办?那就只能使用梯度(LMS)法了。
梯度法,是对于样本集 X1,X2..Xn ,找到一个 W ,使得 f(WX˙i)Xi 与输出 Yi 尽可能接近,其中 f 是激励函数。误差表示为:
e=12i=1n(YiYi)2

为了能够调节误差e,使之尽可能小,则需要求其导数,发现其下降的方向:
gradwe=eW=k=1nekW

其中:
ek=12(YkYk)2

对偏导进行求解:
此处输入图片的描述
每次迭代的计算公式为:
此处输入图片的描述
最终:
此处输入图片的描述
其几何意义就是,误差的偏导,等于在 Xk 位置上的值,乘以误差,再乘以激励函数的偏导。
所以,每次的权重矩阵 W

的修改,应当通过求误差的偏导(梯度)来实现。比之前的直接通过误差来调整,具备更好的适应性。
但是,这样的梯度法,对于实际学习来说,效率还是太慢,我们需要更快的收敛方法。

BP算法

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

这相当于三次传播:

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

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

5.总结

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


http://chatgpt.dhexx.cn/article/A9gteloR.shtml

相关文章

【深度学习】3-4 神经网络的学习- 学习算法的实现

神经网络的学习步骤如下所示&#xff1a; 步骤1(mini-batch) 从训练数据中随机选出一部分数据&#xff0c;目标是减小mini-batch的损失函数的值 步骤2(计算梯度) 为了减小mini-batch的损失函数的值&#xff0c;需要求出各个权重参数的梯度 步骤3(更新参数) 将权重参数沿梯度…

神经网络算法基本介绍,简单神经网络算法原理

神经网络是什么&#xff1f; 生物神经网络主要是指人脑的神经网络&#xff0c;它是人工神经网络的技术原型。 人脑是人类思维的物质基础&#xff0c;思维的功能定位在大脑皮层&#xff0c;后者含有大约10^11个神经元&#xff0c;每个神经元又通过神经突触与大约103个其它神经…

神经元的计算

神经元的计算 单神经元内部参数的设置偏移值 b 的作用神经网络的分层常用的激活函数 单神经元 人类大脑神经元细胞的树突接收来自外部的多个强度不同的刺激&#xff0c;并在神经元细胞体内进行处理&#xff0c;将其转化为一个输出结果&#xff0c;功能抽象图示&#xff1a; 神…

神经学习(算法)

神经元与激励函数 神经元 神经元是神经网络的基本组成&#xff0c;如果把它画出来&#xff0c;大概就长成下面这样&#xff1a; 图中神经元左边的x表示对神经元的多个输入&#xff0c;w表示每个输入对应的权重&#xff0c;神经元右边的箭头表示它仅有一个输出。 当然神经元也…

神经网络十大算法有哪些,神经网络十大算法排名

数学建模的十大算法 。 1、蒙特卡罗算法&#xff08;该算法又称随机性模拟算法&#xff0c;是通过计算机仿真来解决问题的算法&#xff0c;同时可以通过模拟可以来检验自己模型的正确性&#xff0c;是比赛时必用的方法&#xff09;2、数据拟合、参数估计、插值等数据处理算法…

训练神经网络的五大算法

原文&#xff1a; 5 algorithms to train a neural network 作者&#xff1a; Alberto Quesada 译者&#xff1a; KK4SBB 责编&#xff1a;何永灿&#xff0c;关注人工智能&#xff0c;投稿请联系 heyccsdn.net 或微信号 289416419 神经网络模型的每一类学习过程通常被归纳为一…

论文阅读2--《融合多因素的短时交通流预测研究》

1.问题的提出 现有的交通流预测研究大多为常态下的预测&#xff0c;而未考虑天气、节假日等外部因素的影响。 2.交通流预测相关工作 &#xff08;1&#xff09;传统的短时交通流研究方法&#xff1a; 卡尔曼滤波模型、历史平均模型、时间序列模型、非参数回归模型、混沌理论…

用于交通流预测的时间多图卷积网络

为了联合建模道路网络中各种全局特征的空间、时间和语义关联&#xff0c;本文提出了一种用于交通流预测的深度学习框架T-MGCN&#xff08;时态多图卷积网络&#xff09;。首先&#xff0c;我们识别了几种语义关联&#xff0c;并将道路之间的非欧几里德空间关联和异构语义关联编…

交通流分析1:《基于大数据的城市公路交通流短时预测研究_张红》阅读总结

大概读了一下&#xff0c;第6节小波分析那里实在没有看懂。 如果有理解不对的地方欢迎批评指正。 建模方法 这篇论文选用的是时间序列模型和小波理论&#xff0c;小波理论那里我实在没看懂&#xff0c;说说他基于时间序列模型的组合建模方法&#xff0c;这是选择时间序列模型的…

matlab中的AR模型短时预测交通流

1、内容简介 略 438-可以交流、咨询、答疑 2、内容说明 智能交通系统的宗旨,就是利用丰富的交通检测数据,对未来的交通流状态进行预测,对于最大效率的利用快速路资源,减少出行者时间,减少快速路交通拥挤与交通事故。短时交通流预测是道路交通控制系统、交通流诱导系统等领域…

交通流预测爬坑记(三):使用pytorch实现LSTM预测交通流

很长时间没有更新内容了&#xff0c;上一篇可以看做是刚接触深度学习写的&#xff0c;看法非常狭隘&#xff0c;内容非常粗糙。 在最近的学习中接触到了Pytorch&#xff0c;不得不承认&#xff0c;相对于TensorFlow来讲&#xff0c;灵活很多。 这次就使用pytroch来进行一下交通…

Python交通流仿真【含源码】

虽然交通并不总是畅通无阻&#xff0c;但汽车无缝穿越交叉路口&#xff0c;在交通信号灯处转弯和停车看起来相当壮观。这种沉思让我思考交通流对人类文明的重要性。 在此之后&#xff0c;内心的书呆子特质让我忍不住思考一种模拟交通流的方法。我在一个涉及交通流量的本科项目…

基于深度学习的短时交通流预测与优化

TOC 第二章 数据预处理与短时交通流量特性分析 2.1 数据来源 数据记录了明尼苏达州双子城19条高速环城公路一整年的交通流量&#xff0c;交通流量数据采样间隔为30秒(采用2018年6月1日至8月31日期间&#xff0c;采集间隔为5分钟&#xff0c;选取公路上的5个车辆检测站点的交…

基于Spatial-Temporal Transformer的城市交通流预测

文章信息 本周阅读的论文是题目为《Spatial-Temporal Transformer Networks for Traffic Flow Forecasting》的一篇2021年发布在arXiv网站上的使用时空Transformer网络&#xff08;STTNs&#xff09;预测交通流的文章。 摘要 交通预测已成为智能交通系统的核心组成部分。然而&a…

基于推特数据挖掘交通事件的城市交通流深度学习预测模型

文章信息 本周阅读的论文是题目为《A deep-learning model for urban traffic flow prediction with traffic events mined from twitter》的一篇2021年发表在《World Wide Web》涉及交通事故下的城市交通客流预测的文章。 摘要 短期交通预测是现代城市交通管理和控制系统的关键…

交通流优化:一种强化学习方法

1. 文章信息 《Traffic flow optimization: A reinforcement learning approach》是2016年发表在Engineering Applications of Artificial Intelligence的一篇文章。 2. 摘要 交通拥堵会导致诸如延误、燃油消耗增加和额外污染等重要问题。本文提出了一种新的基于强化学习的交通…

SUMO交通流仿真实战

理解、预测并最终减少城市路网中的交通拥堵是一个复杂的问题。即使了解最简单的单车道情况下出现的交通拥堵&#xff0c; 也是具有挑战性的。SUMO是一个开源平台&#xff0c;可模拟复杂环境中的交通流。在这个教程里&#xff0c;我们将学习如何从零创建复杂的交通流模拟&#x…

python交通流预测算法_一种高速公路交通流预测方法与流程

本发明涉及智能交通领域,更具体地,涉及一种高速公路交通流预测方法。 背景技术: 随着社会经济的不断增长,国内汽车的拥有量越来越多,高速公路车流量急剧上升,从而导致高速公路上车辆拥堵愈发严重。现有方法采用径向基函数神经网络训练网络参数的算法,在粗略搜索过程中容…

交通流特征工程小技巧与思考

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、交通流是什么&#xff1f;二、特征工程是什么&#xff1f;三、处理数据时的一些小技巧四、一些常用的机器学习python库总结 前言 小编最近参与了一些工程方…

初等模型---交通流和道路通行能力

交通流的基本参数及其特性 为明确和简单起见&#xff0c;这里的交通流均指由标准长度的小型汽车在单方向的。 道路上行驶而形成的车流,没有外界因素如岔路、信号灯等的影响。 借用物理学的概念&#xff0c;将交通流近似看作一辆辆汽车组成的连续的流体&#xff0c;可以 用流量、…