zoukankan      html  css  js  c++  java
  • 吴恩达《机器学习》第九章:神经网络的学习

    九、神经网络的学习

    9.1 代价函数

    在这里插入图片描述
    ???

    9.2 反向传播算法

    Back Propagation => BP神经网络
    在这里插入图片描述
    δ表示误差值,输出的aj(4)与yi的差值;

    先计算结果,在根据误差调整参数,原理和逻辑回归差不多,只是过程复杂了,这个误差就是反向传播算法得到的,而结果则是前向传播算法得出;
    前向输出,反向求参
    在这里插入图片描述

    9.3 理解反向传播

    这是前向传播:
    在这里插入图片描述
    在这里插入图片描述
    再看反向传播:
    在这里插入图片描述

    9.4 梯度检验

    使用神经网络进行类梯度下降算法时,最好附加使用梯度检验,能让算法优化一个级别以上,它能保证前向、反向传播百分之百正确;

    曲线上某点的导数的近似值:双侧差分
    在这里插入图片描述
    上面考虑θ是一个实数值的情况,下面则会进一步将θ看作向量:
    在这里插入图片描述

    for i = 1 :n,
    	thetaPlus = theta;
    	thetaPlus(i) = thetaPlus(i) + EPSILON;
    	thetaMinus = theta;
    	thetaMinus(i) = thetaMinus(i) - EPSILON ;
    	gradApprox(i) = (J(thetaPlus) - J( thetaMinus) )/(2*EPSILON);
    end;
    

    接下来检验这个 gradApprox ≈ DVec(反向传播得到的导数),从而验证反向传播是正确的;

    整体步骤:

    • 通过反向传播来计算DVec(D(1),D(2),D(3)的展开形式);
    • 实现数值上的梯度检验,计算出gradApprox;
    • 确保gradApprox和DVec是相似的值;
    • 在训练样本/运行算法前,gradApprox检验程序务必要关闭,因为这个计算导数的程序需要很大的计算量,计算速度很慢,而反向传播中DVec的计算是高性能的;

    如果在每次循环,或者每次梯度下降,都进行一次梯度检验,那么程序就会变得非常慢;

    9.5 随机初始化

    如何对θ初始化?

    • 将所以参数初始化为0,在逻辑回归中是允许的,但在训练网络时基本起不到作用;因为在网络训练时,权重都初始化为0,意味着虽然每次都会梯度下降,但θ01(1)=θ02(1)的,这两个参数始终相等,且都不为零; 在这里插入图片描述
    • 为了解决上面这个问题,神经网络中参数的初始化要具有随机化的思想,打破对称性;
      在这里插入图片描述

    9.6 总体回顾

    • 第一步:选择神经网络架构;根据输入单元和输出单元个数选择合适的神经网络架构,一般隐藏层默认为1层(也是最常用的),如果选择大于1层,应保证每个隐藏层的单元个数相等;
      在这里插入图片描述
    • 第二步:训练神经网络;
      • 随机初始化权重,权重很小,接近于0;
      • 执行前向传播,即根据输入的x(1)得到hθ(x(i)),就是y值;
      • 通过代码计算代价函数;
      • 执行反向传播,算出偏导数项,也就是J(θ)关于参数θ的偏导数;
      • 用for循环对每一个样本执行前向传播和反向传播,特别是第一次使用反向传播时,建议用for循环;
        在这里插入图片描述
      • 梯度检验,将这些偏导数值和数值方法得到的估计值进行比较;如果接近,则说明反向传播计算结果正确;
      • 选择一个优化方法,也可以使用高级优化方法,内置到fminunc中,与反向传播相结合,从而最小化J(θ);对于神经网络,代价函数J(θ)为非凸函数,理论上可能停留在局部最小值;虽然不能确定是不是得到的全局最优值,但梯度下降法这样的优化方法通常表现不错,也能得到一个很小的局部最优值;
        在这里插入图片描述

    9.7 神经网络举例:无人驾驶

    在这里插入图片描述
    也需要驾驶员驾驶几分钟,让神经网络充足地学习了,在能够进行简单的自动驾驶,当前面都是路(传来的图片是一整块白色的时),神经网络学习的置信度明显下降,当又走到双车道,回到原来的那样子时,置信度又上升了;

  • 相关阅读:
    Java集合中迭代器
    java 基础归纳总结(三)
    java 基础归纳总结(二)
    java 基础归纳总结(一)
    python之hashlib模块
    python之configparser模块
    Python之time模块
    python之os模块
    python之random模块
    python generator(生成器)
  • 原文地址:https://www.cnblogs.com/Luweir/p/14147217.html
Copyright © 2011-2022 走看看