内蒙古兴安盟建设局网站,昆明网络哪家好,工程建设教育网首页,外贸 wordpress英文版写在前面
上篇文章我们了解到感知机使用的阶跃函数和符号函数#xff0c;它们都是非连续#xff0c;导数为0的函数#xff1a; 建议回顾上篇文章#xff0c;本篇文章将介绍神经网络中的常见激活函数#xff0c;这些函数都是平滑可导的#xff0c;适合于梯度下降算法。 写…写在前面
上篇文章我们了解到感知机使用的阶跃函数和符号函数它们都是非连续导数为0的函数 建议回顾上篇文章本篇文章将介绍神经网络中的常见激活函数这些函数都是平滑可导的适合于梯度下降算法。 写在中间
激活函数是做什么的 激活函数Activation Function是神经网络中的一个重要组成部分主要用于将神经元的输入信息进行非线性变换从而引入非线性特性。
为什么要使用激活函数 如果不用激活函数每一层输出都是上层输入的线性函数无论神经网络有多少层输出都是线性组合这种情况就是最原始的感知机。将来归纳出的方程就如图a所示要实现图b的效果就只能将线性模型嵌套非线性函数转换为非线性函数。 我们把这个非线性函数称为激活函数(Activation Function)用表示 o σ ( W x b ) o\sigma{(Wx b)} oσ(Wxb) 这里的代表了某个具体的非线性激活函数如 Sigmoid 函数、ReLU 函数 表达能力 模型的表达能力偏弱就可以通过堆叠多次变换来增加其表达能力
把第一层神经元的输出值 h 1 h_1 h1作为第二层神经元模型的输入把第二层神经元的输出 h 2 h_2 h2作为第三层神经元的输入最后一层神经元的输出作为模型的输出使用ReLU激活函数举例 h 1 R e L U ( W x 1 b 1 ) h_1ReLU(Wx_1 b_1) h1ReLU(Wx1b1) h 2 R e L U ( W 2 h 1 b 2 ) h_2 ReLU(W_2h_1 b_2) h2ReLU(W2h1b2) o W 3 h 2 b 3 o W_3h_2 b_3 oW3h2b3 激活函数介绍
一、Sigmoid 1 简单介绍
此函数的定义如下 S i g m o i d ( x ) ≜ 1 1 e − x \mathrm{Sigmoid}(x)\triangleq\frac1{1\mathrm{e}^{-x}} Sigmoid(x)≜1e−x1 在深度学习中的优点如下 它的值域为(0, 1)能够把 ∈ 的输入“压缩”到 ∈ (0,1)区间和概率的分布范围[0,1]契合可以通过 Sigmoid 函数将输出转译为概率输出 Sigmoid 函数连续可导可以直接利用梯度下降算法优化网络参数 2 简单实现
如何在TensorFlow中使用这个函数呢,其实一行代码就可以搞定了
tf.nn.sigmoid(x) # 通过 Sigmoid 函数二、ReLU 1 简单介绍
在 ReLU激活函数提出之前Sigmoid 函数通常是神经网络的激活函数首选。但是 Sigmoid 函数在输入值较大或较小时容易出现梯度值接近于 0 的现象网络参数长时间得不到更新导致训练不收敛或停滞不动的现象发生。
此函数的定义如下 ReLU ( x ) ≜ max ( 0 , x ) \operatorname{ReLU}(x)\triangleq\max(0,x) ReLU(x)≜max(0,x) 可以看到ReLU 对小于 0 的值全部抑制为 0对于正数则直接输出 2 函数实现
函数的调用同样简单
tf.nn.relu(x)三、LeakyReLU 1 简单介绍
ReLU 函数在 0时导数值恒为 0也可能会造成梯度弥散现象为了克服这个问题LeakyReLU 函数被提出此函数的定义为 LeakyReLU ≜ { x x ≥ 0 p x x 0 \text{LeakyReLU}\triangleq\left\{\begin{matrix}xx\geq0\\pxx0\end{matrix}\right. LeakyReLU≜{xpxx≥0x0 其中为用户自行设置的某较小数值的超参数如 0.02 等。当 0时LeayReLU 函数退化为ReLU 函数当 ≠ 0时 0处能够获得较小的导数值从而避免出现梯度弥散现象。 2 函数实现
tf.nn.leaky_relu(x, alpha0.02) 四、Tanh 1 简单介绍
Tanh 函数能够将 ∈ 的输入“压缩”到(−1,1)区间其函数的定义为 tanh ( x ) ( e x − e − x ) ( e x e − x ) 2 ⋅ s i g m o i d ( 2 x ) − 1 \begin{aligned}\tanh(x)\frac{(\mathrm{e}^x-\mathrm{e}^{-x})}{(\mathrm{e}^x\mathrm{e}^{-x})}2\cdot\mathrm{sigmoid}(2x)-1\end{aligned} tanh(x)(exe−x)(ex−e−x)2⋅sigmoid(2x)−1 2 代码实现
tf.nn.tanh(x) 激活函数输出范围
了解了上面的函数之后不知你是否有这样的疑问这么多种函数在进行网络构建的时候究竟如何选择
其实这其中还是有些门道的主要根据数据的范围和构建网络的目的来选择具体情况还要结合实际问题试验
例如 输出区间为[0, 1]在网络模型主要进行二分类猫狗识别分类、图片生成像素归一化就可以使用类似Sigmoid()一类的函数。 输出区间为[0, 1]且所有数据的概率和为1网络模型主要进行多分类问题(mnist手写数字识别)就可以使用类似Softmax()一类的函数。 输出区间为[-1, 1]就可以使用Tanh() 函数。 输出区间在某个段内网络模型进行年龄预测、股票走势的预测更倾向于回归问题,ReLU函数可能效果较好。 写在最后 点赞你的认可是我创作的动力 ⭐收藏你的青睐是我努力的方向 ✏️评论你的意见是我进步的财富