政安晨:【深度学习神经网络基础】(一)—— 逐本溯源

政安晨的个人主页政安晨

欢迎 👍点赞✍评论⭐收藏

收录专栏政安晨的机器学习笔记

希望政安晨的博客能够对您有所裨益,如有不足之处,欢迎在评论区提出指正!

与计算机一样的古老历史

神经网络的出现可追溯到20世纪40年代,因此,其有相当长的发展历史。

咱们将介绍神经网络的发展历史,因为你需要了解一些术语。

激活函数是其中一个很好的例子,它可以缩放神经网络中神经元的值。

阈值激活函数是研究人员引入了神经网络时的早期选择,而后S型激活函数、双曲正切激活函数、修正线性单元(Rectified Linear Unit,ReLU)激活函数等相继被提出。

虽然目前大多数文献都建议仅使用ReLU激活函数,但你需要了解S型激活函数和双曲正切激活函数,才能理解ReLU激活函数的优势。

在神经网络的发展历程中,神经网络曾几次从灰烬中重生。

McCulloch W.和Pitts W.(1943)首先提出了神经网络的概念。但是,他们没有方法来训练这些神经网络。程序员必须手工制作这些早期神经网络的权重矩阵。由于这个过程很烦琐,因此神经网络首次被弃用了。

Rosenblatt F.(1958)提出了一种训练算法,即反向传播算法该算法可自动创建神经网络的权重矩阵。实际上,反向传播算法有许多神经元层,可模拟动物大脑的结构,但是,反向传播算法的速度很慢,并且会随着层数的增加变得更慢。从20世纪80年代到20世纪90年代初期计算能力的增加似乎有助于神经网络执行任务,但这个时代的硬件和训练算法无法有效地训练多层神经网络,神经网络又一次被弃用了。

神经网络的再次兴起,是因为Hinton G.(2006)提出了一种全新的深度神经网络训练算法。高速图形处理单元(Graphics Processing Unit,GPU)的最新进展,使程序员可以训练具有三层或更多层的神经网络。程序员逐步意识到深层神经网络的好处,从而促使该技术重新流行。

咱们这个系列的文章将从分析经典的神经网络开始,这些经典的神经网络对各种任务仍然有用

我们的分析包括一些概念,如自组织映射(Self-Organizing Map,SOM)、霍普菲尔德神经网络(Hopfield neural network)和玻尔兹曼机(Boltzmann machine)。

咱们应该还会涉及前馈神经网络(FeedForward Neural Network,FFNN),展示几种训练它的方法。当然,您已经猜到了,具有许多层的前馈神经网络变成了深度神经网络。其它还有如如随机Dropout、正则化和卷积等。


知识背景

大多数行业外的人都认为神经网络是一种人工大脑。根据这种观点,神经网络可以驱动机器人,或与人类进行智能对话,但是,与神经网络相比,这个概念更接近AI的定义。尽管AI致力于创建真正的智能机器,但计算机的当前状态远低于这一目标。人类的智能仍然胜过计算机的智能。

神经网络只是AI的一小部分。正如神经网络目前的样子,它们执行的是微小的、高度特定的任务。与人脑不同,基于计算机的神经网络不是通用的计算设备。此外,术语“神经网络”可能会给人造成困惑,因为由大脑神经元构成的网络,也被称为神经网络。为了避免这个问题,我们必须做出重要的区分。

实际上,我们应该将人脑称为生物神经网络(Biological Neural Network,BNN)。大多数文章都不会特别区分BNN和人工神经网络(Artificial Neural Network,ANN),咱们也会这样。当我们提到“神经网络”这个术语时,指的是ANN而不是BNN。

BNN和ANN具有一些非常基本的相似性。如BNN启发了ANN的数学构造。生物合理性描述了各种ANN算法。“神经网络”这个术语决定了ANN算法与BNN算法的高度相似性。

程序员设计神经网络来执行一项小任务。完整的应用程序可能会使用神经网络来完成应用程序的某些部分,但是,整个应用程序不会只实现一个神经网络。它可能由几个神经网络组成,每个神经网络都有特定的任务。

模式识别是神经网络可以轻松完成的任务。对于这种任务,你可以将一个模式传入神经网络,然后它将一个模式传回给你。在最高层面上,典型的神经网络只能执行这个功能。尽管某些神经网络可能会取得更大的成就,但绝大多数神经网络以这种方式工作。

下图展示了这个层面上的一个神经网络。

上述神经网络接收一个模式并返回一个模式。

神经网络是同步运行的,只有在输入后才会输出。这种行为不同于人脑,人脑不是同步运行的。人脑对输入做出响应,但是它会在任何它愿意的时候产生输出!呵呵

神经网络结构

神经网络由一些层组成,各层的神经元相似。

大多数神经网络都至少具有输入层和输出层,程序将输入模式交给输入层,然后,输出模式从输出层返回。在输入层和输出层之间是一个黑盒。黑盒是指你不完全了解神经网络为何输出它的结果。现在,我们还不关心神经网络或黑盒的内部结构。许多不同的架构定义了输入层和输出层之间的不同交互。

稍后,我们将研究其中一些架构。

输入和输出模式都是浮点数数组。用以下方式表示这些数组

神经网络输入:[−0.245, 0.283, 0.0]。

神经网络输出:[0.782, 0.543]。

上面的神经网络在输入层中有三个神经元,在输出层中有两个神经元。即使重构神经网络的内部结构,输入层和输出层中神经元的数量也不会改变。

要利用该神经网络,你调整表达问题的方式,使得输入是浮点数数组。同样,问题的解也必须是浮点数数组。归根结底,这种表达是神经网络唯一可以执行的。换言之,它们接收一个数组,并将其转换为第二个数组。神经网络不会循环,不会调用子程序,或执行你在传统编程中可能想到的任何其他任务。神经网络只是识别模式。

你可以认为神经网络是传统编程中将键映射到值的哈希表。

它的作用有点像字典。你可以将以下内容视为一种类型的哈希表:

● “hear”→“以耳朵来感知或理解”;

● “run”→“比走路更快地前进”;

● “write”→“使用工具(作为笔)在表面上形成形状(作为字符或符号)”。

该表在单词和它们的定义之间创建了映射。编程语言通常称之为哈希映射或字典。

上述哈希表用字符串类型的键来引用另一个值,引用的值也是相同类型的字符串。

如果你以前从未使用过哈希表,那么可以将它们理解为将一个值映射到另一个值的一种索引形式。换言之,当你为字典提供一个键时,它会返回一个值。大多数神经网络都以这种方式工作。

一种名为“双向关联记忆”(Bidirectional Associative Memory,BAM)的神经网络可让你提供值并给出键。

编程时使用的哈希表包含键和值。可以将传入神经网络输入层的模式视为哈希表的键,将从神经网络输出层返回的模式视为哈希表返回的值。尽管类比哈希表和神经网络可以帮助你理解这个概念,但是你需要认识到神经网络不仅仅是哈希表。

如果你提供的单词不是映射中的键,那么前面的哈希表会发生什么呢?

为了回答这个问题,我们将输入键“wrote”。对于这个例子,哈希表将会返回null。它会以某种方式表明找不到指定的键。但是,神经网络不会返回null,而是找到最接近的匹配项。它们不仅会寻找最接近的匹配项,还会修改输出以估计缺失的值。因此,如果你对神经网络输入“wrote”,那么很可能会收到输入“write”时期望的结果。你也可能会收到其他键对应的输出,因为没有足够的数据供神经网络修改响应。数量有限的样本(在这个例子中是3个)会导致出现这种结果。

上面的映射提出了关于神经网络的重要观点。如前所述,神经网络接收一个浮点数数组并返回另一个数组。这个行为引发了一个问题,即如何将字符串或文本值放入神经网络。尽管存在解决方案,但对神经网络而言,处理数字数据比处理字符串要容易得多。

实际上,这个问题揭示了神经网络编程中最困难的一个方面。如何将问题转换为固定长度的浮点数数组?

在下面的示例中,你将看到神经网络的复杂性。

一个简单的例子

在计算机编程中,习惯提供一个“Hello World”应用程序,它只是显示文本“Hello World”。

如果你已经阅读过有关神经网络的文章,那么肯定会看到使用异或(XOR)运算符的示例,该运算符示例是神经网络编程的一种“Hello World”应用程序。

在后文,我们将描述比XOR更复杂的场景,但它是一个很好的示例。

我们将从XOR运算符开始,把它当作一个哈希表。如果你不熟悉XOR运算符,其工作原理类似于AND/OR运算符。

要使AND运算结果为真,双方都必须为真;

要使OR运算结果为真,必须有任何一方为真;

要使XOR运算结果为真,双方真假必须互不相同。

XOR的真值表如下:

用哈希表表示,则上述真值表表示如下:

这些映射展示了神经网络的输入和理想的预期输出。

训练:有监督和无监督

如果指定了理想的输出,你就在使用有监督训练;

如果没有指定理想的输出,你就在使用无监督训练。

有监督训练会让神经网络产生理想的输出,无监督训练通常会让神经网络将输入数据放入由输出神经元计数定义的多个组中。

有监督训练和无监督训练都是迭代过程。对于有监督训练,每次迭代都会计算实际输出与理想输出的接近程度,并将这种接近程度表示为错误百分比。每次迭代都会修改神经网络的内部权重矩阵,目的是将错误率降到可接受的低水平。

对于无监督训练,计算错误并不容易。由于没有预期的输出,因此无法测量无监督的神经网络与理想输出差多少。因为没有理想的输出,所以你只是进行固定次数的迭代,并尝试训练神经网络。如果神经网络需要更多训练,那么程序会提供。

上述训练数据的另一个重要方面在于,你可以按任何顺序进行训练。无论哪种训练方式,对两个0应用XOR(0 XOR 0)的结果将为0。并非所有神经网络都具有这种特性。对于XOR运算符,我们可能会使用一种名为“前馈神经网络”的神经网络,其中训练集的顺序无关紧要。咱们在以后的文章中将研究循环神经网络(Recurrent Neural Network,RNN),它确实需要考虑训练数据的顺序。顺序是简单循环神经网络的重要组成部分。

刚才,你看到简单的XOR运算符利用了训练数据。

现在,我们将分析一种情况,它使用了更复杂的训练数据。

每加仑的英里数

通常,神经网络问题涉及一些数据,你可以利用这些数据来预测后来的数据集的值。在训练了神经网络之后,就会得到后来的数据集。神经网络的功能是根据从过去的数据集中学到的知识,来预测全新数据集的结果

考虑一个包含以下字段的汽车数据库

● 车重(指车的质量);

● 发动机排量;

● 气缸数;

● 马力(指以马力为单位的功率);

● 混合动力或汽油动力;

● 每加仑的英里数[指每消耗1加仑(约3.8升)燃油可行驶的路程,以英里为单位]。

尽管我们过度简化了数据,但并不影响本示例演示如何格式化数据。

假设你已经针对这些字段收集了一些数据,那么你应该能够构建一个神经网络,来根据其他字段的值来预测某个字段的值。对于这个示例,我们将尝试预测每加仑的英里数。

如前所述,我们需要将一个浮点数输入数组映射到浮点数输出数组,从而定义这个问题。但是,该问题还有一个附加要求,即这些数组元素中每一个数字的范围应为0~1或者−1~1。这个操作称为归一化。它获取现实世界的数据,并将其转换为神经网络可以处理的形式。

首先,我们需要确定如何归一化以上数据。请考虑神经网络的架构。

我们共有6个字段,要使用其中5个字段来预测剩余的1个字段。

因此,神经网络将具有5个输入神经元和1个输出神经元。

你的神经网络类似下面这样

● 输入神经元1:车重。

● 输入神经元2:发动机排量。

● 输入神经元3:气缸数。

● 输入神经元4:马力。

● 输入神经元5:混合动力或汽油动力。

● 输出神经元1:每加仑的英里数。

接着我们还需要归一化数据。为了完成归一化,我们必须为这些字段的值都考虑一个合理的范围。然后,我们将输入数据转换为0~1的数字,代表该范围内实际值的位置。

考虑以下设置了合理范围的示例

● 车重:100~5 000磅(约45~2 268千克)。

● 发动机排量:0.1~10升。

● 气缸数:2~12。

● 马力:1~1 000马力(约735.5~7 355 000瓦)。

● 混合动力或汽油动力:true或false。

● 每加仑的英里数:1~500英里(约1.6~804.5千米)。

考虑到当今的汽车,这些范围可能很大,但是,这个特征将使神经网络的重组最少。我们也希望避免在靠近范围的两端出现太多数据。

为了说明这一范围,我们将考虑归一化车重2 000磅(约907千克)的问题。这在上述车重范围中为1 900(即2 000−100),而范围的大小为4 900(即5000−100),范围大小的占比为0.38(即1 900/4 900)。因此,我们会将0.38提供给输入神经元,以表示该值。这个过程满足输入神经元0~1的范围要求。

混合动力或常规动力字段的值为true或false。为了表示该值,我们用1表示混合动力,用0表示常规动力。我们只需将true或false归一化为1或0两个值即可。

既然你已经了解了神经网络的一些用法,现在该确定如何为特定问题选择合适的神经网络了。

在随后的内容中,我们提供了各种可用的神经网络路线图。

神经网络路线指引

并不是所有神经网络都适用于每一个问题域。作为神经网络程序员,你需要知道针对特定问题使用哪个神经网络。

神经网络类型和问题域

● 聚类:无监督的聚类问题。

● 回归:回归问题,神经网络必须根据输入,输出数字。

● 分类:分类问题,神经网络必须将数据点分为预定义的类别。

● 预测:神经网络必须及时预测事件,如金融应用程序的信号。

● 机器人:使用传感器和电机控制的机器人。

● 视觉:计算机视觉(Computer Vision,CV)问题,要求计算机理解图像。

● 优化:优化问题,要求神经网络找到最佳排序或一组值以实现目标。

勾选标记(√)的数量给出了每种神经网络类型对该特定问题的适用性。如果没有勾选,则说明无法将该神经网络类型应用于该问题域。

所有神经网络都有一些共同的特征,如神经元、权重、激活函数和层它们是神经网络的构建块


这就是您开启咱们这个系列文章的全部背景知识啦。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode101:对称二叉树

题目描述 给你一个二叉树的根节点 root , 检查它是否轴对称。 代码 递归 class Solution { public:bool compare(TreeNode* left, TreeNode* right) {if (left nullptr && right ! nullptr) return false;else if (left ! nullptr && right nul…

基于Matlab的血管图像增强算法,Matlab实现

博主简介: 专注、专一于Matlab图像处理学习、交流,matlab图像代码代做/项目合作可以联系(QQ:3249726188) 个人主页:Matlab_ImagePro-CSDN博客 原则:代码均由本人编写完成,非中介,提供…

学习鸿蒙基础(9)

目录 一、鸿蒙国际化配置 二、鸿蒙常用组件介绍 三、鸿蒙像素单位介绍 四、鸿蒙布局介绍 1、Row与Column线性布局 2、层叠布局-Stack 3、弹性布局 4、栅格布局 5、网格布局 一、鸿蒙国际化配置 base目录下为默认的string。en_US对应美国的。zh_CN对应中国的。新增一个s…

ActiveMQ Artemis 系列| High Availability 主备模式(消息复制) 版本2.19.1

一、ActiveMQ Artemis 介绍 Apache ActiveMQ Artemis 是一个高性能的开源消息代理,它完全符合 Java Message Service (JMS) 2.0 规范,并支持多种通信协议,包括 AMQP、MQTT、STOMP 和 OpenWire 等。ActiveMQ Artemis 由 Apache Software Foun…

小白从0学习ctf(web安全)

文章目录 前言一、baby lfi(bugku-CTF)1、简介2、解题思路1、解题前置知识点2、漏洞利用 二、baby lfi 2(bugku-CTF)1.解题思路1、漏洞利用 三、lfi(bugku CTF)1、解题思路1、漏洞利用 总结 前言 此文章是…

瓷砖通铺选择亮面还是哑光?了解这6点不难选。福州中宅装饰,福州装修

选择瓷砖通铺亮面还是哑光,可以从多个角度来考虑: ①空间感觉 亮面瓷砖通常会使空间看起来更加宽敞和明亮,而哑光瓷砖则给人大气、稳重的感觉。如果希望让空间显得更加宽敞,亮面瓷砖是一个不错的选择。 ②清洁与维护 亮面瓷砖更…

云电脑安全性怎么样?企业如何选择安全的云电脑

云电脑在保障企业数字资产安全方面,采取了一系列严谨而全面的措施。随着企业对于数字化转型的深入推进,数字资产的安全问题日益凸显,而云电脑作为一种新兴的办公模式,正是为解决这一问题而生。云电脑安全吗?可以放心使…

React系列之合成事件与事件处理机制

文章目录 React事件处理机制原生事件的事件机制事件代理(事件委托) 合成事件使用合成事件目的合成事件原生事件区别事件池 原生事件和React事件的执行顺序e.stopPropagation() React17事件机制的修改 React事件处理机制 react 事件机制基本理解&#xf…

C++ :STL中deque的原理

deque的结构类似于哈希表,使用一个指针数组存储固定大小的数组首地址,当数据分布不均匀时将指针数组内的数据进行偏移,桶不够用的时候会像vector一样扩容然后将之前数组中存储的指针拷贝过来,从原理可以看出deque的性能是非常高的…

docker部署-RabbitMq

1. 参考 RabbitMq官网 docker官网 2. 拉取镜像 这里改为自己需要的版本即可,下面容器也需要同理修改 docker pull rabbitmq:3.12-management3. 运行容器 docker run \ --namemy-rabbitmq-01 \ -p 5672:5672 \ -p 15672:15672 \ -d \ --restart always \ -…

java入门学习Day01

本篇文章主要是学会如何使用IDEA,和运行第一个java文件。 java环境安装:Windows下Java环境配置教程_windows java环境配置-CSDN博客 IDEA安装:IDEA 2023.2.5 最新激活码,注册码(亲测好用) - 异常教程 以上两个链接…

C++—vector的介绍及使用 vector的模拟实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 文章目录 前言 一、vector的介绍及使用 1.1 vector的介绍 1.2 vector的使用 1.2.1 vector的定义 1.2.2 vector iterator 的使用 1.2.3 vector 空间增长问题 1.2.4 vecto…

JVM 八股(一)

JVM 1.类装载的执行过程 加载: 元空间存储构造函数,方法,字段等 验证 准备 解析 初始化 使用 2.垃圾回收 什么是垃圾回收?怎样找到这些垃圾?找到垃圾后是怎么清除的(垃圾回收算法)&#x…

一篇搞定AVL树+旋转【附图详解旋转思想】

🎉个人名片: 🐼作者简介:一名乐于分享在学习道路上收获的大二在校生 🙈个人主页🎉:GOTXX 🐼个人WeChat:ILXOXVJE 🐼本文由GOTXX原创,首发CSDN&…

【C语言】贪吃蛇【附源码】

欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 一、游戏说明: 一个基于C语言链表开发的贪吃蛇游戏: 1. 按方向键上下左右,可以实现蛇移动方向的改变。 2. 短时间长按方向键上下左右其中之一,可实现蛇向该方向的短时间…

智能指针(C++11)

智能指针的使用 问题 我们在平时写程序的时候,有些情况下不可避免地会遇见内存泄露的情况。内存泄露是指因为疏忽或错误,造成程序未能释放已经不再使用的内存的情况。例如下面这个例子,内存泄漏不易被察觉。 int div() {int a, b;cin >…

【复习linux相关命令】

查看命令位置,查找命令 which命令 查看命令的位置 [rootVM-12-15-opencloudos ~]# which cd /usr/bin/cd [rootVM-12-15-opencloudos ~]# which java /usr/local/java/jdk1.8.0_261/bin/java [rootVM-12-15-opencloudos ~]# which pwd /usr/bin/pwdfind查找文件 …

element+Vue2,在一个页面跳转到另一个页面,并自动选中table的某一行

需求:点击A页面的某处,跳转到B页面并选中B页面表格的某一行(点击B页面的搜索后需要清空默认选择的状态)环境:vue2、element的table,table允许多选知识点:主要使用到table的这两属性:…

Diffusion添加噪声noise的方式有哪些?怎么向图像中添加噪声?

添加噪声的方式大致分为两种,一种是每张图像在任意timestep都加入一样的均匀噪声,另一种是按照timestep添加不同程度的噪声 一、在任意timestep都加入一样的noise batch_size 32x_start torch.rand(batch_size,3,256,256) noise torch.randn_like(x_…

亚信安全荣获2023年度5G创新应用评优活动两项大奖

近日,“关于2023 年度5G 创新应用评优活动评选结果”正式公布,亚信安全凭借在5G安全领域的深厚积累和创新实践,成功荣获“5G技术创新的优秀代表”和“5G应用创新的杰出实践”两项大奖。 面向异构安全能力的5G安全自动化响应系统 作为5G技术创…