• 神经网络与BP算法


    摘要:本文主要介绍了神经网络的基本概念以及误差反向传播算法的推导。

    1、关于神经网络的几个重要概念

    • 神经元模型:类似于神经元细胞结构的模型。如下图:

     解释:每一个神经元都是相对独立的,将输入的若干个数据经过加权处理之后求和,作为一个总体输入(在上图中就是线性模型),然后将该总体输入作为变量送给激活函数,得到的函数值作为神经元的输出。

    • 激活函数:是神经元模型的核心,也被称为感知器,常用的激活函数如下(sigmoid函数):

    解释:从上面的左图可以看到,当x的值(也就是输入信号的加权和)为负数(一般小于-5时)时,得到的输出值就会变成0,而当输入值较大时则会有比较明确的反应,也就是表明这样的激活函数对信号有选择作用。

    • 神经网络:由很多的神经元按照一定的体系架构形成的网络结构,这个网络结构中包含有很多层,包括输入层、隐含层、输出层,而根据隐含层的数量可以分成深度神经网络(例如几十层、几百层)和浅层神经网络(例如三到五层):

    •  前馈神经网络:信号只向后面一层中传播,开环的网络结构。
    • 目标函数:这个函数存在的意义就是评价输出结果和实际结果的接近程度。一般来讲,越接近,训练的模型精度越高。例如下面的累计误差函数:

     2、梯度下降

    从目标函数J(w)的形式来看,它是关于w的函数,而为了提高训练精度,目标就是求取函数J(w)的最小值,直接通过求取极值的方式来进而获取最小值的方式实施起来是很困难的,所以就采用了梯度下降的方法,如下图:

     在上面的三维图中,纵向的坐标就是J(w)的函数值,横向的坐标就是w值。实现梯度下降的方法是首先随机确定初始点,然后依照梯度下降的方向(这个方向可以用求导的方法得到)按照一定的步长(步长的选取十分关键)进行w值的调整,这样就导致了J(w)值的减小,一直到这个值减小到最小,那么这个时候的权重w就是对应的最佳值,得到的模型也就是最佳模型。也就是说,梯度下降的过程就是寻找最佳w值的过程

    在深度神经网络中,权重w可以分成两个部分:输出层权重和隐含层权重,那么如何调整两种权重呢?或者说如何找到相应的权重改变量呢?其实这个问题可以理解成如何找到梯度下降的方向:

    • 输出层权重该变量获取(如下图):

    •  隐含层权重改变量获取(如下图):

    经过上面两步,于是得到了下图的结果:

    经过上面的步骤就得到权重的改变量,那么在原来的权重基础上加上得到的改变量,于是就获得了新的权重值,开始新一轮计算目标函数。经过很多轮的调整计算之后,最终使得目标函数的值达到一个比较理想的结果。

    3、算法的简单举例:


     
     

     

    4、梯度下降的类型

    找到了梯度下降的方法,那么下一步就是探究梯度下降的类型,例如:

    • 批量梯度下降(BGD):所有的数据都进行每一次的迭代。这样的方法精度很高,但是相应的计算量太大。
    • 随机梯度下降(SGD):一个数据只迭代一次。这样可以极大的减少计算量,但是噪音多,并且不是每一个都可以实现梯度的下降。
    • MBGD每次从全部数据中选取一定比例的数据进行训练,相对而言这种方式最好。
  • 相关阅读:
    从运维角度看中大型网站架构的演变之路
    <经验杂谈>Mysql中字符串处理的几种处理方法concat、concat_ws、group_concat
    <经验杂谈>C#使用AES加密解密的简单介绍
    <经验杂谈>C#对CA证书加密解密的简单介绍
    C#实现HttpUtility.UrlEncode输出大写字母
    <微信应用开发系列>定时刷新AccessToken
    <经验杂谈>C#/.Net字符串操作方法小结
    <经验杂谈>查询表结构的SQL语句
    如何在.Net中使用Redis
    ASP.NET MVC进阶之路:深入理解Controller激活机制并使用Ioc容器创建对象
  • 原文地址:https://www.cnblogs.com/lzy820260594/p/11844512.html
Copyright © 2020-2023  润新知