神经网络 02(激活函数)

2023-10-30

一、激活函数

在神经元中引入了激活函数,它的本质是向神经网络中引入非线性因素的,通过激活函数,神经网络就可以拟合各种曲线

  • 如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合;
  • 引入非线性函数作为激活函数,那输出不再是输入的线性组合,可以逼近任意函数

激活函数的作用:

增加模型的非线性分割能力

提高模型鲁棒性
缓解梯度消失问题
加速模型收敛等

常用的激活函数

1.1 Sigmoid/logistics函数

sigmoid 在定义域内处处可导,且两侧导数逐渐趋近于0。

如果X的值很大或者很小的时候,那么函数的梯度 (函数的斜率)会非常小,在反向传播的过程中,导致了向低层传递的梯度也变得非常小。此时,网络参数很难得到有效训练。这种现象被称为梯度消失

一般来说,sigmoid 网络在5层之内就会产生梯度消失现象。而且,该激活函数并不是以0为中心的,所以在实践中这种激活函数使用的很少。sigmoid函数一般只用于二分类的输出层

# 导入相应的工具包
import tensorflow as tf
import tensorflow.keras as keras
import matplotlib.pyplot as plt
import numpy as np
# 定义x的取值范围
x = np.linspace(-10, 10, 100)
# 直接使用tensorflow实现
y = tf.nn.sigmoid(x)
# 绘图
plt.plot(x,y)
plt.grid()

1.2 tanh(双曲正切曲线)

tanh 也是一种非常常见的激活函数。与 sigmoid 相比,它是以 0 为中心的,使得其收敛速度要比 sigmoid 快(相比之下,tanh 曲线更为陡峭一些),减少迭代次数。然而,从图中可以看出,tanh 两侧的导数也为 0,同样会造成梯度消失。

# 导入相应的工具包
import tensorflow as tf
import tensorflow.keras as keras
import matplotlib.pyplot as plt
import numpy as np
# 定义x的取值范围
x = np.linspace(-10, 10, 100)
# 直接使用tensorflow实现
y = tf.nn.tanh(x)
# 绘图
plt.plot(x,y)
plt.grid()

1.3 RELU

ReLU是目前最常用的激活函数。 从图中可以看到,当x<0时,ReLU导数为0,而当x>0时,则不存在饱和问题。所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。然而,随着训练的推进,部分输入会落入小于0区域,导致对应权重无法更新。这种现象被称为“神经元死亡”。

Relu是输入只能大于0,如果你输入含有负数,Relu就不适合,如果你的输入是图片格式,Relu就挺常用的,因为图片的像素值作为输入时取值为[0,255]

与sigmoid相比,RELU的优势是:

  • 采用sigmoid函数,计算量大(指数运算),反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。
  • sigmoid函数反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练。
  • Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。
     
# 导入相应的工具包
import tensorflow as tf
import tensorflow.keras as keras
import matplotlib.pyplot as plt
import numpy as np
# 定义x的取值范围
x = np.linspace(-10, 10, 100)
# 直接使用tensorflow实现
y = tf.nn.relu(x)
# 绘图
plt.plot(x,y)
plt.grid()

1.4 LeakyReLu

1.5 SoftMax

softmax用于多分类过程中,它是二分类函数 sigmoid 在多分类上的推广,目的是将多分类的结果以概率的形式展现出来。

softmax 直白来说就是将网络输出的 logits 通过softmax函数,就映射成为(0,1)的值,而这些值的累和为1(满足概率的性质),那么我们将它理解成概率,选取概率最大(也就是值对应最大的)接点,作为我们的预测目标类别。

Logits 是神经网络输出层的原始得分或未经激活函数处理的值。在深度学习中,通常将 logits 用于多类别分类问题,其中每个类别都对应于一个可能的类别。Logits 是模型对每个类别的得分,模型会根据这些得分来进行分类决策。

通常,神经网络的最后一层会生成 logits。然后,通过应用 softmax 激活函数,将 logits 转换为每个类别的概率分布。Softmax 操作将 logits 映射到概率值,使得它们的总和等于1。这样,可以选择具有最高概率的类别作为最终的分类结果。

# 导入相应的工具包
import tensorflow as tf
import tensorflow.keras as keras
import matplotlib.pyplot as plt
import numpy as np
# 数字中的score
x = tf.constant([0.2,0.02,0.15,0.15,1.3,0.5,0.06,1.1,0.05,3.75])
# 将其送入到softmax中计算分类结果
y = tf.nn.softmax(x) 
# 将结果进行打印
print(y)

1.6 其他激活函数

二、如何选激活函数

2.1 隐藏层

  • 优先选择RELU激活函数
  • 如果ReLu效果不好,那么尝试其他激活,如Leaky ReLu等。
  • 如果你使用了Relu, 需要注意一下Dead Relu问题, 避免出现大的梯度从而导致过多的神经元死亡。
  • 不要使用sigmoid激活函数,可以尝试使用tanh激活函数


2.2 输出层

  • 二分类问题选择sigmoid激活函数
  • 多分类问题选择softmax激活函数
  • 回归问题选择identity激活函数



 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

神经网络 02(激活函数) 的相关文章

随机推荐

  • [PHP] CURL获取cookie,模拟登录获取数据

    需求 通过CURL先登录 然后获取登录后的cookie 在请求数据接口的时候带上这个cookie即可 直接贴代码 1
  • 决策树分箱-特征工程之数据离散化处理-基于python实现

    一 简介 离散化是通过创建一组跨越变量值范围的连续区间将连续变量转换为离散变量的过程 1 1 离散化有助于处理异常值和高度偏斜的变量 离散化通过将这些值 与分布的剩余内点值一起放入较低或较高的区间来帮助处理异常值 因此 这些异常值观察不再与
  • rosbag与csv等格式转换

    1 rosbag 转换成csv 参看 https blog csdn net cliukai article details 94554350 具体就是 rostopic echo b
  • Cocos Creator 用JS脚本实现游戏背景的无限滚动

    首先是实现的一个原理 使用2张相同的图片 让它们在脚本中不停的移动 用y值的减少来实现 当有图片离开场景时 给此图片的y重新赋值 相当于位置的重置 在update中无限调用背景移动的函数 我的canvas 位于上方的图片结点名称为BG 下方
  • 迷宫游戏源码

    mainwindow h ifndef MAINWINDOW H define MAINWINDOW H include MAZE h include
  • 【leetcode每日一题】479. 最大回文数乘积

    最大回文数乘积 题目来源 题意 思路 代码 注意 题目来源 点这里 题意 给定一个整数 n 返回可表示为两个 n 位整数乘积的最大回文整数 因为答案可能非常大 所以返回它对 1337 取余 思路 开始刷leetcode每日一题的Day3 我
  • openGL之API学习(四十五)正向渲染和延迟渲染

    如果你是一个游戏开发者 在你使用的图形引擎中或多或少都听说过forward rendering和deferred rendering 通常你必须在你的游戏中选择一种 但它们是什么 彼此之间有什么不同 我们又该如何选择呢 Modern Gra
  • DGA - 研究内容整理

    20200809 引言 DGA算法是一种生成域名的算法 以时间或者一些特定字符串作为种子 然后利用一定的算法 例如加密算法 来生成随机域名的方式 恶意软件的制作者通过这种方式来迷惑安全工作者 传统的恶意软件利用硬编码的方式将CC域名保存在程
  • qt正则表达式类QRegExp

    QRegExp是Qt的正则表达式类Qt中有两个不同类的正则表达式 第一类为元字符 它表示一个或多个常量表达式 令一类为 转义字符 它代表一个特殊字符 一 元字符 匹配任意单个字符 例如 1 3 可能是1 后面跟任意字符 再跟3 匹配字符串首
  • 12对胸椎对应体表标志_「康复基础」脊柱各结构的体表定位方法

    棘突的触抹定位法 1 颈椎 常利用枕外粗隆 C2 C7棘突 来确定颈椎各棘突的位置 枕外粗隆 粗大 任何人均可准确触抹清 沿此向下 有一凹陷 再向下推摸 可触及一骨突 即为C2棘突 C2棘突 较大 末端分叉 瘦弱者低头时可见其隆起于项部的上
  • 只用2GB的内存找出20亿个整数中找到出现次数最多的数

    要求有一个包含20亿个32位整数的文件 从中找到出现次数最多的数 首先先分析一下 32位int类型的数占4B 20亿个4B 约为 8GB 只用2GB肯定不够 所以我们肯定需要将这20亿个数哈希到不同的文件中 由于哈希函数的特性 对于相同的输
  • (已解决)关键词爬取百度搜索结果,返回百度安全验证,网络不给力,请稍后重试,无法请求到正确数据的问题(2023最新)

    已解决 使用关键词进行百度搜索 然后爬取搜索结果 请求数据后 返回的是百度安全验证 网络不给力 请稍后重试 无法请求到正确数据 且尝试在header中增加Accept参数还是不行 一 问题产生的现象 在学习过程中 写了一小段练习用的爬取程序
  • PyQt5 使用 pyinstaller打包文件(speed)

    编写界面 import sys math from PyQt5 QtWidgets import from PyQt5 QtCore import Qt from PyQt5 QtGui import class RightBottomBu
  • Android中引入开源库(Eclipse与Android Studio)

    以GitHub上的SlidingMenu为例 下载地址 jfeinstein10 SlidingMenu 一 Eclipse中引入 1 Import gt Existing Android Code Into Workspace 选择导入文
  • 线程池newCachedThreadPool使用

    1 查看newCachedThreadPool线程池创建方法 创建线程池 Executor cachedThread Executors newFixedThreadPool 1 查看底层实现 public static ExecutorS
  • unity3d 虚拟博物馆_基于Unity3D的虚拟家具展厅设计.docx

    内容摘要 在如今的信息时代 随着虚拟现实技术的不断发展和研究 各式各样的三维情景体验除了应用到文化宣传 如博物馆虚拟展厅等的建立 和教学科技体验 还在商业运营中的宣传部分具有了很大的发展空间 建立虚拟的商业产品展厅作为当今宣传手段的重要部分
  • EXCEL合并所有表格到一个表格中【VB代码】亲测可用!!!

    1 新建sheet表格 2 右击 查看代码 3 复制如下代码 Sub 合并当前工作簿下的所有工作表 Application ScreenUpdating False For j 1 To Sheets Count If Sheets j N
  • 【Arma3脚本教程】一、基本介绍

    目录 基本介绍 1 前言 2 编辑环境 3 第一行代码 4 地图文件夹 5 基本语法解释 6 记笔记 基本介绍 1 前言 想必看到此文章的人想要学习Arma3的地图编辑 不过国内很少有人研究这个 即使会的也不是专业程序员 即使是专业程序员
  • Sql一对多关联

    1 查询名人表中性别是男的作者 2 查看静夜思的作者 3 查询李白和杜甫的年纪 4 查询名人表中的男女人数 5 查询白居易写的作品名称和名句 6 查看年纪在25到30之间的个数 7 查询名人表中最后的两条数据 8 查询李白的作品名称 名言
  • 神经网络 02(激活函数)

    一 激活函数 在神经元中引入了激活函数 它的本质是向神经网络中引入非线性因素的 通过激活函数 神经网络就可以拟合各种曲线 如果不用激活函数 每一层输出都是上层输入的线性函数 无论神经网络有多少层 输出都是输入的线性组合 引入非线性函数作为激