第十三章《搞懂算法:神经网络是怎么回事》笔记

目前神经网络技术受到追捧,一方面是由于数据传感设备、数据通信技术和数据存储技术 的成熟与完善,使得低成本采集和存储海量数据得以成为现实;另一方面则是由于计算能力的大幅提升,如图形处理器(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 编程实践:手把手教你写代码

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】Centos7 shell实现MySQL5.7 tar 一键安装

🦄 个人主页——🎐个人主页 🎐✨🍁 🪁🍁🪁🍁🪁🍁🪁🍁 感谢点赞和关注 ,每天进步一点点!加油!&…

upload-labs12-21关

第十二关 提示及源码 $is_upload false; $msg null; if(isset($_POST[submit])){$ext_arr array(jpg,png,gif);$file_ext substr($_FILES[upload_file][name],strrpos($_FILES[upload_file][name],".")1);if(in_array($file_ext,$ext_arr)){$temp_file $_FILES…

KEIL MDK 调试 无法 查看 外设 信息 原因及解决方法

MDK5.38版本有bug : 不能把STM32F4的官方SVD文件转换成SFR,而MDK5.38a版本没有此问题。

前端通过导入editor.md库实现markdown功能

小王学习录 今日摘录前言jquery下载editor下载editor和jquery的导入初始化editor总结 今日摘录 满招损,谦受益 前言 要想通过editor.md实现markdown的功能,需要经过如下四步: 下载editor.md到本地将本地editor导入到前端代码中编写少量代…

Leetcode—103.二叉树的锯齿形层序遍历【中等】

2023每日刷题(二十六) Leetcode—103.二叉树的锯齿形层序遍历 BFS实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ /*** Return an array of ar…

【原创课设】java+swing+mysql药店管理系统设计与实现

摘要: 药店管理系统对于药店运营具有重大的意义。首先,它可以提高药店的运营效率,减少人工操作成本,通过信息化的管理方式,可以提高药店的服务质量和管理水平,增强药店的市场竞争力。用户可以登录系统直接…

Raft分布式一致性算法

拜占庭将军 假设多位拜占庭将军中没有叛军,信使的信息可靠但有可能被暗杀的情况下,将军们如何达成是否要进攻的一致性决定?解决问题的思路是,从多位处于平等地位的将军中选举出一位大将军,所有作战指令由大将军发出。…

伪造referer [极客大挑战 2019]Http1

打开题目 没有发现什么,我们查看源代码 在这里我们发现了提示 访问一下页面得到 提示说不能来自于https://Sycsecret.buuoj.cn,我们尝试访问一下这个url 发现访问不了 我们bp抓包一下 伪造个referer头 referer:https://Sycsecret.buuoj.cn 发包过去…

经典的测试开发面试题

1、你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决? 首先,将问题提交到缺陷管理库进行备案。 然后,要获取判断的依据和标准: 根绝需求说明书,产品说明、设计文档等&…

邻接表储存图实现广度优先遍历(C++)

目录 基本要求: 邻接表的结构体: 图的邻接表创建: 图的广度优先遍历(BFS): 邻接表的打印输出: 完整代码: 测试数据: 结果运行: 通过给出的图的顶点和…

Jmeter之Bean shell使用详解

一、什么是Bean Shell BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法; BeanShell是一种松散类型的脚本语言(这点和JS类似); BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性,非常精…

Android---内存泄漏的优化

内存泄漏是一个隐形炸弹,其本身并不会造成程序异常,但是随着量的增长会导致其他各种并发症:OOM,UI 卡顿等。 为什么要将 Activity 单独做预防? 因为 Activity 承担了与用户交互的职责,因此内部需要持有大…

JAVA基础语法编程详解

1 类型转换 描述: 设计一个方法,将一个小于2147483647的double类型变量以截断取整方式转化为int类型输入描述: 随机double类型变量输出描述: 转化后的int类型变量示例 输入:123.45 输出: 123 题解思路&…

吴恩达《机器学习》8-1->8-2:非线性假设、神经元和大脑

一、非线性假设 在之前学到的线性回归和逻辑回归中,存在一个缺点,即当特征数量很多时,计算的负荷会变得非常大。考虑一个例子,假设我们使用 𝑥₁, 𝑥₂ 的多项式进行预测,这时我们可以很好地应…

【自定义类型:结构体】

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 1. 结构体类型的声明 1.1 结构体的概念 1.2 结构的声明 ​编辑 1.3 特殊的声明 1.4 结构的自引用 2. 结构体变量的创建和初始化 3. 结构成员访问操作符 4. 结构体内…

数据库01-慢查询优化

目录 MySQL优化 慢查询 如何定位慢查询? 如何分析慢查询? MySQL优化 MySQL 优化是数据库管理和应用性能调优的一个重要方面。以下是一些常规性的 MySQL 优化经验和适用场景: 索引优化: 确保表的字段上有适当的索引&#xff0…

如何选择一个可靠的爬虫代理服务商?技术人员都需要知道

我身边从事大数据相关行业的朋友最近告诉我,自己新招的小伙伴工作效率很低,很多最基础的工具都不会选择,经常因为代理IP不可靠导致工作出错。 听完这些我才意识到,在这个大数据时代,还是有很多新手在进行网络爬取任务…

threejs(11)-精通着色器编程(难点)2

一、shader着色器编写高级图案 小日本国旗 precision lowp float; varying vec2 vUv; float strength step(0.5,distance(vUv,vec2(0.5))0.25) ; gl_FragColor vec4(strength,strength,strength,strength);绘制圆 precision lowp float; varying vec2 vUv; float strength 1…

Java中Enum枚举类型在项目中应用

1、什么是枚举类型? 1、枚举的本质就是穷举法,将可能会出现的情况,都列举出来,然后在列举的情况中调用。 2、枚举与class类似,也可以定义属性,构造方法,有getter和setter方法。 3、枚举类型对…

改进YOLOv8:结合ICCV2023|动态蛇形卷积,构建不规则目标识别网络

🔥🔥🔥 提升多尺度、不规则目标检测,创新提升 🔥🔥🔥 🔥🔥🔥 捕捉图像特征和处理复杂图像特征 🔥🔥🔥 👉👉👉: 本专栏包含大量的新设计的创新想法,包含详细的代码和说明,具备有效的创新组合,可以有效应用到改进创新当中 👉👉👉: �…