pytorch神经网络学习笔记(1)

    技术2022-07-10  92

    四种激励函数

    relu

    又称修正线性单元,是一种分段线性函数,弥补了sigmoid函数以及tanh函数的梯度消失问题。relu函数的公式及图形,导数公式如下图 特点: 1、在输入为正数的时候(对于大多数输入 zz 空间来说),不存在梯度消失问题。 2、计算速度要快很多。relu函数只有线性关系,不管是前向传播还是反向传播,都比sigmoid和tanh要快很多。(sigmoid和tanh要计算指数,计算速度会比较慢) 3、当输入为负时,梯度为0,会产生梯度消失问题 relu目前仍是最常用的激活函数,在搭建人工神经网络的时候推荐优先尝试!

    sigmoid

    单极性,sigmoid 是常用的非线性的激活函数,该函数是将取值为 (−∞,+∞)(−∞,+∞) 的数映射到 (0,1)之间,它的数学形式和图像如下: sigmod激励函数符合实际,当输入很小时,输出接近于0;当输入很大时,输出值接近1,但是sigmoid函数作为非线性激活函数,但是其并不被经常使用,它具有以下几个缺点: 1、当 zz 值非常大或者非常小时,通过右上图我们可以看到,sigmoid函数的导数 g′(z)g′(z) 将接近 0 。这会导致权重 WW 的梯度将接近 0 ,使得梯度更新十分缓慢,即梯度消失。 2、非零中心化,也就是当输入为0时,输出不为0,,因为每一层的输出都要作为下一层的输入,而未0中心化会直接影响梯度下降 。 3、计算量比较大。 sigmoid函数可用在网络最后一层,作为输出层进行二分类,尽量不要使用在隐藏层。

    tanh

    双极性,该函数是将取值为 (−∞,+∞)(−∞,+∞) 的数映射到 (−1,1)(−1,1) 之间,其数学形式与图形为: 特点: 1、tanh函数在 0 附近很短一段区域内可看做线性的。由于tanh函数均值为 0 ,因此弥补了sigmoid函数均值为 0.5 的缺点。 2、当z为非常大或者非常小的时候,由导数推断公式可知,此时导数接近与0,会导致梯度很小,权重更新非常缓慢,即梯度消失问题。 3、幂运算问题仍然存在,计算量比较大。

    softplus

    和relu一样为近似生物神经激活函数,函数数学形式和图像如下:(log里面加1是为了避免非0出现) 特点: 1、softplus可以看作是ReLu的平滑。

    构建网络时怎样选择激励函数

    1、在少量层结构中, 我们可以尝试很多种不同的激励函数. 在卷积神经网络 的卷积层中, 推荐的激励函数是 relu. 在循环神经网络中, 推荐的是 tanh 或者是 relu 。 2、如果使用 relu,那么一定要小心设置 learning rate,而且要注意不要让网络出现很多 “dead” 神经元,如果这个问题不好解决,那么可以试试 Leaky relu、Prelu 或者 Maxout. 3、relu->Lecky relu/Elu>tanh>sigmoid

    python代码关于画图部分

    import torch import torch.nn.functional as F# 激励函数都在这 from torch.autograd import Variable import matplotlib.pyplot as plt # 做一些假数据来观看图像 x = torch.linspace(-5, 5, 200) # x data (tensor), shape=(100, 1) x = Variable(x) x_np=x.data.numpy() print(x_np) y_relu=F.relu(x).data.numpy() y_sigmoid=F.sigmoid(x).data.numpy() y_tanh=F.tanh(x).data.numpy() y_softplus=F.softplus(x).data.numpy() plt.figure(1,figsize=(8,6)) plt.subplot(221) plt.plot(x_np,y_relu,c='red',label='relu') plt.ylim((-1,5)) plt.legend(loc='best') plt.subplot(222) plt.plot(x_np,y_sigmoid,c='red',label='sigmoid') plt.ylim((-0.2,1.2)) plt.legend(loc='best') plt.subplot(223) plt.plot(x_np,y_tanh,c='red',label='tanh') plt.ylim((-1.2,1.2)) plt.legend(loc='best') plt.subplot(224) plt.plot(x_np,y_softplus,c='red',label='softplus') plt.ylim((-0.2,6)) plt.legend(loc='best') plt.show()

    执行结果图: 参考文献: 1、https://www.cnblogs.com/carrollCN/p/11370960.html 2、https://morvanzhou.github.io/tutorials/machine-learning/torch/2-03-activation/

    Processed: 0.014, SQL: 9