当前位置: 首页 > news >正文

神经网络激活函数

神经网络的激活函数(Activation Function)
神经网络可以用在分类问题和回归问题上,不过需要根据情况改变输出层的激活函数。一般而言,回归问题用恒等函数,分类问题用softmax函数。

神经网络的激活函数必须使用非线性函数,因为使用线性函数的话,加深神经网络的层数就再没有意义了:

  • 非线性: 当激活函数是非线性的时候(一阶导数不为常数),一个两层的神经网络就可以逼近基本上所有的函数了。如果激活函数是恒等激活函数的时候(即f(x)=x),就不满足这个性质了,而且如果MLP使用的是恒等激活函数,那么其实整个网络跟单层神经网络是等价的。
  • 可微性: 当优化方法是基于梯度的时候这个性质是必须的
  • 单调性: 当激活函数是单调的时候,单层网络能够保证是凸函数
  • f(x)≈x: 当激活函数满足这个性质的时候,如果参数的初始化是random的很小的值,那么神经网络的训练将会很高效;如果不满足这个性质,那么就需要很用心的去设置初始值。
  • 输出值的范围: 当激活函数输出值是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是无限的时候,模型的训练会更加高效,不过在这种情况下,一般需要更小的learning rate.

softmax函数

分类问题中使用的softmax函数可以用下式表示:
y k = e a k ∑ i = 1 n e a i y_k = \frac{ \text e ^{a_k}}{ \sum_{i=1}^n \text e^{a_i}} yk=i=1neaieak

softmax函数在计算机的运算上有一定的缺陷。这个缺陷就是溢出问题。softmax函数的实现中要进行指数函数的运算,但是此时指数函数的值很容易变得非常大。比如, e 10 \text e^{10} e10的值会超过20000, e 100 \text e^{100} e100会变成一个后面有40多个0的超大值, e 1000 \text e^{1000} e1000的结果会返回一个表示无穷大的inf。如果在这些超大值之间进行除法运算,结果会出现“不确定”的情况。

计算机处理“数”时,数值必须在 4字节或 8字节的有限数据宽度内。这意味着数存在有效位数,也就是说,可以表示的数值范围是有限的。因此,会出现超大值无法表示的问题。这个问题称为溢出,在进行计算机的运算时必须(常常)注意。

阶跃函数(Step Function)

import numpy as np
import matplotlib.pyplot as pltdef step_function(x: np.ndarray) -> np.ndarray[int]:return np.array(x > 0, dtype=np.int_)if __name__ == "__main__":x = np.arange(-5, 5, 0.1)y = step_function(x)plt.ylim(-0.1, 1.1) # 指定y轴范围plt.plot(x, y, color = 'b', linewidth=1.5)plt.show()

Sigmoid函数

神经网络中经常使用的一个激活函数就是sigmoid函数:
h ( x ) = 1 1 + e − x h(x) = \frac{1}{1+\text e^{-x}} h(x)=1+ex1
sigmoid函数的导数可以用其自身表示:
h ′ ( x ) = h ( x ) ( 1 − h ( x ) ) h\prime (x) = h(x) (1-h(x)) h(x)=h(x)(1h(x))
两种坐标尺度下的Sigmoid函数图如下,上图的横坐标为-5到5,这时的曲线变化较为平滑;下图横坐标的尺度足够大,可以看到,在x = 0点处Sigmoid函数看起来很像阶跃函数:

Sigmoid的缺点:

  • sigmoid有一个缺点,当输入非常大或者非常小的时候(saturation饱和),这些神经元的梯度是接近于0的。所以,需要尤其注意参数的初始值来尽量避免saturation的情况。如果初始值很大的话,大部分神经元可能都会处在saturation的状态而把gradient kill掉,这会导致网络变的很难学习。
  • Sigmoid 的 output 不是0均值,这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。产生的一个结果就是:如果数据进入神经元的时候是正的(e.g. x>0 f=wTx+b),那么 w 计算出的梯度也会始终都是正的

2.4 修正线性单元,ReLU函数(Rectified Linear Unit Function)

ReLU函数在输入大于0时,直接输出该值;在输入小于等于0时,输
出0:
h ( x ) = { x x > 0 0 x ≤ 0 h(x) = \begin{cases} x & x > 0 \\ 0 &x \leq 0\end{cases} h(x)={x0x>0x0
ReLU函数的实现非常简单:

import numpy as np
import matplotlib.pyplot as pltdef relu(x):return np.maximum(0, x)if __name__ == "__main__":x = np.arange(-5, 5, .1)y = relu(x)plt.plot(x, y, color='b', linewidth=1.5)plt.show()

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • API代理是什么?解读其原理与作用
  • 累加求和-C语言
  • [大语言模型-论文精读] Diffusion Model技术-通过时间和空间组合扩散模型生成复杂的3D人物动作
  • 大模型prompt先关
  • 【网络安全】密码学的新进展
  • 大模型之基准测试集(Benchmark)-给通义千问2.0做测评的10个权威测基准测评集
  • windows使用JEnv实现一键临时或全局切换java版本
  • WebGL动画与交互
  • Maya学习笔记:物体的层级关系
  • 若依生成主子表
  • Vue3:v-model实现组件通信
  • numpy.rollcirculant
  • SuperMap GIS基础产品FAQ集锦(20240923)
  • Python 字符串的常见方法
  • 【吊打面试官系列-MySQL面试题】MySQL 支持事务吗?
  • [ 一起学React系列 -- 8 ] React中的文件上传
  • ComponentOne 2017 V2版本正式发布
  • crontab执行失败的多种原因
  • docker-consul
  • Java比较器对数组,集合排序
  • JS基础之数据类型、对象、原型、原型链、继承
  • LeetCode算法系列_0891_子序列宽度之和
  • python3 使用 asyncio 代替线程
  • sublime配置文件
  • Swoft 源码剖析 - 代码自动更新机制
  • 阿里云容器服务区块链解决方案全新升级 支持Hyperledger Fabric v1.1
  • 配置 PM2 实现代码自动发布
  • 三分钟教你同步 Visual Studio Code 设置
  • 微服务入门【系列视频课程】
  • 用简单代码看卷积组块发展
  • 原生Ajax
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 7行Python代码的人脸识别
  • JavaScript 新语法详解:Class 的私有属性与私有方法 ...
  • # 飞书APP集成平台-数字化落地
  • #每日一题合集#牛客JZ23-JZ33
  • #数据结构 笔记三
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (java)关于Thread的挂起和恢复
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (汇总)os模块以及shutil模块对文件的操作
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (原创)boost.property_tree解析xml的帮助类以及中文解析问题的解决
  • .NET Micro Framework 4.2 beta 源码探析
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • .net通过类组装数据转换为json并且传递给对方接口
  • .net图片验证码生成、点击刷新及验证输入是否正确
  • .NET中使用Protobuffer 实现序列化和反序列化
  • .stream().map与.stream().flatMap的使用
  • /bin/bash^M: bad interpreter: No such file or directory
  • ??Nginx实现会话保持_Nginx会话保持与Redis的结合_Nginx实现四层负载均衡