激励函数-Activation Funciton

本文详细介绍了激励函数在神经网络中的作用,包括Sigmoid、Tanh、ReLU等常见函数的公式、图形及其优缺点,并对比了它们在神经网络中的表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、什么是激励函数

  激励函数一般用于神经网络的层与层之间,上一层的输出通过激励函数的转换之后输入到下一层中。神经网络模型是非线性的,如果没有使用激励函数,那么每一层实际上都相当于矩阵相乘。经过非线性的激励函数作用,使得神经网络有了更多的表现力。

  为了更具体的描述这个问题,请参考知乎上的回答。

原文链接:https://www.zhihu.com/question/22334626/answer/103835591
这是一个单层的感知机, 也是我们最常用的神经网络组成单元啦. 用它可以划出一条线, 把平面分割开

这里写图片描述

那么很容易地我们就会想用多个感知机来进行组合, 获得更强的分类能力, 这是没问题的啦~~
如图所示,

这里写图片描述

那么我们动笔算一算, 就可以发现, 这样一个神经网络组合起来,输出的时候无论如何都还是一个线性方程哎~纳尼, 说好的非线性分类呢~!!!!???

这里写图片描述

再盗用一幅经常在课堂上用的图…然而我已经不知道出处是哪了, 好像好多老师都是直接用的, 那我就不客气了嘿嘿嘿~,这幅图就跟前面的图一样, 描述了当我们直接使用step activation function的时候所能获得的分类器, 其实只能还是线性的, 最多不过是复杂的线性组合罢了,当然你可以说我们可以用无限条直线去逼近一条曲线啊……额,当然可以, 不过比起用non-linear的activation function来说就太傻了嘛….

这里写图片描述

祭出主菜. 题主问的激励函数作用是什么, 就在这里了!!
我们在每一层叠加完了以后, 加一个激活函数, 如图中的 y=δ(a) . 这样输出的就是一个不折不扣的非线性函数!

这里写图片描述

于是就很容易拓展到多层的情况啦, 更刚刚一样的结构, 加上non-linear activation function之后, 输出就变成了一个复杂的, 复杂的, 超级复杂的函数….额别问我他会长成什么样, 没人知道的~我们只能说, 有了这样的非线性激活函数以后, 神经网络的表达能力更加强大了~(比起纯线性组合, 那是必须得啊!)

这里写图片描述

继续厚颜无耻地放一张跟之前那副图并列的图, 加上非线性激活函数之后, 我们就有可能学习到这样的平滑分类平面. 这个比刚刚那个看起来牛逼多了有木有!

这里写图片描述

二、不同激励函数的公式和图形

1、Sigmoid函数
  Sigmoid函数公式如下

δ(x)=11+ex

  函数图形如下:
   这里写图片描述
  观察函数图形可以看到,Sigmoid函数将输入值归一化到 (0, 1)之间。
  
  Sigmoid函数导数公式如下
dδ(x)dx=ex(1+ex)2

  函数图形如下:
   这里写图片描述

  Sigmoid函数有三个缺点:  
(1)Saturated neurons “kill” the gradients
  在一些误差反向传播的场景下。首先会计算输出层的loss,然后将该loss以导数的形式不断向上一层神经网络传递,调整参数。使用Sigmoid函数的话,很容易导致loss导数变为0,从而失去优化参数的功能。
  并且Sigmoid函数的导数最大值为0.25,该误差经过多层神经网络后,会快速衰减到0。
  
(2)Sigmoid outputs are not zero-centered
  Sigmoid函数的输出值恒大于零,那么下一层神经网络的输入x恒大于零。
  

f=wTx+b

  对上面这个公式来说, w上的gradient将会全部大于零或者全部小于零。这会导致模型训练的收敛速度变慢。
  如下图所示,当输入值均为正数时,会导致按红色箭头所示的阶梯式更新。
  
   这里写图片描述

(3)exp() is a bit compute expensive
  最后,Sigmoid函数中的指数运算也是一个比较消耗计算资源的过程。
  
2、Tanh函数

  接下来的Tanh函数基于Sigmoid函数进行了一些优化,克服了Sigmoid的not zero-centered的缺点。Tanh函数公式如下:  

tanh(x)=exexex+ex

  Sigmoid函数和Tanh函数之间的关系如下:

tanh(x)=2δ(2x)1

  
  所以,对应于sigmoid的取值范围(0, 1),tanh的取值范围为(0, 1)。将两个函数图像画在同一坐标系中,如下图所示:
   这里写图片描述

  所以Tanh仍然具有Sigmoid函数的另外两个不足。
  
3、ReLU函数
  ReLU函数公式如下所示:

ReLU=max(0,x)

  对应函数图形如下:
  这里写图片描述

  该函数在输入小于0时输出值恒为0,在输入大于0时,输出线性增长。

  ReLU函数没有Sigmoid函数及Tanh函数中的指数运算,并且也没有”kill” gradients的现象。
  但是ReLU函数也有以下几个不足之处:
(1)not zero-centered
  这个与Sigmoid类似,从函数图形就可以看出。
  
(2)dead relu
  这里指的是某些神经元可能永远不会被激活,导致对应的参数永远不会被更新。
  比如说一个非常大的Gradient流过ReLU神经元,可能会导致参数更新后该神经元再也不会被激活。
  当学习率过大时,可能会导致大部分神经元出现dead状况。所以使用该激活函数时应该避免学习率设置的过大。另外一种比较少见的情况是,某些初始化参数也会导致一些神经元出现dead状况。

  以上部分参考自:http://mp.weixin.qq.com/s?__biz=MzI1NTE4NTUwOQ==&mid=2650324989&idx=2&sn=c70ec361350fefc7693d2231879dfd49&scene=0#wechat_redirect

4、Softplus函数

  Softplus函数公式如下,

Softplus(x)=log(1+ex)

  通过观察该公式可以发现Softplus函数是Sigmoid函数的原函数。

  Softplus函数与ReLU函数的图形对比如下图所示,
  这里写图片描述

  在这里之所以将Softplus函数与ReLU函数的图形放在一起进行比较,是因为Softplus函数可以看成是ReLU函数的平滑版本。
  并且,Softplus函数是对全部数据进行了非线性映射,是一种不饱和的非线性函数其表达式如公式,Softplus函数不具备稀疏表达的能力,收敛速度比ReLUs函数要慢很多。但该函数连续可微并且变化平缓,比Sigmoid函数更加接近生物学的激活特性,同时解决了Sigmoid函数的假饱和现象,易于网络训练和泛化性能的提高。虽然该函数的表达性能更优于ReLU函数和Sigmoid函数,即精确度相对于后者有所提高,但是其并没有加速神经网络的学习速度。
  
5、Softsign函数
softsign(x)=11+|x|

  这里写图片描述

三、Tensorflow中提供的激励函数

  在Tensorflow r1.0中提供了以下几种激励函数,其中包括连续非线性的(比如sigmoid, tanh, elu, softplus, softsign),连续但是并不是处处可微分的(relu, relu6, crelu, relu_x)以及随机函数(dropout)。

tf.nn.relu
tf.nn.relu6
tf.nn.crelu
tf.nn.elu
tf.nn.softplus
tf.nn.softsign
tf.nn.dropout
tf.nn.bias_add
tf.sigmoid
tf.tanh

dbus-update-activation-environment: setting IMSETTINGS_INTEGRATE_DESKTOP=yes dbus-update-activation-environment: setting SHELL=/bin/bash dbus-update-activation-environment: setting XDG_SESSION_PATH=/org/freedesktop/DisplayManager/Session5 dbus-update-activation-environment: setting GTK_IM_MODULE=fcitx dbus-update-activation-environment: setting XMODIFIERS=@im=fcitx dbus-update-activation-environment: setting DESKTOP_SESSION=mate dbus-update-activation-environment: setting PWD=/root dbus-update-activation-environment: setting XDG_SESSION_DESKTOP=mate dbus-update-activation-environment: setting LOGNAME=root dbus-update-activation-environment: setting XDG_SESSION_TYPE=x11 dbus-update-activation-environment: setting XAUTHORITY=/run/lightdm/root/xauthority dbus-update-activation-environment: setting XDG_GREETER_DATA_DIR=/var/lib/lightdm-data/root dbus-update-activation-environment: setting HOME=/root dbus-update-activation-environment: setting LANG=zh_CN.UTF-8 dbus-update-activation-environment: setting XDG_CURRENT_DESKTOP=MATE dbus-update-activation-environment: setting XDG_SEAT_PATH=/org/freedesktop/DisplayManager/Seat0 dbus-update-activation-environment: setting IMSETTINGS_MODULE=FCITX dbus-update-activation-environment: setting XDG_SESSION_CLASS=user dbus-update-activation-environment: setting TERM=dumb dbus-update-activation-environment: setting USER=root dbus-update-activation-environment: setting DISPLAY=:0 dbus-update-activation-environment: setting SHLVL=1 dbus-update-activation-environment: setting QT_IM_MODULE=fcitx dbus-update-activation-environment: setting XDG_RUNTIME_DIR=/run/user/0 dbus-update-activation-environment: setting PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin dbus-update-activation-environment: setting GDMSESSION=mate dbus-update-activation-environment: setting DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/0/bus dbus-update-activation-environment: setting _=/usr/bin/dbus-update-activation-environment ** (mate-session:14466): WARNING **: 10:08:38.256: 无法打开显示:
最新发布
08-22
<think>我们正在处理一个关于Linux MATE桌面环境中出现`dbus-update-activation-environment: unable to open display`错误的问题。这个错误通常发生在尝试通过DBus更新环境变量时,无法连接到X服务器(即显示服务器)。这可能是由于当前用户没有正确的DISPLAY环境变量设置,或者X服务器没有运行,或者用户没有权限访问X服务器。 ### 解决步骤: 1. **确认DISPLAY环境变量**: 首先,我们需要确认当前会话中DISPLAY环境变量是否设置正确。在终端中运行: ```bash echo $DISPLAY ``` 正常情况下,应该输出类似`:0`或`:1`的值。如果输出为空,说明DISPLAY变量没有设置。 2. **设置DISPLAY环境变量**: 如果DISPLAY变量没有设置,可以尝试手动设置: ```bash export DISPLAY=:0 ``` 然后再次尝试运行出错的命令。 3. **检查X服务器是否运行**: 使用以下命令检查X服务器是否在运行: ```bash ps aux | grep Xorg ``` 或者 ```bash ps aux | grep X ``` 如果看到Xorg进程在运行,说明X服务器已经启动。 4. **检查用户权限**: 确保当前用户有权访问X服务器。可以通过以下命令检查: ```bash xhost ``` 如果输出包含当前用户,或者有“access control enabled, only authorized clients can connect”并且没有列出当前用户,那么需要添加当前用户: ```bash xhost +local:用户名 ``` 或者,为了安全起见,可以添加当前用户: ```bash xhost +SI:localuser:用户名 ``` 5. **检查DBus服务**: 确保DBus服务正在运行。可以尝试重启DBus服务(需要root权限): ```bash sudo systemctl restart dbus ``` 6. **检查MATE桌面环境**: 如果是在启动MATE桌面环境时出现此错误,可能是桌面环境启动不完整。可以尝试重新启动MATE桌面环境: ```bash mate-session --replace & ``` 7. **检查.xsession-errors文件**: 查看用户主目录下的`.xsession-errors`文件,可能包含更详细的错误信息: ```bash cat ~/.xsession-errors ``` 8. **重新安装MATE桌面**: 如果以上步骤都不能解决问题,可以尝试重新安装MATE桌面环境(注意:这可能会覆盖一些配置文件): ```bash sudo apt-get install --reinstall mate-desktop-environment ``` ### 可能的原因: - 用户从非图形环境(如tty)运行图形程序,而没有设置DISPLAY变量。 - X服务器没有正确启动。 - 用户权限问题,无法连接到X服务器。 - DBus服务没有运行或配置错误。 ### 相关问题: 1. 如何检查Linux系统中的DISPLAY环境变量? 2. 在Linux中如何重启DBus服务? 3. 如何解决用户无法访问X服务器的问题? 4. 如何重新安装MATE桌面环境? 5. 如何查看Linux桌面环境的错误日志? 请根据上述步骤尝试解决问题。如果问题仍然存在,请提供更多错误信息以便进一步分析。</think>### Linux MATE桌面环境出现"dbus-update-activation-environment: unable to open display"错误解决方法 此错误通常发生在DBus尝试更新桌面环境变量时无法连接到X服务器显示服务。以下是系统性的解决方案: #### 1. **检查DISPLAY环境变量** ```bash echo $DISPLAY ``` - 如果输出为空或无效值,需手动设置: ```bash export DISPLAY=:0 # 最常用值 # 或尝试 export DISPLAY=:1 ``` - 永久生效:在`~/.bashrc`或`~/.profile`中添加上述命令[^3] #### 2. **验证X服务器权限** ```bash xhost +local: # 允许本地用户访问 xhost +si:localuser:$(whoami) # 允许当前用户 ``` #### 3. **检查DBus服务状态** ```bash systemctl status dbus # 检查服务状态 sudo systemctl restart dbus # 重启服务 ``` #### 4. **重新生成DBus机器ID** ```bash sudo rm /var/lib/dbus/machine-id sudo dbus-uuidgen --ensure ``` #### 5. **检查X服务器状态** ```bash ps aux | grep -E "Xorg|X11" # 确认X服务器运行 sudo systemctl restart lightdm # 或gdm3/sddm ``` #### 6. **修复MATE桌面配置** ```bash dconf reset -f /org/mate/ # 重置MATE配置 mate-session --replace & # 替换当前会话 ``` #### 7. **检查系统日志** ```bash journalctl -b -0 --no-pager | grep -iE "dbus|display|x11" # 查看启动日志 ``` #### 常见原因分析: 1. **DISPLAY变量未设置**:SSH会话或tty中执行图形命令时常见 2. **X权限问题**:`~/.Xauthority`文件损坏或权限错误 3. **DBus配置损坏**:机器ID丢失或服务异常 4. **桌面环境未完全启动**:MATE组件加载失败 5. **多用户冲突**:多个用户同时使用同一显示端口 ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值