神经网络(输出层的设计)

输出层的设计

神经网络可以用在分类问题和回归问题上,不过需要根据情况改变输出
层的激活函数。一般而言,回归问题用恒等函数,分类问题用softmax 函数。

机器学习的问题大致可以分为分类问题和回归问题。分类问题是数
据属于哪一个类别的问题。比如,区分图像中的人是男性还是女性
的问题就是分类问题。而回归问题是根据某个输入预测一个(连续的)
数值的问题。比如,根据一个人的图像预测这个人的体重的问题就
是回归问题(类似“57.4kg”这样的预测)。

恒等函数和softmax函数

恒等函数会将输入按原样输出,对于输入的信息,不加以任何改动地直
接输出。因此,在输出层使用恒等函数时,输入信号会原封不动地被输出。
另外,将恒等函数的处理过程用之前的神经网络图来表示的话,则如图3-21
所示。和前面介绍的隐藏层的激活函数一样,恒等函数进行的转换处理可以
用一根箭头来表示。

分类问题中使用的softmax 函数可以用下面的式(3.10)表示。

yk=exp⁡(ak)∑i=1nexp⁡(ai)y_k = \frac{\exp(a_k)}{\sum_{i=1}^n \exp(a_i)}yk=i=1nexp(ai)exp(ak)
exp(x)exp(x)exp(x)是表示 $ e^x $ 的指数函数(e(e(e是纳皮尔常数 2.7182…)。式 (3.10) 表示假设输出层共有 $ n $ 个神经元,计算第 $ k $ 个神经元的输出 $ y_k $。如式 (3.10) 所示,softmax 函数的分子是输入信号 $ a_k $ 的指数函数,分母是所有输入信号的指数函数的和。

用图表示softmax 函数的话,如图3-22 所示。图3-22 中,softmax 函数
的输出通过箭头与所有的输入信号相连。这是因为,从式(3.10)可以看出,
输出层的各个神经元都受到所有输入信号的影响。

现在我们来实现softmax 函数。在这个过程中,我们将使用Python解释
器逐一确认结果。

>>>a=np.array([0.3,2.9,4.0])>>>>>>exp_a=np.exp(a)# 指数函数>>>print(exp_a)[1.3498588118.1741453754.59815003]>>>>>>sum_exp_a=np.sum(exp_a)# 指数函数的和>>>print(sum_exp_a)74.1221542102>>>>>>y=exp_a/sum_exp_a>>>print(y)[0.018211270.245191810.73659691]

这个Python实现是完全依照式(3.10)进行的,所以不需要特别的解释。
考虑到后面还要使用softmax 函数,这里我们把它定义成如下的Python函数。

defsoftmax(a):exp_a=np.exp(a)sum_exp_a=np.sum(exp_a)y=exp_a/sum_exp_areturny

实现softmax函数时的注意事项

上面的softmax函数的实现虽然正确描述了式(3.10),但在计算机的运算
上有一定的缺陷。这个缺陷就是溢出问题。softmax 函数的实现中要进行指
数函数的运算,但是此时指数函数的值很容易变得非常大。比如,e10e^{10}e10的值
会超过20000,e100 会变成一个后面有40 多个0 的超大值,e1000e^{1000}e1000的结果会返回
一个表示无穷大的inf。如果在这些超大值之间进行除法运算,结果会出现“不
确定”的情况。

计算机处理“数”时,数值必须在4 字节或8 字节的有限数据宽度内。
这意味着数存在有效位数,也就是说,可以表示的数值范围是有
限的。因此,会出现超大值无法表示的问题。这个问题称为溢出,
在进行计算机的运算时必须(常常)注意。

softmax 函数的实现可以像式(3.11)这样进行改进。
yk=exp⁡(ak)∑i=1nexp⁡(ai)y_k = \frac{\exp(a_k)}{\sum_{i=1}^n \exp(a_i)}yk=i=1nexp(ai)exp(ak)=Cexp⁡(ak)C∑i=1nexp⁡(ai) = \frac{C \exp(a_k)}{C \sum_{i=1}^n \exp(a_i)}=Ci=1nexp(ai)Cexp(ak)

=exp⁡(ak+log⁡C)∑i=1nexp⁡(ai+log⁡C)= \frac{\exp(a_k + \log C)}{\sum_{i=1}^n \exp(a_i + \log C)}=i=1nexp(ai+logC)exp(ak+logC)

=exp⁡(ak+C′)∑i=1nexp⁡(ai+C′)= \frac{\exp(a_k + C')}{\sum_{i=1}^n \exp(a_i + C')}=i=1nexp(ai+C)exp(ak+C)
首先,式(3.11)在分子和分母上都乘上C这个任意的常数(因为同时对
分母和分子乘以相同的常数,所以计算结果不变)。然后,把这个C移动到
指数函数(exp)中,记为logClog ClogC。最后,把logClog ClogC替换为另一个符号C′C^{'}C

式(3.11)说明,在进行softmax 的指数函数的运算时,加上(或者减去)
某个常数并不会改变运算的结果。这里的C′C^{'}C可以使用任何值,但是为了防
止溢出,一般会使用输入信号中的最大值。我们来看一个具体的例子。

>>>a=np.array([1010,1000,990])>>>np.exp(a)/np.sum(np.exp(a))# softmax函数的运算array([nan,nan,nan])# 没有被正确计算>>>>>>c=np.max(a)# 1010>>>a-c array([0,-10,-20])>>>>>>np.exp(a-c)/np.sum(np.exp(a-c))array([9.99954600e-01,4.53978686e-05,2.06106005e-09])

如该例所示,通过减去输入信号中的最大值(上例中的c),我们发现原
本为nan(not a number,不确定)的地方,现在被正确计算了。综上,我们
可以像下面这样实现softmax 函数。

defsoftmax(a):c=np.max(a)exp_a=np.exp(a-c)# 溢出对策sum_exp_a=np.sum(exp_a)y=exp_a/sum_exp_areturny

softmax函数的特征

使用softmax()函数,可以按如下方式计算神经网络的输出。

>>>a=np.array([0.3,2.9,4.0])>>>y=softmax(a)>>>print(y)[0.018211270.245191810.73659691]>>>np.sum(y)1.0

如上所示,softmax函数的输出是0.0 到1.0之间的实数。并且,softmax
函数的输出值的总和是1。输出总和为1 是softmax 函数的一个重要性质。正
因为有了这个性质,我们才可以把softmax 函数的输出解释为“概率”。

比如,上面的例子可以解释成y[0]的概率是0.018(1.8%),y[1]的概率
是0.245(24.5%),y[2]的概率是0.737(73.7%)。从概率的结果来看,可以
说“因为第2 个元素的概率最高,所以答案是第2 个类别”。而且,还可以回答“有74%的概率是第2 个类别,有25%的概率是第1 个类别,有1%的概
率是第0 个类别”。也就是说,通过使用softmax 函数,我们可以用概率的(统
计的)方法处理问题。

这里需要注意的是,即便使用了softmax 函数,各个元素之间的大小关
系也不会改变。这是因为指数函数(y=exp(x))(y = exp(x))y=exp(x)是单调递增函数。实际上,
上例中a的各元素的大小关系和y的各元素的大小关系并没有改变。比如,a
的最大值是第2 个元素,y的最大值也仍是第2 个元素。

一般而言,神经网络只把输出值最大的神经元所对应的类别作为识别结果。
并且,即便使用softmax 函数,输出值最大的神经元的位置也不会变。因此,
神经网络在进行分类时,输出层的softmax 函数可以省略。在实际的问题中,
由于指数函数的运算需要一定的计算机运算量,因此输出层的softmax 函数
一般会被省略。

求解机器学习问题的步骤可以分为“学习”A 和“推理”两个阶段。首
先,在学习阶段进行模型的学习B,然后,在推理阶段,用学到的
模型对未知的数据进行推理(分类)。如前所述,推理阶段一般会省
略输出层的softmax 函数。在输出层使用softmax 函数是因为它和
神经网络的学习有关系(详细内容请参考下一章)。

输出层的神经元数量

输出层的神经元数量需要根据待解决的问题来决定。对于分类问题,输
出层的神经元数量一般设定为类别的数量。比如,对于某个输入图像,预测
是图中的数字0 到9 中的哪一个的问题(10 类别分类问题),可以像图3-23 这样,
将输出层的神经元设定为10 个。

如图3-23 所示,在这个例子中,输出层的神经元从上往下依次对应数字
0, 1, . . ., 9。此外,图中输出层的神经元的值用不同的灰度表示。这个例子中神经元y2y_2y2颜色最深,输出的值最大。这表明这个神经网络预测的是y2y_2y2对应
的类别,也就是“2”

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

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

相关文章

中文长尾识别:解决数据不平衡的快速实验平台

中文长尾识别:解决数据不平衡的快速实验平台 在机器学习领域,数据不平衡问题一直是困扰开发者的常见挑战。特别是处理中文长尾识别任务时,类别分布不均会导致模型偏向于头部类别,严重影响尾部类别的识别效果。本文将介绍如何利用预…

电商系统数据库设计实战:PowerDesigner ER图全流程

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容: 开发一个电商系统ER图设计案例,包含以下实体和关系:1. 用户(会员等级、收货地址);2. 商品(分类、SKU、库存);3. 订单(支付、物流)&a…

程序员的数学(二十四)数学思维的本能化:让理性成为无需刻意的选择

文章目录一、本能化的核心障碍:为什么数学思维难成习惯?1. 障碍 1:“场景绑定” 惯性 —— 把数学锁在 “特定场景” 里2. 障碍 2:“直觉优先” 惯性 —— 用 “感性经验” 替代 “理性计算”3. 突破关键:建立 “抽象逻…

解锁财务清晰度:Profit Calculator 助你直观掌握盈利状况

在快节奏的商业环境中,清晰了解你的盈利状况是成功的关键。无论你是初创企业主、自由职业者还是电商卖家,每个决策背后都需要可靠的财务数据支持。今天,我们向你介绍一款直观、易用的在线工具——Profit Calculator,它将复杂的数据…

坚果过敏警示标签:Qwen3Guard-Gen-8B用于预包装食品

坚果过敏警示标签:Qwen3Guard-Gen-8B用于预包装食品 在一家食品企业的自动化标签生成系统中,一条看似普通的描述被悄然输出:“本产品采用天然植物油烘焙,口感酥脆。”语句通顺、风格合规——但问题在于,它没有提及“可…

多合一图像处理利器:一站式满足你的所有图片编辑需求

在这个视觉主导的时代,无论你是社交媒体创作者、电商卖家、设计师还是普通用户,处理图片已经成为日常工作中不可或缺的一部分。然而,面对众多的图片编辑需求——从简单的裁剪到复杂的格式转换,我们常常需要在多个软件和在线工具之…

深度神经网络输出层设计全解:从理论到实践

深度神经网络输出层设计全解:从理论到实践 在深度神经网络中,输出层的设计直接关系到模型能否解决特定问题。今天我们就来详细探讨输出层的核心设计原则,以及最常用的两种激活函数——恒等函数和Softmax函数。 分类 vs 回归:两种不…

从零到上线:24小时打造你的专属‘识万物‘App

从零到上线:24小时打造你的专属识万物App 作为一名前端工程师,参加黑客马拉松时最头疼的莫过于AI模型部署。最近我想开发一个能识别生活用品的应用,UI设计对我来说不是问题,但深度学习环境的搭建却让我望而却步。经过一番探索&…

IAR下载安装常见问题:小白指南避坑合集

IAR 下载安装踩坑实录:新手避不开的 5 大“魔咒”,一文全破解 你是不是也经历过这样的时刻? 打开电脑,准备开始第一个嵌入式项目,兴冲冲地搜索“IAR 下载”,点进官网、登录账户、点击下载按钮……然后——…

Qwen3Guard-Gen-8B开源镜像发布:支持119种语言的安全审核新标杆

Qwen3Guard-Gen-8B:用生成式理解重塑内容安全防线 在AI生成内容(AIGC)爆发式增长的今天,一个看似简单的问题正变得越来越棘手:我们如何确保大模型输出的内容既合规又安全?尤其是在全球用户混杂、语言文化差…

51单片机蜂鸣器硬件设计中常见短路风险规避

51单片机驱动蜂鸣器,一个“响”字背后的电路玄机你有没有遇到过这种情况:板子一上电,蜂鸣器“嗡”地一声常响不歇,或者更糟——MCU直接罢工重启?甚至烧了IO口、换了芯片?别急着怀疑代码。很多时候&#xff…

万物识别标注工具集成:从数据标注到模型训练的捷径

万物识别标注工具集成:从数据标注到模型训练的捷径 作为一名数据标注团队的负责人,你是否经常遇到这样的困扰:团队成员用不同工具标注的数据格式五花八门,转换起来费时费力;好不容易整理好数据,又要折腾环境…

Keil5安装教程通俗解释:五分钟搞懂关键步骤

五分钟搞懂 Keil5 安装:从零开始搭建嵌入式开发环境 你是不是刚接触STM32,打开电脑准备写第一行代码时,却被“Keil怎么装?”这个问题卡住了? 别急。虽然网上教程不少,但很多只是机械地告诉你“下一步、下…

VSCode多模型调试完全手册(仅限内部流传的12条黄金规则)

第一章:VSCode多模型调试的核心理念在现代软件开发中,开发者常需同时调试多个相互关联的服务或模型,例如微服务架构中的API、数据库和前端应用。VSCode通过其强大的调试器集成能力,支持多模型并行调试,使开发者能够在统…

中文特定领域识别:快速定制预训练模型的实战教程

中文特定领域识别:快速定制预训练模型的实战教程 如果你是一位垂直行业开发者(比如医疗设备领域),想要针对特定场景定制物体识别功能,但又不想从头训练模型,那么这篇教程就是为你准备的。本文将带你快速上手…

谷歌镜像搜索技巧:精准定位Qwen3Guard-Gen-8B技术资料

谷歌镜像搜索技巧:精准定位Qwen3Guard-Gen-8B技术资料 在生成式AI迅速渗透内容创作、客服系统和智能助手的今天,一个棘手的问题正不断浮现:如何确保大模型输出的内容既合规又安全?传统的关键词过滤和简单分类器,在面对…

工信部2026年短信业务合规申请全流程官方指南(1月1日强制生效)

以下是对《短信业务公司合规经营全指南》的全方位、多角度、有深度的系统化整理与升级优化,聚焦政策动态、实操痛点、风险预警及未来趋势,确保内容更具战略价值与落地指导性:一、合规本质:从“被动满足”到“主动构建”核心逻辑&a…

lvgl之gif源码(支持同步显示)

头文件: /*** @file lv_gif.h**/#ifndef LV_GIF_H #define LV_GIF_H#ifdef __cplusplus extern "C" {#endif/********************** INCLUDES*********************/ #if LV_LVGL_H_INCLUDE_SIMPLE #include <lvgl.h> #else #include <lvgl/lvgl.h&g…

低显存救星:在消费级GPU上运行万物识别模型的技巧

低显存救星&#xff1a;在消费级GPU上运行万物识别模型的技巧 作为一名只有8GB显存的个人开发者&#xff0c;想要尝试最新的物体识别模型却总是被显存不足的问题困扰&#xff1f;本文将分享如何在消费级GPU上高效运行万物识别模型的实用技巧&#xff0c;通过优化过的预配置环境…

万物识别模型联邦学习:快速搭建分布式训练环境

万物识别模型联邦学习&#xff1a;快速搭建分布式训练环境 联邦学习作为一种新兴的隐私保护机器学习范式&#xff0c;正在物体识别领域展现出巨大潜力。但对于大多数研究者来说&#xff0c;搭建分布式训练环境往往需要耗费大量时间在环境配置和调试上。本文将介绍如何利用预配置…