【1.2】神经网络:神经元与激活函数

news2024/9/27 21:21:22

作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。
🍎个人主页:Meteors.的博客
💞当前专栏: 神经网络(随缘更新)
特色专栏: 知识分享
🥭本文内容:【1.2】神经网络:神经元与激活函数
📚 ** ps **  : 阅读这篇文章如果有问题或者疑惑,欢迎各位在评论区提问或指出!

 -----------------------------------------------------       目录       ---------------------------------------------------------

目录

一、介绍

1. 简介

神经元

激活函数

2. 作用

神经元

激活函数

二、常见激活函数分类及特点

阶跃函数

恒等函数

Sigmoid 函数

ReLU函数

Softmax函数

ELU函数

Swish函数

反正切函数

 三、激活函数选择

非线性变换能力

梯度消失问题

计算效率

稀疏激活性

任务特性

实验和经验

四、激活函数改进

参数化激活函数

自适应激活函数

门控激活函数

带参数的激活函数

多阶段激活函数

五、 神经元和激活函数的组合

全连接层

卷积层

池化层

 六、神经元和激活函数的优化

正则化

批归一化

 残差连接

激活函数的选择


---------------------------------------------------------------------------------------------------------------------------------

一、介绍

1. 简介

神经元

人工神经网络是模拟人脑系统工作原理进行设计的计算模型。它包含很多(模拟)神经元,每个神经元接收来自其它神经元的输入,并通过激活函数处理这些输入,然后产生输出。



神经元通常由三部分组成:

  1. 输入层:接受来自其它神经元或外部输入的信号。
  2. 权重:每个输入信号都有一个权重与之对应,用于调节该信号对神经网络输出的影响程度。
  3. 激活函数:接收加权输入信号的总和,并将其映射到一个特定的输出范围内。

激活函数

神经元中,输入的的inputs通过加权,求和后,还会被作用一个函数,这个函数就是激活函数,它决定了神经元输出形式和范围。

2. 作用

神经元

每个神经元都有一个权重参数,用于调整输入数据的权重。神经元对输入数据进行加权求和,并将结果传递给激活函数。可以将它看作是神经网络中的基本单位。


激活函数

激活函数对于人工神经网络的学习,理解非常复杂和非线性函数来说具有重要的作用。它让神经元不会止步于线性的数学运算(没有激活函数的每层相当于矩阵相乘,就算增加若干层,无非也还是简单的矩阵相乘法罢了),而是让输入输出之间通过非线性形成更加复杂的关系,有效提高学习效率,使神经网络更加强大。

二、常见激活函数分类及特点

神经网络的激活函数通常是一种非线性函数,用于引入非线性特征,提高神经网络的表达能力,常见的神经网络激活函数分类:

  • 阶跃函数

    • 二元阶跃函数:将输入值映射为两个离散的输出值,通常是0和1。它在输入大于等于某个阈值时输出1,否则输出0。
    • 双曲正切阶跃函数:一个连续的版本,将输入值映射到[-1, 1]的范围内。它在输入大于等于某个阈值时输出1,小于该阈值时输出-1。
  • 恒等函数

    • 一种简单的线性函数,它将输入值原样输出。在神经网络中,恒等函数常用于回归问题。
  • Sigmoid 函数

    • Logistic 函数一种常用的Sigmoid函数,将输入值映射到[0, 1]的范围内。它具有平滑的S形曲线,常用于二分类问题和概率估计。
    • 双曲正切函数:将输入值映射到[-1, 1]的范围内。与Logistic函数相比,它的输出范围更广,适用于更广泛的问题。
  • ReLU函数

    • 一种非常简单且广泛使用的激活函数,它将负值映射为0,并保持正值不变。这使得ReLU函数在处理大规模数据和深层网络时非常高效。
      • Leaky ReLU函数:对ReLU函数的改进,当输入为负值时,它引入一个小的斜率,以避免出现“神经元死亡”问题。
      • Parametric ReLU函数:Leaky ReLU的扩展版本,它允许斜率成为可学习的参数。
      • Randomized Leaky ReLU函数:在Parametric ReLU的基础上引入了随机性,以增加模型的鲁棒性。
  • Softmax函数

    • Softmax函数用于多分类问题,将一组实数映射到[0, 1]的范围内,并且所有输出值的总和等于1。它常用于输出层,将神经网络的原始输出转换为概率分布。
  • ELU函数

    • 在负值区域引入了指数增长的特性,以解决ReLU函数在负值部分的限制。相比于ReLU,ELU函数在某些情况下可以提供更好的训练性能。
  • Swish函数

    • 一种近似于ReLU的激活函数,它在正值区域具有ReLU的性质,在负值区域引入了平滑的曲线。Swish函数在一些情况下可以提供更好的性能。
  • 反正切函数

    • 将输入值映射到[-π/2, π/2]的范围内。它是一个平滑的、具有对称性的函数,常用于某些特定的问题领域。


 三、激活函数选择

没有一种激活函数可以用于所有情况,通常情况下,激活函数的选择可以考虑下面几个方面:

  1. 非线性变换能力

    激活函数应该具有一定的非线性变换能力,以便神经网络可以学习非线性模式和复杂关系。常见的非线性激活函数如sigmoid、tanh、ReLU等。
  2. 梯度消失问题

    某些激活函数(如sigmoid和tanh)在输入较大或较小时,梯度会接近于零,导致梯度消失的问题。为了避免这个问题,可以选择具有更好梯度传播性质的激活函数,如ReLU、Leaky ReLU、ELU等。
  3. 计算效率

    激活函数的计算效率也是一个考虑因素。一些激活函数(如sigmoid和tanh)在计算上相对较慢,尤其是在大规模神经网络中。相比之下,ReLU和其变种计算速度更快。
  4. 稀疏激活性

    某些激活函数具有稀疏激活性,即只有部分神经元被激活,这有助于减少网络的参数数量和计算复杂度。例如,稀疏自编码器常使用稀疏激活函数如稀疏ReLU。
  5. 任务特性

    不同的任务可能对激活函数有不同的要求。例如,对于二分类问题,sigmoid函数在输出层上常被使用,而对于多分类问题,softmax函数更为常见。
  6. 实验和经验

    激活函数的选择也可以基于实验和经验。根据具体的任务、数据集和网络结构,通过尝试不同的激活函数并进行实验评估,找到最适合的激活函数。

四、激活函数改进

改进激活函数主要是为了提高网络性能和效率,常见的激活函数改进方法有下面这些:

  1. 参数化激活函数

    传统的激活函数是非参数化的,即没有可学习的参数。而参数化激活函数则引入了可学习的参数,使得激活函数可以根据数据进行自适应调整。例如,PReLU(Parametric ReLU)通过引入一个可学习的负斜率参数来改进ReLU,可以在一定程度上缓解ReLU的负数部分输出为零的问题。
  2. 自适应激活函数

    自适应激活函数是指根据输入数据动态调整激活函数的形状和参数。例如,AdaReLU(Adaptive ReLU)通过引入一个可学习的阈值参数,根据输入数据动态调整ReLU的形状,可以提高ReLU在不同数据分布下的表现。
  3. 门控激活函数

    门控激活函数是指通过引入门控机制来控制激活函数的输出。例如,GELU(Gaussian Error Linear Units)通过引入门控机制,可以在一定程度上缓解ReLU的负数部分输出为零的问题,并提高网络的性能。
  4. 带参数的激活函数

    带参数的激活函数是指在激活函数中引入额外的参数,以提高激活函数的表达能力和灵活性。例如,Swish激活函数通过引入一个可学习的参数,可以在一定程度上提高网络的性能。
  5. 多阶段激活函数

    多阶段激活函数是指将激活函数分为多个阶段,每个阶段使用不同的激活函数。例如,SELU(Scaled Exponential Linear Units)通过引入多个阶段的激活函数,可以提高网络的性能和稳定性。

五、 神经元和激活函数的组合

神经元是构成神经网络的基本单元,激活函数则是神经元中的一个重要组成部分。将神经元和激活函数组合起来,可以构建出不同类型的神经网络,包括全连接层、卷积层和池化层等。

下面简单介绍一下不同类型的层是如何组合的:

  1. 全连接层

    在全连接层中,每个神经元都与上一层的所有神经元相连接。每个连接都有一个权重,用于调整输入的重要性。神经元的输入是上一层神经元的输出乘以对应的权重之和。然后,这个加权和会经过激活函数的处理,得到神经元的输出。
  2. 卷积层

    在卷积层中,神经元只与输入数据的局部区域相连接。每个神经元有一个局部感受野(receptive field),它会与输入数据的对应区域进行卷积操作。卷积操作将局部感受野的输入与权重进行乘积求和,并通过激活函数进行处理,得到神经元的输出。
  3. 池化层

    在池化层中,神经元的作用是对输入数据进行降采样,减少数据的维度和计算量。常见的池化操作包括最大池化和平均池化。神经元在池化层中没有可学习的参数,它的作用仅仅是对输入数据进行池化操作,并将池化后的结果作为输出。

 六、神经元和激活函数的优化

实际中如果需要提高神经网络的性能和训练效果。通常会优化神经元和激活函数,常见方式包括正则化、批归一化和残差连接。下面是一些对它们的一些简单介绍:

正则化

通过在损失函数中添加正则项来控制模型的复杂度,避免过拟合。常见的正则化方法有L1正则化和L2正则化。

  1. L1正则化:将L1范数乘以一个正则化参数λ加到损失函数中,强制使得一些权重变为0,从而实现特征选择和稀疏性。
  2. L2正则化:将L2范数乘以一个正则化参数λ加到损失函数中,惩罚权重的平方和,使得权重值趋向于较小的值,防止过拟合。

批归一化

一种在深度神经网络中广泛使用的技术,通过对每一层的输入进行归一化来加速网络的收敛和提高泛化能力

  1. 批归一化的操作是在每一层的输入上进行的,将输入减去均值后再除以标准差,使得输入的均值为0,方差为1。
  2. 批归一化不仅可以加速网络的收敛,还有正则化的效果,能够一定程度上避免过拟合。

 残差连接

一种用于解决梯度消失和网络退化问题的技术,通过直接将某一层的输出与之前某一层的输入相加,使得信息能够更容易地传递。

  1. 残差连接可以有效地减少梯度消失的问题,使得网络能够更深更容易训练。
  2. 残差连接也有助于提高网络的表达能力,使得网络可以学习到更复杂的特征。

激活函数的选择

通过引入非线性,增加网络的表达能力。常见的激活函数包括Sigmoid、ReLU、Leaky ReLU、ELU等。

  1. Sigmoid函数:将输入映射到一个介于0和1之间的值,但它存在梯度饱和和输出不以0为中心的问题,不适合在深度神经网络中使用。
  2. ReLU函数:ReLU函数在正区间上输出输入值,而在负区间上输出0,解决了梯度饱和问题,但存在神经元死亡的问题。
  3. Leaky ReLU函数:在负区间上不是输出0,而是输出一个小的负数,解决了神经元死亡问题。
  4. ELU函数:在负区间上输出一个接近于0的值,解决了ReLU函数在负区间上不平滑的问题。


最后,

        后续内容会陆续更新,希望文章对你有所帮助!

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

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

相关文章

[数据结构]-二叉搜索树

前言 作者:小蜗牛向前冲 名言:我可以接受失败,但我不能接受放弃 如果觉的博主的文章还不错的话,还请点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正。 目录 一、二叉搜…

利用Linux socat快速搭建TCP服务器

某些场合,需要在Linux上快速搭建一个TCP的服务器,接收客户端的连接,返回一些数据。 一般用于测试或者负载不大,安全性要求不高的场合,达到快速搭建的目的。 本文以客户端通过服务器的3334端口,获取服务器…

什么是残差网络结构

大家好啊,我是董董灿。 在我刚开始学习AI算法时,有一次参加一个线下的讨论,有个西南大学的本科生,在做汇报时说到了残差网络具有很好的推理效果。 那时的我还未入门,像是听天书,听了半天没搞懂说的啥意思…

【c++】模拟实现优先级队列(priority_queue)

全部代码 以容器适配器的玩法来实现,底层容器默认为vector 使用了模板参数T表示存储在队列中的元素类型,Container表示底层容器类型,默认为vector,Compare表示比较器类型,默认为less。 adjustDown函数用于向下调整堆…

高速下载b站视频的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

【C语言】关于char的取值范围的讨论

前提知识: 计算机内存中存的是整数的补码。 正数的原反补相同! 负数的补码 (除符号位以外)原码取反 1 负数的源码 (除符号位以外)补码取反 1 有符号的char,最高位二进制位表示符号位 …

基于 MTAOO 方法论,看连锁餐饮品牌如何落地 CJO 理念、实现精细化用户运营

移动互联网时代的流量红利已经消失,企业亟需在数字化转型时代抓住触点红利,基于客户旅程编排(Customer Journey Orchestration,简称 CJO)为用户提供个性化、全渠道一致的体验。 在此背景下,连锁餐饮品牌已经…

《C和指针》笔记34:字符串函数

文章目录 1. 获取字符串长度strlen 2. 复制字符串strcpystrncpy 3. 拼接字符串strcatstrncat 4. 字符串比较strcmpstrncmp 1. 获取字符串长度 strlen 库函数strlen的原型如下: size_t strlen( char const *string );注意strlen返回一个类型为size_t的值。这个类型…

【GIT】:一文快速了解什么是GIT

【GIT】:一文快速了解什么是GIT 个人主页: 【⭐️个人主页】 需要您的【💖 点赞关注】支持 💯 关于版本控制 什么是“版本控制”?我为什么要关心它呢? 版本控制是一种记录一个或若干文件内容变化,以便将来…

使用数组实现队列

目录 队列的应用场景 任务调度 广度优先搜索(BFS) 网络请求管理 消息队列 当我们在编写JavaScript代码时,经常会遇到需要使用队列的情况。队列是一种常见的数据结构,它按照先进先出(First-In-First-Out&#xff0…

【刷题篇】笔试真题

文章目录 复数乘法一年中的第几天字符串相加字符串相乘 复数乘法 复数 可以用字符串表示,遵循 “实部虚部i” 的形式,并满足下述条件: 实部 是一个整数,取值范围是 [-100, 100] 虚部 也是一个整数,取值范围是 [-100, 1…

ES6初步了解迭代器

迭代器是什么? 迭代器(iterator)是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署 iterator 接口,就可以完成遍历操作 ES6创造了一种新的遍历方法for…of循环,iterator 接口主要供 for…of 使用 原生中具…

docker、docker-compose安装教程,很详细

docker、docker-compose安装教程,很详细 一、卸载旧版1、查看有没有安装过旧版2、停止docker3、删除安装过docker的相关包4、删除docker相关的镜像和容器 二、docker安装1、设置阿里云镜像2、查看所有docker3、安装最新版本4、安装指定版本 三、使用前准备1、启动do…

第二证券:AIGC概念活跃,焦点科技、三维通信涨停,万兴科技大涨

AIGC概念24日盘中走势生动,到发稿,万兴科技、三态股份涨超10%,焦点科技、三维通讯、我国科传等涨停,中文在线涨超9%,果麦文明、新国都涨约7%。 消息面上,各大电商途径于10月18-24日先后发动“双11”大促或…

FPGA驱动步进电机-Sin曲线加速

FPGA驱动步进电机-Sin曲线加速 基本实现原理实际仿真的波形程序 以下由特权同学的FPGA文档摘取 Sin 曲线控制 step 脉冲信号生成的功能框图如下所示。 基本实现原理 ①判断步进电机驱动的目标频率 stepper_delay_target 与当前频率 stepper_delay_current的值是否一致&#…

Java IDEA controller导出CSV,excel

Java IDEA controller导出CSV,excel 导出excel/csv,亲测可共用一个方法,代码逻辑里判断设置不同的表头及contentType;导出excel导出csv 优化:有数据时才可以导出参考 导出excel/csv,亲测可共用一个方法&…

【Jenkins 安装】

一:安装文件夹准备 在/home/admin 界面下新建三个文件夹,用来安装tomcat、maven 1.打开,/home/admin目录 cd /home/admin 2.新建三个文件夹 mkdir tomcat mkdir maven 二:安装tomcat 1.打开tomcat目录进行tomcat的安装 访问:h…

Xfigure综合膳食营养粉美丽上线,大健康行业竞争呈现多元化

10月21日,“美丽健康 营养为先”2023全民营养健康科学论坛暨悦小妖2023秋季新品发布会在杭州召开,会上就当下的国民营养健康问题提出了许多建设性的观点,新发布的Xfigure是行业内少有的提倡营养为主的特膳类产品。 拥抱趋势,全新突…

redis持久化之RDB(Redis DataBase)

1 : 总体介绍 Redis是一个基于内存的数据库,它的数据是存放在内存中,内存有个问题就是关闭服务或者断电会丢 失。 Redis的数据也支持写到硬盘中,这个过程就叫做持久化 1.1 。 Redis提供了2种不同形式的持久化方式。 RDB(Redis Da…

uboot移植之DDR初始化参数更改说明

一. 简介 裸机篇开发时,DDR初始化是 imxdownload软件完成的。imxdownload软件在 二进制文件 u-boot.bin 前面加上头部(IVT、DCD等数据)。这其中所加的头部信息就包括 DDR初始化内容。 u-boot.bin 就是编译出来的 uboot 二进制文件。 uboot 是个裸机程序&#x…