热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

吴恩达深度学习课程笔记:第一部分第三周——浅层神经网络详解

浅层神经网络解析:本文详细探讨了两层神经网络(即一个输入层、一个隐藏层和一个输出层)的结构与工作原理。通过吴恩达教授的课程,读者将深入了解浅层神经网络的基本概念、参数初始化方法以及前向传播和反向传播的具体实现步骤。此外,文章还介绍了如何利用这些基础知识解决实际问题,并提供了丰富的实例和代码示例。

浅层神经网络:

一、浅层神经网络的表示

本文中的浅层神经网络指的是 two layer nn 即 one input layer + one hidden layer + one output layer。通常计算神经网络的层数不包括 input layer 。
这里写图片描述
notation:
上标 [l]:代表第l层,Input layer 为[0]
下标i:表示第i个unit,也可以看做第i行


二、神经网络的计算

每个unit都需要进行z和a的计算:
这里写图片描述
各参数矩阵的维度:
W[1]: (4,3), b[1]: (4,1)
W[2]: (1,4), b[2]: (1,1)
即:W[I]:(nl,n(l-1)), b[l]:(nl,1), nl表示第l层的unit的个数
注意:这里的 W[l] 表示的是已经对列堆起来的 W[l] 的转置


三、前向传播的向量化实现

single example的向量化:
这里写图片描述
multiple example的向量化:
X:(nx,m),m个example,每个用一列表示
上标(i):代表第i个example,从1开始
这里写图片描述

multiple example的向量化的理解:
主要就是弄清楚矩阵相乘的过程,就是重复进行single example的计算,然后把它们的结果列堆叠成矩阵。A/Z矩阵的每一行表示同一个unit的不同example的结果,每一列表示同一个example的不同unit的结果。
这里写图片描述


四、激活函数(activation function)

四种activation function:sigmoid; tanh; ReLU; Leaky ReLU
这里写图片描述
特点及如何选择:
sigmoid:求导=a(1-a),当|z|比较大的时候,梯度会很小,梯度下降慢。二分类的output layer 一般使用sigmoid
tanh:求导=1-a^2,当|z|比较大的时候,梯度会很小,梯度下降慢。正常比sigmoid好,因为取值为(-1,1)起到归一化的作用均值为0。
ReLU:当z>0时,梯度始终为1,梯度下降块。z<0时,梯度为0,实际使用中影响不大。最常用,首选。
Leaky ReLU:相比ReLU修正了z<0时,梯度为0的缺点。

正常选ReLU。如果不知道该选那个,可以一个一个试,在交叉验证集中评估,找出结果最好的那一个。


为什么要使用激活函数:
如果不使用激活函数或者使用线性激活函数。两个线性函数的组合仍然是线性函数,隐藏神经单元就不起作用了。有时候output layer不使用激活函数,如房价的预测。
**这里写图片描述**


五、神经网络的梯度下降

计算公式:左边为single example,右边为multiple example
这里写图片描述


六、随机初始化

如果在初始时,W,b都设置一样,那么WX+b都一样,通过梯度下降去进行计算dw,得到梯度大小也相等,不管进行多少次迭代,每个隐藏层单元仍然是对称的。无论设置多少个隐藏单元,其最终的影响都是相同的,那么设置多个隐藏神经元只是重复计算,没有作用。

随机初始化代码:

W[1] = np.random.rand((4,3))* 0.01
b[1] = np.zero((4,1))

W的值乘以0.01(不是固定的)是为了使W初始化为较小的值,这是因为如果使用sigmoid或者tanh作为激活函数时,W小则Z=WX+b也比较小,处在激活函数0的附近梯度较大,算法的更新速度比较快。如果W太大,得到的梯度较小,更新会变慢。ReLU和Leaky ReLU作为激活函数时,因为在大于0的时候,梯度均为1,所以可以不用乘0.01。


推荐阅读
  • 机器学习(ML)三之多层感知机
    深度学习主要关注多层模型,现在以多层感知机(multilayerperceptron,MLP)为例,介绍多层神经网络的概念。隐藏层多层感知机在单层神经网络的基础上引入了一到多个隐藏 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
  • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
    本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • 本文详细介绍如何在SSM(Spring + Spring MVC + MyBatis)框架中实现分页功能。包括分页的基本概念、数据准备、前端分页栏的设计与实现、后端分页逻辑的编写以及最终的测试步骤。 ... [详细]
  • 探讨了在HTML表单中使用元素代替进行表单提交的方法。 ... [详细]
  • 如何从BAM文件绘制ATAC-seq插入片段长度分布图?
    在ATAC-seq数据处理中,插入片段长度的分布图是一个重要的质量控制指标,它能反映出核小体的周期性排列。本文将详细介绍如何从BAM文件中提取并绘制这些数据。 ... [详细]
  • 计算机学报精选论文概览(2020-2022)
    本文汇总了2020年至2022年间《计算机学报》上发表的若干重要论文,旨在为即将投稿的研究者提供参考。 ... [详细]
  • LeetCode 实战:寻找三数之和为零的组合
    给定一个包含 n 个整数的数组,判断该数组中是否存在三个元素 a、b、c,使得 a + b + c = 0。找出所有满足条件且不重复的三元组。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • C# 中创建和执行存储过程的方法
    本文详细介绍了如何使用 C# 创建和调用 SQL Server 存储过程,包括连接数据库、定义命令类型、设置参数等步骤。 ... [详细]
  • JavaScript 实现图片文件转Base64编码的方法
    本文详细介绍了如何使用JavaScript将用户通过文件输入控件选择的图片文件转换为Base64编码字符串,适用于Web前端开发中图片上传前的预处理。 ... [详细]
  • 目录预备知识导包构建数据集神经网络结构训练测试精度可视化计算模型精度损失可视化输出网络结构信息训练神经网络定义参数载入数据载入神经网络结构、损失及优化训练及测试损失、精度可视化qu ... [详细]
author-avatar
小东东5201314
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有