【深度学习】神经网络和BP算法(含源码实现)

打印 上一主题 下一主题

主题 680|帖子 680|积分 2040

神经网络(neural networks)

神经元

感知机模型(Perceptron)

感知机模型

感知机是由神经元复合的线性分类器
                                         y                            =                            f                            (                                       ∑                                           i                                  =                                  1                                          n                                                 w                               i                                                 x                               i                                      −                            θ                            )                            =                            f                            (                                       w                               T                                      x                            −                            θ                            )                                  y =f(\sum_{i=1}^n w_ix_i -\theta) = f(w^Tx-\theta)                     y=f(i=1∑n​wi​xi​−θ)=f(wTx−θ)
此中:


  • x为样本的特性向量。
  • w为权重向量。
  • θ称为偏置(阈值)
如何这里的                                   f                              f                  f为阶跃函数                                   ϵ                         (                         ⋅                         )                              \epsilon(·)                  ϵ(⋅),则感知机模型可以表示为激活函数:
                                         (                            1                            )                            y                            =                            ϵ                            (                                       w                               T                                      x                            −                            θ                            )                            =                                       {                                                                                                                                                    1                                              ,                                                               w                                                 T                                                              x                                              >                                              =                                              θ                                                                                                                                                                                                 0                                              ,                                                               w                                                 T                                                              x                                              <                                              θ                                                                                                             (1)y =\epsilon(w^Tx-\theta) =\left\{ \begin{matrix} \ 1,w^Tx>=\theta\\ \ 0,w^Tx<\theta \end{matrix} \right.                     (1)y=ϵ(wTx−θ)={ 1,wTx>=θ 0,wTx<θ​
由                                   n                              n                  n维空间中的超平面方程:
                                                    w                               1                                                 x                               1                                      +                                       w                               2                                                 x                               2                                      +                                       w                               3                                                 x                               3                                      +                            .                            .                            .                            +                                       w                               n                                                 x                               n                                      +                            b                            =                                       w                               T                                      x                            +                            b                            =                            0                                  w_1x_1+w_2x_2+w_3x_3+...+w_nx_n+b=w^Tx+b=0                     w1​x1​+w2​x2​+w3​x3​+...+wn​xn​+b=wTx+b=0
可知                                   (                         1                         )                              (1)                  (1)式将n维空间分别,可以看作一个超平面,将n维空间分别为                                             w                            T                                  x                         >                         =                         θ                              w^Tx>=\theta                  wTx>=θ和                                             w                            T                                  x                         <                         θ                              w^Tx<\theta                  wTx<θ两个空间,落在前者的输出值为1,后者的输出值为0,于是实现了分类功能。
感知机的学习策略以及参数的调整规则

所以线性模型中的思考,我们必要对权重向量                                             w                            T                                       w^T                  wT和偏置                                   θ                              \theta                  θ进行选择,这就是感知机的学习
不妨考虑一种简单的环境,如今有特性矩阵                                             x                            1                                       x_1                  x1​=[2, 3],                                             x                            2                                       x_2                  x2​=[1,5],包含标签的向量                                   y                         =                         {                         1                         ,                         0                         }                              y=\{1,0\}                  y={1,0}


  • 初始化权重向量                                             w                                      w                        w:假设                                             w                               =                               [                               1                               ,                               1                               ]                                      w=[1,1]                        w=[1,1],偏置                                             θ                               =                               2                                      \theta=2                        θ=2;
  • 计算输出:

    • 根据公式                                                  (                                  1                                  )                                          (1)                           (1), 有                                                               w                                     T                                                           x                                     1                                              −                                  θ                                  =                                  1                                  ⋅                                  2                                  +                                  1                                  ⋅                                  3                                  −                                  2                                  =                                  3                                  >                                  0                                          w^Tx_1-\theta=1·2+1·3-2=3>0                           wTx1​−θ=1⋅2+1⋅3−2=3>0, 因此被判断为1,符合真实输出;
    • 对于                                                               x                                     2                                                      x_2                           x2​,计算得到                                                               w                                     T                                                           x                                     2                                              −                                  θ                                  =                                  6                                  −                                  2                                  =                                  4                                  >                                  0                                          w^Tx_2-\theta = 6-2=4>0                           wTx2​−θ=6−2=4>0,不符合输出,因此必要调整权重向量                                                  w                                          w                           w和偏置                                                  θ                                          \theta                           θ

  • 提出以下优化规则:
                                                                    w                                     ′                                              =                                  w                                  +                                  η                                  (                                  y                                  −                                               y                                                   p                                        r                                        e                                        d                                                           )                                  x                                                          θ                                     ′                                              =                                  θ                                  −                                  η                                  (                                  y                                  −                                               y                                                   p                                        r                                        e                                        d                                                           )                                          w' = w+η(y-y_{pred})x\\ \theta'=\theta-η(y-y_{pred})                           w′=w+η(y−ypred​)xθ′=θ−η(y−ypred​)
    ​ 假设模型的学习率                                             η                                      η                        η为1,于是                                                         w                                  ′                                          =                               w                               +                               η                               (                               0                               −                               1                               )                               ⋅                               [                               1                               ,                               5                               ]                               =                               [                               0                               ,                               −                               4                               ]                                      w' = w + η(0-1)·[1,5] = [0,-4]                        w′=w+η(0−1)⋅[1,5]=[0,−4],                                                         θ                                  ′                                          =                               2                               +                               1                               =                               3                                      \theta' = 2 + 1 =3                        θ′=2+1=3

    • 对于                                                               x                                     1                                                      x_1                           x1​,再次计算                                                               w                                     T                                                           x                                     1                                              −                                  θ                                  =                                  −                                  15                                  <                                  0                                          w^Tx_1-\theta= -15 < 0                           wTx1​−θ=−15<0,与真实输出不符;
    • 对于                                                               x                                     2                                                      x_2                           x2​,易得                                                               w                                     T                                                           x                                     1                                              −                                  θ                                  =                                  −                                  23                                  <                                  0                                          w^Tx_1-\theta = -23 < 0                           wTx1​−θ=−23<0,输出为0符合标签
    由于输出仍不满足,因此继续根据规则调整权重和偏置验证计算。
    多层前馈神经网络

    在前面我们提到,感知机是一种线性分类器,利用感知机模型构成的单层神经元只有输出层神经原进行激活函数处理,只能办理线性可分的问题

    此中“与”“或”“非”都是线性可分的,即存在一个线性超平面能将他们分开,在感知机的学习过程中调整权重矩阵和偏置终极使得学习过程收敛(converge),而对于非线性可分的问题,比方图上的"异或"问题,可以看到不存在有且仅有一个线性超平面将他们分开,这使得学习过程发生振荡(fluctuation),无法确定解。
    含隐藏层的多层功能神经元

    为了办理非线性可分问题,我们引入多层功能神经元的概念,这里两层感知机模型就能办理上“异或”问题.

    更一般的多层功能神经元构成的神经网络如图所示:


每层神经元与下一层神经元全互连,同层神经元不进行连接,也不跨层连接,上一层神经元的输出作为下一层神经元的输入,我们界说这样的神经网络为"多层前馈神经网络"(multi-layer feedback neural networks).神经元之间用**“连接权”和阈值**进行连接。
单隐层前馈网络是指只有一个隐藏层,双隐层前馈网络有两层隐藏层,必要留意的是,输入层神经元没有激活函数进行处理,仅仅作为输入。
误差逆流传算法(BP神经网络)

由于构造了复杂的学习模型多层前馈神经网络,我们的单层感知机模型的学习方法                                   Δ                         w                         =                         η                         (                         y                         −                                   y                                       p                               r                               e                               d                                            )                         x                              \Delta w = η(y-y_{pred})x                  Δw=η(y−ypred​)x
                                    Δ                         θ                         =                         −                         η                         (                         y                         −                                   y                                       p                               r                               e                               d                                            )                              \Delta\theta = -η(y-y_{pred})                  Δθ=−η(y−ypred​)已经无法正常运行。因此我们必要更实用的算法。
**误差逆流传算法(error BackPropagation,BP)**是一种实用于多层前馈神经网络的学习算法(BP算法不止实用于多层前馈神经网络)。

我们来解释一下BP算法的具体过程。

  • 训练集界说:

    • 设定训练集                                                   (                                  D                                  =                                  {                                  (                                               x                                     1                                              ,                                               y                                     1                                              )                                  ,                                  (                                               x                                     2                                              ,                                               y                                     2                                              )                                  ,                                  .                                  .                                  .                                  ,                                  (                                               x                                     m                                              ,                                               y                                     m                                              )                                  }                                  )                                          (D = \{(x_1, y_1), (x_2, y_2), ..., (x_m, y_m)\})                           (D={(x1​,y1​),(x2​,y2​),...,(xm​,ym​)}),此中$ (x_i \in \mathbb{R}^d),(y_i \in \mathbb{R}^l)$,即每个示例由                                                   d                                          d                           d个属性输入,输出                                                   l                                          l                           l 维实值向量。

  • BP网络结构:

    • 图 5.7 展示了一个具有输入层、隐藏层和输出层的三层前馈神经网络:

      • 输入层: 包含$ (d)$ 个输入神经元。
      • 隐藏层: 包含 $(q) $个神经元。
      • 输出层: 包含                                                             (                                        l                                        )                                                  (l)                                 (l) 个神经元。


  • 数学符号和公式:

    • 隐层神经元的输入:

      • 第                                                             h                                                  h                                 h 个隐层神经元接收到的输入为:                                                            (                                                       a                                           h                                                      =                                                       ∑                                                           i                                              =                                              1                                                          d                                                                     v                                                           i                                              h                                                                                    x                                           i                                                      )                                                  (a_h = \sum_{i=1}^{d} v_{ih} x_i)                                 (ah​=∑i=1d​vih​xi​),此中                                                                            w                                                           i                                              h                                                                               w_{ih}                                 wih​ 表示从输入层第                                                             i                                                  i                                 i 个神经元到隐层第                                                             h                                                  h                                 h 个神经元的连接权值。

    • 输出层神经元的输入:

      • 第                                                             j                                                  j                                 j 个输出层神经元接收到的输入为:                                                            (                                                       β                                           j                                                      =                                                       ∑                                                           h                                              =                                              1                                                          q                                                                     w                                                           h                                              j                                                                                    b                                           h                                                      )                                                  (β_j = \sum_{h=1}^{q} w_{hj} b_h)                                 (βj​=∑h=1q​whj​bh​),此中 (                                                                           b                                           h                                                                b_h                                 bh​) 是隐层第 (                                                            h                                                  h                                 h) 个神经元的输出,(                                                                           w                                                           h                                              j                                                                               w_{hj}                                 whj​) 是从隐层第 (                                                            h                                                  h                                 h) 个神经元到输出层第 (                                                            j                                                  j                                 j) 个神经元的连接权值。


  • 激活函数:

    • 假设隐层和输出层神经元都利用 $Sigmoid $函数作为激活函数。

  • 输出层的计算:

    • 对于训练例                                                   (                                  (                                               x                                     k                                              ,                                               y                                     k                                              )                                  )                                          ((x_k, y_k))                           ((xk​,yk​)),假设神经网络的输出为                                                        (                                                   y                                                       k                                           1                                                      ∗                                                  ,                                                   y                                                       k                                           2                                                      ∗                                                  ,                                     .                                     .                                     .                                     ,                                                   y                                                       k                                           l                                                      ∗                                                  )                                              (y_{k1}^*, y_{k2}^*, ..., y_{kl}^*)                              (yk1∗​,yk2∗​,...,ykl∗​)(表示第k个输入的第j个神经元输出),即                                                        (                                                   y                                                       k                                           j                                                      ∗                                                  =                                     f                                     (                                                   β                                        j                                                  −                                                   θ                                        j                                                  )                                     )                                              (y_{kj}^* = f(β_j - θ_j))                              (ykj∗​=f(βj​−θj​)),此中 (                                                  f                                          f                           f) 为激活函数,(                                                               θ                                     j                                                      θ_j                           θj​) 为第 (                                                  j                                          j                           j) 个输入迷经元的阈值。
    网络中有                                                   (                                  d                                  +                                  l                                  +                                  1                                  )                                  q                                  +                                  l                                          (d+l+1)q+l                           (d+l+1)q+l个参数需确定:输入层到隐层的                                                  d                                  ×                                  q                                          d\times q                           d×q个权值,隐层到输出层的                                                  q                                  ×                                  l                                          q\times l                           q×l个权 层神 的权值、                                                   q                                          q                           q 个隐层神经元的偏置,                                                  l                                          l                           l个输出层神经元的阈值。
    直到上面为止还是能相沿单层感知机的理解,接下来我们也同单层模型一样,考虑学习方法以确定权重矩阵和偏置。
    均方误差

    为了找到一组好的参数值                                             (                               w                               ,                               θ                               )                                      (w,\theta)                        (w,θ),我们必要一个评估指标描述什么是"好的"。此时我们想起线性回归模型的处理方法,这里我们实用均方误差来进行。
    对于训练例                                              (                                           x                                  k                                          ,                                           y                                  k                                          )                                      (x_k, y_k)                        (xk​,yk​),界说网络在                                              (                                           x                                  k                                          ,                                           y                                  k                                          )                                      (x_k, y_k)                        (xk​,yk​) 上的均方误差为:
                                                                    E                                     k                                              =                                               1                                     2                                                           ∑                                                   j                                        =                                        1                                                  l                                              (                                               y                                                   k                                        j                                                  ∗                                              −                                               y                                                   k                                        j                                                                        )                                     2                                                      E_k = \frac{1}{2} \sum_{j=1}^{l} (y_{kj}^* - y_{kj})^2                           Ek​=21​j=1∑l​(ykj∗​−ykj​)2
    更新过程与梯度下降

                                                  v                                      v                        v为任意参数,                                             v                                      v                        v的更新过程表示为更新估计式:
                                                       v                                  ←                                  v                                  +                                  Δ                                  v                                                                     .                                          v \leftarrow v+\Delta v \ .                           v←v+Δv .
    以隐层到输出层的连接权                                                         w                                               h                                     j                                                             w_{hj}                        whj​为例,利用梯度下降(gradient descent)策略,梯度下降在线性回归模型中也关键方法。给定学习率                                             η                                      η                        η,有:
                                                       Δ                                               w                                                   h                                        j                                                           =                                  −                                  η                                                             ∂                                                       E                                           k                                                                              ∂                                                       w                                                           h                                              j                                                                                                \Delta w_{hj} = -η\frac{∂E_k}{∂w_{hj}}                           Δwhj​=−η∂whj​∂Ek​​
    链式法则

    我们可以留意到                                                         E                                  k                                                 E_k                        Ek​是                                                         w                                               h                                     j                                                             w_{hj}                        whj​的复合函数,这里利用复合函数求导的链式法则,有:
                                                       (                                  1                                  )                                                             ∂                                                       E                                           k                                                                              ∂                                                       w                                                           h                                              j                                                                                        =                                                             ∂                                                       E                                           k                                                                              ∂                                                       y                                                           k                                              j                                                          ∗                                                                         ⋅                                                             ∂                                                       y                                                           k                                              j                                                          ∗                                                                              ∂                                                       β                                           j                                                                         ⋅                                                             ∂                                                       β                                           j                                                                              ∂                                                       w                                                           h                                              j                                                                                                                           .                                          (1)\frac{∂E_k}{∂w_{hj}}=\frac{∂E_k}{∂y^*_{kj}}·\frac{∂y^*_{kj}}{∂\beta_j}·\frac{∂\beta_j}{∂w_{hj}}\ .                           (1)∂whj​∂Ek​​=∂ykj∗​∂Ek​​⋅∂βj​∂ykj∗​​⋅∂whj​∂βj​​ .
    由于                                             (                                           β                                  j                                          =                                           ∑                                               h                                     =                                     1                                              q                                                      w                                               h                                     j                                                                  b                                  h                                          )                                      (β_j = \sum_{h=1}^{q} w_{hj} b_h)                        (βj​=∑h=1q​whj​bh​),所以:
                                                       (                                  2                                  )                                                             ∂                                                       β                                           j                                                                              ∂                                                       w                                                           h                                              j                                                                                        =                                               b                                     h                                                                                 .                                          (2)\frac{∂\beta_j}{∂w_{hj}} = b_h\ .                           (2)∂whj​∂βj​​=bh​ .
    界说                                                         g                                  j                                                 g_j                        gj​:
                                                       (                                  3                                  )                                               g                                     j                                              =                                  −                                                             ∂                                                       E                                           k                                                                              ∂                                                       y                                                           k                                              j                                                          ∗                                                                         ⋅                                                             ∂                                                       y                                                           k                                              j                                                          ∗                                                                              ∂                                                       β                                           j                                                                                    =                                  −                                  (                                               y                                                   k                                        j                                                  ∗                                              −                                               y                                                   k                                        j                                                           )                                               f                                     ′                                              (                                               β                                     j                                              −                                               θ                                     j                                              )                                             =                                               y                                                   k                                        j                                                  ∗                                              (                                  1                                  −                                               y                                                   k                                        j                                                  ∗                                              )                                  (                                               y                                                   k                                        j                                                           −                                               y                                                   k                                        j                                                  ∗                                              )                                          (3)g_j =-\frac{∂E_k}{∂y^*_{kj}}·\frac{∂y^*_{kj}}{∂\beta_j}\\ =-(y^*_{kj}-y_{kj})f'(\beta_j-\theta_j)\\ =y^*_{kj}(1-y^*_{kj})(y_{kj}-y^*_{kj})                           (3)gj​=−∂ykj∗​∂Ek​​⋅∂βj​∂ykj∗​​=−(ykj∗​−ykj​)f′(βj​−θj​)=ykj∗​(1−ykj∗​)(ykj​−ykj∗​)
    终极可以得到
                                                       Δ                                               w                                                   h                                        j                                                           =                                  η                                               g                                     j                                                           b                                     h                                                                                 .                                          \Delta w_{hj} =ηg_jb_h\ .                           Δwhj​=ηgj​bh​ .
    类似可得其他参数:
                                                       Δ                                               θ                                     j                                              =                                  −                                  η                                               g                                     j                                              ,                                          \Delta \theta_j = - \eta g_j,                           Δθj​=−ηgj​,
                                                       Δ                                               w                                                   i                                        h                                                           =                                  η                                               e                                     h                                                           x                                     i                                              ,                                          \Delta w_{ih} = \eta e_h x_i,                           Δwih​=ηeh​xi​,
                                                       Δ                                               γ                                     h                                              =                                  −                                  η                                               e                                     h                                              ,                                                     \Delta \gamma_h = - \eta e_h, \quad                           Δγh​=−ηeh​,
                                                                    e                                     h                                              =                                  −                                                             ∂                                                       E                                           k                                                                              ∂                                                       b                                           h                                                                         ⋅                                                             ∂                                                       b                                           h                                                                              ∂                                                       α                                           h                                                                                 e_h = - \frac{\partial E_k}{\partial b_h} \cdot \frac{\partial b_h}{\partial \alpha_h}                           eh​=−∂bh​∂Ek​​⋅∂αh​∂bh​​
                                                       =                                  −                                               ∑                                                   j                                        =                                        1                                                  l                                                                         ∂                                                       E                                           k                                                                              ∂                                                       β                                           j                                                                         ⋅                                                             ∂                                                       β                                           j                                                                              ∂                                                       b                                           h                                                                                      f                                     ′                                              (                                               α                                     h                                              −                                               γ                                     h                                              )                                          = - \sum_{j=1}^{l} \frac{\partial E_k}{\partial \beta_j} \cdot \frac{\partial \beta_j}{\partial b_h} f'(\alpha_h - \gamma_h)                           =−j=1∑l​∂βj​∂Ek​​⋅∂bh​∂βj​​f′(αh​−γh​)
                                                       =                                               ∑                                                   j                                        =                                        1                                                  l                                                           w                                                   h                                        j                                                                        g                                     j                                                           f                                     ′                                              (                                               α                                     h                                              −                                               γ                                     h                                              )                                          = \sum_{j=1}^{l} w_{hj} g_j f'(\alpha_h - \gamma_h)                           =j=1∑l​whj​gj​f′(αh​−γh​)
                                                       =                                               b                                     h                                              (                                  1                                  −                                               b                                     h                                              )                                               ∑                                                   j                                        =                                        1                                                  l                                                           w                                                   h                                        j                                                                        g                                     j                                              。                                             (                                  5.15                                  )                                          = b_h (1 - b_h) \sum_{j=1}^{l} w_{hj} g_j。 \quad (5.15)                           =bh​(1−bh​)j=1∑l​whj​gj​。(5.15)

BP算法手动实现

对每个训练样例,BP算法执行以下操作:
(1)先将输入示例提供给输入层神经元,然后逐层将信号前传,直到产生输出层的结果;
(2)然后计算输出层的误差(第4-5行)
(3)再将误差逆向流传至隐层神经元(第6行)
(4)最后根据各层神经元的误差来对连接权和阈值进行调整(第7行)。
该迭代过程循环进行,直到达到某些停止条件为止,比方训练误差达到一个很小的值。图给出了在2个属性、5个样本的西瓜数据上,随着训练样例的增长,网络参数和分类界限的变革环境。

  1. 输入:训练集 $D = \{(x_k, y_k)\}_{k=1}^m$
  2.       学习率 $\eta$
  3. 过程:
  4. 1. 在 $[-1, 0, 1]$ 范围内随机初始化网络中所有连接权和阈值
  5. 2. repeat
  6. 3. for all $(x_k, y_k) \in D$ do
  7. 4. 根据式(5.3)计算当前样本的输出 $y_{kj}^*$
  8. 5. 根据式(5.10)计算输出层神经元的梯度 $g_j$
  9. 6. 根据式(5.11)计算隐层神经元的梯度 $e_h$
  10. 7. 根据式(5.12)-(5.14)更新连接权 $w_{hj}, v_{ih}$ 和阈值 $\theta_j, \gamma_h$
  11. 8. until 达到停止条件
  12. 输出:连接权与阈值确定的多层前馈神经网络
复制代码
附上手写的源码:
  1. import numpy as np
  2. class nn:
  3.     def __init__(self, input_size, hidden_size, output_size, eta):
  4.         self.weight_1 = np.random.randn(hidden_size, input_size)
  5.         self.weight_2 = np.random.randn(output_size, hidden_size)
  6.         self.thre_1 = np.random.randn(hidden_size)
  7.         self.thre_2 = np.random.randn(output_size)
  8.         self.eta = eta
  9.     def _get_input(self, weight, X):
  10.         return np.dot(X, weight.T)
  11.    
  12.     def _sigmoid(self, input, thre):
  13.         input = np.array(input) - thre
  14.         return 1 / (1 + np.exp(-input))
  15.    
  16.     def _get_output(self, input, thre):
  17.         return self._sigmoid(input, thre)
  18.    
  19.     def _get_MSE(self, output, pre_output):
  20.         return np.mean((pre_output - output) ** 2) / 2
  21.    
  22.     def _get_new_weight(self, grad, X):
  23.         delta_weight = self.eta * np.outer(grad, X)
  24.         return delta_weight
  25.    
  26.     def _get_new_thre(self, grad):
  27.         return -self.eta * np.sum(grad, axis=0)
  28.    
  29.     def _get_output_grad(self, output, y):
  30.         error_output = output - y
  31.         grad_output = error_output * output * (1 - output)
  32.         return grad_output
  33.    
  34.     def _get_hide_grad(self, weight, output, grad_output):
  35.         error_hidden = np.dot(weight.T, grad_output)
  36.         grad_hidden = error_hidden * output * (1 - output)
  37.         return grad_hidden
  38.     def fit(self, X, y, num_epochs=1000):
  39.         for epoch in range(num_epochs):
  40.             # 前向传播
  41.             input_1 = self._get_input(self.weight_1, X)
  42.             output_1 = self._get_output(input_1, self.thre_1)
  43.             
  44.             input_2 = self._get_input(self.weight_2, output_1)
  45.             output_2 = self._get_output(input_2, self.thre_2)
  46.             
  47.             # 计算损失
  48.             loss = self._get_MSE(y, output_2)
  49.             
  50.             # 反向传播
  51.             grad_output = self._get_output_grad(output_2, y)
  52.             grad_hidden = self._get_hide_grad(self.weight_2, output_1, grad_output)
  53.             
  54.             # 更新权重和偏置
  55.             delta_weight_2 = self._get_new_weight(grad_output, output_1)
  56.             self.weight_2 -= delta_weight_2
  57.             self.thre_2 -= self._get_new_thre(grad_output)
  58.             
  59.             delta_weight_1 = self._get_new_weight(grad_hidden, X)
  60.             self.weight_1 -= delta_weight_1
  61.             self.thre_1 -= self._get_new_thre(grad_hidden)
  62.             
  63.             if epoch % 100 == 0:
  64.                 print(f"Epoch {epoch}, Loss: {loss}")
  65.     def predict(self, X):
  66.         input_1 = self._get_input(self.weight_1, X)
  67.         output_1 = self._get_output(input_1, self.thre_1)
  68.         
  69.         input_2 = self._get_input(self.weight_2, output_1)
  70.         output_2 = self._get_output(input_2, self.thre_2)
  71.         
  72.         return output_2
  73.         
  74. input_size = 4
  75. hidden_size = 5
  76. output_size = 3
  77. eta = 0.7
  78. model = nn(input_size, hidden_size, output_size, eta)
  79. X = np.array([0.5, 1.0, 1.5, 2.0])
  80. y = np.array([0.1, 0.2, 0.3])
  81. model.fit(X, y)
  82. prediction = model.predict(X)
  83. print(f"Prediction: {prediction}")
  84. '''
  85. Epoch 0, Loss: 0.08452484439144649
  86. Epoch 100, Loss: 0.00043097425030784627
  87. Epoch 200, Loss: 6.173784504106113e-05
  88. Epoch 300, Loss: 6.111382932194645e-06
  89. Epoch 400, Loss: 5.274844786786648e-07
  90. Epoch 500, Loss: 4.445371701622411e-08
  91. Epoch 600, Loss: 3.7266722662723944e-09
  92. Epoch 700, Loss: 3.1195917455011153e-10
  93. Epoch 800, Loss: 2.6102862257159366e-11
  94. Epoch 900, Loss: 2.1838569148871845e-12
  95. Prediction: [0.1000008  0.19999945 0.3000004 ]
  96. '''
复制代码
累积误差逆流传算法(累积BP)

前面介绍的BP算法针对单个均方误差                                             E                            k                                       E_k                  Ek​,这意味着每次参数更新都只针对一个样例数据,导致更新频繁以及可能出现的差别样例导致的参数调整抵消等问题。所以为了使数据集整体达到同样的误差极小点,累积BP直接针对累积误差最小化:                                   E                         =                                   1                            m                                            ∑                                       k                               =                               1                                      m                                            E                            k                                       E = \frac{1}{m} \sum_{k=1}^{m}E_k                  E=m1​∑k=1m​Ek​,读取数据集一遍之后再进行更新,然而累积BP在累积误差下降到一定程度时,可能出现下降迟钝的环境,这时尺度BP会得到更好的解。
类似随机梯度下降和尺度梯度下降的区别。
过拟合



  • 早停:将数据集分成训练集和验证集,训练集用来计算梯度,更新连接权和偏置,验证集用来估计误差,假如训练集误差降低但是验证机误差升高,则停止训练(类似决议树的后剪枝)
  • 正则化:在误差目标函数增长一个描述网络复杂度的部分,比方连接权和偏置的平方和
                                         E                            =                            λ                                       1                               m                                                 ∑                                           k                                  =                                  1                                          m                                                 E                               k                                      +                            (                            1                            −                            λ                            )                                       ∑                               i                                                 w                               i                               ∗                                                                   ,                                  E=\lambda \frac{1}{m}\sum_{k=1}^m E_k + (1-\lambda)\sum_i w_i^*\ ,                     E=λm1​k=1∑m​Ek​+(1−λ)i∑​wi∗​ ,
:                                   E                         =                                   1                            m                                            ∑                                       k                               =                               1                                      m                                            E                            k                                       E = \frac{1}{m} \sum_{k=1}^{m}E_k                  E=m1​∑k=1m​Ek​,读取数据集一遍之后再进行更新,然而累积BP在累积误差下降到一定程度时,可能出现下降迟钝的环境,这时尺度BP会得到更好的解。
类似随机梯度下降和尺度梯度下降的区别。
过拟合



  • 早停:将数据集分成训练集和验证集,训练集用来计算梯度,更新连接权和偏置,验证集用来估计误差,假如训练集误差降低但是验证机误差升高,则停止训练(类似决议树的后剪枝)
  • 正则化:在误差目标函数增长一个描述网络复杂度的部分,比方连接权和偏置的平方和
                                         E                            =                            λ                                       1                               m                                                 ∑                                           k                                  =                                  1                                          m                                                 E                               k                                      +                            (                            1                            −                            λ                            )                                       ∑                               i                                                 w                               i                               ∗                                                                   ,                                  E=\lambda \frac{1}{m}\sum_{k=1}^m E_k + (1-\lambda)\sum_i w_i^*\ ,                     E=λm1​k=1∑m​Ek​+(1−λ)i∑​wi∗​ ,
此中                                   λ                         ∈                         (                         0                         ,                         1                         )                              \lambda \in (0,1)                  λ∈(0,1)用于履历误差与网络复杂度这两项进行折中。常利用交叉验证法来估计。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

伤心客

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表