您的位置:首页 > 理论基础 > 计算机网络

9-神经网络的学习机制

2020-07-24 22:34 411 查看

文章目录

  • 二、数值微分
  • 一、损失函数

    均方误差

    E=12∑k(yk−tk)2 E = \frac{1}{2} \sum_k(y_k - t_k)^2 E=21​k∑​(yk​−tk​)2

    • yky_kyk​ : 表示神经网络的输出数据
    • tkt_ktk​:神经网络的监测数据
    • k:表示数据维度

    交叉熵误差

    E=−∑ktklog(yk) E = -\sum_k t_k log (y_k) E=−k∑​tk​log(yk​)

    • log 为以 e 为底的对数
    • yky_kyk​ : 表示神经网络的输出数据
    • tkt_ktk​ 为监测数据
    1. 当 tkt_ktk​ 为

      one_hot
      表示(即正确解用1表示,其余均用0表示),例如:

      y = [0.02, 0.04, 0.13, 0.03, 0.15, 0.14, 0.20,0.11,0.02,0.16]
      t = [0,0,1,0,0,0,0,0,0,0]

      则表示第2个(从0开始)输出是正确的

      y = 0.13
      是正确的

      很容易看出,只有当 tkt_ktk​ 不为0时,tklog(yk)t_k log(y_k)tk​log(yk​) 才不会为0,也就是说,实际上,假设 y0y_0y0​ 为正确解,则:

    E=−log(y0) E = -log(y_0) E=−log(y0​)

    1. 当 tkt_ktk​ 不是

      one_hot
      表示,而是用标签(指明输出的正确解是第几个)表示,例如:

      y = [0.02, 0.04, 0.13, 0.03, 0.15, 0.14, 0.20,0.11,0.02,0.16]
      t = 2

      表示第2个(从0开始)输出

      y = 0.13
      是正确的,所以就可以利用公式 E=−log(y0)E = -log(y_0)E=−log(y0​)来求交叉熵。

      因此,tkt_ktk​是否采用

      one_hot
      表示,都用同一个公式。只不过,如果是用one_hot表示的话,只需要 直接
      tlog(y)
      就可以计算出 log(y0)log(y_0)log(y0​) ,而不使用 one_hot表示的话,就需要自己根据标签来把正确解 y0y_0y0​ 找出来。

    二、数值微分

    导数

    1. 定义式
      df(x)dx=lim⁡h→0f(x+h)−f(x)h \frac{df(x)}{dx} = \lim_{h\rightarrow0} \frac{f(x+h)-f(x)}{h} dxdf(x)​=h→0lim​hf(x+h)−f(x)​
      表示函数f(x)f(x)f(x) 在x处的斜率

    2. 为了减小计算误差,常使用下面的式子计算:
      df(x)dx=lim⁡h→0f(x+h)−f(x−h)2h \frac{df(x)}{dx} = \lim_{h\rightarrow0} \frac{f(x+h)-f(x-h)}{2h} dxdf(x)​=h→0lim​2hf(x+h)−f(x−h)​

    偏导数

    定义式:
    ∂f∂x=lim⁡Δx→0f(x+Δx,y)−f(x,y)x \frac{\partial f}{\partial x} = \lim_{\Delta x\rightarrow0} \frac{f(x+\Delta x,y)-f(x,y)}{x} ∂x∂f​=Δx→0lim​xf(x+Δx,y)−f(x,y)​

    ∂f∂y=lim⁡Δy→0f(x,y+Δy)−f(x,y)x \frac{\partial f}{\partial y} = \lim_{\Delta y\rightarrow0} \frac{f(x,y+\Delta y)-f(x,y)}{x} ∂y∂f​=Δy→0lim​xf(x,y+Δy)−f(x,y)​

    第一条式子表示函数在点(x,y)处沿 x方向的斜率;

    第二条式子表示函数在点(x,y)处沿 y方向的斜率。

    梯度

    表达式:
    (∂f∂x,∂f∂y) (\frac{\partial f}{\partial x}, \frac{\partial f}{\partial y}) (∂x∂f​,∂y∂f​)
    表示一个向量,该向量的方向指向函数增加最快的方向。

    神经网络中一般使用负梯度,因为要计算损失函数的最小值。

    梯度法

    分为

    梯度下降法(寻找最小值)
    梯度上升法(寻找最大值)

    执行梯度(下降)法寻找最优参数的过程:首先初始化参数当前值,然后求出函数在当前位置的梯度,之后前进一段位置,继续求梯度,继续前进……如此循环下去,知道寻找到最小值。

    公式:
    {x0=x0−η∂f∂x0x1=x1−η∂f∂x1 \begin{cases}x_0 = x_0-\eta \frac{\partial f}{\partial x_0}\\\\x_1 = x_1-\eta \frac{\partial f}{\partial x_1}\end{cases} ⎩⎪⎨⎪⎧​x0​=x0​−η∂x0​∂f​x1​=x1​−η∂x1​∂f​​
    η\etaη 为学习率,表示参数更新的速率,它的值不能过大,否则越过了最小值都不知道;也不能过小,否则需要耗时过长。

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: