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

news2024/12/27 0:59:55

政安晨的个人主页政安晨

欢迎 👍点赞✍评论⭐收藏

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

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

与计算机一样的古老历史

神经网络的出现可追溯到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.coloradmin.cn/o/1549651.html

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

相关文章

Android源码阅读WorkMangaer - 6

前言 由于笔者目前水平限制,表达能力有限,尽请见谅。 WorkManager 是 Android Jetpack 库的一部分,提供了一种向后兼容的方式来安排可延迟的异步任务,这些任务即使在应用退出或设备重启后也应该继续执行,它是 Androi…

记录 AI绘图 Stable Diffusion的本地安装使用,可搭建画图服务端

开头 最近刷短视频看到了很多关于AI绘图,Midjourney,gittimg.ai,Stable Diffusion等一些绘图AI工具,感受到了AI绘画的魅力。通过chatGPT生成关键词再加上绘图工具,真是完美,文末教大家如何用gpt提词 Midj…

Anaconda的GEE环境中安装torch库

打开Anaconda,点击运行,打开terminal 输入pip install torch 而且由于anaconda中自己配置好了镜像源,在pip时自动使用清华镜像源

2024年4月份 风车IM即时通讯系统APP源码 版完整苹果安卓教程

关于风车IM,你在互联网上能随便下载到了基本都是残缺品, 经过我们不懈努力最终提供性价比最高,最完美的版本, 懂货的朋友可以直接下载该版本使用,经过严格测试,该版本基本完美无缺。 下载地址:…

【正点原子FreeRTOS学习笔记】————(4)FreeRTOS中断管理

这里写目录标题 一、什么是中断?(了解)二、中断优先级分组设置(熟悉)三、中断相关寄存器(熟悉)四、FreeRTOS中断管理实验(掌握) 一、什么是中断?(…

华为数通 HCIP-Datacom H12-831 题库补充(3/27)

2024年 HCIP-Datacom(H12-831)最新题库,完整题库请扫描上方二维码,持续更新。 如图所示,关于R4路由器通过IS-IS计算出来的IPv6路由,哪一选项的描述是错误的? A:R4通过IS—IS只学习到…

【企业动态】吉利雷达汽车来访东胜物联,考察交流,洽谈车联网生态合作

近日,我们非常高兴接待吉利雷达汽车一行莅临东胜物联位于湖州市的生产工厂,进行参观考察,并就未来的合作展开深入商讨与交流。 雷达新能源汽车隶属于吉利控股集团,是一家专注于户外生态的中高端新能源智能汽车企业。雷达通过共享吉…

【启发式算法】同核分子优化算法 Homonuclear Molecules Optimization HMO算法【Matlab代码#70】

文章目录 【获取资源请见文章第4节:资源获取】1. 算法简介2. 部分代码展示3. 仿真结果展示4. 资源获取 【获取资源请见文章第4节:资源获取】 1. 算法简介 同核分子优化算法(Homonuclear Molecules Optimization,HMO)是…

网页版短信系统后台开发要点|短信平台软件开发搭建

在开发网页版短信系统的后台时,有一些关键要点需要注意,以确保系统的稳定性、安全性和高效性。以下是一些开发网页版短信系统后台时的重要要点: 用户管理:实现用户权限管理功能,包括用户注册、登录、角色分配等&#x…

Redis为什么快

引言 Redis是一个高性能的开源内存数据库,以其快速的读写速度和丰富的数据结构支持而闻名。作为一个轻量级、灵活的键值存储系统,Redis在各种应用场景下都展现出了惊人的性能优势。无论是作为缓存工具、会话管理组件、消息传递媒介,还是在实时数据处理任务和复杂的分布式系…

YOLOv9改进策略:卷积魔改 | SPD-Conv,低分辨率图像和小物体涨点明显

💡💡💡本文改进内容:SPD-Conv由一个空间到深度(SPD)层和一个无卷积步长(Conv)层组成,特别是在处理低分辨率图像和小物体等更困难的任务时。 💡💡💡SPD-Conv在多个数据集验证能够暴力涨点&#x…

python3字典的排序

创建一个字典 dict1{a:2,b:3,c:8,d:4} 1、分别取键、值 取字典的所有键,所有的值,利用dict1.keys(),dict1.vaules(), 由于键,值有很多个,所以要加s,另外注意这里要加括号,这样的小…

java spirng和 mybatis 常用的注解有哪些

当在Java Spring和MyBatis中进行开发时,常用的注解对于简化配置和提高开发效率非常重要。以下是更多常用的注解以及它们的详细说明和用途: 在Spring中常用的注解: Component: 用途:表明一个类会作为组件被Spring容器管…

YOLOv9改进策略:block优化 | Transformer架构ConvNeXt 网络在检测中大放异彩

💡💡💡本文改进内容:Transformer架构 ConvNeXt 网络在图像分类和识别、分割领域大放异彩,同时对比 Swin-T 模型,在多种任务中其模型的大小和准确率均有一些提升,模型的 FLOPs 较大的减小且 Acc …

创建AI智能体

前言 灵境矩阵是百度推出的基于文心大模型的智能体(Agent)平台,支持广大开发者根据自身行业领域、应用场景,选取不同类型的开发方式,打造大模型时代的产品能力。开发者可以通过 prompt 编排的方式低成本开发智能体&am…

保姆级指导0基础如何快速搭建“对话机器人”类ChatGPT

参考了CDSN上的文章,但发现不work, 不是这里有问题,就是那里有问题,查阅了大量的资料,做了无数次试验,终于整理出来了一个完整的教程,保可用,保真~~~~~如果各位遇到什么问题&#xf…

哈希的一些题目

题目1:星空之夜 1402. 星空之夜 - AcWing题库 刚开始看到这个题目感觉一懵,因为这个哈希是关于形状的哈希,不知道要怎么表示。 但是这道题的数据范围比较小,暴力也可以过。 暴力的方法是:搜索每一个连通块并保存下来…

Redis中的客户端(一)

客户端 概述 Redis服务器是典型的一对多服务器程序:一个服务器可以与多个客户端建立网络连接,每个客户端可以向服务器发送命令请求,而服务器则接收并处理客户端发送的命令请求,并向客户端返回命令回复。通过使用由IO多路复用技术实现的文件…

LeetCode:1319. 连通网络的操作次数(并查集 Java)

目录 1319. 连通网络的操作次数 题目描述: 实现代码与解析: 并查集 原理思路: 1319. 连通网络的操作次数 题目描述: 用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1。线缆用 connections 表示…

JAVA面试大全之JVM和调休篇

目录 1、类加载机制 1.1、类加载的生命周期? 1.2、类加载器的层次? 1.3、Class.forName()和ClassLoader.loadClass()区别? 1.4、JVM有哪些类加载机制? 2、内存结构 2.1、说说JVM内存整体的结构?线程私有还是共享的? 2.2…