吴恩达深度学习笔记-单层神经网络(第2课)

2023-10-27

1、 神经网络概览

在这里插入图片描述

z[i]表示第i层的输入,a[i]表示第i层的输出

2、神经网络表示

单层神经网络:
【一般不把输入层看作一个标准层】
在这里插入图片描述
隐藏层的含义是在训练集中,这些中间节点的真正数值我们是不知道的。在训练集我们只能看到输入值X和输出值Y。

对于输入层的X,可以使用a[0]表示
.
a[i]j表示第i层的第j个输入feature值

3、计算神经网络的输出

下图是逻辑回归的输出计算过程:
在这里插入图片描述
神经网络其实就是重复了逻辑回归的计算过程。以下图的神经网络为例子:
在这里插入图片描述
先省略其他节点,只看第一个节点:
在这里插入图片描述
接下来只看隐藏层的第二个节点:
在这里插入图片描述

神经网络中的各节点与左边的Logistic回归单元类似

将上述隐藏层各节点进行整理:
在这里插入图片描述

使用for循环计算z[i]j计算量很大,所以需要向量化:
在这里插入图片描述

所以计算包含4个隐藏节点的神经网络,只需要下图中的4个式子:
在这里插入图片描述

大写的W[i]表示第i层的权重矩阵:
W[i] = [ w[i]1 w[i]2 w[i]3 w[i]4].T

4、多个样本的向量化

对于图中描述的神经网络,当存在多个训练样本时需要重复的计算4个式子:
在这里插入图片描述
对m个样本使用for循环重复的计算输出值,这表明没有进行向量化的实现。
在这里插入图片描述

接下来进行向量化

向量化目标是,使用矩阵一次性计算下述的4个式子。
在这里插入图片描述
将m个样本的输入进行向量化:
在这里插入图片描述
隐藏层输入和输出向量化:
在这里插入图片描述

各矩阵的横坐标代表第几个训练样本纵坐标代表隐藏层的第几个节点

5、向量化实现的解释

假设有3个样本,为了简化理解过程,将所有b设置为0。

对于第一层隐藏层,我们需要计算下述式子:在这里插入图片描述
先进行分别对当个样本进行计算:
在这里插入图片描述
将样本输入向量化后进行计算:
在这里插入图片描述
最后得到的结果是不同样本的z叠起来,放在不同的列里

6、激活函数

要搭建一个神经网络,可以选择的是隐藏层使用的哪一个激活函数和输出单元使用什么激活函数。

目前我们仅使用了sigmoid函数作为激活函数:
在这里插入图片描述
在一般情况下,我们可以使用不同的激活函数g(x),g(x)可以实非线性函数,不一定是sigmoid函数。
比如说sigmoid函数介于0~1之间,有个激活函数几乎总比sigmoid表现更好,就是tanh函数(双曲正切函数)。函数图像及表达式如下图:
在这里插入图片描述
数学上tanh其实是sigmoid函数平移后的版本。tanh几乎效果会比sigmoid要好,因为函数输出介于-1到1之间,激活函数的平均值就更接近0。训练时可能需要平移所有数据,让数据平均值为0,使用tanh而不是sigmoid函数有类似数据中心化的效果。

现在很少使用sigmoid函数,除了在二元分类和输出层(希望输出的概率在0~1之间)中使用sigmoid函数
.
sigmoid和tanh的缺点:
当z特别大或者特别小时,函数的斜率可能就会很小,接近于0,这样会拖慢梯度下降算法

在机器学习中,最受欢迎的激活函数是修正线性单元(ReLU):
在这里插入图片描述

总结:
(1)sigmoid函数:
除非用在二元分类的输出层,不然绝对不要用
在这里插入图片描述

(2)tanh函数:
几乎所有场合都比sigmoid函数要优
在这里插入图片描述
(3)ReLU函数:
最常用的激活函数
在这里插入图片描述
(4)leaky ReLU:
不想让z为负数时函数斜率为0,所以当z<0,函数斜率较小
在这里插入图片描述

7、为什么需要非线性激活函数?

当不使用激活函数a(z) =z(也叫恒等激活函数)时,模型的输出y不过是输入特征x的线性组合。 如下图:

在这里插入图片描述
可以看到,不使用激活函数,神经网络只是把输入线性组合再输出

例如:
当隐藏层使用恒等激活函数,输出层使用sigmoid激活函数时,该神经网络的复杂度和没有任何隐藏层的标准逻辑回归是一样的。就算隐藏层再多,最后的输出也是输入的线性组合。
在这里插入图片描述

8、激活函数的导数

  1. sigmoid函数的导数:
    g’(z) = g(z)(1-g(z))

  2. tanh函数的导数:
    g’(z) = 1- ( g(z) )2

  3. ReLU函数的导数:
    在这里插入图片描述
    当x=0时不可导,在神经网络的反向传播中令z=0时,导数等于0或者1

  4. Leaky ReLU
    在这里插入图片描述
    同理z=0时不可导,可以令z=0时,导数为0.01或者1

9、神经网络的梯度下降法

在这里插入图片描述

这里直接给出前向传播和后向传播具体实现:
在这里插入图片描述

10、直观理解反向传播

在逻辑回归中,需要损失函数L对w和b进行求导。而L是包含a的式子,a是包含z的式子,z是包含w和b的式子。
根据链式求导法则,应该先求L对a求导,再求a对z求导,再最z对w和b求偏导。即下图中从右到左的反向传播过程,先求da,后求dz,再求dw和db。
在这里插入图片描述
同理,对于单层神经网络,如下图:
在这里插入图片描述
因此,需要先计算L对a[2]求导,再计算a[2]对z[2]求导,再算z[2]对W[2]和b[2]求导。
再计算z[2]对a[1]求导,再机端a[1]对z[1]求导,再计算算z[1]对W[1]和b[1]求导。

下图为反向求导结果:

在这里插入图片描述

11、随机初始化

如果将神经网络的各参数数组全部初始化为0,再使用梯度下降算法,那会完全无效。
在这里插入图片描述
以上图的神经网络为例子,当w[1]和w[2]都设置为0时。第1层的两个神经其实是一样的,他们的输出完全一样,在反向传播时dz[1]1=dz[1]2,最好得到的W[1]每一行都是一样的数,即该层都是一样的函数

因此应该将W[1]随机初始化为一个很小的数。b[1]因为不具有对称性,因此可以初始化为0;W[2]和b[2]同理。
在这里插入图片描述

随机初始化为一个很小的数是因为tanh和sigmoid函数在接近0的时候函数梯度较大;若初始化的过大或过小,函数斜率非常的小,随机梯度下降就会很慢。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

吴恩达深度学习笔记-单层神经网络(第2课) 的相关文章

  • AttributeError: 'module' object has no attribute 的解决方法

    AttributeError module object has no attribute funSalaryGuide 这个错误相信很多django的开发人员都会遇到 一般来说都是应用没有安装完成 重新安装就可以了 这几天我遇到的情况是已
  • 【Xilinx DMA】Xilinx FPGA DMA介绍

    DMA Direct Memory Access 直接内存访问 可以在不受CPU干预的情况下 完成对内存的存取 在PS和PL两端都有DMA 其中PS端的是硬核DMA 而PL端的是软核DMA 如何选用这两个DMA呢 如果从PS端的内存DDR3

随机推荐

  • ###haohaohao###图神经网络之神器——PyTorch Geometric 上手 & 实战

    图神经网络 Graph Neural Networks GNN 最近被视为在图研究等领域一种强有力的方法 跟传统的在欧式空间上的卷积操作类似 GNNs通过对信息的传递 转换和聚合实现特征的提取 这篇博客主要想分享下 怎样在你的项目中简单快速
  • java 对象对象的属性_java中对象属性可以是另外一个对象或对象的参考

    7 对象的属性可以是另外一个对象或对象的参考 通过这种方法可以迅速构建一个比较大的系统 class Motor Light lights Handle left right KickStart ks Motor lights new Lig
  • Xilinx MIPI CSI license

    Xilinx MIPI CSI license 不绑定MAC地址 永久有效 支持所有Vivado版本 技术交流请加 ljy435
  • CENTOS安装curlftpfs

    首先说明 curlftpfs效率还是挺慢的 用于局域网内文件传输会出现不稳定的情况 1 Fedora可以直接yuminstall curlftpfs CentOS不行 得用DAGrepository 所以得先安装DAGrepository
  • Yearning SQL审核平台部署(Yearning-2.3.4-linux-amd64)

    参考博客 https blog csdn net weixin 45858439 article details 105277413 环境 mysql5 7 35 下载Yearning 2 3 5 linux amd64安装包https g
  • PHP7.27: connect mysql 5.7 using new mysqli_connect

  • Jenkins:报错Build step ‘Execute Windows batch command‘ marked build as failure解决办法

    Windows 下本地的 Jenkins 部署完成后 创建任务进行构建时 遇到如下报错信息 构建虽然失败了 但是命令却是执行成功了 问题就在于 Build step Execute Windows batch command marked
  • 数字媒体资产管理教材

    http vr sdu edu cn lulin course DAM
  • 产量预测文献读后整理

    文献名称 1 Data Driven End To End Production Prediction of Oil Reservoirs by EnKF Enhanced Recurrent Neural Networks 2 Produ
  • TensorFlow实现简单神经网络

    本文首发于我的个人博客QIMING INFO 转载请带上链接及署名 在上文 TensorFlow快速上手 中 我们介绍了TensorFlow中的一些基本概念 并实现了一个线性回归的例子 本文我们趁热打铁 接着用TensorFlow实现一下神
  • 前端强缓存和协商缓存

    缓存是前端面试的一个常见知识点 下面对于实际项目中如何进行缓存的设置给出方案 强缓存和协商缓存 浏览器缓存是浏览器将用户请求过的静态资源存储到电脑本地磁盘中 当再次访问时 就可以直接从本地缓存中加载而不需要去向服务器请求了 但是缓存也有缺点
  • C++内存泄露检测器(库注入方法)

    C 内存泄露检测器 库注入方法 2012 06 18 15 55 04 分类 C C codeproject上的一篇文章 翻译过来共享 C Memory Leak Finder C 内存泄露检测器 leakfinder zip 作者 Fre
  • GPT专业应用:早晚安问候语生成

    正文共 725 字 阅读大约需要 3 分钟 社群运营必备技巧 您将在3分钟后获得以下超能力 自动生成早晚安问候语 Beezy评级 B级 经过简单的寻找 大部分人能立刻掌握 主要节省时间 推荐人 nanako 编辑者 Linda 此图片由Le
  • 【Java 微服务架构 Dubbo篇】-1-Zookeeper

    课程回顾 微服务架构需要解决的问题 分布式协调框架Zookeeper 什么是分布式协调技术 分布式协调技术主要用来解决分布式环境当中多个进程之间的同步控制 让他们有序的去访问某种临界资源 防止造成 脏数据 的后果 在这图中有三台机器 每台机
  • LSTM神经网络详解

    LSTM 长短时记忆网络 Long Short Term Memory Network LSTM 是一种改进之后的循环神经网络 可以解决RNN无法处理长距离的依赖的问题 目前比较流行 长短时记忆网络的思路 原始 RNN 的隐藏层只有一个状态
  • Java学习笔记(02_1Java语言基础)

    知识点总结于毕向东Java基础视频教程25天版本 侵权请联系删除 第二章 Java语言基础 Java语言基础组成 关键字 标识符 注释 常量与变量 常量 变量 类型转换 运算符 算术运算符 赋值运算符 比较运算符 逻辑运算符 位运算符 三元
  • ajax后台返回的数据为空前台显示出现undefined的解决方法

    之前自己做的一个图书管理系统 显示图书借阅排行榜 因为翻译在数据库中有为空的字段 故前台显示会显示undefined 以下贴上部门代码 document ready function rankTable tbody html var id
  • chromium源码的下载与编译

    这篇文章主要记录在chromium源码下载以及编译过程中遇到的问题 一直都对chromium的源码感兴趣 在没有封闭外网之前 下载了一个版本 很老了 重新进行更新又不得行 再加上公司的产品线路需要了解chromium的相关知识 又加上疫情封
  • Ctfshow web入门 PHP特性篇 web89-web151 全

    web入门 PHP特性篇的wp都一把梭哈在这里啦 有点多 师傅们可以收藏下来慢慢看 写的应该挺全面的叭 有错误敬请斧正 CTFshow PHP web89 看题目 有个flag php文件 题目要求get有个num 是数字但是不包含0 9
  • 吴恩达深度学习笔记-单层神经网络(第2课)

    深度学习笔记 1 神经网络概览 2 神经网络表示 3 计算神经网络的输出 4 多个样本的向量化 5 向量化实现的解释 6 激活函数 7 为什么需要非线性激活函数 8 激活函数的导数 9 神经网络的梯度下降法 10 直观理解反向传播 11 随