• 深度学习-神经网络原理2


    神经网络的原理

    对于一个神经网络我们可以分为输入层,隐藏层,输出层,对于神经网络的训练可以分为正向传播和反向传播。这里对神经网络不同层次的数据表示进行约定。这里我们以一个二层的神经网络模型进行演示。
    在这里我们将A0定义为输入层数据,将A1定义为隐藏层数据,最后的A2定义为输出层数据。这A0时输入的矩阵通常为(m,n)m为特征个数,n为样本个数。对于L层,AL层为a个元素,L-1层有b
    个,这里我们就可以直到WL为形状(a,b)的矩阵,bL为(1,b)的矩阵,输入的AL-1为(b,n)的矩阵,得到ZL和AL为(a,n)的矩阵。

    向前传播

    向前传播比较简单,主要就是和上面图片一样,每一层可以看作一个单独的逻辑回归,只不过一层的激活函数可能不同,通常使用的是Relu或者tanh函数作为激活函数。

    (1)Relu(x)={0,x0x,x>0

    tanh(x)=exexex+ex


    具体的计算过程如下:

    Z[i]=W[i]A[i1]+b[i]

    A[i]=σ(Z[i])

    Z[i+1]=W[i+1]A[i]+b[i+1]

    A[i+1]=σ(Z[i+!])

    反向传播

    反向传播的本质是依据链式发展对每一层都求出w和b的偏导数,只用进行一个变量修改,实现对代价函数的一个求极值过程。假设该神经网络有L层,最后一层的激活函数为:

    A[L]=sigmod(z)=11+ez

    对于代价函数可以求得为:

    J(W,b)=1m1m[yilog(ALi)+(1y)log(1ALi)]

    所以对于最后一层我们可以计算得到:

    dJdAL=1m[YAL1Y1AL]

    这里计算的是矩阵除法,得到的对应的一个矩阵。
    之后计算关于的一个方向倒数,假设激活函数为σ(z)

    dJdZL=dJdALσ(σz)

    ZL=WLA[L1]+b所以可以依据链式法则求出dJdWLdJdbL

    dJdWL=dJdZL·dZLdWL=dJdZL·AL1

    dJdbL=dJdZL

    依据链式法则还可以求出:

    dJdAL1=dJdZL·WL

    之后进行循环,获取每一层对应的w和b的梯度,用于进行一个数据的更新。
    对于反向传播的具体流程大致就是上面公式所示,具体可以能符号有些错误但思想是这样的。

  • 相关阅读:
    【SpringBoot】一文吃透SpringBoot多环境开发
    JS中箭头函数和普通函数的区别
    HTTPS的加密原理
    C语言 分支循环(下)
    基于PHP+html+MySQL的团购商城电商平台设计
    beego语言golang编程语言安装bee : 无法将“bee”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
    LINQ的内部联接、分组联接和左外部联接
    PHP 命名空间
    Chapter6.3:线性系统的校正方法考研参考题
    大数据、Hadoop、Hbase介绍
  • 原文地址:https://www.cnblogs.com/blackworld-sp/p/16562787.html