关于吴恩达机器学习中反向传播的理解

这篇具有很好参考价值的文章主要介绍了关于吴恩达机器学习中反向传播的理解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

title: 关于吴恩达机器学习中反向传播的理解
date: 2022-04-12
categories: 数学
mathjax: true
tags:
- 机器学习
- 线性代数

原文

在机器学习视频反向传播章节[1]中:

我们用 \(\delta\) 来表示误差,则: \(\boldsymbol\delta^{\left(4\right)}=\boldsymbol a^{\left(4\right)}−\boldsymbol y\) 。我们利用这个误差值来计算前一层的误差:

\(\boldsymbol\delta^{\left(3\right)}=\left(\boldsymbol\Theta^{\left(3\right)}\right)^T\boldsymbol\delta^{\left(4\right)}\cdot g^\prime\left(\boldsymbol z^{\left(3\right)}\right)\) 。其中 \(g^\prime\left(\boldsymbol{z}^{\left(3\right)}\right)\)\(S\) 形函数的导数,

\(g^\prime\left(\boldsymbol z^{\left(3\right)}\right)=\boldsymbol a^{\left(3\right)}\cdot\left(1−\boldsymbol a^{\left(3\right)}\right)\) 。而 \(\left(\boldsymbol\Theta^{\left(3\right)}\right)^T\boldsymbol\delta^{\left(4\right)}\) 则是权重导致的误差的和。

问题

\[\boldsymbol\delta^{\left(3\right)}=\left(\boldsymbol\Theta^{\left(3\right)}\right)^T\boldsymbol\delta^{\left(4\right)}\cdot g^\prime\left(\boldsymbol z^{\left(3\right)}\right) \]

看到这道算式时我百思不得其解。为什么凭空会有转置?

在我自己推一遍之后,发现原公式中可能有些不严谨的地方,所以在此阐述我的理解,欢迎大家指正:

前提

对数似然代价函数: \(J\left(\Theta\right)=y\ln h_\Theta\left(x\right)+\left(1-y\right)\ln\left(1-h_\Theta\left(x\right)\right)\)

估计函数: \(h_\Theta\left(x\right)=\sum_i\Theta_ix_i= \begin{bmatrix}\Theta_1&\Theta_2&\cdots&\Theta_n\end{bmatrix} \begin{bmatrix}x_1\\x_2\\\vdots\\x_n\end{bmatrix}\)

Logistic激活函数: \(g\left(x\right)=\frac1{1+{\rm e}^{-x}}\)

此外激活函数导数为: \(g^\prime\left(x\right)=g\left(x\right)\left[1-g\left(x\right)\right]\)

我的理解

flowchart LR x1--"(Θ<sub>1</sub><sup>(1)</sup>)<sub>1</sub>"-->z12 x1--"(Θ<sub>1</sub><sup>(1)</sup>)<sub>2</sub>"-->z22 x2--"(Θ<sub>2</sub><sup>(1)</sup>)<sub>1</sub>"-->z22 x2--"(Θ<sub>2</sub><sup>(1)</sup>)<sub>2</sub>"-->z12 a12--"(Θ<sub>1</sub><sup>(2)</sup>)<sub>1</sub>"-->z13 a12--"(Θ<sub>1</sub><sup>(2)</sup>)<sub>2</sub>"-->z23 a22--"(Θ<sub>2</sub><sup>(2)</sup>)<sub>1</sub>"-->z23 a22--"(Θ<sub>2</sub><sup>(2)</sup>)<sub>2</sub>"-->z13 z12--g-->a12 z22--g-->a22 z13--g-->a13 z23--g-->a23 a13-.->y1-.->j a23-.->y2-.->j subgraph x x1((x<sub>1</sub>)) x2((x<sub>2</sub>)) end subgraph 第一层 direction LR z12(("z<sub>1</sub><sup>(2)</sup>")) a12(("a<sub>1</sub><sup>(2)</sup>")) z22(("z<sub>2</sub><sup>(2)</sup>")) a22(("a<sub>2</sub><sup>(2)</sup>")) end subgraph 第二层 z13(("z<sub>1</sub><sup>(3)</sup>")) a13(("a<sub>1</sub><sup>(3)</sup>")) z23(("z<sub>2</sub><sup>(3)</sup>")) a23(("a<sub>2</sub><sup>(3)</sup>")) end subgraph y y1((ŷ<sub>1</sub>)) y2((ŷ<sub>2</sub>)) end j(("J(θ)"))

如图(省略了偏置),输入数据\(\boldsymbol x=\begin{bmatrix}x_1\\x_2\end{bmatrix}\)实际输出\(\boldsymbol y=\begin{bmatrix}y_1\\y_2\end{bmatrix}\)

这张图上表示了所有的运算,例如:

\[a_1^{\left(2\right)}=g\left(z_1^{\left(2\right)}\right) \]
\[z_2^{\left(2\right)}=\left(\Theta_1^{\left(1\right)}\right)_2x_1+\left(\Theta_2^{\left(1\right)}\right)_2x_2 \]

同时,此图认为预测输出\(\hat y_1=a_1^{\left(3\right)}\) ,即有误差(注意此处不是定义而是结论):

\[\delta_1^{\left(3\right)}=\hat y_1-y_1=a_1^{\left(3\right)}-y_1 \]

下面我们将上列函数改写成对应元素的写法,先作定义:

  • \(L\) :被 \(\Theta\) 作用的层

  • \(m\)\(L\) 层单元数量,用 \(j\) 进行遍历(即 \(j\in\left\{1,2,\cdots,m\right\}\)

  • \(n\)\(L+1\) 层单元数量,用 \(i\) 进行遍历

推导

综上可得,若 \(L\) 是倒数第二层,则给出定义

\[\begin{align*}\delta_i^{\left(L+1\right)} &=\frac{\partial J}{\partial z_i^{\left(L+1\right)}}\\ &=\frac{\partial J}{\partial a_i^{\left(L+1\right)}}&&\cdot \frac{\partial a_i^{\left(L+1\right)}}{\partial z_i^{\left(L+1\right)}}\\ &=\left(\frac{-y_i}{a_i^{\left(L+1\right)}}+\frac{1-y_i}{1-a_i^{\left(L+1\right)}}\right)&&\cdot g^\prime z_i^{\left(L+1\right)}\\ &=\left(\frac{-y_i}{a_i^{\left(L+1\right)}}+\frac{1-y_i}{1-a_i^{\left(L+1\right)}}\right)&&\cdot a_i^{\left(L+1\right)}\left(1-a_i^{\left(L+1\right)}\right)\\ &=a_i^{\left(L+1\right)}-y_i \end{align*}\]

将同一层 \(\delta_i^{\left(L+1\right)}\) 合并为矩阵得( \(\boldsymbol\delta,\boldsymbol a,\boldsymbol y\) 都是列向量):

\[\boldsymbol\delta^{\left(L+1\right)}=\boldsymbol a^{\left(L+1\right)}-\boldsymbol y \]

下面推隐含层,以第一个单元为例:

\[\begin{align*} \delta_1^{\left(2\right)}&=\frac{\partial J}{\partial z_1^{\left(2\right)}}\\ &=\frac{\partial J}{\partial z_1^{\left(3\right)}}&& \cdot\frac{\partial z_1^{\left(3\right)}}{\partial a_1^{\left(2\right)}}&& \cdot\frac{\partial a_1^{\left(2\right)}}{\partial z_1^{\left(2\right)}}&&+ \frac{\partial J}{\partial z_2^{\left(3\right)}}&& \cdot\frac{\partial z_2^{\left(3\right)}}{\partial a_1^{\left(2\right)}}&& \cdot\frac{\partial a_1^{\left(2\right)}}{\partial z_1^{\left(2\right)}}\\ &=\delta_1^{\left(3\right)}&& \cdot\left(\Theta_1^{\left(2\right)}\right)_1&& \cdot g^\prime z_1^{\left(2\right)}&&+ \delta_2^{\left(3\right)}&& \cdot\left(\Theta_1^{\left(2\right)}\right)_2&& \cdot g^\prime z_1^{\left(2\right)} \end{align*}\]

令:

\[\left\{\begin{align*} \boldsymbol\delta^{\left(L\right)}&=\begin{bmatrix}\delta_1^{\left(L\right)}\\\delta_2^{\left(L\right)}\\\vdots\\\delta_n^{\left(L\right)}\end{bmatrix}\\ \boldsymbol\Theta_i^{\left(L\right)}&=\begin{bmatrix} \left(\Theta_i^{\left(L\right)}\right)_1& \left(\Theta_i^{\left(L\right)}\right)_2& \cdots& \left(\Theta_i^{\left(L\right)}\right)_n \end{bmatrix}\end{align*}\right.\]

可将上式化为矩阵:

\[\delta_1^{\left(2\right)} =\boldsymbol\Theta_1^{\left(2\right)}\boldsymbol\delta^{\left(3\right)} \cdot g^\prime z_1^{\left(2\right)}\]

结论

由上,可写出递推普式

\[\delta_j^{\left(L\right)} =\boldsymbol\Theta_j^{\left(L\right)}\boldsymbol\delta^{\left(L+1\right)}\cdot g^\prime z_j^{\left(L\right)}\]

其中最后一层:

\[\boldsymbol\delta^{\left(Last\right)}=\boldsymbol a^{\left(Last\right)}-\boldsymbol y \]

  1. 机器学习视频反向传播章节 ↩︎文章来源地址https://www.toymoban.com/news/detail-788582.html

到了这里,关于关于吴恩达机器学习中反向传播的理解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 吴恩达《机器学习》5-6:向量化

    在深度学习和数值计算中,效率和性能是至关重要的。一个有效的方法是使用向量化技术,它可以显著提高计算速度,减少代码的复杂性。接下来将介绍向量化的概念以及如何在不同编程语言和工具中应用它,包括 Octave、MATLAB、Python、NumPy、C和C++。 一、什么是向量化? 向量

    2024年02月05日
    浏览(43)
  • 吴恩达机器学习2022-Jupyter

    在这个实验室中,您将扩展数据结构和以前开发的例程,以支持多个特性。一些程序被更新使得实验室看起来很长,但是它对以前的程序做了一些小的调整使得它可以很快的回顾。 扩展我们的回归模型例程以支持多个特性 扩展数据结构以支持多个特性 重写预测,成本和梯度

    2024年02月16日
    浏览(43)
  • 【机器学习】吴恩达课程1-Introduction

    计算机程序从经验E中学习,解决某一任务T,进行某一性能P,通过P测定在T上的表现因经验E而提高。 跳棋程序 E:程序自身下的上万盘棋局 T:下跳棋 P:与新对手下跳棋时赢的概率 给算法一个数据集,其中包含了正确答案,算法的目的是给出更多的正确答案。 (1)预测房价

    2024年02月16日
    浏览(43)
  • 吴恩达《机器学习》2-2->2-4:代价函数

    一、代价函数的概念 代价函数是在监督学习中用于评估模型的性能和帮助选择最佳模型参数的重要工具。它表示了模型的预测输出与实际目标值之间的差距,即建模误差。代价函数的目标是找到使建模误差最小化的模型参数。 二、代价函数的理解 训练集数据 :假设我们有一

    2024年02月07日
    浏览(36)
  • 吴恩达471机器学习入门课程1第3周——逻辑回归

    实施逻辑回归并将其应用于两个不同的数据集。 在这一部分中,你将建立一个逻辑回归模型来预测学生是否被大学录取。 2.1、问题描述 假设你是一所大学部门的管理员,并且想要根据每个申请人在两次考试中的成绩来确定他们被录取的机会。 你有先前申请者的历史数据,可

    2024年02月09日
    浏览(42)
  • 吴恩达机器学习2022-Jupyter-用scikitlearn实现线性回归

    有一个开源的、商业上可用的机器学习工具包,叫做 scikit-learn。本工具包包含您将在本课程中使用的许多算法的实现。 您将利用 scikit-learn 以及 matplotlib 和 NumPy 中的函数。 Scikit-learn 的线性回归模型实现了一种封闭式的线性回归。 让我们使用早期实验室的数据——一栋1000平

    2024年02月16日
    浏览(41)
  • 吴恩达机器学习2022-Jupyter-用scikitlearn实现逻辑回归

    使用 scikit-learn 培训 Logit模型模型。 下面的代码导入了 scikit-learn 的 Logit模型模型。您可以通过调用 fit 函数将此模型适合于训练数据。 输出: 通过调用预测函数,您可以看到这个模型所做的预测。 输出: 您可以通过调用 score 函数来计算这个模型的精度。 输出:

    2024年02月16日
    浏览(36)
  • 吴恩达《机器学习》6-1->6-3:分类问题、假设陈述、决策界限

    一、什么是分类问题? 在分类问题中,我们试图预测的变量𝑦是离散的值,通常表示某种类别或标签。这些类别可以是二元的,也可以是多元的。分类问题的示例包括: 判断一封电子邮件是否是垃圾邮件(二元分类) 判断一次金融交易是否涉及欺诈(二元分类) 区分肿瘤

    2024年02月05日
    浏览(43)
  • 吴恩达机器学习2022-Jupyter-Scikit-Learn教学

    有一个开源的、商业上可用的机器学习工具包,叫做 scikit-learn。本工具包包含您将在本课程中使用的许多算法的实现。 在这个实验室里: 利用 scikit-学习使用线性回归梯度下降法来实现 您将利用 scikit-learn 以及 matplotlib 和 NumPy 中的函数。 Scikit-learn 有一个梯度下降法回归模型

    2024年02月16日
    浏览(32)
  • 吴恩达471机器学习入门课程3第1周——K-means

    实现 K-means 算法,并将其用于图像压缩。 您将从一个样本数据集开始,帮助您获得 K-means 算法的工作概述 然后,您将使用 K-means 算法进行图像压缩,将出现在图像中的颜色数量减少到仅包括那些在该图像中最常见的颜色。 K-means 算法是一种自动将相似数据点聚合在一起的方

    2024年02月11日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包