1. 代价函数(Cost Function)

假设我们拥有一个如下图所示的神经网络,一共有四层,分别是一层输入层,两层隐藏层,一层输出层。下面定义几个变量的意义:

m:训练样本的个数,共有m个样本

L:神经网络的层数,图中为4层

Sl:在第L层的单元个数(不包括偏置单元),比如S3=5

K:输出单元的个数,比如下图K=4

神经网络的输出有两种形式:

①单分类

输出只有一个输出单元,y=0或1

②多分类

加入分K类,那么输出单元为K个,输出的形式为(下图示例为分4类):

那么回归正题,神经网络的代价函数应该是怎么样的呢?神经网络的本质其实就是逻辑回归,我们先看逻辑回归的代价函数:

在逻辑回归的代价函数的基础上我们做一些改变,就得到了神经网络的代价函数:

仔细观察可以发现,第一行表示的是未正则化的代价函数,与逻辑回归的代价函数相比,多了K 的遍历,K是输出单元的个数,m是训练样本的个数,该式子的含义是对于每一个输出单元,都有m个输入与之相关关联。拿上图举例,一共有四个输出,当K=1时,与该输出单元相连的有m个输入单元,则该输出单元的代价函数与逻辑回归时的代价函数一样;当K=2时,同样与之相连的有m个输入单元,当K=3,或者K=4,对于每一个输出单元K,都有m个出入单元与之对应所以第一行所表示的遍历所有的K和m的原因就显而易见了。

公式的第二行是神经网络代价函数的正则化项,为了是缩小参数θ的值防止过拟合。根据正则化的定义,需要将所有的参数θ的平方乘以λ,所以神经网络代价函数的正则化项就包含了所有的参数θ。我们仔细观察一下是否是这样的,L代表的是层数,i代表的是l层的第i个输入单元,j表示的是l+1层的第j个输出单元。所以该式子就是遍历了神经网络的所有参数θ。

注意:在该代价函数中,所有的标记都是从1开始遍历的,也就是说,初始化项并不包含在该代价函数中,需要另行计算。

2. 反向传播算法(Backpropagation algorithm)

现在为了计算代价函数的偏导数:

需要一种算法,即反向传播算法,首先计算最后一层的误差,然后再一层一层反向求出各层的误差直到输入层。下面举例:

假设我们的训练集只有一个实例:

我们的神经网络是一个四层的神经网络,其中:

四层的神经网络如下图所示:

首先进行前向传播算法:

我们从最后一层的误差开始计算,误差是激活单元的预测与实际值之间的误差,我们用δ表示误差,则最后一层的误差可以表示为:

我们利用这个误差来计算前一层(第三层)的误差:

其中表示的是权重导致的误差的和,而g'(z)是sigmoid函数的导数,可以写成:

同理,下一步是继续计算第二层的误差:

第一层是输入层,不存在误差。我们有了所有的误差的表达式后,便可以计算代价函数的偏导数了,在不做任何正则化处理时有:

其中

l 表示目前所计算的是第几层

j 表示目前计算层中的激活单元的下标,也是下一层的第j个输入变量的下标

i 表示下一层中误差单元的下标,是受到权重矩阵中第i行影响的下一层中的误差单元的下标。

看到未正则化的偏导数公式可能有点不理解,下面通过举例对该式子进行推导

假设我们要计算第三层的某个权重的偏导数,我们可以这么做:

为了方便起见,假设代价函数为平方误差函数(交叉熵也可以。平方误差函数多用于回归,交叉熵用于分类),我们可以表示为:

其中:

对某一权重求偏导可以表示为复合函数的偏导数:

其中:

那么对于某一权重的偏导数可以表示为:

上式可以拆分为一下几个式子:

所以最终的偏导数可以表示为:

这和不做正则化处理的代价函数的偏导数一致:

3. 正则化(Regularization)

如果要考虑正则化处理,并且我们的训练集是一个特征矩阵而非向量。在上面的特殊情况中,我们需要计算每一层的误差单元来计算代价函数的偏导数。在更为一般的情况中,我们同样需要计算每一层的误差单元,但是我们需要为整个训练集计算误差单元,此时的误差单元也是一个矩阵,我们用下面这个符号来表示这个误差矩阵:

表示第l层的第i个激活单元受到第j个参数影响而导致的误差。我们的算法表示为:

该算法的流程即首先用正向传播方法计算出每一层的激活单元,利用训练集的结果与神经网络预测的结果求出最后一层的误差,然后利用该误差运用反向传播计算出直至第二层的所有误差。我们可以根据以下公式计算代价函数的偏导数:

4. 梯度检验(Gradient Checking)

当我们对一个较为复杂的模型(例如神经网络)使用梯度下降算法时,可能会存在些不容易察觉的错误,意味着虽然代价看上去在断减小但最终结果可能并不是最优解。为了避免该问题,我们可以采用梯度检验的方法。这种方法的思想是通过估计梯度值来检验我们计算的导数值是否真的是我们要求的。对

梯度的估计采用的方法是在代价函数上沿着切线的方向选择离两个非常近的点然后计算两个点的平均值用以估计梯度。即对于某个特定的θ,我们计算θ-ε处和θ+ε处的代价值(ε是一个非常小的值,通常选取0.001),然后求两个代价的平均,用以估计在θ处的代价值。

当θ是一个向量的时候,我们则需要对偏导数进行检验。因为代价函数的偏导数检验只针对一个参数的改变进行检验,下面是一个只针对θ1检验的示例:

我们只需要对比梯度下降时的在θ1出的梯度和上式计算出的类梯度进行对比,如果相差不大即运行没有错误。

5. 随机初始化(Random Initialization)

对于神经网络,千万不可将权重初始化为0,因为这种网络起不到任何学习的效果。而且,禁止将权重设定为相同的恒定值,这样的网络也失去了学习能力。随机初始化的经验规则是,我们可以在一个节点传入链接数量平方根倒数的大致范围内随机采样,初始化权重。因此,如果每个节点具有3条传入链接,那么初始权重的范围应该在:

即±0.577之间,如果每个节点具有100条传入链接,那么权重的范围应该在:

即±0.1之间

6. 总结(Putting it Together)

网络结构:第一件要做的事就是选择网络结构,即选择多少层以及决定每层分别有多少个单元。

第一层的单元数即我们训练集的特征数量

最后一层的单元数是我们训练集的结果的类的数量

如果隐藏层数大于1,确保每个隐藏层的单元个数相同们通常情况下 隐藏层单元的个数越多越好。

我们真正要决定的是隐藏层的层数和每个中间层的层数

训练神经网络:

① 参数的随机初始化

② 利用正向传播方法计算所有的h(x)

③ 编写计算单价函数J的代码

④ 利用反向传播方法计算所有偏导数

⑤ 利用数值检验的方法检验这些偏导数

⑥ 使用优化算法来最小化代价函数

入门机器学习(八)--神经网络参数的反向传播算法相关推荐

  1. 吴恩达机器学习 7.神经网络参数的反向传播算法

    1.神经网络算法的代价函数 标记方法 神经网络的训练样本有m个 每个包含一组输入x和一组输出信号y L表示神经网络层数 SIS_ISI​表示每层的神经元个数 SlS_lSl​表示输出层的神经元个数 S ...

  2. 吴恩达机器学习笔记 —— 10 神经网络参数的反向传播算法

    http://www.cnblogs.com/xing901022/p/9350271.html 本篇讲述了神经网络的误差反向传播以及训练一个神经网络模型的流程 更多内容参考 机器学习&深度学 ...

  3. 吴恩达《机器学习》课程总结(8)_神经网络参数的反向传播算法

    Q1代价函数 (1)假设神经网络的训练样本有m个,每一个包含一组输入x和一组输出信号y,L表示神经网络的层数,Sl表示每一层的神经元个数,SL代表最后一层中处理单元的个数. 则代价函数为(同样不对θ0 ...

  4. 【深度学习】神经网络基础:反向传播算法

    作者:Simona Ivanova AI/ML  专家 就职于 Science 杂志   导读 反向传播(Backpropagation,简称 BP)是目前用来训练人工神经网络(Artificial ...

  5. 【机器学习】详解 BackPropagation 反向传播算法!

    首先介绍一下链式法则 假如我们要求z对x1的偏导数,那么势必得先求z对t1的偏导数,这就是链式法则,一环扣一环 BackPropagation(BP)正是基于链式法则的,接下来用简单的前向传播网络为例 ...

  6. 100天搞定机器学习|day37 无公式理解反向传播算法之精髓

     100天搞定机器学习(Day1-34) 100天搞定机器学习|Day35 深度学习之神经网络的结构 100天搞定机器学习|Day36 深度学习之梯度下降算法 本篇为100天搞定机器学习之第37天,亦 ...

  7. 机器学习(深度学习)中的反向传播算法与梯度下降

    这是自己在CSDN的第一篇博客,目的是为了给自己学习过的知识做一个总结,方便后续温习,避免每次都重复搜索相关文章. 一.反向传播算法 定义:反向传播(Backpropagation,缩写为BP)是&q ...

  8. 反向算法_10分钟带你了解神经网络基础:反向传播算法详解

    作者:Great Learning Team deephub.ai 翻译组 1.神经网络 2.什么是反向传播? 3.反向传播是如何工作的? 4.损失函数 5.为什么我们需要反向传播? 6.前馈网络 7 ...

  9. 神经网络之误差反向传播算法推导

    原理 误差反向传播算法是通过误差函数计算实际输出值与期望输出值之间的误差,把误差从最后的输出层依次传播到之前各层,最后通过调整各层连接权重与偏置达到减小误差的目的.而权重和偏置的调整一般使用梯度下降法 ...

最新文章

  1. rpm方式安装mysql5.7.24_linux centOS 7安装mysql 5.7.24
  2. 7 兼容 因特尔十代_年终抄底十代酷睿 请务必看看它……- ——快科技(驱动之家旗下媒体)-...
  3. 关于软件项目工作量估算的若干问题
  4. RoBERTa中文预训练模型:RoBERTa for Chinese
  5. Xcode 7 App Transport Security has blocked a cleartext HTTP 报错解决办法
  6. Java算法之移除元素
  7. Maven多个mudule只编译、打包指定module
  8. 程序竞赛中常用的C字符串函数
  9. James+Javamail构建邮箱服务
  10. 光伏发电仿真系列-光伏并网发电系统研究
  11. Go语言150行代码搞定苹果Apns高并发推送
  12. 微信云开发-后端-快速上手
  13. 国内外对于GaN中Fe相关点缺陷结构的局域特性的研究进展
  14. FALL_20_NOTE EDAV「Exploratory Data Analysis and Visualization」图像可视化
  15. lumen php命令,laravel/lumen —— Artisan Console 命令行
  16. css字体样式渐变导致360浏览器vue兼容性问题
  17. 冒泡排序及其时间、空间复杂度解析
  18. maya导入arnold代理ass文件后,无法修改ass内贴图路径问题的解决方法
  19. Maven 中跳过单元测试方法
  20. 迎接混合云时代 IBM云计算发展大提速

热门文章

  1. php js对话框,JavaScript_js弹出框、对话框、提示框、弹窗实现方法总结(推荐),一、JS的三种最常见的对话框- phpStudy...
  2. MobileNet论文笔记
  3. vue.js表格赋值_vue.js input框之间赋值方法
  4. Java基础---学Java怎么能不了解多线程---Lambda表达式
  5. PyCharm Python迁移项目
  6. linux freopen函数
  7. Redis从基础命令到实战之散列类型(Hash)
  8. 一步步学敏捷开发:6、Scrum的3种工件
  9. 垂直型电商的投资魔法
  10. [03] Android系统亮度调节