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

吴恩达DeepLearning.ai课程笔记(1-3)神经网络和深度学习---浅层神经网络

以下为在Coursera上吴恩达老师的DeepLearning.ai课程项目中,第一部分《神经网络和深度学习》第二周课程部分关键点的笔记。笔记并不包含全部小视频课程的记录,如需学习笔记中舍弃的内容请至

以下为在Coursera上吴恩达老师的DeepLearning.ai课程项目中,第一部分《神经网络和深度学习》第二周课程部分关键点的笔记。笔记并不包含全部小视频课程的记录,如需学习笔记中舍弃的内容请至 Coursera 或者 网易云课堂。同时在阅读以下笔记之前,强烈建议先学习吴恩达老师的视频课程。


1. 二分类问题

对于二分类问题,大牛给出了一个小的Notation。

  • 样本: 

    前面过程的da、dz求导:

    da = \dfrac{\partial L}{\partial a}=-\dfrac{y}{a}+\dfrac{1-y}{1-a}

    dz = \dfrac{\partial L}{\partial z}=\dfrac{\partial L}{\partial a}\cdot\dfrac{\partial a}{\partial z}=(-\dfrac{y}{a}+\dfrac{1-y}{1-a})\cdot a(1-a)=a-y

    再对 w_{1}、w_{2} 和b进行求导:

    dw_{1} = \dfrac{\partial L}{\partial w_{1}}=\dfrac{\partial L}{\partial z}\cdot\dfrac{\partial z}{\partial w_{1}}=x_{1}\cdot dz=x_{1}(a-y)

    db = \dfrac{\partial L}{\partial b }=\dfrac{\partial L}{\partial z}\cdot\dfrac{\partial z}{\partial b }=1\cdot dz=a-y

    梯度下降法:

    w_{1}:=w_{1}-\alpha dw_{1}

    w_{2}:=w_{2}-\alpha dw_{2}

    b:=b-\alpha db

     

    6. m个样本的梯度下降

    对m个样本来说,其Cost function表达式如下:

    z^{(i)}= w^{T}x^{(i)}+b

    \hat y^{(i)}=a^{(i)}=\sigma(z^{(i)})

    J(w,b)=\dfrac{1}{m}\sum_{i=1}^{m}L(\hat y^{(i)}, y^{(i)})=-\dfrac{1}{m}\sum_{i=1}^{m}\left[y^{(i)}\log\hat y^{(i)}+(1-y^{(i)})\log(1-\hat y^{(i)})\right]

    Cost function 关于w和b的偏导数可以写成所有样本点偏导数和的平均形式:

    dw_{1} =\dfrac{1}{m}\sum_{i=1}^{m}x_{1}^{(i)}(a^{(i)}-y^{(i)})

    db = \dfrac{1}{m}\sum_{i=1}^{m}(a^{(i)}-y^{(i)})

     

    7. 向量化(Vectorization)

    在深度学习的算法中,我们通常拥有大量的数据,在程序的编写过程中,应该尽最大可能的少使用loop循环语句,利用python可以实现矩阵运算,进而来提高程序的运行速度,避免for循环的使用。

    逻辑回归向量化

    • 输入矩阵X:(n_{x},m)
    • 权重矩阵w: (n_{x},1)
    • 偏置b:为一个常数
    • 输出矩阵Y: (1,m)

    所有m个样本的线性输出Z可以用矩阵表示:

    Z = w^{T}X+b

    python代码:

    db = 1/m*np.sum(dZ)

     

    单次迭代梯度下降算法流程

    Z = np.dot(w.T,X) + b
    A = sigmoid(Z)
    dZ = A-Y
    dw = 1/m*np.dot(X,dZ.T)
    db = 1/m*np.sum(dZ)

    w = w - alpha*dw
    b = b - alpha*db

     

    8. python的notation

    虽然在Python有广播的机制,但是在Python程序中,为了保证矩阵运算的正确性,可以使用reshape()函数来对矩阵设定所需要进行计算的维度,这是个好的习惯;

    如果用下列语句来定义一个向量,则这条语句生成的a的维度为(5,),既不是行向量也不是列向量,称为秩(rank)为1的array,如果对a进行转置,则会得到a本身,这在计算中会给我们带来一些问题。

    a = np.random.randn(5)

     

    如果需要定义(5,1)或者(1,5)向量,要使用下面标准的语句:

    a = np.random.randn(5,1)
    b = np.random.randn(1,5)

     

    可以使用assert语句对向量或数组的维度进行判断。assert会对内嵌语句进行判断,即判断a的维度是不是(5,1),如果不是,则程序在此处停止。使用assert语句也是一种很好的习惯,能够帮助我们及时检查、发现语句是否正确。

    assert(a.shape == (5,1))

     

    可以使用reshape函数对数组设定所需的维度

    a.reshape((5,1))

     

    8. logistic regression代价函数的解释

    Cost function的由来

    预测输出 \hat y 的表达式:

     \hat y =\sigma(w^{T}x+b)

    其中, \sigma(z)=\dfrac{1}{1+e^{-z}} 。

    \hat y 可以看作预测输出为正类(+1)的概率:

    \hat y = P(y=1|x)

    当 y=1 时, P(y|x)=\hat y ;当 y=0 时, P(y|x)=1-\hat y 。

    将两种情况整合到一个式子中,可得:

    P(y|x)=\hat y^{y}(1-\hat y )^{(1-y)}

    对上式进行log处理(这里是因为log函数是单调函数,不会改变原函数的单调性):

    \log P(y|x)=\log\left[\hat y^{y}(1-\hat y )^{(1-y)}\right]=y\log\hat y+(1-y)\log(1-\hat y)

    概率 P(y|x) 越大越好,即判断正确的概率越大越好。这里对上式加上负号,则转化成了单个样本的Loss function,我们期望其值越小越好:

    L(\hat y, y)=-(y\log\hat y+(1-y)\log(1-\hat y))

     

    m个训练样本

    假设样本之间是独立同分布的,我们总是希望训练样本判断正确的概率越大越好,则有:\max \prod\limits_{i=1}^{m} {P(y^{(i)}|x^{(i)})}

    同样引入log函数,加负号,则可以得到Cost function:

    J(w,b)=\dfrac{1}{m}\sum_{i=1}^{m}L(\hat y^{(i)}, y^{(i)})=-\dfrac{1}{m}\sum_{i=1}^{m}\left[y^{(i)}\log\hat y^{(i)}+(1-y^{(i)})\log(1-\hat y^{(i)})\right]


推荐阅读
  • 通过使用CIFAR-10数据集,本文详细介绍了如何快速掌握Mixup数据增强技术,并展示了该方法在图像分类任务中的显著效果。实验结果表明,Mixup能够有效提高模型的泛化能力和分类精度,为图像识别领域的研究提供了有价值的参考。 ... [详细]
  • Ihavetwomethodsofgeneratingmdistinctrandomnumbersintherange[0..n-1]我有两种方法在范围[0.n-1]中生 ... [详细]
  • LeetCode 实战:寻找三数之和为零的组合
    给定一个包含 n 个整数的数组,判断该数组中是否存在三个元素 a、b、c,使得 a + b + c = 0。找出所有满足条件且不重复的三元组。 ... [详细]
  • 重要知识点有:函数参数默许值、盈余参数、扩大运算符、new.target属性、块级函数、箭头函数以及尾挪用优化《深切明白ES6》笔记目次函数的默许参数在ES5中,我们给函数传参数, ... [详细]
  • 本文探讨了 TypeScript 中泛型的重要性和应用场景,通过多个实例详细解析了泛型如何提升代码的复用性和类型安全性。 ... [详细]
  • 本文详细介绍了 Java 网站开发的相关资源和步骤,包括常用网站、开发环境和框架选择。 ... [详细]
  • 目录预备知识导包构建数据集神经网络结构训练测试精度可视化计算模型精度损失可视化输出网络结构信息训练神经网络定义参数载入数据载入神经网络结构、损失及优化训练及测试损失、精度可视化qu ... [详细]
  • 机器学习算法:SVM(支持向量机)
    SVM算法(SupportVectorMachine,支持向量机)的核心思想有2点:1、如果数据线性可分,那么基于最大间隔的方式来确定超平面,以确保全局最优, ... [详细]
  • 本文节选自《NLTK基础教程——用NLTK和Python库构建机器学习应用》一书的第1章第1.2节,作者Nitin Hardeniya。本文将带领读者快速了解Python的基础知识,为后续的机器学习应用打下坚实的基础。 ... [详细]
  • 在2019中国国际智能产业博览会上,百度董事长兼CEO李彦宏强调,人工智能应务实推进其在各行业的应用。随后,在“ABC SUMMIT 2019百度云智峰会”上,百度展示了通过“云+AI”推动AI工业化和产业智能化的最新成果。 ... [详细]
  • 遗传算法中选择算子为何置于交叉算子和变异算子之前?本文探讨了这一问题,并详细介绍了遗传算法中常用的选择算子类型及其作用机制。此外,还分析了不同选择算子对算法性能的影响,为实际应用提供了理论依据。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 独家解析:深度学习泛化理论的破解之道与应用前景
    本文深入探讨了深度学习泛化理论的关键问题,通过分析现有研究和实践经验,揭示了泛化性能背后的核心机制。文章详细解析了泛化能力的影响因素,并提出了改进模型泛化性能的有效策略。此外,还展望了这些理论在实际应用中的广阔前景,为未来的研究和开发提供了宝贵的参考。 ... [详细]
  • 能够感知你情绪状态的智能机器人即将问世 | 科技前沿观察
    本周科技前沿报道了多项重要进展,包括美国多所高校在机器人技术和自动驾驶领域的最新研究成果,以及硅谷大型企业在智能硬件和深度学习技术上的突破性进展。特别值得一提的是,一款能够感知用户情绪状态的智能机器人即将问世,为未来的人机交互带来了全新的可能性。 ... [详细]
  • 本文介绍了UUID(通用唯一标识符)的概念及其在JavaScript中生成Java兼容UUID的代码实现与优化技巧。UUID是一个128位的唯一标识符,广泛应用于分布式系统中以确保唯一性。文章详细探讨了如何利用JavaScript生成符合Java标准的UUID,并提供了多种优化方法,以提高生成效率和兼容性。 ... [详细]
author-avatar
GIfi炬辉_904
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有