上一周我们学习了 神经网络 | 多分类问题。我们分别使用 逻辑回归神经网络 来解决多分类问题,并了解到在特征数非常多的情况下,神经网络是更为有效的方法。这周的课程会给出训练 神经网络 所使用的 代价函数,并使用 反向传播 算法来计算梯度。笔者会给出 反向传播 算法中重要的思路和推导,但不会包含所有的计算步骤。

点击 课程视频 你就能不间断地学习 Ng 的课程,关于课程作业的 Python 代码已经放到了 Github 上,点击 课程代码 就能去 Github 查看( 无法访问 Github 的话可以点击 Coding 查看 ),代码中的错误和改进欢迎大家指出。

以下是 Ng 机器学习课程第四周的笔记。

代价函数

假设我们的多分类问题有 个分类,神经网络共有 层,每一层的神经元个数为 ,那么神经网络的 代价函数 为:


其中的第二项为 正则化 项,是网络中所有权值的平方和。第一项与逻辑回归中的 代价函数 类似,但这里我们需要累加所有输出神经元的误差。

梯度计算

为了能够使用 梯度下降 算法来训练网络,我们需要计算代价函数的梯度。一种很直观的方法就是使用数值计算,对于某个 ,给它加上减去一个很小的量 来计算梯度:


但稍微分析一下算法的复杂度就能知道,这样的方法十分缓慢。对于每一组数据,我们需要计算所有权值的梯度,**总的计算次数 = 训练数据个数 x 网络权值个数 x 前向传播计算次数 **。在通常情况下这样的复杂度是无法接受的,所以我们仅使用这个方法来验证 反向传播 算法计算的梯度是否正确。

链式法则

为了能够理解之后对于 反向传播 公式的推导,我们首先要了解一个关于多元复合函数求导的 链式法则。对于多元函数 ,其中 ,那么:


链式法则 告诉我们有多个层次的多元复合函数,下一层次的导数可以由上一层次推得。

上图中笔者有意多加了一层,这里 的函数, 的函数, 的函数。对于要计算的 ,上式仍成立,原因是我们可以把 看作 的函数。这相当于我们把:


简化为了只与上一层相关,利用上一层计算完成的结果 而不用从头算起:


一般的,对于函数 ,如果它能看做 的函数,而 的函数,则:


神经网络就是一个层次很多的多元函数,我们可以隐约从 链式法则 中感觉到反向传播的意味。

公式推导

为了施展 反向传播 的魔法,我们首要要引入一个中间变量 ,定义为:


其中 为第几层, 表示第 层的第几个神经元, 为上次课程提到的中间变量( 为了让式子看上去更清晰,反向传播 中的公式上标不使用括号 )。 被称为第 层第 个神经元的误差。反向传播 就是先计算每一层每个神经元的误差,然后通过误差来得到梯度的。

首先来看输出层的误差:


对它使用 链式法则 得到:


而只有当 时,右边部分才不为 ,所以:


对于其它层的误差:


使用 链式法则


而其中:


求偏导得:


所以:


最后同样使用 链式法则 来计算:


由于:


只有当 时留下一项:


反向传播

有了 (1) (2) (3) 式,就可以来完成 反向传播 算法了( 需要注意的是刚才所推导的式子都是针对一组训练数据而言的 )。

  1. 对于所有的 初始化
  2. 对于 组训练数据, 取到
  • 前向传播,计算各层激活向量
  • 使用 (1) 式,计算输出层误差
  • 使用 (2) 式,计算其它层误差
  • 使用 (3) 式,累加
  1. 计算梯度矩阵:

  1. 更新权值

权值初始化

最后提一下权值的初始化。对于神经网络,不能像之前那样使用相同的 0 值来初始化,这会导致每层的 逻辑单元 都相同。因此我们使用随机化的初始化方法,使得

So~,这周学完了 神经网络 和它的学习算法,大家有没有觉得很神奇呢?

吴恩达机器学习:神经网络 | 反向传播算法相关推荐

  1. 吴恩达机器学习 神经网络 作业1(用已经求好的权重进行手写数字分类) Python实现 代码详细解释

    整个项目的github:https://github.com/RobinLuoNanjing/MachineLearning_Ng_Python 里面可以下载进行代码实现的数据集 题目介绍: In t ...

  2. 吴恩达机器学习 -- 神经网络学习

    9.1 非线性假设 无论是线性回归还是逻辑回归都有这样一个缺点,即:当特征太多时,计算的负荷会非常大. 吴恩达老师举了一个例子: 当我们使用 的多次项式进行预测时,我们可以应用的很好. 之前课程学习过 ...

  3. 吴恩达机器学习神经网络 8-1非线性假设

    Non-linear hypotheses 非线性假设 神经网络实际上是一个相对古老的算法,但是后来沉寂了一段时间,不过现在,它又成为许多机器学习问题的首选技术. 为什么要研究神经网络? 这是一个监督 ...

  4. 吴恩达机器学习 - 神经网络笔记

    第四周 8.神经网络 8.1 非线性假设 图像识别难,计算机看到的是灰度矩阵/RGB存储量x3 8.2 神经元和大脑 假设大脑思维方式不需要成千上万算法,而只需要一个. 躯体感觉皮层进行神经重接(视觉 ...

  5. 吴恩达机器学习神经网络作业(python实现)

    1. 多分类逻辑回归 自动识别手写数字 import numpy as np import pandas as pd import matplotlib.pyplot as plt from scip ...

  6. 吴恩达机器学习作业Python实现(四):神经网络(反向传播)

    吴恩达机器学习系列作业目录 1 Neural Networks 神经网络 在这个练习中,你将实现反向传播算法来学习神经网络的参数.依旧是上次预测手写数数字的例子. 1.1 Visualizing th ...

  7. 吴恩达机器学习——反向传播算法

    吴恩达机器学习--反向传播算法 1.误差 $\delta^{(3)}$, $\delta^{(2)}$的推导 2.反向传播算法的计算过程 前言:反向传播算法是用来求偏导数的,即 σJ(θ)σθij(2 ...

  8. 反向传播算法推导(交叉熵代价函数-吴恩达机器学习)

    0. 前言 第一次看吴恩达老师机器学习视频时, 在9.29.29.2节卡住.看到评论区别人解答(Arch725 的解答)发现有一些疏漏,而且缺少一些铺垫,所以进行了一些修改补充. 本文的反向传播算法的 ...

  9. 吴恩达机器学习(七)神经网络(反向传播)

    目录 0. 前言 1. 代价函数(Cost Function) 2. 反向传播(back propagation) 3. 前向传播和反向传播的结合 4. 梯度检测(gradient checking) ...

  10. 【吴恩达机器学习】第五周课程精简笔记——代价函数和反向传播

    Cost Function and Backpropagation(代价函数和反向传播) 1. Cost Function Let's first define a few variables tha ...

最新文章

  1. java的不足_Java不足之我见
  2. tensorflow常用函数解析
  3. 华为计算黄之鹏:AI开源框架已经到“汽车替代马车”的阶段 | MEET2021
  4. 查拉斯图拉的“没落”
  5. O(n)级选排名第k位数(附上算法复杂度分析)
  6. Android --- 夜神模拟器中没有图片怎么办?夜神模拟器中怎么导入图片?
  7. 多进程 VS 多线程
  8. springboot, thymeleaf 教你快速搭建网站
  9. python中的元组操作
  10. 剑指 Offer 55 - I. 二叉树的深度
  11. 让整个网站变成灰色的做法
  12. X波段雷达对海探测试验与数据获取
  13. 快捷方式全部变成LNK文件修复方法
  14. [网站设计] 素材网罗
  15. 跟着猫哥学Golang 16 - Channel
  16. python3处理excel脚本
  17. 6、T5L DGUS ll 应用开发指南摘录(一)
  18. element-ui el-table 表格渲染错位以及高度计算错误问题
  19. 【数学建模】基于matlab GUI平行停车模拟仿真【含Matlab源码 1877期】
  20. 8、Android Studio 使用MNN进行Swin_Transformer分类识别

热门文章

  1. oracle SEQUENCE 创建, 修改,删除
  2. 使用JMX监控Kafka
  3. Linux(CentOS)安装分区方案
  4. multiprocessing 多进程
  5. 冲刺第三天 1.3 THU
  6. 发射站(2017佛山市选拔初中组)
  7. “防爆”与“防暴” 这两种摄像机差别在哪?
  8. 《Python编程初学者指南》——1.6 回到Game Over程序
  9. CSS/font-size和line-height属性继承的研究
  10. 关于PHP的curl开启问题 (转)