当前位置: 首页 > news >正文

神经网络的工作原理

目录

神经网络的介绍

神经网络的组成

神经网络的工作原理

Numpy 实现神经元

Numpy 实现前向传播

Numpy 实现一个可学习的神经网络


神经网络的介绍

神经网络受人类大脑启发的算法。简单来说,当你睁开眼睛时,你看到的物体叫做数据,再由你大脑中处理数据的 Nuerons(细胞)操作,识别出你所看到的物体,这是神经网络的工作过程。人工神经网络(Artificial Neural Network,ANN),它们不像你大脑中的神经元一样操作,而是模拟神经网络的性质和功能。

神经网络的组成

人工神经网络由大量高度相互关联的处理单元(神经元)协同工作来解决特定问题。首先介绍一种名为感知机的神经元。感知机接收若干个输入,每个输入对应一个权重值(可以看成常数),用它们做一些数学运算,然后产生一个输出。

图片

接下来用形象化的例子解释感知机,假设有一个计划,周末去徒步,影响计划是否进行的因素有这些:

(1)周末是否加班;
(2)周末的天气是否恶劣;
(3)往返徒步地点是否方便;

对于不同人,三个因素的影响效果也不一样,如果 输入(2)对于你来说影响非常大,这样就设置的权重值就大,反之权重值就小。

再将输入二值化,对于天气不恶劣,设置为 1(),对于天气恶劣,设置为 0(),天气的影响程度通过权重值体现,设置为 10()。同样设置输入(1)的权值为 8(),输入(3)的权重值为 1()。输出二值化是去徒步为 1(),不去为 0()。

假设对于感知机,如果  的结果大于某阈值(如 5),表示去徒步 ,随机调整权重,感知机的结果会不一样。

一个典型的神经网络有成百上千个神经元(感知机),排成一列的神经元也称为单元或是,每一列的神经元会连接左右两边的神经元。感知机有输入和输出,对于神经网络是有输入单元与输出单元,在输入单元和输出单元之间是一层或多层称为隐藏单元。一个单元和另一个单元之间的联系用权重表示,权重可以是正数(如一个单元激发另一个单元) ,也可以是负数(如一个单元抑制或抑制另一个单元)。权重越高,一个单位对另一个单位的影响就越大。

图片

神经网络的工作原理

神经网络的工作大致可分为前向传播反向传播,类比人们学习的过程,

前向传播如读书期间,学生认真学习知识点,进行考试,获得自己对知识点的掌握程度;

反向传播是学生获得考试成绩作为反馈,调整学习的侧重点。

以下展示了 2 个输入和 2 个输出的神经网络:

图片

图片

大多数真实世界的数据是非线性的,我们希望神经元学习这些非线性表示,可以通过激活函数将非线性引入神经元。例如徒步例子中的阈值,激活函数 ReLU(Rectified Linear Activation Function)的阈值为 0,对于大于 0 的输入,输出为输入值,对于小于 0 的输入值,输出为 0,公式和图像表示如下:

 

图片

这里扩展一下,激活函数有很多种,例如常用的 sigmoid 激活函数,只输出范围内的数字 ,它将无界输入转换为具有良好、可预测的输出形式,sigmoid 函数的公式和图像如下。

 

加入 ReLU 激活函数的神经网络如下图所示:

图片

 

加入 SoftMax 函数的神经网络如下图所示:

图片

获得神经网络的输出值 (0.98, 0.02) 之后,与真实值 (1, 0) 比较,非常接近,仍然需要与真实值比较,计算差距(也称误差,用  e表示),就跟摸底考试一样,查看学习的掌握程度,同样神经网络也要学习,让输出结果无限接近真实值,也就需要调整权重值,这里就需要反向传播了。

图片

反向传播过程中需要依据误差值来调整权重值,可以看成参数优化过程,简要过程是,先初始化权重值,再增加或减少权重值,查看误差是否最小,变小继续上一步相同操作,变大则上一步相反操作,调整权重后查看误差值,直至误差值变小且浮动不大。

 

斜率的大小表明变化的速率,意思是当斜率比较大的情况下,权重  变化所引起的结果变化也大。把这个概念引入求最小化的问题上,以权重导数乘以一个系数作为权重更新的数值,这个系数我们叫它学习率(learning rate),这个系数能在一定程度上控制权重自我更新,权重改变的方向与梯度方向相反,如下图所示,权重的更新公式如下:

 

 

import numpy as npdef mse-loss(y_true, y_pred):# y_true and y_pred are numpy arrays of the same length.return ((y_true - y_pred) ** 2).mean()y_true = np.array([1, 0, 0, 1])
y_pred = np.array([0, 0, 0, 0])print(mse_loss(y_true, y_pred)) # 0.5

Numpy 实现神经元

以上介绍了神经网络的基本结构及数学原理,为了方便大家理解,参数围绕着 ,后续继续深入学习,便遇到  参数(称为偏差),神经元会有以下这样的形式。

图片

 

Python 代码实现如下:

import numpy as npdef sigmoid(x):# Our activation function: f(x) = 1 / (1 + e^(-x))return 1 / (1 + np.exp(-x))class Neuron:def __init__(self, weights, bias):self.weights = weightsself.bias = biasdef feedforward(self, inputs):# Weight inputs, add bias, then use the activation functiontotal = np.dot(self.weights, inputs) + self.biasreturn sigmoid(total)weights = np.array([0, 1]) # w1 = 0, w2 = 1
bias = 4                   # b = 4
n = Neuron(weights, bias)x = np.array([2, 3])       # x1 = 2, x2 = 3
print(n.feedforward(x))    # 0.9990889488055994

Numpy 实现前向传播

同样在神经网络中,如下图所示,这个网络有 2 个输入,一个隐藏层有 2 个神经元( 和 ),和一个有 1 个神经元的输出层()。

图片

输出如下:

 

图片

Python 代码实现如下:

import numpy as npclass OurNeuralNetwork:'''A neural network with:- 2 inputs- a hidden layer with 2 neurons (h1, h2)- an output layer with 1 neuron (o1)Each neuron has the same weights and bias:- w = [0, 1]- b = 0'''def __init__(self):weights = np.array([0, 1])bias = 0# The Neuron class here is from the previous sectionself.h1 = Neuron(weights, bias)self.h2 = Neuron(weights, bias)self.o1 = Neuron(weights, bias)def feedforward(self, x):out_h1 = self.h1.feedforward(x)out_h2 = self.h2.feedforward(x)# The inputs for o1 are the outputs from h1 and h2out_o1 = self.o1.feedforward(np.array([out_h1, out_h2]))return out_o1network = OurNeuralNetwork()
x = np.array([2, 3])
print(network.feedforward(x)) # 0.7216325609518421

Numpy 实现一个可学习的神经网络

终于到了实现一个完整的神经网络的时候了,把参数全安排上,别吓着了~

图片

现在有一个明确的目标:最小化神经网络的损,将损失写成多变量函数,其中 。

图片

变量多的时候,求其中一个变量的导数时,成为求偏导数,接下来求  的偏导数,公式如下:

图片

橙色框的内容关于损失函数可以直接得到:

图片

绿色框的内容,继续分析 :

图片

 只影响  不影响 ,绿色框的内容拆解为:

图片

最终关于 的偏导数,公式如下:

图片

为了便于大家理解,将公式放在一起,请查阅~

图片

这里会对 sigmoid 函数求导,求导的结果如下:

图片

获得偏导数后,回忆一下参数的更新公式:

学习率偏导数

  • 如果偏导数为正,则参数减少;

  • 如果偏导数为负,则参数增加。

如果我们对网络中的每个权重和偏差都这样做,损失将慢慢减少。

整个过程如下:

  • 1.从我们的数据集中选择一个样本,进行操作

  • 2.计算损失中关于权重和偏差的偏导数

  • 3.使用更新公式更新每个权重和偏差

  • 4.回到步骤1

相关文章:

神经网络的工作原理

目录 神经网络的介绍 神经网络的组成 神经网络的工作原理 Numpy 实现神经元 Numpy 实现前向传播 Numpy 实现一个可学习的神经网络 神经网络的介绍 神经网络受人类大脑启发的算法。简单来说,当你睁开眼睛时,你看到的物体叫做数据,再由你…...

Pandas数据分析教程-数据清洗-字符串处理

pandas-02-数据清洗&预处理 D. 字符串处理1. Python自带的字符串处理函数2. 正则表达式3. Series的str属性-pandas的字符串函数文中用S代指Series,用Df代指DataFrame 数据清洗是处理大型复杂情况数据必不可少的步骤,这里总结一些数据清洗的常用方法:包括缺失值、重复值、…...

Nginx 核心配置

一.全局配置 1.1 Nginx 全局配置说明 user nginx nginx; # 启动Nginx⼯作进程的⽤⼾和组 worker_processes [number | auto]; # 启动Nginx⼯作进程的数量 worker_cpu_affinity 00000001 00000010 00000100 00001000; # 将Nginx⼯作进程绑定到指定的CPU核⼼…...

yum命令安装程序

Ubuntu图系统的安装命令: top命令: df -h查看磁盘占用信息 网络状态监控 环境变量和¥符号的用法: 上传下载命令: 压缩解压常见:的压缩格式 tar tar解压:...

什么是CSS中的BFC?

①什么是BFC BFC 全称:Block Formatting Context, 名为 “块级格式化上下文”。 W3C官方解释为:BFC它决定了元素如何对其内容进行定位,以及与其它元素的关系和相互作用,当涉及到可视化布局时,Block Forma…...

探讨uniapp的页面问题

1 新建页面 uni-app中的页面,默认保存在工程根目录下的pages目录下。 每次新建页面,均需在pages.json中配置pages列表; 未在pages.json -> pages 中注册的页面,uni-app会在编译阶段进行忽略。pages.json的完整配置参考&am…...

【跨域异常】

想在前端使用vue获取后端接口的数据,但是报了跨域异常,如下图所示。 一种解决的方式是,在后端Controller接口上加上CrossOrigin,从后端解决跨域问题。 还要注意前端请求的url要加上协议,比如http://...

上市公司环境信息披露(含环境负债、管理、监管、业绩与治理披露,2008-2022)

数据简介:环境信息披露是督促企业履行社会责任,推动国民经济社会全面绿色转型和加快实现“双碳”目标的重要抓手。环境信息披露理论缘起于社会责任理论,发展于合法性理论、利益相关者理论、制度理论和信号传递理论等。 结合相关理论&#xf…...

网络基础入门

认识协议 协议其实是一种约定 网络协议初识: 1.内核上以结构体形式呈现 2.操作系统要进行协议管理--先描述,在管理 3.协议的本质是软件,软件是可以分层的,(联系C继承多态的知识 ) 可以参考 &#xff1…...

Oracle工具之SQLLDR

1. 什么是SQLLDR SQLLDR是Oracle服务端自带的工具,用于快速导入大批量数据。 2. 常规路径加载/直接路径加载 sqlldr导入有两种模式,常规路径加载和直接路径加载,默认使用常规路径加载,当directy或者directtrue时,使用…...

探索pytest:Python自动化测试的新境界

在当今的软件开发领域,测试已经不仅仅是一个简单的步骤,而是确保软件质量的核心环节。Python,作为全球最受欢迎的编程语言之一,拥有丰富的测试框架和工具。而在这其中,pytest无疑是最受欢迎和最具影响力的一个。本文将…...

K8s学习笔记4

场景: 项目研发部门最近要进行应用运行基础环境迁移,需要由原先的虚拟机环境迁移到K8s集群环境中,以便应对开发快速部署和快速测试的需要,因此,需要准备一套可以用于开发需求的K8s集群,但是对于仅有容器基…...

Kafka 学习笔记

😀😀😀创作不易,各位看官点赞收藏. 文章目录 Kafka 学习笔记1、消息队列 MQ2、Kafka 下载安装2.1、Zookeeper 方式启动2.2、KRaft 协议启动2.3、Kafka 集群搭建 3、Kafka 之生产者3.1、Java 生产者 API3.2、Kafka 生产者生产分区3…...

vue实现表格的动态高度

需求:表格能够根据窗口的大小自动适配页面高度 防抖和节流函数的使用场景是当需要对频繁触发的事件进行限制时,例如: 防抖函数常用于限制用户在短时间内多次触发某一事件,例如搜索框输入并搜索,当用户一直在输入时,我们可以使用防抖函数来避免多次请求搜索结果,减轻服…...

HodlSoftware-免费在线PDF工具箱 加解密PDF 集成隐私保护功能

HodlSoftware是什么 HodlSoftware是一款免费在线PDF工具箱,集合编辑 PDF 的简单功能,可以对PDF进行加解密、优化压缩PDF、PDF 合并、PDF旋转、PDF页面移除和分割PDF等操作,而且工具集成隐私保护功能,文件只在浏览器本地完成&…...

09 数据库开发-MySQL

文章目录 1 数据库概述2 MySQL概述2.1 MySQL安装2.1.1 解压&添加环境变量2.1.2 初始化MySQL2.1.3 注册MySQL服务2.1.4 启动MySQL服务2.1.5 修改默认账户密码2.1.6 登录MySQL 2.2 卸载MySQL2.3 连接服务器上部署的数据库2.4 数据模型2.5 SQL简介2.5.1 SQL通用语法2.3.2 分类…...

QT通过ODBC连接GBase 8s数据库(Windows)示例

示例环境: 操作系统:Windows 10 64位数据库及CSDK版本:GBase 8s V8.8_3.0.0_1 64位QT:5.12.0 64位 1,CSDK安装及ODBC配置 1.1,免安装版CSDK 下载免安装版的CSDK驱动,地址:https:…...

Java-三个算法冒泡-选择排序,二分查找

Java算法: 冒泡排序; 解析:将前后两个数对比,将大的数(或小的)调换至后面,每轮将对比过程中的最大(或最小)数,调到最后面。每轮对比数减一;初始对比数为数组…...

docker版jxTMS使用指南:使用jxTMS提供数据

本文讲解了如何jxTMS的数据访问框架,整个系列的文章请查看:docker版jxTMS使用指南:4.4版升级内容 docker版本的使用,请查看:docker版jxTMS使用指南 4.0版jxTMS的说明,请查看:4.0版升级内容 4…...

阿里 MySQL 规范

阿里 MySQL 规范 1. 建库建表规范 【推荐】库名与应用/服务名称尽量一致。 【强制】表名不使用复数名词。 说明:表名应该仅仅表示表里面的实体内容,不应该表示实体数量,对应于DO类名也是单数形式,符合表达习惯。 【推荐】表的…...

InstructPix2Pix在.NET平台的应用开发实战

InstructPix2Pix在.NET平台的应用开发实战 1. 引言:当AI修图遇上.NET开发 想象一下这样的场景:电商平台的商品图片需要批量调整风格,摄影工作室想要快速实现创意效果,或者内容创作者需要即时编辑社交媒体图片。传统图像处理方式…...

告别pip安装失败:在Jetson Nano(ARM64)上手动编译PyQt5 5.15.2的完整记录

在Jetson Nano(ARM64)上手动编译PyQt5 5.15.2的完整指南 当你在Jetson Nano这样的ARM64架构设备上尝试用pip安装PyQt5时,很可能会遇到各种兼容性问题。作为一款强大的Python GUI库,PyQt5在嵌入式开发中有着广泛的应用场景&#x…...

告别目标跟丢!手把手教你用BoT-SORT和OpenCV GMC搞定复杂场景下的多目标跟踪

告别目标跟丢!手把手教你用BoT-SORT和OpenCV GMC搞定复杂场景下的多目标跟踪 在智能监控和自动驾驶等实际应用中,多目标跟踪(MOT)技术常常面临动态相机和目标快速移动带来的挑战。传统算法在目标遮挡、镜头晃动等复杂场景下容易出…...

5个高效能的LabelImg图像标注效率提升实践

5个高效能的LabelImg图像标注效率提升实践 【免费下载链接】labelImg LabelImg is now part of the Label Studio community. The popular image annotation tool created by Tzutalin is no longer actively being developed, but you can check out Label Studio, the open s…...

深入解析BLE空口报文抓取:从GAP广播到LESC安全通信全流程

1. BLE空口报文抓取基础 想要分析BLE设备间的通信过程,抓取空口报文是最直接有效的方法。这就像在两个人对话时,用录音设备记录下他们的每一句话。不过BLE通信使用的是2.4GHz无线频段,我们无法直接用耳朵听到这些"对话"&#xff0c…...

SlopeCraft终极指南:如何轻松将任何图片转换为Minecraft立体地图画

SlopeCraft终极指南:如何轻松将任何图片转换为Minecraft立体地图画 【免费下载链接】SlopeCraft Map Pixel Art Generator for Minecraft 项目地址: https://gitcode.com/gh_mirrors/sl/SlopeCraft 你是否曾梦想将心爱的照片、动漫角色或艺术作品搬进Minecra…...

电子工程师的技术洁癖与嵌入式开发实践

1. 电子工程师的职业习惯与技术洁癖 1.1 工程师的强迫症表现 在电子工程领域,许多从业者都表现出典型的"技术洁癖"特征。这种职业习惯主要体现在以下几个方面: 元器件布局强迫症 :PCB板上电阻、电容等元件的焊盘必须对齐&#x…...

OpenClaw技能市场巡礼:Qwen3-32B生态实用工具

OpenClaw技能市场巡礼:Qwen3-32B生态实用工具 1. 为什么需要技能市场? 第一次接触OpenClaw时,我被它的基础能力震撼——能像人类一样操作我的电脑,完成文件整理、网页搜索等任务。但真正让我决定长期使用的,是发现它…...

「5 个 Markdown 文件 + 1 句提示词」让 AI 精准重构你的 React 组件 | 附完整模板

这个场景你一定经历过: 你给 ChatGPT/Claude 一个又臭又长的 React 组件,说:"帮我重构一下,让它更清晰。" 结果要么: 改错了交互逻辑,导致功能崩溃改变了接口契约,后端完全适配不了代…...

国科大研一CS选课避坑指南:从算法分析到模式识别,我的踩坑与真香体验

国科大研一CS选课避坑指南:从算法分析到模式识别,我的踩坑与真香体验 第一次踏入国科大雁栖湖校区的图书馆时,我被落地窗外绵延的燕山山脉震撼得说不出话——直到发现座位插座没电、WiFi信号时断时续,才意识到理想与现实的参差。这…...