程序员必知:常见的激活函数

简介: 程序员必知:常见的激活函数

1. 什么是激活函数

??在神经网络中,我们经常可以看到对于某一个隐藏层的节点,该节点的激活值计算一般分为两步:

??(1)输入该节点的值为 x1,x2x1,x2 时,在进入这个隐藏节点后,会先进行一个线性变换,计算出值 z【1】=w1x1+w2x2+b【1】=W【1】x+b【1】z【1】=w1x1+w2x2+b【1】=W【1】x+b【1】 ,上标 11 表示第 11 层隐藏层。

??(2)再进行一个非线性变换,也就是经过非线性激活函数,计算出该节点的输出值(激活值) a(1)=g(z(1))a(1)=g(z(1)) ,其中 g(z)g(z) 为非线性函数。

2. 常用的激活函数

??在深度学习中,常用的激活函数主要有:sigmoid函数,tanh函数,ReLU函数。下面我们将一一介绍。

2.1 sigmoid函数

??在逻辑回归中我们介绍过sigmoid函数,该函数是将取值为 (?∞,+∞)(?∞,+∞) 的数映射到 (0,1)(0,1) 之间。sigmoid函数的公式以及图形如下:

g(z)=11+e?zg(z)=11+e?z

??对于sigmoid函数的求导推导为:

??sigmoid函数作为非线性激活函数,但是其并不被经常使用,它具有以下几个缺点:

???(1)当 zz 值非常大或者非常小时,通过上图我们可以看到,sigmoid函数的导数 g′(z)g′(z) 将接近 00 。这会导致权重 WW 的梯度将接近 00 ,使得梯度更新十分缓慢,即梯度消失。下面我们举例来说明一下,假设我们使用如下一个只有一层隐藏层的简单网络:

???对于隐藏层第一个节点进行计算,假设该点实际值为 aa ,激活值为 a【1】a【1】 。于是在这个节点处的代价函数为(以一个样本为例): $$ J^{【1】}(W) = \frac{1}//代码效果参考:http://www.ezhiqi.com/bx/art_4885.html{2} (a{【1】}-a)2 $$

???而激活值 a【1】a【1】 的计算过程为:

z【1】=w11x1+w12x2+b【1】z【1】=w11x1+w12x2+b【1】

a【1】=g(z【1】)a【1】=g(z【1】)

???于是对权重 w11w11 求梯度为:

ΔJ【1】(W)Δw11=(a【1】?a)?(a【1】)′=(a【1】?a)?g′(z【1】)?x1ΔJ【1】(W)Δw11=(a【1】?a)?(a【1】)′=(a【1】?a)?g′(z【1】)?x1

???由于 $ g'(z^{【1】}) =g(z{【1】})(1-g(z{【1】})) ,当,当 z^{【1】}//代码效果参考:http://www.ezhiqi.com/bx/art_1673.html $ 非常大时,g(z【1】)≈1,1?g(z【1】)≈0g(z【1】)≈1,1?g(z【1】)≈0 因此, g′(z【1】)≈0,ΔJ【1】(W)Δw11≈0g′(z【1】)≈0,ΔJ【1】(W)Δw11≈0。当 z【1】z【1】 非常小时,g(

相关文章
|
8月前
|
机器学习/深度学习 测试技术 Python
【激活函数】基础回顾:带你认识神经网络中常见的激活函数
【激活函数】基础回顾:带你认识神经网络中常见的激活函数
859 0
【激活函数】基础回顾:带你认识神经网络中常见的激活函数
|
8月前
|
机器学习/深度学习 PyTorch 算法框架/工具
PyTorch基础之激活函数模块中Sigmoid、Tanh、ReLU、LeakyReLU函数讲解(附源码)
PyTorch基础之激活函数模块中Sigmoid、Tanh、ReLU、LeakyReLU函数讲解(附源码)
360 0
|
机器学习/深度学习
【从零开始学习深度学习】9.多层感知机MLP及常用激活函数介绍
【从零开始学习深度学习】9.多层感知机MLP及常用激活函数介绍
【从零开始学习深度学习】9.多层感知机MLP及常用激活函数介绍
|
19天前
|
机器学习/深度学习 自然语言处理 算法
《C 语言神经网络中激活函数计算的深度剖析》
在神经网络中,激活函数如同神经元的“激发阈值”与“转换开关”,引入非线性因素,使网络能够处理复杂问题。C 语言实现时需注意数值稳定性、计算效率和代码可维护性,通过优化技术提高性能,确保神经网络在图像识别、自然语言处理等领域发挥强大作用。
45 12
|
28天前
|
机器学习/深度学习 人工智能 自然语言处理
《C++神经网络编程:激活函数的策略性遴选》
在C++神经网络构建中,激活函数的选择至关重要,它影响着模型的学习效能和表现。Sigmoid、Tanh、ReLU及Leaky ReLU各有特点:Sigmoid适用于二元分类,Tanh改善了数据分布不均的问题,ReLU提高了计算效率并缓解了梯度消失,Leaky ReLU进一步解决了神经元“死亡”现象。选择合适的激活函数需综合考虑网络架构、数据特性及资源限制等因素。
|
2月前
|
机器学习/深度学习 人工智能 自然语言处理
《C++ 中 RNN 及其变体梯度问题的深度剖析与解决之道》
在AI发展浪潮中,RNN及其变体LSTM、GRU在处理序列数据上展现出巨大潜力。但在C++实现时,面临梯度消失和爆炸问题,影响模型学习长期依赖关系。本文探讨了这些问题的根源及解决方案,如梯度裁剪、合理初始化、选择合适激活函数、截断反向传播和优化网络结构等,旨在帮助开发者构建更有效的模型。
42 9
|
7月前
|
机器学习/深度学习
激活函数:神经网络的生命之花
激活函数:神经网络的生命之花
激活函数:神经网络的生命之花
|
机器学习/深度学习 资源调度
深度学习基础入门篇[四]:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
深度学习基础入门篇[四]:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
深度学习基础入门篇[四]:激活函数介绍:tanh、sigmoid、ReLU、PReLU、ELU、softplus、softmax、swish等
|
机器学习/深度学习 网络架构 索引
神经网络初学者的激活函数指南
如果你刚刚开始学习神经网络,激活函数的原理一开始可能很难理解。但是如果你想开发强大的神经网络,理解它们是很重要的。
101 0
|
机器学习/深度学习 Python
神经网络中的损失函数正则化和 Dropout 并手写代码实现
神经网络中的损失函数正则化和 Dropout 并手写代码实现
210 0
神经网络中的损失函数正则化和 Dropout 并手写代码实现