机器学习技术-激活函数

news2024/9/30 15:35:12

激活函数

作用

f(*)称为激活函数或激励函数(Activation Function),激活函数的主要作用是完成数据的非线性变换,解决线性模型的表达、分类能力不足的问题;如果网络中都是线性变换,则多层网络可以通过矩阵变换,直接转换成一层神经网络。所以激活函数的存在使得神经网络的多层可以学习更加复杂的东西,以及表示输入与输出之间的非线性的复杂任意函数映射。

激活函数另外一个作用是执行数据归一化,将输入数据映射到某个范围内再往下传递,这样可以限制数据扩张防止数据过大导致溢出。

性质

激活函数需要具有哪些性质呢?

  • 1.可微性

当优化方法基于梯度的时候,这个性质是必须的

  • 2.单调性

当激活函数是单调的时候,单层网络能保证是凸函数

  • 3.输出值的范围

当激活函数输出值是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受到有限权值的影响更为显著;
当激活函数的输出是无限的时候,模型的训练会更加高效,不过这种情况一般需要更小的learning rate。

从目前来看,常见的激活函数多为分段线性和具有指数形状的非线性函数。

常见激活函数

激活函数可以分为两大类:

  • 饱和激活函数:sigmoid、tanh
  • 非饱和激活函数:ReLU、Leaky Relu、ELU(指数线性单元)、PReLU(参数化的ReLU)、RReLU(随机ReLU)
    相对于饱和函数,非饱和激活函数的优势在于:
  • 非饱和激活函数才能解决很多深度神经网络(网络层数巨多)的梯度消失问题,浅层网络才能用sigmoid作为激活函数(三五层)。
  • 加快收敛速度

在深度学习中,比较常用的激活函数主要有:sigmoid函数tanh函数ReLU函数softmax函数

sigmoid函数

原函数:
f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+ex1

请添加图片描述

sigmoid函数导数:
f ′ ( x ) = ( 1 1 + e − x ) ′ = e − x ( 1 + e − x ) 2 = e − x − 1 ( 1 + e − x ) 2 = ( 1 1 + e − x ) ( 1 − 1 1 + e − x ) = f ( x ) ( 1 − f ( x ) ) \begin{align} f\prime(x)&=(\frac{1}{1+e^{-x}})\prime \\ &=\frac{e^{-x}}{(1+e^{-x})^{2}}\\ &=\frac{e^{-x}-1}{(1+e^{-x})^2}\\ &=(\frac{1}{1+e^{-x}})(1-\frac{1}{1+e^{-x}}) &=f(x)(1-f(x)) \end{align} f(x)=(1+ex1)=(1+ex)2ex=(1+ex)2ex1=(1+ex1)(11+ex1)=f(x)(1f(x))

请添加图片描述

import numpy as np
import matplotlib.pyplot as plt

def sigmoid(x):
    return 1/(1+np.exp(-x))
def sigmoid_prime(x):
    return(sigmoid(x)*(1-sigmoid(x)))
x = np.arange(-5., 5., 0.2)
y = sigmoid(x)
plt.text(-0.5,0.8,r'$\frac{1}{1+e^{-x}}$',fontdict={'size':'16','color':'black'})
plt.plot(x, y)

y2=sigmoid_prime(x)
plt.text(-0.5,0.16,r'$\frac{1}{1+e^{-x}}\prime$',fontdict={'size':'16','color':'black'})
plt.plot(x, y2)

作用
Sigmoid 是以前最常用的非线性的激活函数,它能够是把输入的 (-∞,+∞)范围内 连续实值变换为0和1之间的输出,特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1。
优点

  • 1.输出范围有限,数据传递过程中不容易发散
  • 2.导数容易计算
    缺点
  • 1.输出范围有限也会导致饱和的时候梯度太小
  • 2.深度神经网络中梯度反向传递时导致梯度爆炸或梯度小时,其中梯度爆炸发现概率较小,梯度消失发生概率较大
  • 3.sigmoid的output不是0均值(zero-centered),这会导致后一层的神经元得到上一层输出的非零均值的信号作为输入
  • 解析式中含有幂运算,计算机求解相对耗时

优点

  • 在特征相差明显的情况下效果会很好,因为该激活函数会在循环过程中不断扩大特征效果

tanh函数

双曲正切函数(Hyperbolic tangent function),将一个 (-∞,+∞)范围内 实值输入压缩至 [-1, 1]的范围,这类函数具有平滑和渐近性,并保持单调性。
它解决了Sigmoid函数的不是zero-centered输出问题,与sigmoid相比,它的输出均值是0,使得其收敛速度要比sigmoid快,减少迭代次数,然而,梯度消失(gradient vanishing)的问题和幂运算的问题仍然存在。

tanh函数本质上是sigmoid函数的变形: t a n h ( x ) = 2 S i g m o i d ( 2 x ) − 1 tanh(x)=2Sigmoid(2x)-1 tanh(x)=2Sigmoid(2x)1

原函数:
t a n h ( x ) = 2 S i g m o i d ( 2 x ) − 1 = s i n h x c o u s h x = e x − e − x e x + e − x \begin{align} tanh(x)&=2Sigmoid(2x)-1\\ &=\frac{sinhx}{coushx}\\ &=\frac{e^x-e^{-x}}{e^x+e^{-x}} \end{align} tanh(x)=2Sigmoid(2x)1=coushxsinhx=ex+exexex

请添加图片描述

原函数求导:
首先 : ( e x ) ′ = e x , ( e − x ) ′ = − e − x 其次 : ( u v ) ′ = u ′ v − u v ′ v 2 t a n h ( x ) ′ = ( e x + e − x ) ( e x − e − x ) − ( e x − e − x ) ( e x − e − x ) ( e x + e − x ) 2 = 1 − ( e x − e − x ) 2 ( e x + e − x ) 2 = 1 − t a n h 2 ( x ) \begin{align} 首先&:(e^x)\prime=e^x,(e^{-x})\prime=-e^{-x}\\ 其次&: \left(\frac{u}{v}\right)^{\prime}=\frac{u^{\prime} v-u v^{\prime}}{v^{2}} \\ tanh(x)\prime&=\frac{(e^x+e^{-x})(e^x-e^{-x})-(e^x-e^{-x})(e^x-e^{-x})}{(e^x+e^{-x})^{2}}\\ &=1-\frac{(e^x-e^{-x})^2}{(e^x+e^{-x})^{2}}\\ &=1-tanh^2(x) \end{align} 首先其次tanh(x)(ex)=ex,(ex)=ex:(vu)=v2uvuv=(ex+ex)2(ex+ex)(exex)(exex)(exex)=1(ex+ex)2(exex)2=1tanh2(x)

![[attachments/tanh导数函数图像.png]]

import numpy as np
import matplotlib.pyplot as plt
def tanh(x):
    return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))
def tanh_prime(x):
	return 1-tanh(x)*tanh(x)
x = np.arange(-5., 5., 0.1)
y = tanh(x)
plt.text(-0.5,0.8,r'$\frac{e^x-e^{-x}}{e^x+e^{-x}}$',fontdict={'size':'16','color':'black'})
plt.plot(x, y)

y2=tanh_prime(x)
plt.text(1,0.8,r'$1-tanh^2(x)$',fontdict={'size':'16','color':'black'})
plt.plot(x, y2)

Relu函数

ReLU(Rectified Linear Unit), 修正线性单元- 用于隐层神经元输出, 深度学习目前最常用的激活函数,是一种分段线性函数,弥补了sigmoid函数以及tanh函数的梯度消失问题。
原函数:
ϕ ( x ) = m a x ( 0 , x ) \phi(x)=max(0,x) ϕ(x)=max(0,x)

请添加图片描述
其导函数
请添加图片描述

def ReLU(x):
    x2 = (np.abs(x) + x) / 2.0
    return x2
def ReLU_prime(x):
    return np.where(x > 0, 1, 0)
x = np.arange(-5., 5., 0.1)
y = [0]*len(x)
print (x)

plt.text(-1.5,1.5,r'$max(x,0)$',fontdict={'size':'16','color':'black'})
Y=ReLU(x)
plt.plot(x, Y)

print(x)
y2=ReLU_prime(x)
plt.text(1,0.8,r'$max(x,0)\prime$',fontdict={'size':'16','color':'black'})
print(y2)
plt.plot(x, y2)

优点

  • 在正区间解决了梯度消失(gradient vanishing)问题
  • 计算速度快
  • 使用梯度下降法的时候收敛速度快
    缺点
  • 输出不是zero-centered
  • Dead ReLU Problem,指的是某些神经元可能永远不会被激活,导致相应的参数永远不能被更新。有两个主要原因可能导致这种情况产生: (1) 非常不幸的参数初始化,这种情况比较少见 (2) learning rate太高导致在训练过程中参数更新太大,不幸使网络进入这种状态。解决方法是可以采用Xavier初始化方法,以及避免将learning rate设置太大或使用adagrad等自动调节learning rate的算法。

Softmax函数

Softmax用于多分类神经网络输出,Softmax可以将数值向量转换成概率分布,Sigmod是Softmax函数的一个特例,Sigmod函数只能预测值为0或者1的二元分类。
原函数:
y k = e a k ∑ i = 1 n e a i y_k=\frac{e^{a_k}}{\sum\limits_{i=1}^{n}e^{a_i}} yk=i=1neaieak

上式表示假设输出层共有 n 个神经元,计算第 k 个神经元的输出 y k y_{k} yk。如上式所示,softmax 函数的分子是输入信号 a k a_{k} ak的指数函数,分母是所有输入信号的指数函数的和。

@未完

def softmax(x):
    return np.exp(x) / np.sum(np.exp(x))

对于长度为 K 的任意实向量,Softmax函数可以将其压缩为长度为 K,值在 [0,1] 范围内,并且向量中元素的总和为 1 的实向量。 Softmax函数与正常的max函数不同:max函数仅输出最大值,但Softmax函数确保较小的值具有较小的概率,并且不会直接丢弃。我们可以认为它是arg max函数的概率版本或“soft”版本。Softmax函数的分母结合了原始输出值的所有因子,这意味着Softmax函数获得的各种概率彼此相关。
特点

  • 在零点不可微。
  • 负输入的梯度为零,这意味着对于该区域的激活,权重不会在反向传播期间更新,因此会产生永不激活的死亡神经元。

total

激活函数特点缺点优点
Sigmoid导数易得,以前常用梯度消失、非零均值、计算耗时
tanh解决了Sigmoid零均值问题梯度消失、计算耗时收敛更快
Relu解决了梯度消失问题非零均值、死神经梯度下降收敛快
Softmax多分类问题,向量转概率

@未完

参考

神经网络中的激活函数有什么作用 - 知乎 (zhihu.com)
神经网络激活函数的作用是什么? - 知乎 (zhihu.com)
谈谈激活函数以零为中心的问题 | 始终 (liam.page)
(30条消息) 【深度学习】:超详细的Softmax求导_BQW_的博客-CSDN博客_softmax的导数
(30条消息) 机器学习中的数学——激活函数(四):Leaky ReLU函数_von Neumann的博客-CSDN博客_leakyrelu激活函数

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

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

相关文章

C6678学习-EDMA

文章目录 1、简介1. EDMA3概述2、EDMA3的组成3、EDMA3的工作流程4、EDMA3通道控制器(EDMA3CC)5、触发方式 2、EDMA3的传输1、传输数据块的定义2、传输类型3、参数PaRAM4、通道5、OPT参数 3、补充1、EDMA3通道控制器区域 1、简介 1. EDMA3概述 基于C66x…

车载滤波器组件焊锡开裂失效分析

案例背景 车载滤波器组件在可靠性试验后,主板上的插件引脚焊点发生开裂异常。 分析过程 焊点外观 说明:插件器件引脚呈现出明显的焊点开裂状态。 X-RAY检测 针对异常焊点的X-RAY检测: 说明:通孔(支撑孔)的透…

如何用ChatGPT做项目管理?

ChatGPT可以通过创建和维护跨团队项目协作计划,让员工更容易理解他们的角色和职责。这个协作计划里面会包括每个团队或个人要执行的具体任务,每个任务最后期限和任何事情之间的依赖关系。 该场景对应的关键词库:(24个&#xff09…

springboot框架开发医院云HIS 住院医生站、住院护士站功能实现

住院医生站主模块:包括医嘱管理、病案首页、分配入科、住院清单、我的质控等子模块 (1)医嘱管理功能简介 ①住院患者开立医嘱、支持医嘱复制、停止、作废等操作; ②医嘱类型含药品、项目、材料、嘱托; ③支持住院各…

(2022 IV) RCBEV

这篇是清华大学发表在IV(IEEE Transactions on Intelligent Vehicles)上的文章: Bridging the view disparity between radar and camera features for multi-modal fusion 3d object detection 文章信息讲得比较细致,非常值得一看&#xff…

【人工智能】— 不确定性、先验概率/后验概率、概率密度、贝叶斯法则、朴素贝叶斯 、最大似然估计

【人工智能】— 不确定性 不确定性不确定性与理性决策基本概率符号先验概率(无条件概率)/后验概率(条件概率)随机变量概率密度联合概率分布公理完全联合分布概率演算独立性 贝叶斯法则例1例2 使用贝叶斯规则:合并证据朴素贝叶斯最大似然估计小结 不确定性 不确定性与…

osg::Drawable类通过setDrawCallback函数设置回调函数的说明

osg::Drawable类可以通过该类的setDrawCallback函数设置回调函数类对象。被设置的回调类对象必须从osg::Drawable::DrawCallback类派生,并重写drawImplementation函数,以实现自己特定的需求。这个回调函数每次在帧事件中都会被调用(如:在帧的…

SpringBoot定义优雅全局统一Restful API 响应框架二

这里解决之前留下来的问题,当程序没有正常返回时候 就是程序由于运行时异常导致的结果,有些异常我们可,能无法提前预知,不能正常走到我们return的R对象返回。这个时候该如何处理 在SpringBoot中,可以使用ControllerA…

AI 作画火了,如何用 Serverless 函数计算部署 Stable Diffusion?

作者:寒斜 立即体验基于函数计算部署 Stable Diffusion: https://developer.aliyun.com/topic/aigc AIGC 领域目前大火, 除了 Chatgpt,在文生图领域 Stable Diffusion 大放异彩,深刻的地影响着绘画、视频制作等相关…

古剑飞仙手游Linux系统服务器架设教程

安装宝塔直接运行命令即可。 yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh 搭建环境: centos 7以上系统服务器 宝塔面板安装应用如下: Nginx1.14 mysql5.7 php5.6 1…

HNU-操作系统OS-实验Lab1

OS_Lab1_Experimental report 湖南大学信息科学与工程学院 计科 210X wolf (学号 202108010XXX) 为了实现 lab1 的目标,lab1 提供了 6 个基本练习和 1 个扩展练习,要求完成实验报告。 对实验报告的要求: 基于 mark…

【CSS笔记】CSS动画效果(2d、3d)之渐变色、过渡、变换、平移、缩放、旋转、倾斜、关键帧动画

这篇文章,主要介绍CSS动画效果(2d、3d)之渐变色、过渡、变换、平移、缩放、旋转、倾斜、关键帧动画。 目录 一、2d动画 1.1、渐变色 (1)线性渐变色 (2)径向渐变色 (3&#xff0…

SpringBoot 基础

一、简介 SpringBoot用来简化Spring应用的初始搭建和开发过程, SpringBoot四大核心: 自动配置 起步依赖 Actuator 命令行界面 二、入门案例 1. 基于IDEA创建步骤 ① 创建新模块,选择Spring Initializr,并配置模块相关基础信息…

AI和GPT之间什么关系,GPT怎么推动AI发展

AI(人工智能)和GPT(Generative Pre-trained Transformer)都是与计算机技术相关的术语,但它们代表着不同层次的概念。以下是它们之间的区别: 定义: AI是指任何类型的计算机科学,如机…

【AWS入门】AWS Lamda

目录 创建一个Lamda函数用Lamda函数控制启停EC2实例创建一台EC2实例创建角色创建lamda函数 使用Amazon EventBridge计划启停实例创建EventBridge 用户往S3存储桶上传图片文件,触发Lambda函数,将图片压缩并上传至另一个存储桶创建两个存储桶通过Cloudform…

【前端】3.CSS基础知识

系列文章链接 1.背景知识与学习路线 2.HTML基础知识 3.CSS基础知识 4.JavaScript基础知识 文章目录 1. 基本概念1.1 CSS 定义1.2 CSS 用途1.3 CSS 支持的属性举例 2. CSS 基础语法2.1 demo2.2 选择器2.3 CSS创建2.3.1 外部样式表2.3.2 内部样式表2.3.3 内联样式 3. 总结3.1 CSS…

Linux线程:信号量

1. 信号量 &#xff08;1&#xff09;概念 信号量是非负整数计数器&#xff0c;表示当前可使用的公共资源的个数&#xff1b;主要用于进程或线程的同步或互斥。 信号量 > 0&#xff0c;则可访问公共资源&#xff0c;信号量&#xff1b;信号量 < 0&#xff0c;则阻塞。…

dreamer的创作纪念日

先来看看这张图&#xff1a; 创作者dreamer来到CSDN的第1024天 机缘 提示&#xff1a;可以和大家分享最初成为创作者的初心 最初开始写CSDN博客&#xff0c;初衷是为了记录&#xff1a;自己工作或学习中遇到的一些问题&#xff08;就像我的第一篇博客&#xff0c;就是刷Lee…

Windows powershell添加自定义快捷指令(Linux下也有)

Windows Powershell 1.创建并修改Windows Powershell 启动执行文件 echo $PROFILE编辑C:\Users\hongyang.jia\Documents\PowerShell\Microsoft.PowerShell_profile.ps1 2.按照以下格式输入命令 function 别名 { 需要替代的命令 }例如我的Git简写命令 function gs {git sta…

dm5爬虫(selenium)

因为纯requests请求获取不到图片链接,所以用了selenium import requests import os from lxml import etree import re from selenium import webdriverurl https://www.dm5.com/manhua-qiangweishaonv/ # 漫画的url response requests.get(url) # 获取响应 print(response)…