激活函数高频面试题集合

news/2024/7/10 2:21:29 标签: 目标检测

激活函数

  • 激活函数的作用是什么?
  • 常用的激活函数
    • Relu
      • 引入Relu的原因
      • Relu顺序
      • relu在零点可导吗,不可导如何进行反向传播?
    • Gelu
    • leaky relu
      • 优点
      • 缺点
    • softmax
    • sigmoid
      • 缺陷
    • tanh
      • 缺点
  • 如何选择激活函数
  • Bert、GPT、GPT2中用的激活函数是什么?为什么?
  • transformer FFN层用的激活函数是什么?为什么?
  • dropout在激活函数之前做,还是激活函数之后做?

激活函数的作用是什么?

最主要的是引入了非线性因素,可以提高模型的表达能力。
如果没有激活函数,那么模型就只有线性变换,可想而知线性模型能表达的空间是有限的。而激活函数引入了非线性因素,比线性模型拥有更大的模型空间。

常用的激活函数

Relu,Gelu,leaky relu,softmax,sigmoid,tanh

Relu

引入Relu的原因

第一,采用sigmoid等函数,算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。

第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现 梯度消失 的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),从而无法完成深层网络的训练。

第三,ReLu会使一部分神经元的输出为0,这样就造成了 网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。网络的稀疏性可以理解为让不同的神经元各司其职。

Relu顺序

一般是卷积-BN-Relu.
Sigmoid:如果先BN再Sigmoid,由于BN后方差接近于1,均值接近于0,使得BN后的数据接近于Sigmoid的线性区域,降低了激活函数的非线性能力,这种情况下建议Sigmoid+BN。

Relu:如果先Relu再BN,Relu后部分神经元已经失活,失活的神经元将对BN的归一化产生影响,这种情况下建议BN+Relu。

relu在零点可导吗,不可导如何进行反向传播?

不可导,人为将梯度规定为0.

import numpy as np
import matplotlib.pyplot as plt

def relu(x):
    return np.maximum(0, x)

x = np.linspace(-10, 10, 100)
y = relu(x)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('ReLU(x)')
plt.title('ReLU Function')
plt.grid()
plt.show()

在这里插入图片描述

Gelu

import numpy as np
import matplotlib.pyplot as plt

def gelu(x):
    return 0.5 * x * (1 + np.tanh(np.sqrt(2/np.pi) * (x + 0.044715 * np.power(x, 3))))

x = np.linspace(-10, 10, 100)
y = gelu(x)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('GeLU(x)')
plt.title('GeLU Function')
plt.grid()
plt.show()

在这里插入图片描述

leaky relu

优点

该方法与ReLU不同的是在x小于0的时候取f(x) = ax,其中a是一个非常小的斜率(比如0.01)。这样的改进可以使得当x小于0的时候也不会导致反向传播时的梯度消失现象。

缺点

无法避免梯度爆炸的问题。
神经网络不学习\alphaα值。
在求导的时候,两部分都是线性的。

import numpy as np
import matplotlib.pyplot as plt

def leakyrelu(x, alpha=0.01):
    return np.maximum(x, alpha * x)

x = np.linspace(-10, 10, 100)
y = leakyrelu(x)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('LeakyReLU(x)')
plt.title('LeakyReLU Function')
plt.grid()
plt.show()

在这里插入描述

softmax

sigmoid

如下图所示,其值域为 (0,1)(0,1)。也就是说,输入的每个神经元、节点都会被缩放到一个介于0和1之间的值。

当x大于零时输出结果会趋近于1,而当x小于零时,输出结果趋向于0,由于函数的特性,经常被用作二分类的输出端激活函数。

缺陷

当输入数据很大或者很小时,函数的梯度几乎接近于0,这对神经网络在反向传播中的学习非常不利。
Sigmoid函数的均值不是0,这使得神经网络的训练过程中只会产生全正或全负的反馈。
导数值小于1,反向传播易导致梯度消失。

import numpy as np
import matplotlib.pyplot as plt

def sigmoid(x):
    return 1 / (1 + np.exp(-x))

x = np.linspace(-10, 10, 100)
y = sigmoid(x)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('Sigmoid(x)')
plt.title('Sigmoid Function')
plt.grid()
plt.show()

在这里插入图片描述

tanh

缺点

导数值小于1,反向传播易导致梯度消失。

import numpy as np
import matplotlib.pyplot as plt

def tanh(x):
    return np.tanh(x)

x = np.linspace(-10, 10, 100)
y = tanh(x)

plt.plot(x, y)
plt.xlabel('x')
plt.ylabel('tanh(x)')
plt.title('Hyperbolic Tangent Function')
plt.grid()
plt.show()

在这里插入图片描述

如何选择激活函数

用于分类器时,二分类为Sigmoid,多分类为Softmax,这两类一般用于输出层;
对于长序列的问题,隐藏层中尽量避免使用Sigmoid和Tanh,会造成梯度消失的问题;
Relu在Gelu出现之前在大多数情况下比较通用,但也只能在隐层中使用;
现在隐藏层中主要的选择肯定优先是Gelu、Swish了。
不过大部分情况下论文用什么就用什么了。

Bert、GPT、GPT2中用的激活函数是什么?为什么?

Gelu

transformer FFN层用的激活函数是什么?为什么?

dropout在激活函数之前做,还是激活函数之后做?


http://www.niftyadmin.cn/n/233600.html

相关文章

Charles安装及使用教程

一. 简介及安装 一、charles的使用 1.1 charles的说明 Charles其实是一款代理服务器,通过过将自己设置成系统(电脑或者浏览器)的网络访问代理服务器,然后截取请求和请求结果达到分析抓包的目的。该软件是用Java写的&#xff0…

nginx优化及配置

nginx隐藏版本号 查看方法 浏览器F12 看network头部看server curl -i 192.168.232.7 获取头部(查版本号) 配置文件改 添加server_tokens off 改源码 cd /src/core vim nginx.h 修改 修改的IIS为window常用的软件服务 重新编译安装 cd nginx_1.2…

【C++核心】内存、引用、函数

一、内存四区域 C程序在执行时,将内存大方向划分为4个区域 程序运行前分为: 代码区:存放函数体的二进制代码exe,由操作系统进行管理的 exe机器指令、共享、只读 全局区:存放全局变量和静态变量以及常量(字…

遥感、GIS及GPS在土壤空间数据分析、适应性评价、制图及土壤普查中的应用

摸清我国当前土壤质量与完善土壤类型,可以为守住耕地红线、保护生态环境、优化农业生产布局、推进农业高质量发展奠定坚实基础,为此,2022年初国务院印发了《关于开展第三次全国土壤普查的通知》,决定自2022年起开展第三次全国土壤…

【问题、AI解答】mongodb中使用$lookup进行连表查询使用_id作为localField出现查询结果字段为空的情况

描述: db.acticles.aggregate([ {$lookup:{from:"acticlesMaptags",localField:"_id",foreignField:"acticleid",as:"tagid"} } ])acticlesMaptags集合中的acticleid字段存在与acticles集合中的_id相匹配的数据…

代码随想录第18天 | 530.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236. 二叉树的最近公共祖先

530.二叉搜索树的最小绝对差 var getMinimumDifference function (root) {//中序遍历法:左中右let res []if (!root) return res;const st [root] //栈,pop(),push()while (st.length) {let x st.pop()if (!x) {res.push(st.pop().val)continue}if (…

系统需求分析

系统需求分析 需求分析是软件生存周期中相当重要的一个阶段。由于开发人员熟悉计算机但不熟悉应用 领域的业务,用户熟悉应用领域的业务但不熟悉计算机,因此对于同一个问题,开发人员和用 户之间可能存在认识上的差异。在需求分析阶段&#xff…

判断欧拉回路

目录 欧拉回路 程序设计 程序分析 欧拉回路 【问题描述】 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路。现给定一个图,问是否存在欧拉回路? 【输入形式】 测试输入包含若干测试用例。每个测试用例的第1行给出两个正整数,分别是节点数…