神经网络的类型分类和结构理解

article/2025/10/9 0:54:28

一、序言

神经网络是模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。

在深度学习领域,神经网络就是我们深度学习的灵魂,如果我们想依靠算法实现一些功能,就必须依托不同的神经网络结构,所以很有必要搞懂神经网络的类型和结构。

二、神经网络的类型

神经网络按照不同的分类方式,会有多种形式的划分。

第一种分类方式是按照类型来分,包含两种类型,分别为前馈神经网络和反馈神经网络。

我们分别解释下,首先前馈神经网络(Feedforward Neural Networks),它是我们最常用的神经网络类型。比如我们所说的BP神经网络,DNN网络,CNN网络等,举例如图所示:

前馈神经网络之DNN网络举例

前馈神经网络之CNN结构举例

这种结构一般定义为一个有向无环图,信号只能沿着最终输出的那个方向传播,每一时刻间的输入互不影响。

然后另一种结构是反馈神经网络(Feedback Neural Networks),也称为递归神经网络(Recurent Neural Networks),它是一个网络中环的结构,如下图所示的RNN网络:

 

 

反馈神经网络之RNN网络

可以发现信号不再是沿直线传播,而是有一些环路。这里环路的原因是因为在RNN网络中上一时刻的输出要给到下一时刻,比如图中的Xt-1时刻的输出St-1会作为Xt时刻的输入,时刻间的输入不再是独立的。

第二种分类方式是按照网络的深浅来分类的,包含浅层神经网络和深度神经网络。

浅层神经网络就是我们所说的传统神经网络,这种网络结构包含的层次比较少,一般不会超过两层,所以浅层神经网络最开始的效果并不理想。如下图所示为浅层神经网络。

 

浅层神经网络示例

我们可以发现只有其中只有两个隐藏层。

另外一种就是深度神经网络。所谓深度实际上就是把把层次加深,增加其中的隐藏层。比如下图:

深度神经网络示例

 

可以发现深度神经网络中包含着最少两层隐藏层,这些隐藏层经过高阶的特征提取会让我们的神经网络真正去发掘数据内部隐藏的特性。所以深度神经网络的发展和演变让神经网络的枝叶更加枝繁叶茂,从而能够模拟更多的场景,解决更多的算法需求。

三、神经网络的结构

了解完深度学习的类型划分之后,我们再看下神经网络的具体结构。我们现在所说的神经网络是指深度神经网络,即隐藏层大于2层的这种结构

我们以4层的结构为例为大家讲解,包含一个输入层(Input Layer),2个隐藏层,分别为隐藏层1(Hidden Layer1),隐藏层2(Hidden Layer2),和一个输出层(Output Layer)。如图所示:

神经网络结构示意

我们需要了解各个层次之间的参数关系。

首先看下输入层和第一个隐藏层之间的结构,如图所示:

 

输入层和隐藏层1之间的结构

这里面x1,x2,x3是指样本特征属,相当于有3个特征。假设我们的数据有100条,当数据给到输入层的时候,每个样本有3个特征,所以我们X的形状即为X=(100,3)这样的一个输入矩阵,其中的100为样本个数,3为特征个数。

那这之间的参数个数是多少呢?举个例子来分析下,比如对于其中的一个特征x1来说,连接到下一层的4个节点z1,z2,z3,z4上。如图所示:

 

X1连接到下一层的4个节点示意

可以发现一个特征对应4个参数,而输入的时候总共有3个特征,所以中间的这种连线总的个数也就是3*4=12个,即我们的输入层和隐藏层之间的W形状为W1=(3,4)这样的一个矩阵。

输入层和隐藏层之间需要按照线性组合WX+b这种形式进行组合。所以输入数据矩阵X和W点乘的结果为(100,3)*(3,4)=(100,4)这样一个形状的矩阵。即100行4列,表示的含义为100个数据经过第一个隐藏层的变化,每个数据转变成4个隐特征相当于隐藏层把我们上一层的输入在本层做了特征的转换和抽取,而这正是隐藏层节点的功能和作用。特征转换完以后再经过激活函数Sigmod的激活输入到下一层。

然后再来看下隐藏层1和隐藏层2之间的结构,如图所示:

 

隐藏层1和隐藏层2之间的结构示意

可以发现隐藏层1和隐藏层2之间的结构类似于输入层和隐藏层1之间结构,所以参数个数的分析也是类似的。这里面z1到z4所构成的输入矩阵是由上一层传递过来的,形状为100行4列的矩阵。

那两个隐藏层之间的参数个数为多少呢?我们还是举一个例子来说明下,看下z1的输出,如图所示:

 

z1输出结构示意

可以发现,对于z1来说,与下一层的每个节点h1到h4都相连,所以对应4个参数。而像z1这样的输出节点有z1到z4,总共4个。所以隐藏层1和隐藏层2之间对应的参数矩阵W2为W2=(4,4)的形状,即每个特征对应4个输出,总共4个特征输入。

同样这两层结构也需要满足线性组合的方式,所以X和W相乘后即为(100,4)*(4,4)=(100,4),即从隐藏层2输出时为100行4列的矩阵形式。相当于隐藏层又做了一次特征转换,转换为新的4个特征。然后再做一次非线性变换函数的激活例如Sigmod函数后传递给下一层。

最后再来看下隐藏层2和输出层之间的结构,如图所示:

 

隐藏层2和输出层之间结构示意图

此时隐藏层2输出的形状为100行4列的矩阵 ,以h1为例,看下隐藏层2和输出层之间的参数矩阵W3。如图所示:

h1节点到下一层结构示意

可以发现h1分别连线到输出层节点的y1和y2上,对应2个参数。而类似h1这样的结构总共有4个,所以对应的参数矩阵为W3=(4,2)的形状。

然后再经过线性组合的原理XW+b=(100,4)*(4,2)+(100,2)=(100,2)。即100个样本,每个样本由两个预测输出。这也刚好符合我们的理解,对于二分类来说,每一个样本需要有各个类别的预测。

这里需要提醒一点的是在最后一个隐藏层和输出层之间,我们也要做一次非线性变化,只不过此时的非线性变换函数为SoftMax函数,区别于前面几层的Sigmod函数。这里之所以是SoftMax函数,是因为SoftMax函数可以将最后预测结果做概率化的输出,表示每个类别的概率。

四、结论

经过以上分析,我们对神经网络结构做下总结,可以得出以下几个结论。

1、隐层到隐层之间是非线性变换,对应Sigmod函数。隐层到输出之间是分类或者是回归变化,不做激活,因此需要SoftMax函数。

2、层与层之间的矩阵参数为上一层节点的个数和下一层节点个数之间所组成的矩阵。比如上面案例中输入层有3个节点,隐藏层1有4个节点,所以中间对应的参数矩阵形状为(3,4),即3行4列的形式。同理其它层之间也是如此。

所以掌握神经网络层与层之间的结构后,会有助于我们对神经网络的理解,从而更好的理解参数模型,找到算法合适的参数。


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

相关文章

idea构建spark开发环境(基于maven)

目前Intellij IDEA对scala支持的比较好,本文使用idea构建spark开发环境。 1.准备工作 jdk版本,scala sdk环境(我的是jdk1.8,scala 2.1) scala官网下载地址:http://www.scala-lang.org/download/ 2.Intellij IDEA 下载地址ht…

Spark多语言开发

目录 1 多语言开发-说明2 Java-Spark-掌握2.1 SparkCore2.2 SparkStreaming2.3 SparkSQL2.4 StructuredStreaming2.5 线性回归算法-房价预测案例2.5.1 需求代码实现 3 PySpark-了解3.1 SparkCore3.2 SparkStreaming3.3 SparkSQL3.4 StructuredStreaming3.5 决策树算法-相亲决策…

eclipse配置spark开发环境

前言 无论Windows 或Linux 操作系统,构建Spark 开发环境的思路一致,基于Eclipse 或Idea,通过Java、Scala 或Python 语言进行开发。安装之前需要提前准备好JDK、Scala 或Python 环境,然后在Eclipse 中下载安装Scala 或Python 插件(…

idea搭建spark开发环境完整版(windows)

利用intellij idea 搭建spark开发环境(windows) 本文配置所有环境 Win10 企业版2016长期服务版 Jdk1.8.0.131 Hadoop2.7.3 Spark2.2.0 Scala2.11.12 一、Jdk环境配置 下载 http://www.oracle.com/technetwork/cn/java/javase/downloads/jdk8-downloads-…

Spark开发环境搭建(提供实验平台)

Spark开发环境搭建 1)Scala环境 1. 前置说明 安装与配置Scala开发环境。 实验平台直达链接 Scala是一种函数式面向对象语言,它融汇了许多前所未有的特性,而同时又运行于JVM之上。随着开发者对Scala的兴趣日增,以及越来越多的…

使用Python开发spark

使用Python开发 一、Python编程语言 1.1、Python语言的特点 Python是一种面向对象的解释型计算机程序设计语言,具有丰富和强大的库。如今Python已经成为继JAVA,C之后的的第三大编程语言。 1、可性移强植 简易单学 2、免开费源 丰富库的 3、可性移强植…

Spark开发环境搭建(学习笔记)

夫君子之行,静以修身,俭以养德,非淡泊无以明志,非宁静无以致远。 夫学须静也,才须学也,非学无以广才,非志无以成学。淫慢则不能励精,险躁则不能冶性。 年与时驰,意与日去…

IDEA下使用maven配置Spark开发环境

IDEA下使用maven配置Spark开发环境 1、安装Java2、配置环境变量3、配置Hadoop环境4、安装Scala插件5、配置maven4、Spark编程Spark测试 使用到的软件安装包: https://pan.baidu.com/s/1fOKsPYBmOUhHupT50_6yqQ 提取码: d473 1、安装Java 点击下一步, 点击下一步&a…

windows配置spark开发环境

声明:搭建过程中,会因为版本兼容问题,造成闪退等问题,以下是我自用的版本,如需其他版本,最好先查一下兼容问题 1.jdk-8u333-windows-x64下载链接 2.scala-2.13.10下载链接 3.hadoop-3.2.2下载链接 4.spark-…

Spark的安装与使用 第2关:安装与配置Spark开发环境

本关任务:安装与配置Spark开发环境。 相关知识 Apache Spark是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab(加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,Spark拥有Hadoop MapReduce所具有的优点;但不同于Map…

Spark开发环境的搭建

(1)在/opt目录下建立 software,module两个文件,software用来下载安装包,下载或的安装包可以解压到module文件。小编下载spark的版本是:spark-2.3.2-bin-hadoop2.7.tgz。所以下载spark版本到software文件后,解压到module文件中&…

Spark 开发环境

一、安装JDK 本文写于2022年4月,此时最新版的JDK已经更新到了JDK17——下载地址。为了满足开发人员的需要,Oracle仍然提供了JDK8和JDK11可供下载,下载链接也在上面的网站上,只需要把页面下滑即可。 注:由于需要配置Sp…

PyCharm搭建Spark开发环境windows下安装pyspark

目录 windows下安装pysparkPyCharm搭建Spark开发环境 windows下安装pyspark spark和hadoop版本版本之间有对应关系 安装jdk 安装hadoop 下载 hadoop-2.7.7.tar.gz 配置环境变量 不再演示 下载winutils.exe https://github.com/steveloughran/winutils 选择对应的hadoop版…

MaxCompute Spark开发指南

0. 概述 本文档面向需要使用MaxCompute Spark进行开发的用户使用。本指南主要适用于具备有Spark开发经验的开发人员。 MaxCompute Spark是MaxCompute提供的兼容开源的Spark计算服务,它在统一的计算资源和数据集权限体系之上,提供Spark计算框架&#xf…

idea搭建Spark开发环境

最近在公司换了一个项目组&#xff0c;做Spark项目的&#xff0c;于是开始学Spark。 版本: <scala.version>2.13.8</scala.version><spark.version>3.3.0</spark.version> 1.首先安装Scala Scala安装成功之后&#xff1a; 2.新建maven项目 pom文件: …

Spark开发学习之使用idea开发Spark应用

Spark学习之使用idea开发Spark应用 该文章是基于jdk1.8&#xff0c;idea开发工具&#xff0c;maven都配置好的前提下进行讲述的。 背景 由于已经在远程centos服务器上部署了saprk服务&#xff0c;但基于spark的应用程序的代码却是在本地idea开发的&#xff0c;那么如何能让本…

Spark开发环境搭建

一、安装Spark 1.1 下载并解压 官方下载地址&#xff1a;http://spark.apache.org/downloads.html &#xff0c;选择 Spark 版本和对应的 Hadoop 版本后再下载&#xff1a; 解压安装包&#xff1a; # tar -zxvf spark-2.2.3-bin-hadoop2.6.tgz1.2 配置环境变量 # vim /e…

IDEA2022 配置spark开发环境

本人强烈建议在 linux环境下 学习 spark&#xff01;&#xff01;&#xff01; Introduction Apache Spark是一个快速且通用的分布式计算引擎&#xff0c;可以在大规模数据集上进行高效的数据处理&#xff0c;包括数据转换、数据清洗、机器学习等。在本文中&#xff0c;我们将…

spark开发教程

spark开发教程 目录 spark开发教程前言一、初始化spark二、获取数据源1.创建数据结构2.连接外部数据textfilejdbchive 3. 数据处理rdd算子transform算子action算子 dataframe操作dataset操作 4. 共享变量5.写入数据 总结 前言 spark开发主要的基于RDD、Datasets、DataFrame、s…

Spark 开发总结

Spark 开发总结 前言spark UISpark API FunctionWindow.partitionBy Spark udfSpark 中禁止使用returnSpark NullPointExceptionSpark Shuffle FetchFailedExceptionspark 数据倾斜 前言 大数据开发过程中把自己积累的关于Spark的使用方法记录下来&#xff0c;便于不断的回顾和…