激活函数(Activation Functions)
神经网络结构的输出为所有输入的加权和,这导致整个神经网络是一个线性模型。如果将每一个神经元的输出通过一个非线性函数,那么整个神经网络的模型也就不再是线性的了,使得神经网络可以更好地解决较为复杂的问题。这个非线性函数也就是激活函数。
目前TensorFlow提供了7种不同的非线性激活函数,tf.nn.relu、tf.sigmoid、tf.tanh
是其中比较常用的几个。当然,TensorFlow也支持使用自己定义的激活函数。
激活函数有以下几种形式:
平滑非线性函数(Smooth nonlinearities):
sigmoid
sigmoid 非线性函数将输入映射到 (0,1) 之间。
数学关系为:f(x)=1/(1+e^−x)
sigmoid优点:
Sigmoid函数的输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层。
求导容易。
sigmoid函数曾被广泛地应用,但由于其自身的一些缺陷,现在很少被使用了。
sigmoid缺点:函数饱和使梯度消失
sigmoid 在值为 0 或 1 的时候接近饱和,这些区域,梯度几乎为 0。因此在反向传播时,这个局部梯度会与整个损失函数关于该单元输出的梯度相乘,结果也会接近为 0 。因此这时梯度就对模型的更新没有任何贡献。
除此之外,为了防止饱和,必须对于权重矩阵的初始化特别留意。比如,如果初始化权重过大,那么大多数神经元将会饱和,导致网络就几乎不学习。sigmoid 函数关于原点中心不对称
这个特性会导致后面网络层的输入也不是零中心的,进而影响梯度下降的运作。因为如果输入都是正数的话(如y=wx+b中每个元素都 x>0),那么关于w的梯度在反向传播过程中,要么全是正数,要么全是负数(具体依据整个表达式y而定),这将会导致梯度下降权重更新时出现z字型的下降。
如果是按 batch 训练,那么每个 batch 可能得到不同的信号,整个批量的梯度加起来后可以缓解这个问题。
资料:http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf
tanh
数学关系为:f(x)=tanh(x)
tanh函数与sigmoid一样也存在饱和问题,但它的输出是零中心的,因此实际应用中tanh比sigmoid 更受欢迎。tanh函数实际上是一个放大的sigmoid函数。
tanh优点:
比Sigmoid函数收敛速度更快。
相比Sigmoid函数,其输出以0为中心。
tanh缺点:
- 还是没有改变Sigmoid函数的最大问题–由于饱和性产生的梯度消失。
资料:http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf
softplus
数学关系为:
资料http://papers.nips.cc/paper/1920-incorporating-second-order-functional-knowledge-for-better-option-pricing.pdf
softsign
数学关系为:
ELU
数学关系为:
资料:https://arxiv.org/pdf/1511.07289v5.pdf
连续但并不是处处可微(Continuous but not everywhere differentiable):
ReLU
数学关系为:f(x)=max(0,x)
ReLU的优点:
相较于sigmoid和tanh函数,ReLU 对于 SGD 的收敛有巨大的加速作用(Alex Krizhevsky 指出有 6 倍之多)。有人认为这是由它的线性、非饱和的公式导致的。
相比于 sigmoid和tanh,ReLU 只需要一个阈值就可以得到激活值,而不用去算一大堆复杂的(指数)运算。
有效缓解了梯度消失的问题。
在没有无监督预训练的时候也能有较好的表现。
提供了神经网络的稀疏表达能力。
ReLU的缺点:
它在训练时比较脆弱并且可能“死掉”。
举例来说:一个非常大的梯度经过一个ReLU神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了。如果这种情况发生,那么从此所有流过这个神经元的梯度将都变成 0。也就是说,这个ReLU单元在训练中将不可逆转的死亡,导致了数据多样化的丢失。实际中,如果学习率设置得太高,可能会发现网络中 40% 的神经元都会死掉(在整个训练集中这些神经元都不会被激活)。
合理设置学习率,会降低这种情况的发生概率。
ReLU6
数学关系为:
资料:https://www.tensorflow.org/api_docs/python/tf/nn/relu6
SReLU
数学关系为:
资料:
Leaky ReLU
数学关系为:
Leaky ReLU是为解决“ ReLU 死亡”问题的尝试。ReLU中当x<0时,函数值为0。而 Leaky ReLU则是给出一个很小的负数梯度值,比如0.01。
资料:http://web.stanford.edu/~awni/papers/relu_hybrid_icml2013_final.pdf
PReLU
数学关系为:
PReLU是LReLU的改进,可以自适应地从数据中学习参数。PReLU具有收敛速度快、错误率低的特点。PReLU可以用于反向传播的训练,可以与其他层同时优化。
Kaiming He 等人在 2015 年发布的论文《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》中,对比了PReLU和ReLU在ImageNet model A的训练效果,把负区间上的斜率当做每个神经元中的一个参数来训练。然而该激活函数在在不同任务中表现的效果也没有特别清晰。资料:https://arxiv.org/pdf/1502.01852.pdf
RReLU
数学关系为:
资料:http://blog.csdn.net/yhl_leo/article/details/56488640
CReLU
数学关系为:
资料:https://arxiv.org/pdf/1603.05201v2.pdf
离散的(Discrete):
NReLU
数学关系为:
资料:https://www.cs.toronto.edu/~hinton/absps/reluICML.pdf
Noisy Activation Functions
资料:https://arxiv.org/pdf/1603.00391v3.pdf
References:
- http://cs224d.stanford.edu/lecture_notes/LectureNotes3.pdf
- https://www.tensorflow.org/api_guides/python/nn
- http://www.cnblogs.com/rgvb178/p/6055213.html
- http://blog.csdn.net/yhl_leo/article/details/56488640
- https://livc.io/176
激活函数(Activation Functions)相关推荐
- Pytorch专题实战——激活函数(Activation Functions)
文章目录 1.激活函数的两种用法 1.1.softmax激活函数 1.2.sigmoid激活函数 1.3.tanh激活函数 1.4.relu激活函数 1.5.leaky_relu激活函数 2.用激活函 ...
- 1. 激活函数(Activation functions)
1.1 激活函数(Activation functions) 选择激活函数的经验法则 如果输出是0.1值(二分类问题),则输出层选择sigmoid函数,然后其它的所有单元都选择Relu函数. 这是很多 ...
- #Paper Reading# Implicit Neural Representations with Periodic Activation Functions
论文题目: Implicit Neural Representations with Periodic Activation Functions 论文地址: https://arxiv.org/abs ...
- 隐式神经表示一:神经网络拟合图像Implicit Neural Representations with Periodic Activation Functions
文章目录 1. Implicit Neural Representations with Periodic Activation Functions 0. 什么是隐式神经表示 1. 了解SineLay ...
- 激活函数 activation function
文章目录 激活函数 activation function Sigmoid Sigmoid 反向传播 Tanh ReLU Dead ReLU Problem 产生的原因 激活函数 activation ...
- DeepLearning: 归纳几种常用的激活函数(activation)
Deep Learning中常用的激活函数(activation) 1. sigmoid 表达式: a=sigmoid(z)=11+e−za = sigmoid(z) = \frac {1} {1 + ...
- Pytorch——激活函数(Activation Function)
文章目录 1.非线性方程 2.激活函数 3.常用选择 4.代码 1.非线性方程 我们为什么要使用激励函数? 用简单的语句来概括. 就是因为, 现实并没有我们想象的那么美好, 它是残酷多变的. 哈哈, ...
- 激活函数activation总结
激活函数在深度学习中扮演着非常重要的角色,它给网络赋予了非线性,从而使得神经网络能够拟合任意复杂的函数. 非线性激活函数可以使神经网络随意逼近复杂函数.没有激活函数带来的非线性,多层神经网络和单层无异 ...
- python license activation_激活函数activation
TensorFlow的中阶API主要包括: 数据管道(tf.data) 特征列(tf.feature_column) 激活函数(tf.nn) 模型层(tf.keras.layers) 损失函数(tf. ...
最新文章
- Centos7 Kubernetes1.8+docker容器集群
- win32 数据类型 vs c#
- GD32如何替换STM32?
- 计算机网络OSI模型、TCP/IP模型与5G协议
- c#+web与php,将Web服务客户端从c#转换为php
- 腾讯AI让二子,柯洁还是输了
- AcWing 5. 多重背包问题 II(二进制优化)
- poj 动态规划总结
- python开发人工智能要不要很高数学_CFA、FRM持证人的“秘密武器”—Python,连潘石屹都在学,你确定不要了解一下吗?...
- 主机动手系列 — 不同CPU,不同命令,怎么管理HP-UX服务器
- 【SpringBoot_ANNOTATIONS】自动装配 01 @Autowired @Qualifier @Primary
- 爱情指数测试脸型软件,心理测试:你和谁的脸型最像?测出你的幸运指数是多少!...
- Skyline软件二次开发初级——2如何在WEB页面中控制三维地图的观察点坐标和角度...
- 10068---谈谈Runtime类中的freeMemory,totalMemory,maxMemory几个方法
- 十二生肖的相合、相冲、相刑、相害
- 人力资源管理专业知识与实务(中级)
- LZW算法原理及实现
- C# 按Esc键关闭窗体
- 全国计算机三级网络技术电子版,全国计算机三级网络技术最新版笔试电子教材(完全免费版).doc...
- 我爱你,没有什么目的:情感日志
热门文章
- 浅谈广告系统预算控制(SMART PACING)与核心代码实现
- NFT 项目 Loot 生态发展如何?
- linux kernel 4.4.1 uaf提权漏洞,条件竞争在Kernel提权中的应用
- 强烈推荐C#打开文件夹openfolder自定义类(不是browser也不是openfile哦~)自带的实在不好用
- DevExpress VCL v17.2.7全新发布|附下载
- Q_D指针和Q_Q指针
- MAC 下载基础命令
- Dubbo服务注册与发现的流程?
- 透过数据看国产CPU性能排行
- Java类、变量、集合、数据结构基础知识