zoukankan      html  css  js  c++  java
  • 1. DNN神经网络的前向传播(FeedForward)

    1. DNN神经网络的前向传播(FeedForward)

    2. DNN神经网络的反向更新(BP)

    3. DNN神经网络的正则化

    1. 前言

    神经网络技术起源于上世纪五、六十年代,当时叫感知机(perceptron),拥有输入层、输出层和一个隐含层。输入的特征向量通过隐含层变换达到输出层,在输出层得到分类结果。但是,Rosenblatt的单层感知机有一个严重得不能再严重的问题,即它对稍复杂一些的函数都无能为力。

    随着数学的发展,这个缺点直到上世纪八十年代才被Rumelhart、Williams、Hinton、LeCun等人(反正就是一票大牛)发明的多层感知机(multilayer perceptron)克服。多层感知机,顾名思义,就是有多个隐含层的感知机。

    2. 感知机原理

    我之前博文的感知机原理已经详细的介绍了感知机,现在我们进行一个简单的回顾。

    先看下人工神经元的结构:

    image

    输出是线性的

    [z=sumlimits_{i=1}^mw_ix_i + b ]

    因为感知机是二分类算法,所以会套一个函数:

    [sign(z)= egin{cases} -1& {z<0}\ 1& {zgeq 0} end{cases} ]

    在神经网络中,套在线性变换外面的这个函数称作激活函数,激活函数可以是线性的(f(x) = x),或者是非线性的,例如(sigmoid,tanh,relu)等常用的。

    3. 神经网络原理

    神经网络由大量的人工神经元联结进行计算。大多数情况下人工神经网络能在外界信息的基础上改变内部结构,是一种自适应系统。现代神经网络是一种非线性统计性数据建模工具。典型的神经网络具有以下三个部分:

    1. 结构 (Architecture)
      结构指定了网络中的变量和它们的拓扑关系。例如,神经网络中的变量可以是神经元连接的权重(weights)和神经元的激励值(activities of the neurons)。
    2. 激励函数(Activity Rule) 大部分神经网络模型具有一个短时间尺度的动力学规则,来定义神经元如何根据其他神经元的活动来改变自己的激励值。一般激励函数依赖于网络中的权重(即该网络的参数)。
    3. 学习规则(Learning Rule)学习规则指定了网络中的权重如何随着时间推进而调整。这一般被看做是一种长时间尺度的动力学规则。一般情况下,学习规则依赖于神经元的激励值。它也可能依赖于监督者提供的目标值和当前权重的值。

    神经网络则在感知机的模型上做了扩展,总结下主要有三点:

    • 加入了隐藏层,隐藏层可以有多层,增强模型的表达能力,如下图实例,当然增加了这么多隐藏层模型的复杂度也增加了好多。

    image

    • 输出层的神经元也可以不止一个输出,可以有多个输出,这样模型可以灵活的应用于分类回归,以及其他的机器学习领域比如降维和聚类等。多个神经元输出的输出层对应的一个实例如下图,输出层现在有4个神经元了。

    image

    • 激活函数做扩展,感知机的激活函数是(sign(z)),虽然简单但是处理能力有限,因此神经网络中一般使用的其他的激活函数,比如我们在逻辑回归里面使用过的(Sigmoid)函数,即:

    image

    4. DNN的网络结构

    DNN我们可以理解为多隐层的神经网络,此外,它有时也叫多层感知机(Multi-Layer perceptron,MLP),它内部的神经网络层分为三类,输入层,隐藏层和输出层。

    image

    层与层之间是全连接的,也就是说,第(i)层的任意一个神经元一定与第(i+1)层的任意一个神经元相连。虽然DNN看起来很复杂,但是从小的局部模型来说,还是和感知机一样,即一个线性关系(z=sum{w_ix_i}+b)加上一个激活函数(a=sigma(z))

    5. DNN前向传播过程

    DNN的前向传播算法不算太难。所谓的DNN的前向传播算法也就是利用我们的若干个权重系数矩阵(W),偏倚向量(b)来和输入值向量(x)进行一系列线性运算和激活运算,从输入层开始,一层层的向后计算,一直到运算到输出层,得到输出结果为值。

    输入: 总层数(L),当前层是(l),当前层隐藏层和输出层对应的矩阵(W^l),偏倚向量(b^l),输入值向量(a^{l-1}),神经元个数(dim^l)

    输出:输出层的输出(a^L)

    1. 初始化(a^0=input)
    2. (for;;l=1;;to;;L-1), 计算:

    [a^l=sigma(z^l)=sigma(W^la^{l-1}+b^l) ]

    其中每个变量的维度是(W^l=[dim^l,dim^{l-1}])(a^{l-1}=[dim^{l-1}, batch\_size])(b^l=[dim^l,1])(z^l=[dim^l,batch\_size])(a^l=[dim^l,batch\_size])

    1. 最后的结果即为输出(a^L)

    6. 总结

    我们现在了解了DNN的前向传播的过程,但是我们会有疑问,DNN中如何更新这么多的(W,b)呢,当然还是运用神奇的梯度下降法来更新。在神经网络中运用梯度下降法的过程就是反向更新

  • 相关阅读:
    HDU 1501 Zipper(DFS)
    HDU 2181 哈密顿绕行世界问题(DFS)
    HDU 1254 推箱子(BFS)
    HDU 1045 Fire Net (DFS)
    HDU 2212 DFS
    HDU 1241Oil Deposits (DFS)
    HDU 1312 Red and Black (DFS)
    HDU 1010 Tempter of the Bone(DFS+奇偶剪枝)
    HDU 1022 Train Problem I(栈)
    HDU 1008 u Calculate e
  • 原文地址:https://www.cnblogs.com/huangyc/p/9999855.html
Copyright © 2011-2022 走看看