第十三章《搞懂算法:神经网络是怎么回事》笔记
目前神经网络技术受到追捧,一方面是由于数据传感设备、数据通信技术和数据存储技术 的成熟与完善,使得低成本采集和存储海量数据得以成为现实;另一方面则是由于计算能力的大幅提升,如图形处理器(Graphics Processing Unit,GPU)在神经网络算法中的应用和算法的不断改进带来的计算效率提升。
常见的神经网络模型有深度神经网络、卷积神经网络、循环神经网络,以及由这些基本网 络优化而形成的各种深度学习模型。
13.1 从一个具体任务开始:识别数字
神经网络通过对大量手写数字的训练样本的学习,从而自动找到识别手写 数字的规则,实现对手写数字的识别。神经网络手写数字识别的训练数据一般采用 MNIST 数据 集,它不但提供了大量形式各异的手写数字样本,同时也提供了各个样本的标注信息,从而便 于研究者使用。
13.2 理解神经元是什么
神经元是神经网络算法的基本单元,它本质上是一种函数,接受外部刺激并根据输入产生 对应的输出。它的内部结构可以看作线性函数和激活函数的组合,线性函数运算结果传递给激 活函数,最终产生该神经元的输出结果。神经元也经历了逐步发展并完善的过程,其中典型的神经元有感知器和 S 型神经元等。
13.2.1 感知器是什么
感知器有时也被称为感知机,是由康奈尔航空实验室的科学家弗兰克·罗森布拉特在 1957 年所提出的一种人工神经网络。它可以被视为一种形式最简单的前馈式人工神经网络,是一种 二元线性分类器。感知器接收多个二进制输入并产生一个二进制输出。
感知器工作原理如下。
(1)感知器接收多个二进制输入,每个输入对应一个权重。
(2)感知器二进制输入的加权值对输出有重大影响。
(3)通过感知器加权值与阈值比较,决定最后的二进制输出值。
上述过程可用如下代数形式表达。

有时候为了简便,我们会把感知器规则 写成另外的通用形式,如下所示。

其中,wx=Σwi xi,b 为阈值的相反数,也称为感知器的偏置。
13.2.2 S型神经元是什么
S 型神经元与感知器相比,其优点在于:权重和偏置的微小变化只会导致输出的微小变化。
S 型神经元与感知器最大的区别在于它的输入和输出不再是二进制的离散值,而是 0 ~ 1的连续值。总的来说,S 型神经元的特点如下。
(1)S 型神经元有多个输入值,这些输入值为 0 ~ 1 的任意值。
(2)S 型神经元输入的加权值经过 sigmoid 函数处理后,输出一个 0 ~ 1 的数值。

S 型神经元与感知器的不同之处在于:S 型神经元是一个平滑的函数,而感知器是一个阶跃函数。也就是说,感知器只能输出 0 或者 1,而 S 型神经元能够输出 0 ~ 1 的任何数值。
S 型神经元的表达式可以写为
任何一个权重和偏置的微小变化Δw 和 Δb 都会导致 S 型神经元的输出产生一个微小变化。
13.3 理解典型神经网络多层感知器
最基本、也是最典型的神经网络— 多层感知器(Multi- Layer Perception,MLP)
13.3.1 神经网络结构是什么

一个典型的神 经元网络结构包括 3 个层:输入层、隐藏层、输出层。
(1)输入层。输入层是神经网络的第一层,图像通过数值化转换输入该层,该层接收输入 信号(值)并传递到下一层,对输入的信号(值)并不执行任何运算,没有自己的权重值和偏置值。图像将像素点信息转换为输入层神经元激活值,像素点数量等于输入层神经元数量。
(2)隐藏层。隐藏层是神经网络中介于输入层和输出层之间的合成层。一个神经网络包含 一个或多个隐藏层,隐藏层的神经元通过层层转换,不断提高和已标注图像的整体相似度,最 后一个隐藏层将值传递给输出层。
(3)输出层。输出层是神经网络的最后一层,接收最后一个隐藏层的输入而产生最终的预 测结果,得到理想范围内的期望数目的值。该层神经元可以只有一个,也可以和结果一样多。
13.3.2 搞懂MLP的工作原理是什么
手写数字的神经网络算法分类中包括如下几个主要环节,即图像数值化、神经 元相互激活传递和代价函数最小化等内容,需要我们重点把握。
1.图像数值化:将图像转化为数值
图像(手写数字)识别的第一项工作就是将 图像通过各像素点进行数值化处理,这项工作往往发生在神经网络的输入层。
其次,MLP 神经网络的最后一层包含 10 个神经元,分别代表 0 ~ 9 这 10 个数字。这 10 个神经元的激活值也是 0 ~ 1 的数值,激活值越大表示输入值对应该神经元的可能性越大。
最后,神经网络的中间层为隐藏层,它可以包含多层结构和多个神经元。神经网络处理信息的 核心就在于每一层神经元的激活值的计算和上一层神经元激活值影响下一层神经元激活值的方式。
2.激活规则:神经元间如何相互影响
神经网络的大致工作过程是,图像经过数值化处理后进入输入层神经元,输入层神经元沿 着某条路径激活下一层神经元,下一层神经元又将这种激活状态传播到后续各层的神经元,最 终在输出层产生预测结果。
神经元的激活规则就是,某个神经元激活值由上一层神经元激活值的某种加权方式来决 定。例如,神经元 c1 激活值由上一层神经元激活值的某种加权形式来表达,如 σ (w1a1+w2a2+... +wnan+b),其中 ai 是上一层某个神经元的激活值;wi 是上一层该神经元激活值对神经元 ci 激活 值影响的权重;b 则是神经元 c1 被激活的难易程度,即偏置;σ 是 sigmoid 函数,主要作用是将 函数值压缩为 0 ~ 1。
3.激活规则的关键:神经网络非线性矫正
早期神经网络的非线性函数经常使用 sigmoid 函数来将数值压缩为 0 ~ 1,但现在更多使用 relu 函数或者 tanh 函数来进行处理。

总的来说,上述 3 个函数有着各自的优缺点和使用场景。
第一,sigmoid 函数和 tanh 函数亲缘关系较近,一般认为 tanh 函数是 sigmoid 函数的改造版 本。在神经网络的隐藏层中,tanh 函数的表现要优于 sigmoid 函数,因为 tanh 函数范围为 -1 ~ 1, 数据的平均值为 0,有类似数据中心化的效果。
第二,在神经网络的输出层中,sigmoid 函数的表现要优于 tanh 函数,这是因为 sigmoid 函 数输出结果为 0 ~ 1,而 tanh 函数输出结果为 -1 ~ 1。输出结果为 0 ~ 1 更符合人们的习惯认知。
第三,relu 函数不同于上述两个函数,在深层网络中使用较多。工程实践中,sigmoid 函数和 tanh 函数会在深层网络训练中出现端值饱和的现象,从而导致网络训练速度变慢。因此,一般在神经网络层次较浅时使用 sigmoid 函数和 tanh 函数,而在深层网络中使用 relu 函数。
4.代价函数与参数优化
代价函数的一个合理形式是
当分类准确时这个代 价函数值就较小,当分类错误时这个代价函数值就较大。我们可以通过不断调整参数值来优化代价函数,最终确定合适的模型参数。
13.4 MLP的代价函数与梯度下降
MLP 神经网络学习过程由信号的正向传播与误差的反向传播两个过程组成。
(1)正向传播时,输入样本从输入层传入,经各隐藏层逐层处理后传向输出层。若输出层 的输出值与实际值不符,则转入误差的反向传播阶段。
(2)误差的反向传播是将输出误差以某种形式通过隐藏层向输入层逐层反向传播,并将误差分 摊给各层的所有单元,从而获得各层单元的误差信号,此误差信号即作为修正各单元权值的依据。
(3)这个信号的正向传播与误差的反向传播的各层权值调整过程,是周而复始地进行的。 权值不断调整的过程,也就是神经网络的学习训练过程,此过程一直进行到神经网络输出的误 差减小到可接受的程度或进行到预先设定的学习次数为止。
13.4.1 代价函数:参数优化的依据

13.4.2 梯度下降法:求解代价函数最小值
识别手写数字的任务 中,梯度下降法的工作过程主要如下。
(1)首先,随机给定一系列的权重值与偏置值。当然,这样最后的识别效果一般来说都会 很糟糕。
(2)接下来,算法需要不断改进。改进的方向就是使代价函数的数值不断减小;代价函数是输出层神经元激活值的表达式,如
。
(3)代价函数越小,就表示输出层神经元激活值的真实值与预测值的差距越小,手写数字 识别效果较好。
(4)梯度下降就是随机设定参数的初始值,然后沿着负梯度方向进行迭代(可调节步长或 迭代次数改进梯度下降效率),直到达到代价函数的最小值。

一般的做法是,首先将训练样本打乱顺序并划分为许多小组,每个小组都包含若干 数量的训练样本。然后,使用某个小组数据来计算一次梯度。这种梯度下降法就是随机梯度下降法。
13.5 反向传播算法的本质与推导过程
13.5.1 反向传播算法:神经网络的训练算法
反向传播(Back Propagation,BP)算法是一种重要的神经网络训练算法,“反向”的含义主要是指误差的反向传播。
1.反向传播算法有什么用
反向传播算法可以看成梯度下降法在神经网络中的变形版本,它的原理主要是利用链式法 则通过递归的方式求解微分,从而简化对神经网络梯度下降优化参数时的计算。在输入数据固 定的情况下,反向传播算法利用神经网络的输出敏感度来快速计算神经网络中的各种超参数, 从而大大减少训练所需时间。
2.反向传播算法是什么
提升激活值可以采用的方法为改变权重 wi 和偏置 b、改变上层神经元激活值 ai。不 过,我们并不能改变上一层神经元激活值,我们能够改变的只是权重和偏置。
上一层神经元权重和偏置的变化情况会综合考虑输出层各神 经元的“要求”。这就是反向传播算法的核心思想,通过调整上一层各神经元的权重和偏置来实 现下一层各神经元激活值的“期待”,重复这个过程到神经网络的所有层。
13.5.2 寻根究底:搞懂反向传播算法的数学原理
1. 代价函数如何表达

2.代价函数偏导链式传递规律

上述代价函数对权重的偏导数只是一个训练样本的结果。由于总代价函数是 n 个训练样本 代价函数的均值,因此总代价函数对权重的偏导数为
。
虽然神经网络算法强大,应用广泛,但是它有个比较明显的不足就是可解释性较差。
13.6 编程实践:手把手教你写代码
相关文章:
第十三章《搞懂算法:神经网络是怎么回事》笔记
目前神经网络技术受到追捧,一方面是由于数据传感设备、数据通信技术和数据存储技术 的成熟与完善,使得低成本采集和存储海量数据得以成为现实;另一方面则是由于计算能力的大幅提升,如图形处理器(Graphics Processing Unit,GPU)在神…...
SpringBoot不同环境加载不同配置文件(dev,sit,uat)
目录 一、springboot的profile配置profile多配置文件 二、maven的profiles策略 我们在使用spring的时候,一般都会有不同的环境需要部署:开发环境、测试环境和验收环境,而不同的环境则会有不同的配置,比如数据库ip。解决这个问题&a…...
2023.11.8 hadoop学习-概述,hdfs dfs的shell命令
目录 1.分布式和集群 2.Hadoop框架 3.版本更新 4.hadoop架构详解 5.页面访问端口 6.Hadoop-HDFS HDFS架构 HDFS副本 7.SHELL命令 8.启动hive服务 1.分布式和集群 分布式: 多台服务器协同配合完成同一个大任务(每个服务器都只完成大任务拆分出来的单独1个子任务)集 群:…...
Azure 机器学习 - 使用自动化机器学习训练计算机视觉模型的数据架构
目录 一、用于训练的数据架构图像分类(二进制/多类)多标签图像分类对象检测实例分段 二、用于联机评分的数据架构输入格式输出格式图像分类(二进制/多类)多标签图像分类对象检测实例分段 在线评分和可解释性 (XAI) 的数据格式支持…...
STM32F4X SDIO(九) 例程讲解-SD卡擦除、读写
STM32F4X SDIO (九) 例程讲解-SD卡擦除、读写 例程讲解-SD卡擦除、读写SD卡擦除CMD32:ERASE_WR_BLK_START命令发送命令响应 CMD33:ERASE_WR_BLK_END命令发送命令响应CMD38:ERASE命令响应 CMD13:SD_CMD_SEND_STATUS命令发送命令回应 SD卡读数据CMD16:SET_…...
【机器学习范式】监督学习,无监督学习,强化学习, 半监督学习,自监督学习,迁移学习,对比分析+详解与示例代码
目录 1. 监督学习 (Supervised Learning): 2. 无监督学习 (Unsupervised Learning): 3. 强化学习 (Reinforcement Learning): 4. 半监督学习 (Semi-Supervised Learning): 5. 自监督学习 (Self-Supervised Learning): 6. 迁移学习 (Transfer Learning): 7 机器学习范式应…...
JUC包下面的四大天王+线程池部分知识
一)Semphore:限流器用我就对了 Java中信号量Semphore是把操作系统原生的信号量封装了一下,本质就是一个计数器,描述了 可用资源的个数,主要涉及到两个操作 如果计数器为0了,继续Р操作,就会出现阻塞等待的情况 P操作:申…...
AGV系统控制位置管理功能
# ファイル: agv_locattion.py # 説明: AGV (Automated Guided Vehicle) の位置情報を管理し、UDPサーバーとして動作するGUIアプリケーションです。 # 必要なライブラリをインポート import tkinter as tk import socket import threading def AGV_handle_submit(canvas, st…...
JavaScript从入门到精通系列第三十三篇:详解正则表达式语法(二)
文章目录 一:正则表达式 1: 检查一个字符串中是否有. 2:第二种关键表达 3:第三种关键表达 编辑4:第四种关键表达 5:第五种关键表达 6:第六种关键表达 二:核心表达二 1&am…...
由于找不到 d3dx9_43.dll,无法继续执行代码。重新安装程序可能会解决此问题
电脑出现d3dx9_43.dll缺失的问题,通常是由于DirectX组件未安装或损坏导致的。为了解决这个问题,我为您提供了以下四个解决方法: d3dx9_43.dll解决方法1. 使用dll修复程序修复 首先,使用系统文件程序dll进行修复操作非常简单&…...
AI全栈大模型工程师(二十一)LangChain和SemanticKernel怎么选
LangChain 和 Semantic Kernel 怎么选? #%% md 划重点: 两者都值得学C#、JavaScript 和 Java 现在没得选做原型,首选 LangChain。功能多,开发快做产品,还是 SK 长期更可依赖建议只用 SK 的 Connectors 和 Plugins 能力…...
npm install 报错 chromedriver 安装失败的解决办法
npm install chromedriver --chromedriver_cdnurlhttp://cdn.npm.taobao.org/dist/chromedriver...
C语言--每日五道选择题--Day6
第一题 1、声明以下变量,则表达式: ch/i (f*d – i) 的结果类型为( ) char ch; int i; float f; double d; A: char B: int C: float D: double 答案及解析 D 基本数据类型的等级从低到高如下:char-> int-> long-> f…...
element-ui 封装 表格
一、封装表格组件 <template><el-table :data"list" :default-sort"{ prop: date }" style"width: 100%"><template v-for"item in tableColumn"><el-table-columnv-if"item.filters":prop"item…...
数据的使用、表关系的创建、Django框架的请求生命周期流程图
目录 一、数据的增删改查 1. 用户列表的展示 2. 修改数据的逻辑分析 3. 删除功能的分析 二、如何创建表关系 三、Django的请求生命周期流程图 一、数据的增删改查 1. 用户列表的展示 把数据表中得用户数据都给查询出来展示在页面上 查询数据 def userlist(request):&qu…...
Python基础教程:类--继承和方法的重写
嗨喽,大家好呀~这里是爱看美女的茜茜呐 什么是继承 继承就是让类与类之间产生父子关系,子类可以拥有父类的静态属性和方法 继承就是可以获取到另一个类中的静态属性和普通方法(并非所有成员) 在python中,新建的类可…...
Three.js提供了多种类型的灯光
Three.js提供了多种类型的灯光,包括环境光、点光源、平行光源和聚光灯。这些灯光可以用来照亮场景中的物体,使其看起来更加真实。 环境光(AmbientLight):环境光会均匀地照亮场景中的所有物体,没有方向,不能用来投射阴…...
精通Nginx(10)-负载均衡
负载均衡就是将前端过来的负载分发到两台或多台应用服务器。Nginx支持多种协议的负载均衡,包括http(s)、TCP、UDP(关于TCP、UDP负载均衡另文讲述)等。 目录 HTTP负载均衡 负载均衡策略 轮询 least_conn(最少连接) hash(通用哈希) ip_hash(IP 哈希) random(随…...
Hls学习(一)
1:CPU、DSP、GPU都算软件可编程的硬件 2:dsp在递归方面有所减弱,在递归方面有所增强,比如递归啊等,GPU可以同时处理多个进程,对于大块数据,流处理比较适用 3:为了提高运算量处理更多…...
Maven打包引入本地依赖包
Maven打包引入本地依赖包 SpringBoot 工程,Maven 在构建项目时,如何引入本地 Jar 包? 适合场景: 引用的依赖不在 Maven 仓库第三方公司提供的 SDK 包Maven 内网离线开发引入被定制改动过的 Jar 包 解决方法: 在 I…...
<6>-MySQL表的增删查改
目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表…...
AtCoder 第409场初级竞赛 A~E题解
A Conflict 【题目链接】 原题链接:A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串,只有在同时为 o 时输出 Yes 并结束程序,否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
基于Docker Compose部署Java微服务项目
一. 创建根项目 根项目(父项目)主要用于依赖管理 一些需要注意的点: 打包方式需要为 pom<modules>里需要注册子模块不要引入maven的打包插件,否则打包时会出问题 <?xml version"1.0" encoding"UTF-8…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
Sklearn 机器学习 缺失值处理 获取填充失值的统计值
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 使用 Scikit-learn 处理缺失值并提取填充统计信息的完整指南 在机器学习项目中,数据清…...
