神经网络原理概述

news2024/9/21 0:38:23

文章目录

  • 1.神经元和感知器
    • 1.1.什么是感知器
    • 1.2.什么是单层感知器
    • 1.3.多层感知机(Multi-Layer Perceptron,MLP)
  • 2.激活函数
    • 2.1.单位阶跃函数
    • 2.2.sigmoid函数
    • 2.3.ReLU函数
    • 2.4.输出层激活函数
  • 3.损失函数
  • 4.梯度下降和学习率
  • 5.过拟合和Dropout
  • 6.神经网络反向传播法
  • 7.TensorFlow游乐场

神经网络的工作原理是什么?

1.神经元和感知器

1.1.什么是感知器

感知器其实可以理解为一个黑盒函数,接收若干个输入,产生一个输出的结果,这个结果就代表了感知器所做出的决策。

如图,圆圈表示一个感知器,它可以接收多个输入,产出一个结果,结果只有两种情况,“是”与“否”。

在这里插入图片描述

感知器内部决策的原理,其实就是给不同的因素赋予不同的权重(重要性)。然后设置一个阈值,如果加权计算之后的结果大于等于这个阈值,就说明可以判断为是,否则就是否。所以感知器本质上就是一个通过加权计算函数进行决策的工具。

1.2.什么是单层感知器

单层感知器是一个只有一层的神经元。感知器有多个二进制输入x1、x2、…、xn,每个输入有对应的权值(或权重)w1、w2、…、wn,将每个输入值乘以对应的权值再求和(∑xjwj),然后与一个阈值比较,大于阈值则输出1,小于阈值则输出0。

在这里插入图片描述
如果把公式写成矩阵形式,再用b来表示负数的阈值(即b= ‒threshold),则进一步简化为:

在这里插入图片描述
感知器加权计算之后,再输入到激活函数中进行计算,得到一个输出。类比生物学上的神经元信号从人工神经网络中的上一个神经元传递到下一个神经元的过程,并不是任何强度的信号都可以传递下去,信号必须足够强,才能激发下一个神经元的动作电位,使其产生兴奋,激活函数的作用与之是类似的

在这里插入图片描述

单层感知器的激活函数为阶跃函数,是以阈值0(界限值)为界的,若小于等于0,则输出0(对应神经元抑制),否则输出1(对应神经元兴奋)。

单层感知器无法解决线性不可分的问题,只能用于二元分类,且无法学习比较复杂的非线性模型。将多个单层感知器进行组合,得到一个多层感知器。

1.3.多层感知机(Multi-Layer Perceptron,MLP)

在这里插入图片描述

网络的最左边的层被称为输入层,其中的神经元被称为输入神经元。

最右边的输出层包含输出神经元,图中只有一个单一的输出神经元,但一般情况下输出层也会有多个输出神经元。MLP对输出层神经元的个数没有限制。

中间层被称为隐藏层,因为里面的神经元既不是输入也不是输出。隐藏层是整个神经网络最为重要的部分,它可以是一层,也可以是N层,隐藏层的每个神经元都会对数据进行处理。MLP没有规定隐藏层数量。隐藏层的层数越多,其复杂度也越大。

通常把具有超过一个隐藏层的神经网络叫作深度神经网络。

每个感知器都对输出结果有一定比重的贡献,单个感知器权重或偏移的变化应该对输出结果产生微小影响,这里需要使用非线性的激活函数(sigmoid、softmax和ReLU等),可解决线性不可分的问题。

2.激活函数

激活函数,就是在神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。

2.1.单位阶跃函数

以0为界,输出从0切换为1(或从1切换0),其值呈阶梯式变化,所以称之为阶跃函数。

但是这个函数是由两段水平线组成,具有不连续、不光滑等不太好的性质,所以它无法用于神经网络的结构。因为如果使用它作激活函数的话,参数的微小变化所引起的输出的变化就会直接被阶跃函数抹杀掉,在输出端完全体现不出来,无法为权重的学习提供指引,这是不利于训练过程的参数更新的。

在这里插入图片描述

在神经网络中较常用的激活函数包括sigmoid、tanh、ReLu以及softmax函数。它们都是非线性的函数。激活函数给神经元引入了非线性因素,它应用在隐藏层的每一个神经元上,使得神经网络能够用于表示非线性函数,这样神经网络就可以应用到众多的非线性模型中。

2.2.sigmoid函数

在这里插入图片描述

在这里插入图片描述

函数的特点是左端趋近于0,右端趋近于1,两端都趋于饱和

相对于阶跃函数只能返回0或1,sigmoid函数可以返回0.731…、0.880…等实数。感知器中神经元之间流动的是0或1的二元信号,而神经网络中流动的是连续的实数值信号。

2.3.ReLU函数

在这里插入图片描述

当输入小于0时,输出为0;当输入大于0时,输出与输入相等。ReLU函数是分段线性函数,把所有的负值都变为0,而正值不变。

相比于其他激活函数来说,ReLU函数有以下优势:

  • 对于线性函数而言,ReLU函数的表达能力更强,尤其体现在深度网络中;
  • 而对于非线性函数而言,ReLU函数由于其非负区间的梯度为常数,因此不存在梯度消失问题,使得模型的收敛速度维持在一个稳定状态。

梯度消失:当梯度小于1时,预测值与真实值之间的误差每传播一层会衰减一次。如果在深层模型中使用sigmoid作为激活函数,这种梯度消失现象尤为明显,将导致模型收敛停滞不前。

局限性:只能在神经网络模型的隐藏层中使用。

2.4.输出层激活函数

多分类:softmax函数(它与sigmoid函数类似,唯一的区别是在softmax函数中,输出被归一化,总和变为1,可以认为其为概率分布。)

二分类:sigmoid函数

3.损失函数

损失函数(Loss Function)用来度量真实值和预测值之间的差距,在统计学中损失函数是一种衡量损失和错误(这种损失与“错误地”估计有关)程度的函数。

神经网络模型的训练是指通过输入大量训练数据,使得神经网络中的各参数(如权重系数w)不断调整,从而“学习”到一个合适的值,使得损失函数最小。

分类问题损失函数:交叉熵(Cross Entropy)

交叉熵在神经网络中作为损失函数,p为真实标记分布,q则为训练后模型的预测标记分布,交叉熵损失函数可以衡量p与q的相似性。

交叉熵在分类问题中常常与softmax函数搭配使用,softmax函数将输出的结果进行处理,使其多个分类的预测值的和为1,再通过交叉熵来计算损失。

4.梯度下降和学习率

应该如何训练,采用什么方式一点点地调整参数,找出损失函数的极小值(最小值)?

梯度衡量的是,如果我们稍微改变一下输入值,函数的输出值会发生多大的变化。

在这里插入图片描述

就比如下山,此时山上的雾很大,什么也看不见。那么可以以当前所处的位置为基准,寻找这个位置最陡峭的地方,然后朝着下降方向走一步,然后又继续以当前位置为基准,再找最陡峭的地方往下走,直到最后到达最低处。

步长大小称为学习率。在下降过程中步长越大,梯度影响越大。我们可以通过步长来控制每一步走的距离。

学习率是深度学习中的一个重要的超参数,决定着目标函数能否收敛到局部最小值以及何时收敛到最小值。

优化器(Optimizer)算法:会根据训练算法的过程而自适应地修正学习率。例如SGD(Stochastic Gradient Descent,随机梯度下降算法)、Adam算法(自适应时刻估计算法)

5.过拟合和Dropout

随着迭代次数的增加,训练损失(Train Loss)越来越好,但测试损失(Test Loss)的结果确越来越差。训练损失和测试损失的差距越来越大,模型开始过拟合(Overfit)。

过拟合会导致模型在训练集上的表现很好,但针对验证集或测试集,表现则大打折扣。

Dropout是指在深度学习网络的训练过程中,按照一定的概率将一部分神经网络单元暂时从网络中丢弃,相当于从原始的网络中找到一个更“瘦”的网络,从而解决过拟合的问题

在这里插入图片描述

这样经过几轮训练,这些神经元的个体表现力大大增强,同时也减弱了神经元节点间的联合适应性,增强了泛化能力。

通常是在训练神经网络的时候使用Dropout,这样会降低神经网络的拟合能力,而在预测的时候关闭Dropout

可以理解为一个人在练轻功的时候会在脚上绑着很多重物,但是在真正和别人打斗的时候会把重物全拿走。

6.神经网络反向传播法

神经网络可以理解为一个输入 x 到输出 y 的映射函数,即 f(x) = y。 f 就是我们所要训练的网络参数 w 。对于任何输入 x ,可得到一个与之对应的输出 y。

训练最符合真实数据 f 的过程,就是神经网络的训练过程。神经网络的训练可以分为两个步骤:一个是前向传播,另外一个是反向传播。

前向传播是从输入层到输出层:从输入层(Layer1)开始,经过一层层的层,不断计算每一层的神经网络得到的结果以及通过激活函数处理的本层输出结果,最后得到输出y^,计算出了y^,就可以根据它和真实值y的差别来计算损失值。

反向传播(BackProp)就是根据损失函数L(y^ , y)来反方向地计算每一层,由最后一层逐层向前去改变每一层的权重,也就是更新参数,即得到损失值之后,反过去调整每个变量以及每层的权重。

反向传播,就是对比预测值和真实值,继而返回去修改网络参数的过程。

对于反向传播算法,最初所有的边权重(Edge Weight)都是随机分配的。对于所有训练数据集中的输入,人工神经网络都被激活,并且观察其输出。这些输出会和我们已知的、期望的输出进行比较,误差会“传播”回上一层。该误差会被标注,权重也会被相应地调整。重复该流程,直到输出误差低于制定的标准。

7.TensorFlow游乐场

http://playground.tensorflow.org/

● Epoch:训练次数。
● Learning rate:学习率,在梯度下降算法中会用到。学习率是人为根据实际情况来设定的,学习率越低,损失函数的变化速度就越慢。
● Activation:激活函数,默认为非线性函数Tanh。
● Regularization:正则化,提高泛化能力,防止过拟合。如果参数过多,模型过于复杂,容易造成过拟合。即模型在训练样本数据上表现得很好,但在实际测试样本上表现得较差,不具备良好的泛化能力。为了避免过拟合,最常用的一种方法是使用正则化。
● Regularization rate:正则率,这里是正则化加上权重参数。
● Problem type:问题类型。分类/回归

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/821792.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python学到什么程度算入门,python从入门到精通好吗

本篇文章给大家谈谈python学到什么程度算入门,以及python从入门到精通好吗,希望对各位有所帮助,不要忘了收藏本站喔。 学习 Python 之 进阶学习 一切皆对象 1. 变量和函数皆对象2. 模块和类皆对象3. 对象的基本操作 (1). 可以赋值给变量(2). …

JAVA- SQL注入案例(黑马程序员)和避免 超级详细

文章目录 sql注入准备1.创建应该新的数据库用于测试;2.修改配置3.启动jar包4.打开网页测试5.测试sql注入 sql注入避免1. java中的登录逻辑代码2.演示sql注入3.原因5.参数化查询-PreparedStatement SQL注入是什么? SQL 注入(SQL Injection&…

【Python】Web学习笔记_flask(2)——getpost

flask提供的request请求对象可以实现获取url或表单中的字段值 GET请求 从URL中获取name、age两个参数 from flask import Flask,url_for,redirect,requestappFlask(__name__)app.route(/) def index():namerequest.args.get(name)agerequest.args.get(age)messagef姓名:{nam…

【LeetCode 75】第十七题(1493)删掉一个元素以后全为1的最长子数组

目录 题目: 示例: 分析: 代码运行结果: 题目: 示例: 分析: 给一个数组,求删除一个元素以后能得到的连续的最长的全是1的子数组。 我们可以先单独统计出连续为1的子数组分别长度…

命令模式-请求发送者与接收者解耦

去小餐馆吃饭的时候,顾客直接跟厨师说想要吃什么菜,然后厨师再开始炒菜。去大点的餐馆吃饭时,我们是跟服务员说想吃什么菜,然后服务员把这信息传到厨房,厨师根据这些订单信息炒菜。为什么大餐馆不省去这个步骤&#xf…

【JVM】(一)深入理解JVM运行时数据区

文章目录 一、JVM 运行流程二、虚拟机栈(线程私有)三、本地方法栈 (线程私有)四、方法区(元数据区)五、堆(线程共享)六、程序计数器(线程私有) 一、JVM 运行流…

安装Apache遇到的问题

安装Apache服务 httpd -k install -n Apache2.4 #-n后面表示自定义访问名称 问题1: 此时去 windows 的开始摁扭里找到控制器右键管理员运行 问题2: 命令行没用对 应该用: .\httpd -k install -n Apache2.4 #-n后面表示自定义访问名称

远程控制平台四之优化部署

服务器端打包 把服务器打成jar包对于后台开发的朋友来说小菜一碟,但对于前端开发可能有些细节要注意一下,尤其是有依赖其他第三方库的情况下,这里梳理了一下流程: File – Project Structure – Artifacts – add – JAR – From modules and dependencies 选中module和主…

前端构建(打包)工具发展史

大多同学的前端学习路线:三件套框架慢慢延伸到其他,在这个过程中,有一个词出现的频率很高:webpack 。 作为一个很出名的前端构建工具我们在网上随便一搜,就会有各种教程:loader plugin entry吧啦吧啦。 但…

嵌入式Linux的学习嵌入式一开始该怎么学?

把握以下几点: 文件 进程,线程,信号 进程,线程通信同步 网络:这个简单,就那几个API,TCP和udp。 嵌入式Linux 目前我正在学,我看到资料是正点原子,野火和韦东山作为参…

在中国人民大学与加拿大女王大学金融硕士项目中蜕变,成长

毕业十年后,还想得起大学时你的样子吗?有人这十年浑浑噩噩,或过着按部就班的日子,渐渐认命了;也有人用这十年实现了底层逆袭,完成了华丽的人生转身。如中国人民大学与加拿大女王大学金融硕士项目&#xff0…

栈的压入,弹出序列

栈的压入弹出序列问题可以通过模拟栈的压入和弹出过程来解决。 具体思路如下: 定义一个辅助栈,用于模拟压栈和弹栈操作。遍历给定的压栈序列,在每一次循环中执行以下操作: 将当前元素压入辅助栈。循环检查辅助栈的栈顶元素是否与…

SQL-每日一题【1158. 市场分析 I】

题目 Table: Users Table: Orders Table: Items 请写出一条SQL语句以查询每个用户的注册日期和在 2019 年作为买家的订单总数。 以 任意顺序 返回结果表。 查询结果格式如下。 示例 1: 解题思路 1.题目要求我们查询每个用户的注册日期和在 2019 年作为买家的订单总数。我们可…

天工开物 #7 Rust 与 Java 程序的异步接口互操作

许多语言的高性能程序库都是建立在 C/C 的核心实现上的。 例如,著名 Python 科学计算库 Pandas 和 Numpy 的核心是 C 实现的,RocksDB 的 Java 接口是对底层 C 接口的封装。 Rust 语言的基本目标之一就是替代 C 在这些领域的位置,为开发者提供…

Python+PyQt5来模拟实现多人聊天

一、界面功能展示 1、设置一个通信 用户1 2、设置通信 用户2 3、进入聊天功能界面 4、发送信息来实现实时通信 二、代码实现 (要源码请留言)

Spring框架中的@Configuration参数proxyBeanMethods

一.概念分析 在Spring框架中,Configuration注解用于声明一个Java类作为配置类,它替代了传统的XML配置方式。通过Configuration注解标记的类可以包含Bean注解,用于定义Spring容器中的Bean对象。而在Configuration注解中,有一个非常…

HarmonyOS 开发基础(三)登录页面单向数据绑定(父组件向子组件传参)

一、目录结构认识 开发软件目录截图部分文件夹说明 文件组织结构图 二、完成单向数据绑定 index.etx // 导出方式直接从文件夹 import MyInput from "../common/commons/myInput" Entry Component /* 组件可以基于struct实现,组件不能有继承关系&am…

【JavaWeb】Javascript经典案例

Javascript经典案例 注意&#xff1a;该文章是参考b站<20个JS经典案例>进行学习的&#xff0c;没有CSS的组成。 在慢慢更新中…哈哈哈哈&#xff0c;太慢了 文章目录 1.支付定时器2.验证码生成及校验 1.支付定时器 代码实现&#xff1a; confirm.html <!DOCTYPE html…

动嘴操控“终结者”谷歌打造最强chatgpt机器人

我们知道&#xff0c;在掌握了网络中的语言和图像之后&#xff0c;大模型终究要走进现实世界&#xff0c;「具身智能」应该是下一步发展的方向。把大模型接入机器人&#xff0c;用简单的自然语言代替复杂指令形成具体行动规划&#xff0c;且无需额外数据和训练&#xff0c;这个…

Ubuntu-文件和目录相关命令

&#x1f52e;linux的文件系统结构 ⛳目录结构及目录路径 &#x1f9e9;文件系统层次结构标准FHS Filesystem Hierarchy Standard(文件系统层次结构标准&#xff09; Linux是开源的软件&#xff0c;各Linux发行机构都可以按照自己的需求对文件系统进行裁剪&#xff0c;所以众多…