zoukankan      html  css  js  c++  java
  • Lecture4 反向传播算法

      先放两个链接

      https://www.zhihu.com/question/27239198/answer/89853077

      https://www.cnblogs.com/charlotte77/p/5629865.html

    参数的展开

      在使用高级优化方法训练神经网络模型时(fminunc),需要以向量形式传递参数,而我们在神经网络中的$ heta_{1},,, heta_{l-1}$均为矩阵形式。这是我们需要将参数展开后传入fminunc函数。相应的,在计算代价函数及梯度的函数中,我们也需要将参数改为向量形式,并在计算之前先将向量形式的参数恢复为矩阵形式。

      具体的展开和恢复代码:

    thetaVec=[Theta1(:);Theta2(:)];
    
    Theta1=reshape(thetaVec(1:110),10,11);

    梯度检测

      实现反向传播算法经常会出现一些不易被发现的bug,为了得到期望的结果,我们在训练模型之前要先对梯度进行检测。

      检测方法,用传统的方法计算出代价函数对每一个参数的倒数,然后与梯度进行对比,若两者近似相等,则检测通过。

      注意:不能用传统的计算倒数的方法来训练模型,这样计算量相当大。

    随机初始化

      如果像之前那样,在进行训练之前将所有参数初始化为0,则会引起每一层内的参数及a均相同,则训练毫无意义,这称为对称权重问题 。

      解决方法是,我们把参数设为[-ε,ε]内的随机值,设置方法为:

    Theta1=rand(10,11)*(2*boundary)-boundary;

      往往把初始化后的梯度缩到很小的范围,防止梯度弥散:https://blog.csdn.net/Mr_health/article/details/84671456

    人工神经网络方法总结

       1.随机初始化权重(参数)。

      2.进行前向传播,求出对于每一个样例的h(x)

      3.求出代价函数J(Θ)

      4.反向传播以求出梯度

      5.将梯度与手动求的导数对比

      6.使用梯度下降法或者高级优化方法训练模型

  • 相关阅读:
    GIT
    JS常用功能
    prop checkbox 是否选中的问题。
    关于 未能加载文件或程序集“MySql.Web.v20 ...... 的问题
    Codeforces Round #535(div 3) 简要题解
    [Codeforces 600E] Lomsat gelral
    [PA 2011] Journeys
    [HNOI 2012] 永无乡
    [ONTAK2010] Peaks
    [BZOJ 3307] 雨天的尾巴
  • 原文地址:https://www.cnblogs.com/cs-zzc/p/11316821.html
Copyright © 2011-2022 走看看