向量化实现的解释

先对几个样本计算一下前向传播,看看有什么规律:

公式1.16:

\(z^{[1](1)} = W^{[1]}x^{(1)} + b^{[1]}\)

\(z^{[1](2)} = W^{[1]}x^{(2)} + b^{[1]}\)

\(z^{[1](3)} = W^{[1]}x^{(3)} + b^{[1]}\)

这里,为了描述的简便,先忽略掉 \(b^{[1]}\)后面将会看到利用Python 的广播机制,可以很容易的将\(b^{[1]}\) 加进来。

现在 \(W^{[1]}\) 是一个矩阵,\(x^{(1)},x^{(2)},x^{(3)}\)都是列向量,矩阵乘以列向量得到列向量,下面将它们用图形直观的表示出来:

公式1.17:

\[W^{[1]} x =
\left[
\begin{array}{ccc}
\cdots \\
\cdots \\
\cdots \\
\end{array}
\right]

\left[
\begin{array}{c}
\vdots &\vdots & \vdots & \vdots \\
x^{(1)} & x^{(2)} & x^{(3)} & \vdots\\
\vdots &\vdots & \vdots & \vdots \\
\end{array}
\right]
=
\left[
\begin{array}{c}
\vdots &\vdots & \vdots & \vdots \\
w^{(1)}x^{(1)} & w^{(1)}x^{(2)} & w^{(1)}x^{(3)} & \vdots\\
\vdots &\vdots & \vdots & \vdots \\
\end{array}
\right]
=\\
\left[
\begin{array}{c}
\vdots &\vdots & \vdots & \vdots \\
z^{[1](1)} & z^{[1](2)} & z^{[1](3)} & \vdots\\
\vdots &\vdots & \vdots & \vdots \\
\end{array}
\right]
=
Z^{[1]}
\]

当加入更多样本时,只需向矩阵\(X\)中加入更多列。

所以从这里也可以了解到,为什么之前对单个样本的计算要写成

\(z^{[1](i)} = W^{[1]}x^{(i)} + b^{[1]}\)

这种形式,因为当有不同的训练样本时,将它们堆到矩阵\(X\)的各列中,那么它们的输出也就会相应的堆叠到矩阵 \(Z^{[1]}\) 的各列中。现在就可以直接计算矩阵 \(Z^{[1]}\) 加上\(b^{[1]}\),因为列向量 \(b^{[1]}\) 和矩阵 \(Z^{[1]}\)的列向量有着相同的尺寸,而Python的广播机制对于这种矩阵与向量直接相加的处理方式是,将向量与矩阵的每一列相加。

所以这一篇只是说明了为什么公式 \(Z^{[1]} =W^{[1]}X + \ b^{[1]}\)是前向传播的第一步计算的正确向量化实现,但事实证明,类似的分析可以发现,前向传播的其它步也可以使用非常相似的逻辑,即如果将输入按列向量横向堆叠进矩阵,那么通过公式计算之后,也能得到成列堆叠的输出。

最后,对近期两篇博客的内容做一个总结(另一篇博客地址:https://www.cnblogs.com/oten/p/17828716.html):

由公式1.12、公式1.13、公式1.14、公式1.15可以看出,使用向量化的方法,可以不需要显示循环,而直接通过矩阵运算从\(X\)就可以计算出 \(A^{[1]}\),实际上\(X\)可以记为 \(A^{[0]}\),使用同样的方法就可以由神经网络中的每一层的输入 \(A^{[i-1]}\) 计算输出 \(A^{[i]}\)。其实这些方程有一定对称性,其中第一个方程也可以写成\(Z^{[1]} = W^{[1]}A^{[0]} + b^{[1]}\),看这对方程,还有这对方程形式其实很类似,只不过这里所有指标加了1。所以这样就显示出神经网络的不同层次,知道大概每一步做的都是一样的,或者只不过同样的计算不断重复而已。这里有一个双层神经网络,随着网络的深度变大,基本上也还是重复这两步运算,只不过是比这里看到的重复次数更多。在更深层次的神经网络中,随着层数的加深,基本上也还是重复同样的运算。

以上就是对神经网络向量化实现的正确性的解释,到目前为止,仅使用sigmoid函数作为激活函数,但事实上这并非最好的选择,在下一篇博客中,将会继续深入的讲解如何使用更多不同种类的激活函数。

神经网络入门篇:详解向量化实现的解释(Justification for vectorized implementation)的更多相关文章

  1. PHP函数篇详解十进制、二进制、八进制和十六进制转换函数说明

    PHP函数篇详解十进制.二进制.八进制和十六进制转换函数说明 作者: 字体:[增加 减小] 类型:转载   中文字符编码研究系列第一期,PHP函数篇详解十进制.二进制.八进制和十六进制互相转换函数说明 ...

  2. 走向DBA[MSSQL篇] 详解游标

    原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...

  3. java 日志体系(三)log4j从入门到详解

    java 日志体系(三)log4j从入门到详解 一.Log4j 简介 在应用程序中添加日志记录总的来说基于三个目的: 监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作: 跟踪代 ...

  4. Scala进阶之路-Scala函数篇详解

    Scala进阶之路-Scala函数篇详解 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.传值调用和传名调用 /* @author :yinzhengjie Blog:http: ...

  5. (十八)整合Nacos组件,环境搭建和入门案例详解

    整合Nacos组件,环境搭建和入门案例详解 1.Nacos基础简介 1.1 关键特性 1.2 专业术语解释 1.3 Nacos生态圈 2.SpringBoot整合Nacos 2.1 新建配置 2.2 ...

  6. es6入门4--promise详解

    可以说每个前端开发者都无法避免解决异步问题,尤其是当处理了某个异步调用A后,又要紧接着处理其它逻辑,而最直观的做法就是通过回调函数(当然事件派发也可以)处理,比如: 请求A(function (请求响 ...

  7. Django入门基础详解

    本次使用django版本2.1.2 安装django 安装最新版本 pip install django 安装指定版本 pip install django==1.10.1 查看本机django版本 ...

  8. 日志处理(一) log4j 入门和详解(转)

    log4j  入门. 详解 转自雪飘寒的文章 1. Log4j  简介 在应用程序中添加日志记录总的来说基于三 个目的:    监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作 ...

  9. JPA入门案例详解(附源码)

    1.新建JavaEE Persistence项目

  10. 从零开始入门 K8s| 详解 Pod 及容器设计模式

    作者|张磊 阿里云容器平台高级技术专家,CNCF 官方大使 一.为什么需要 Pod 容器的基本概念 我们知道 Pod 是 Kubernetes 项目里面一个非常重要的概念,也是非常重要的一个原子调度单 ...

随机推荐

  1. python3 猜数字小游戏

    Guess_the_Number.py import random # Generate a random number between 1 and 100 number = random.randi ...

  2. Django: Invalid block tag on line 5: 'static', expected 'endblock'. Did you forget to register or load this tag?

    错误释义:在第5行中无效的块标签:'static',期望的'endblock'.你忘记登记或装载这个标签了吗? 错误原因:没有引入static文件 {% extends 'base.html' %} ...

  3. ASP.NET WebForm中asp:Repeater和UI:Grid数据为空时如何显示表头?

    一.asp:Repeater Repeater 控件用于显示被绑定在该控件上的项目的重复列表.Repeater 控件可被绑定到数据库表.XML 文件或者其他项目列表. 1.1-前台页面代码 <a ...

  4. 2023CISCN华中赛区re

    2023CISCN华中赛区re 当时出的题 misc3-babyandroid 找so文件,加密过程也不复杂 每三个一组进行加密 这里就是先每个减去65 然后 大概是 y1=(31x1)%26+65 ...

  5. CodeForces-1324D-Pair-of-Topics

    题意 对于两个长度为\(n\)的数组\(a[]\)和\(b[]\),找到有多少对\(i\)和\(j\)\((i<j)\),满足\(a_i+a_j>b_i+b_j\) 分析 首先发现如果\( ...

  6. API接口开发管理平台--多领域企业数字化管理解决方案

    随着数字化时代的到来,企业需要进行数字化转型才能更好地适应市场需求和用户需求.而API接口则是数字化转型中的重要组成部分,可以帮助企业更好地管理信息,提高效率.本文将介绍挖数据解决方案--API接口开 ...

  7. k8s 入门到实战--部署应用到 k8s

    背景 最近这这段时间更新了一些 k8s 相关的博客和视频,也收到了一些反馈:大概分为这几类: 公司已经经历过服务化改造了,但还未接触过云原生. 公司部分应用进行了云原生改造,但大部分工作是由基础架构和 ...

  8. jQuery下拉框级联实现

    参考代码: //企业类别级联 function getCatalog(){ var name=document.getElementById("Lcata").value; var ...

  9. CentOS 8 无痕升级到 Rocky Linux

    CentOS 8 无痕升级到 Rocky Linux 1.升级当前系统 dnf upgrade -y 2.重启当前系统: reboot 3.下载脚本: CentOS 8 到 Rocky Linux 8 ...

  10. utils工具类整理

    闲暇之余,整理出了项目中常用的一些工具类,不是很全,后续会持续更新--- 全部代码请移植github哦-github地址:https://github.com/yang302/utils