• 神经网络与深度学习-8- 前馈神经网络1 -PyTorch


    参考

         《神经网络与深度学习》


    目录:

    1.          神经元
    2.          sigmoid 函数
    3.         Relu 函数
    4.         Swish 函数
    5.         GELU 函数
    6.        Maxout 函数

    一  神经元

       把下面一个模型称为一个神经元

       

      z=w^Tx

      a=f(a)

     其中 f 为激活函数

    其具有以下性质

      1: 连续可导

      2: 激活函数以及其导数要竟可能简单

      3: 激活函数的导数要在一个合适的范围内,不能太大或者太小,影响训练的效率和稳定性


    Sigmoid 型函数

         指的的是一类S型函数,为两端饱和函数,常用的有Logistic 和 Tanh 函数

        备注:

        对于函数f(x),   

        当 x\rightarrow -\infty,其f^{'}(x)\rightarrow 0,称为左饱和

         当x \rightarrow +\infty,其f^{'}(x) \rightarrow 0,称为右饱和

         同时满足左右饱和时,称为两端饱和

        2.1 sigmoid 激活函数

          a=\frac{1}{1+e^{-z}} \in (0,1]

         

          因为 a 范围是0-1,其导数为

          a(1-a) \in [0,\frac{1}{4}] 

     2.2 Tanh 激活函数

          a=\frac{e^{z}-e^{-z}}{e^{z}+e^{-z}} \in [-1,1]

         其导数为

         1-a^2 \in [0,1]

       

    1. # -*- coding: utf-8 -*-
    2. """
    3. Created on Tue Aug 30 17:28:03 2022
    4. @author: chengxf2
    5. """
    6. # -*- coding: utf-8 -*-
    7. """
    8. Created on Wed Aug 24 21:09:15 2022
    9. @author: cxf
    10. """
    11. import numpy as np
    12. import matplotlib.pyplot as plt
    13. import torch
    14. class active():
    15. TANH = 1
    16. SIGMOD =2
    17. RELU = 3
    18. SOFTPLUS = 4
    19. SWISH = 5
    20. GELU = 6
    21. MAXOUT = 7
    22. SOFTMAX = 8
    23. '''
    24. 激活函数
    25. args
    26. z: 激活单元输入
    27. return
    28. a : 神经元输出
    29. '''
    30. def f(z, act):
    31. if act is active.TANH:
    32. a = torch.tanh(z)
    33. tip ="tanh"
    34. elif act is active.SIGMOD:
    35. a = torch.sigmoid(z)
    36. tip = "Sigmoid"
    37. elif act is active.RELU:
    38. a = torch.relu(z)
    39. tip ="Relu"
    40. elif act is active.SOFTMAX:
    41. a = 1+torch.exp(z)
    42. a = torch.log(a)
    43. tip = "SoftPlus"
    44. elif act is active.SWISH:
    45. beta = 0.5
    46. a = z*torch.sigmoid(beta*z)
    47. tip ="Swish"
    48. elif act is active.GELU:
    49. tip ="GELU"
    50. m = np.sqrt(2/np.pi)*(z+0.044715*np.power(z,3))
    51. a = 0.5*z*(1.0+torch.tanh(m))
    52. tip ="GELU"
    53. return a ,tip
    54. '''
    55. 绘画
    56. args
    57. act: 激活函数类型
    58. '''
    59. def Draw(act):
    60. z = np.linspace(-10,10,100)
    61. zTensor = torch.FloatTensor(z)
    62. a,tip = f(zTensor,act)
    63. #print(b)
    64. plt.plot(z, a.numpy(), color='g',marker=".",linestyle="-")
    65. plt.title(tip)
    66. plt.xlabel("z")
    67. plt.ylabel("a")
    68. plt.grid()
    69. plt.show()
    70. Draw(active.GELU)


    二  Hard-Logistic 函数和  Hard-Tanh 函数

           Logistic 函数 和 Hard-Tanh 都是非线性函数,在SISO算法里面有讲过

    其计算时间是线性函数的50倍左右。

        这边给出来其算法简化的方向

        2.1 Logistic 函数 hard-Decision

        g(x)=\sigma(0)+x\sigma^{'}(0)

                  =0.25x+0.5

                     hard-logistic(x)=\left\{\begin{matrix} 1, g_(x)\geq 1\\ g(x), 0<g(x)<1 \\ 0, g(x) \leq 1 \end{matrix}\right.

                     = max(min(g(x),1),0)

                   

       2.2 tanh 函数 hard-Decision

                        g(x)=tanh(0)+xtanh^{'}(0)

                                 =x

                         hard-tanh(x)=max(min(g(x),1),-1)

     2.3 ReLu (Rectfoed Linear Unit   修正线性单元)

            ReLU(x)=\left\{\begin{matrix} x,x \geq 0\\ 0 ,x<0 \end{matrix}\right.

                               =max(0,x)

    优点

            为左饱和函数,x>0导数为1 ,一定程度上缓解了梯度消失问题 

    缺点:

         输出是非零中心化的,相当于给后面一层引入了偏置偏移,会影响梯度下降的效率

    ReLu 在训练时候容易死亡

       

      带泄露的ReLu 

        LeakyReLU(x)=\left\{\begin{matrix} x,x \geq 0\\ rx ,x<0 \end{matrix}\right.

                 =max(0,x)+rmin(0,x)

       r 是特别小的常数,比如0.01 ,也可以写作

       =max(x,rx)

       当神经元非激活的时候,能有一个非零的梯度可以更新参数,避免了不能被激活。

      带参数的ReLu

       对第i个神经元

      PReLU_i(x)=\left\{\begin{matrix} x,x \geq 0\\ r_ix ,x<0 \end{matrix}\right.

               =max(x,r_ix)

       2.4 ELU 函数(Exponential Linear Unit)

          ELU(x)=\left\{\begin{matrix} x, if x>0\\ \gamma (exp(x)-1),if x \leq 0 \end{matrix}\right.

                             =max(0,x)+min(0,r(exp(x)-1))

      2.5 softPlus 函数

         softplus(x)=log(1+exp(x))

    2.6 Swish 函数

          Swish 是一种自门控(self-Gated)激活函数

          swish(x)=x \sigma(\beta x)

          \sigma: 为Logistic 函数

         \beta 为可学习的参数或一个固定超参数

     

    2.7 GELU 函数(Gaussian Error Linear Unit 高斯误差线性单元)

         通过门控制来调整其输出值的激活函数,和Swish 函数相似

         GELU(x)=xP(X \leq x)

         P(X \leq x) \sim N(u,\sigma^2) 的累积分布函数,其中u,\sigma^2为超参数

       

    2.8 Maxout 单元

        也是一种线性分段函数,输入是上一个层神经元的原始输出

      是一个向量 

         maxout(x)=max_{k \in[1,K]}(z_k)

         

  • 相关阅读:
    双周投融报:资本埋伏Web3基础设施
    ARM IIC总线实现温湿传感器
    spring mvc 上传文件出错,Required request part ‘file‘ is not present
    Deno 命令行界面
    【sklearn】数据预处理之独热编码(含两种实现方式+代码理解)
    MySQL性能分析工具的使用
    商品API数据在电商中的应用与实现
    【保姆式通关宝典】使用Kraft快速搭建Kafka集群(含服务鉴权)
    MongoDB简介
    协程 + epoll 的两个小例子
  • 原文地址:https://blog.csdn.net/chengxf2/article/details/126508898