0


AI基础知识

目录


1.激活函数

1️⃣ 激活函数的作用

激活函数为神经网络引入

非线性

,如果没有激活函数,即使网络层数再多,也只能处理

线性可分

问题。

2️⃣ sigmoid函数

sigmoid函数将输入变换为

(0,1)

上的输出。它将范围(-inf,inf)中的任意输入压缩到区间(0,1)中,函数表示为:

      s 
     
    
      i 
     
    
      g 
     
    
      m 
     
    
      o 
     
    
      i 
     
    
      d 
     
    
      ( 
     
    
      x 
     
    
      ) 
     
    
      = 
     
     
     
       1 
      
      
      
        1 
       
      
        + 
       
       
       
         e 
        
        
        
          − 
         
        
          x 
         
        
       
      
     
    
   
     sigmoid(x)=\frac1{1+e^{-x}} 
    
   
 sigmoid(x)=1+e−x1​

在这里插入图片描述
其梯度可以表示为:

       d 
      
      
      
        d 
       
      
        x 
       
      
     
    
      s 
     
    
      i 
     
    
      g 
     
    
      m 
     
    
      o 
     
    
      i 
     
    
      d 
     
    
      ( 
     
    
      x 
     
    
      ) 
     
    
      = 
     
     
      
      
        e 
       
       
       
         − 
        
       
         x 
        
       
      
      
      
        ( 
       
      
        1 
       
      
        + 
       
       
       
         e 
        
        
        
          − 
         
        
          x 
         
        
       
       
       
         ) 
        
       
         2 
        
       
      
     
    
      = 
     
    
      s 
     
    
      i 
     
    
      g 
     
    
      m 
     
    
      o 
     
    
      i 
     
    
      d 
     
    
      ( 
     
    
      x 
     
    
      ) 
     
    
      [ 
     
    
      1 
     
    
      − 
     
    
      s 
     
    
      i 
     
    
      g 
     
    
      m 
     
    
      o 
     
    
      i 
     
    
      d 
     
    
      ( 
     
    
      x 
     
    
      ) 
     
    
      ] 
     
    
   
     \frac d{dx}sigmoid(x)=\frac{e^{-x}}{(1+e^{-x})^2}=sigmoid(x)[1-sigmoid(x)] 
    
   
 dxd​sigmoid(x)=(1+e−x)2e−x​=sigmoid(x)[1−sigmoid(x)]

在这里插入图片描述
可以发现,sigmoid函数的梯度在0到0.25之间。输入很大或很小时会趋于0,当网络变得越来越深时,会出现梯度消失问题。

优点:

  • 能够将自变量的值全部压缩到(0,1)之间
  • 连续可导

缺点:

  • 输入趋于无穷大或无穷小时会出现梯度消失问题
  • 存在幂运算,计算复杂度大

3️⃣ tanh函数

tanh函数将其输入压缩转换到区间

(-1,1)

上,公式如下:

      t 
     
    
      a 
     
    
      n 
     
    
      h 
     
    
      ( 
     
    
      x 
     
    
      ) 
     
    
      = 
     
     
      
      
        1 
       
      
        − 
       
       
       
         e 
        
        
        
          − 
         
        
          2 
         
        
          x 
         
        
       
      
      
      
        1 
       
      
        + 
       
       
       
         e 
        
        
        
          − 
         
        
          2 
         
        
          x 
         
        
       
      
     
    
   
     tanh(x)=\frac{1-e^{-2x}}{1+e^{-2x}} 
    
   
 tanh(x)=1+e−2x1−e−2x​

在这里插入图片描述
tanh函数的梯度是:

       d 
      
      
      
        d 
       
      
        x 
       
      
     
    
      t 
     
    
      a 
     
    
      n 
     
    
      h 
     
    
      ( 
     
    
      x 
     
    
      ) 
     
    
      = 
     
    
      1 
     
    
      − 
     
    
      t 
     
    
      a 
     
    
      n 
     
     
     
       h 
      
     
       2 
      
     
    
      ( 
     
    
      x 
     
    
      ) 
     
    
   
     \frac d{dx}tanh(x)=1-tanh^2(x) 
    
   
 dxd​tanh(x)=1−tanh2(x)

在这里插入图片描述

可以发现当输入接近0时,tanh函数的梯度接近最大值1。与sigmoid函数的梯度类似,输入在任一方向上远离0点,梯度越接近0,因此也存在梯度消失问题。

优点

  • 相比于Sigmoid,tanh在输入靠近0的区域,梯度为1,有助于收敛。但输入趋于无穷大或无穷小时会出现梯度消失问题

缺点

  • 和sigmoid函数一样,输入趋于无穷大或无穷小时会出现梯度消失问题
  • 同样存在幂运算,计算复杂度大

4️⃣ ReLu

线性整流单元(ReLU)提供了一种非常简单的非线性变换,被定义为:

      R 
     
    
      e 
     
    
      L 
     
    
      u 
     
    
      ( 
     
    
      x 
     
    
      ) 
     
    
      = 
     
    
      m 
     
    
      a 
     
    
      x 
     
    
      ( 
     
    
      x 
     
    
      , 
     
    
      0 
     
    
      ) 
     
    
   
     ReLu(x)=max(x,0) 
    
   
 ReLu(x)=max(x,0)

在这里插入图片描述
其梯度可以表示为:

       f 
      
      
       
      
        ′ 
       
      
     
    
      ( 
     
    
      x 
     
    
      ) 
     
    
      = 
     
     
     
       { 
      
      
       
        
         
          
          
            1 
           
          
            , 
           
           
          
            x 
           
          
            > 
           
          
            0 
           
          
         
        
       
       
        
         
          
          
            0 
           
          
            , 
           
           
          
            x 
           
          
            < 
           
          
            0 
           
          
         
        
        
         
          
         
        
       
      
     
    
   
     f^{^{\prime}}(x)=\begin{cases}1,\quad\text{x}>0\\0,\quad\text{x}<0&\end{cases} 
    
   
 f′(x)={1,x>00,x<0​​

在这里插入图片描述

当输入为正时,ReLU函数的梯度为1;当输入值等于0时,梯度可以当成1也可以当成0,实际应用中并不影响;输入小于0时,梯度直接为0,但在神经网络训练过程中,输入小于0的神经元占比很少。因此ReLu函数可以有效缓解梯度消失问题。

优点

  • 相较于sigmoid和tanh,relu在输入大于0时,梯度恒为1,不会出现梯度消失问题
  • 线性函数,收敛快

缺点:

  • dead relu问题:当输入小于0时,梯度为0,导致参数无法更新

5️⃣ Leaky ReLU

在小于0的部分引入一个斜率,使得小于0的取值不再是0(通常a的值为0.01左右):

      f 
     
    
      ( 
     
    
      x 
     
    
      ) 
     
    
      = 
     
     
     
       { 
      
      
       
        
         
          
          
            a 
           
          
            ⋅ 
           
          
            x 
           
          
         
        
        
         
         
            x <=0 
          
         
        
       
       
        
         
         
           x 
          
         
        
        
         
         
            x>0 
          
         
        
        
         
          
         
        
       
      
     
    
   
     f(x)=\begin{cases}a\cdot x&\text{ x <=0}\\x&\text{ x>0}&\end{cases} 
    
   
 f(x)={a⋅xx​ x <=0 x>0​​

其梯度可以表示为:

       f 
      
     
       ′ 
      
     
    
      ( 
     
    
      x 
     
    
      ) 
     
    
      = 
     
     
     
       { 
      
      
       
        
         
         
           a 
          
         
        
        
         
         
            x <=0 
          
         
        
       
       
        
         
         
           1 
          
         
        
        
         
         
            x>0 
          
         
        
        
         
          
         
        
       
      
     
    
   
     f^{\prime}(x)=\begin{cases}a&\text{ x <=0}\\1&\text{ x>0}&\end{cases} 
    
   
 f′(x)={a1​ x <=0 x>0​​

优点:

  • 解决了dead relu问题

缺点:

  • 负斜率需要预先设定,但不同任务的斜率可能不同

2.Softmax函数

softmax函数常用于多分类任务,将输入映射成一个0到1范围的概率,且所有的输出和为1

假设输入为

     z 
    
   
     = 
    
   
     [ 
    
    
    
      z 
     
    
      1 
     
    
   
     , 
    
    
    
      z 
     
    
      2 
     
    
   
     , 
    
   
     … 
    
   
     , 
    
    
    
      z 
     
    
      n 
     
    
   
     ] 
    
   
  
    z=[z_1,z_2,\ldots,z_n] 
   
  
z=[z1​,z2​,…,zn​] ,Softmax 函数的输出为:

  
   
    
     
     
       s 
      
     
       o 
      
     
       f 
      
     
       t 
      
     
       m 
      
     
       a 
      
     
       x 
      
     
    
      ( 
     
     
     
       z 
      
     
       i 
      
     
    
      ) 
     
    
      = 
     
     
      
      
        e 
       
       
       
         z 
        
       
         i 
        
       
      
      
       
       
         ∑ 
        
        
        
          j 
         
        
          = 
         
        
          1 
         
        
       
         n 
        
       
       
       
         e 
        
        
        
          z 
         
        
          j 
         
        
       
      
     
    
   
     \mathrm{softmax}(z_i)=\frac{e^{z_i}}{\sum_{j=1}^ne^{z_j}} 
    
   
 softmax(zi​)=∑j=1n​ezj​ezi​​

3.优化器

1️⃣ 优化器的作用

优化器的作用是调整模型参数,以最小化损失函数

2️⃣ BGD(批梯度下降)

在更新参数时使用所有样本进行更新,假设样本总数为N:

       θ 
      
     
       ′ 
      
     
    
      = 
     
    
      θ 
     
    
      − 
     
    
      η 
     
    
      ⋅ 
     
     
     
       1 
      
     
       N 
      
     
     
     
       ∑ 
      
      
      
        i 
       
      
        = 
       
      
        1 
       
      
     
       N 
      
     
     
     
       ∇ 
      
     
       θ 
      
     
    
      J 
     
    
      ( 
     
    
      θ 
     
    
      ) 
     
    
   
     \theta'=\theta-\eta\cdot\frac1N\sum_{i=1}^N\nabla_\theta J(\theta) 
    
   
 θ′=θ−η⋅N1​i=1∑N​∇θ​J(θ)

其中,

     η 
    
   
  
    \eta 
   
  
η为学习率, 
 
  
   
    
    
      ∇ 
     
    
      θ 
     
    
   
     J 
    
   
     ( 
    
   
     θ 
    
   
     ) 
    
   
  
    \nabla_\theta J(\theta) 
   
  
∇θ​J(θ)是损失函数对网络参数 
 
  
   
   
     θ 
    
   
  
    \theta 
   
  
θ的梯度。

优点:

  • BGD得到的是一个全局最优解,

缺点:

  • 每迭代一步,都要用到训练集的所有数据,如果样本数巨大,模型训练速度会很慢。

3️⃣ SGD(随机梯度下降)

SGD 是最基本的优化方法。每次更新权重时,使用一个样本计算梯度:

参数更新公式:

       θ 
      
     
       ′ 
      
     
    
      = 
     
    
      θ 
     
    
      − 
     
    
      η 
     
    
      ⋅ 
     
     
     
       ∇ 
      
     
       θ 
      
     
    
      J 
     
    
      ( 
     
    
      θ 
     
    
      ) 
     
    
   
     \theta'=\theta-\eta\cdot\nabla_\theta J(\theta) 
    
   
 θ′=θ−η⋅∇θ​J(θ)

其中,

     θ 
    
   
  
    \theta 
   
  
θ是参数, 
 
  
   
   
     η 
    
   
  
    \eta 
   
  
η是学习率, 
 
  
   
    
    
      ∇ 
     
    
      θ 
     
    
   
     J 
    
   
     ( 
    
   
     θ 
    
   
     ) 
    
   
  
    \nabla_\theta J(\theta) 
   
  
∇θ​J(θ)是损失函数对网络参数 
 
  
   
   
     θ 
    
   
  
    \theta 
   
  
θ的梯度。

优点:

  • 实现简单、效率高

缺点:

  • 收敛速度慢,容易陷入局部最优解

4️⃣ MBGD(小批量梯度下降)

介于批梯度下降和随机梯度下降之间,每次更新参数时使用b个样本。

       θ 
      
     
       ′ 
      
     
    
      = 
     
    
      θ 
     
    
      − 
     
    
      η 
     
    
      ⋅ 
     
     
     
       1 
      
     
       b 
      
     
     
     
       ∑ 
      
      
      
        i 
       
      
        = 
       
      
        1 
       
      
     
       b 
      
     
     
     
       ∇ 
      
     
       θ 
      
     
    
      J 
     
    
      ( 
     
    
      θ 
     
    
      ) 
     
    
   
     \theta'=\theta-\eta\cdot\frac1b\sum_{i=1}^b\nabla_\theta J(\theta) 
    
   
 θ′=θ−η⋅b1​i=1∑b​∇θ​J(θ)

特点:

  • 训练过程比较稳定;BGD可以找到局部最优解,不一定是全局最优解;若损失函数为凸函数,则BGD所求解一定为全局最优解。

5️⃣ AdaGrad(自适应学习率优化器)

AdaGrad优点是可以自适应学习率。该优化器在较为平缓处有比较高的学习效率,在陡峭处学习率小,在一定程度上可以避免越过极小值。

6️⃣ RMSProp(Root Mean Square Propagation)

AdaGrad算法虽然解决了学习率无法根据当前梯度自动调整的问题,但是过于依赖之前的梯度,在梯度突然变化时无法快速响应。RMSProp为了解决这一问题,在AdaGrad的基础上增加了衰减速率参数。也就是说在当前梯度与之前梯度之间添加了权重,如果当前梯度的权重较大,那么响应速度也就更快

7️⃣ Adam(Adaptive Momen Estimation,自适应动量估计)

Adam优化算法是在RMSProp的基础上增加了动量。有时候通过RMSProp优化算法得到的值不是最优解,有可能是局部最优解,引入动量的概念后,求最小值就像是一个球从高处落下,落到局部最低点时会继续向前探索,有可能得到更小的值


4.梯度消失和爆炸

1️⃣ 梯度消失

  • 激活函数的特性:sigmoid和tanh在输入趋于无穷大或无穷小时会出现梯度消失问题
  • 深度网络层数累计:随着层数增多,反向传播时梯度会逐层相乘,导致梯度逐渐减小
  • 权重初始化不当:如果初始化权重过小,反向传播时梯度会减小,导致梯度消失

如何解决?

  • 使用relu激活函数
  • 使用 Batch Normalization:通过对每一层的输出进行归一化,保持输出在一个稳定的分布范围内,防止梯度逐层缩小

2️⃣ 梯度爆炸

  • 深度网络层数累计:若每层的梯度稍大,梯度逐层相乘会导致梯度爆炸
  • 权重初始化不当:如果初始化权重过大,反向传播时梯度会变大,导致梯度爆炸

如何解决?

  • 合适的权重初始化

5.输入数据的归一化

输入数据的归一化可以使数据分布一致,加快收敛速度。

1️⃣ 标准化

将数据调整为均值为 0、标准差为1的分布:

       x 
      
     
       ′ 
      
     
    
      = 
     
     
      
      
        x 
       
      
        − 
       
      
        μ 
       
      
     
       σ 
      
     
    
   
     x^{\prime}=\frac{x-\mu}\sigma 
    
   
 x′=σx−μ​

其中

     x 
    
   
  
    x 
   
  
x是原始数据, 
 
  
   
   
     μ 
    
   
  
    \mu 
   
  
μ是数据的均值, 
 
  
   
   
     σ 
    
   
  
    \sigma 
   
  
σ是数据的标准差。

2️⃣最小-最大归一化

       x 
      
     
       ′ 
      
     
    
      = 
     
     
      
      
        x 
       
      
        − 
       
      
        min 
       
      
        ⁡ 
       
      
        ( 
       
      
        x 
       
      
        ) 
       
      
      
      
        max 
       
      
        ⁡ 
       
      
        ( 
       
      
        x 
       
      
        ) 
       
      
        − 
       
      
        min 
       
      
        ⁡ 
       
      
        ( 
       
      
        x 
       
      
        ) 
       
      
     
    
   
     x^{\prime}=\frac{x-\min(x)}{\max(x)-\min(x)} 
    
   
 x′=max(x)−min(x)x−min(x)​

6.神经网络层内部的归一化

1️⃣ 批量归一化

没写

2️⃣ 层归一化

没写


7.如何处理过拟合?

1️⃣ Dropout

训练时随机丢弃部分神经元,减少神经元之间的相互依赖,迫使网络学习更加鲁邦的表示,防止过拟合。

2️⃣ 增大数据量

增大的数据量可以使模型学习到更多的特征,防止过拟合

3️⃣Early Stop

将数据集分为训练集、验证集、测试集,每个epoch后都用验证集验证一下,如果随着训练的进行训练集Loss持续下降,而验证集Loss先下降后上升,说明出现过拟合,应该立即停止训练

4️⃣Batch Normalization

没写

5️⃣ L1正则化

没写

6️⃣ L2正则化

没写


8.全连接层的作用

  • 特征融合:将前一层的所有特征融合成更高层次的特征
  • 决策输出:全连接层放在网络的末端,将提取的特征映射到类别,实现分类任务

9.池化

1️⃣ 平均池化

2️⃣ 最大池化


10.卷积的感受野

1️⃣

2️⃣

3️⃣

4️⃣

5️⃣

6️⃣

7️⃣


本文转载自: https://blog.csdn.net/qq_42980908/article/details/143692126
版权归原作者 一去不复返的通信er 所有, 如有侵权,请联系我们删除。

“AI基础知识”的评论:

还没有评论