吴恩达深度学习Deep Learning课程笔记

article/2025/5/19 23:08:37

1.1 前言

课程安排:

1.神经网络和深度学习

内容:神经网络的基础,如何建立神经网络、深度神经网络、以及如何在数据时训练它们

2.提升深度神经网络

内容:深度学习方面的实践,严密地构建神经网络以及提升其表现,包括超参数调整、正则化、诊断偏差和方差、高级优化算法等

3.结构化机器学习工程

内容:分割数据集的方式,端到端深度学习,热门深度学习问题

4.CNN卷积神经网络

5.NLP:序列模型

RNN、LSTM

1.2 什么是神经网络

从简单的根据房子尺寸预测房价例子开始,拟合房价的过程从左抽象为右,输入房子尺寸,输出价格,这就是一个简单的神经网络,中间的圆圈就是一个独立的神经元。大的神经网络就是简单神经网络的堆叠

在这基础上,增加输入、比如卧室数量等,我们构建的网络也随之变得更复杂,如下:

 

在神经网络中,我们只需要输入特征,中间每个隐藏节点的具体表示由神经网络自己获取

2.1 二元分类

假如你有一张图片作为输入,比如这只猫,如果识别这张图片为猫,则输出标签1作为结果;如果识别出不是猫,那么输出标签0作为结果。我们用字母 y 来表示输出的结果标签。

在计算机中为了保存一张图片,需要保存三个矩阵,它们分别对应图片中的红、绿、蓝三种颜色通道,如果你的图片大小为64x64像素,那么你就有三个规模为64x64的矩阵,分别对应图片中红、绿、蓝三种像素的强度值。简单表示如下图所示(注意它们的规模为5x4而不是64x64):

我们用一个特征向量 x 来表示这张图片,把所有的像素都取出来,例如255、231等等,直到取完所有的红色像素,接着最后是255、134、…、255、134等图片中所有的红、绿、蓝像素值。如果图片的大小为64x64像素,那么向量 x 的总维度,将是64乘以64乘以3=12288,这是三个像素矩阵中像素的总量。我们用n来表示输入特征向量的维度。所以在二分类问题中,我们的目标就是习得一个分类器,它以图片的特征向量 x 作为输入,然后预测输出结果 y 为1还是0,也就是预测图片中是否有猫:

符号定义 :

X:表示一个 n_x 维输入数据,大小为(n_{x}1);

y:表示输出结果,取值为 (0 , 1);

(x^{(i)},y^{(i)}):表示第 i 组数据,可能是训练数据,也可能是测试数据,此处默认为训练数据;

X=[x^{(1)},x^{(2)},\cdots,x^{(m)}]:表示所有的训练数据集的输入值,放在一个 n_x * m 的矩阵中,其中m 表示样本数目。有时候为了强调这是训练样本的个数,会写作 M_{train}​,当涉及到测试集的时候,使用 M_{test} 表示测试集的样本数;

Y=[y^{(1)},y^{(2)},\cdots,y^{(m)}]:对应表示所有训练数据集的输出值,维度为1*m

为了能把训练集表示得更紧凑一点,我们会定义一个矩阵用大写的 X 表示,它由输入向量 x^{(1)} x^{(2)} 等组成。我们把 x^{(1)} 作为第一列放在矩阵中, x^{(2)} 作为第二列, x^{(m)} 放到第 m 列,然后我们就得到了训练集矩阵 X,如下图。所以这个矩阵有 m 列,m 是训练集的样本数量,然后这个矩阵的高度记为 n_x,注意有时候可能因为其他某些原因,矩阵 X 会由训练样本按照行堆叠起来而不是列,如下图所示, x^{(1)}  的转置直到 x^{(m)} 的转置,但是在实现神经网络的时候,使用左边的这种形式,会让整个实现的过程变得更加简单

同样的道理,为了能更加容易地实现一个神经网络,将标签 y 放在列中将会使得后续计算非常方便,所以我们定义大写的 Y 等于 y^{(1)},y^{(2)},\cdots,y^{(m)},规模为1乘以 m 的矩阵

2.2 逻辑回归

对于二元分类问题来讲,给定一个输入特征向量 X,它可能对应一张图片,你想识别这张图片识别看它是否是一只猫或者不是一只猫的图片,想要一个算法能够输出预测,你称之为 \hat{y}​,也就是对实际值 y 的估计。更正式地来说,你想让 \hat{y}​ 表示 y 等于1的一种可能性或者是机会,换句话说,你想让 \hat{y}​ 告诉你图片里是一只猫的机率有多大。我们用 w 来表示逻辑回归的参数,这也是一个 n_x 维向量(因为 w 实际上是特征权重,维度与特征向量相同),参数里面还有 b,这是一个实数(表示偏差)。所以给出输入以及参数之后,我们怎样产生输出预测值​,一件你可以尝试却不可行的事是让 \hat{y}=w^Tx+b

不可行的原因:因为你想让 \hat{y}​ 表示实际值 y 等于1的机率的话, \hat{y}​ 应该在0到1之间。但 w^Tx+b可能比1要大得多,或者甚至为一个负值。因此在逻辑回归中,我们的输出 \hat{y} 应该是等于由上面得到的线性函数式子作为自变量的sigmoid函数中,公式如下,将线性函数转换为非线性函数:

下图是sigmoid函数的图像,它平滑地从0走向1,曲线与纵轴相交的截距是0.5。我们通常都使用 z来表示 w^Tx+b 的值。

可见,如果 z 非常大,那么 e^{-z} 将会接近于0,关于 z 的sigmoid函数将会近似等于1除以1加上某个非常接近于0的项。相反地,如果 z 非常小或者说是一个绝对值很大的负数,那么 e^{-z} 这项会变成一个很大的数,关于 z 的sigmoid函数就会非常接近于0。因此当你实现逻辑回归时,你的工作就是去让机器学习参数 w 以及 b ,使得 \hat{y}​ 成为对 y=1 这一情况的概率的一个很好的估计。

符号说明:在某些例子里,会定义一个额外的特征称之为 x_0​,并且使它等于1,那么 X 就是一个 n_x​ 加1维的变量,sigmoid函数为 \hat{y}=\sigma(\theta^Tx)  。在这个备选的符号惯例里,参数向量为\theta_0,\theta_1,\theta_2,\cdots,\theta_{n_x}​​,这里 \theta_0 充当 b,是一个实数,而剩下的 \theta_1​ 直到 \theta_{n_x}​​ 充当 w

2.2 逻辑回归损失函数

为什么需要代价函数:

为了训练逻辑回归模型的参数 w 和参数 b ,我们需要一个代价函数,通过训练代价函数来得到参数 w 和参数 b

损失函数:

损失函数又叫做误差函数,Loss function: L(\hat{y},y),我们通过这个称为 L 的损失函数,来衡量预测输出值和实际值有多接近。

我们在逻辑回归中用到的损失函数是:

L(\hat{y},y)=-y\log(\hat{y})-(1-y)\log(1-\hat{y})

为了更好地理解这个损失函数怎么起作用,我们举两个例子:

y=1 时损失函数 L=-\log(\hat{y}),如果想要损失函数 L 尽可能得小,那么 \hat{y}​ 就要尽可能大,因为sigmoid函数取值 [0,1],所以 \hat{y}​ 会无限接近于1。

y=0 时损失函数 L=-\log(1-\hat{y}),如果想要损失函数 L 尽可能得小,那么 \hat{y}​ 就要尽可能小,所以 \hat{y}​ 会无限接近于0。

损失函数是在单个训练样本中定义的,它衡量的是算法在单个训练样本中表现如何,为了衡量算法在全部训练样本上的表现如何,我们需要定义一个算法的总代价函数,即对 m 个样本的损失函数求和然后除以 m

J(w,b)=\frac1m\sum_{i=1}^mL(\hat{y}^{(i)},y^{(i)})=\frac1m\sum_{i=1}^m(-y^{(i)}\log\hat{y}^{(i)}-(1-y^{(i)})\log(1-\hat{y}^{(i)}))

在训练逻辑回归模型时候,我们需要找到合适的 wb ,来让代价函数 J 的总代价降到最低。 根据我们对逻辑回归算法的推导及对单个样本的损失函数的推导和针对算法所选用参数的总代价函数的推导,结果表明逻辑回归可以看做是一个非常小的神经网络。

2.4 梯度下降法

梯度下降法的形象化说明:

在这个图中,横轴表示你的空间参数 wb ,在实践中, w 可以是更高的维度,但是为了更好地绘图,我们定义wb ,都是单一实数,代价函数(成本函数) J(w,b) 是在水平轴 wb 上的曲面,因此曲面的高度就是 J(w,b) 在某一点的函数值。我们所做的就是找到使得代价函数(成本函数) J(w,b) 函数值是最小值时,对应的参数 wb

可以看到,成本函数是一个凸函数,如下:

而下图就与上图有些相反,它是非凸的并且有很多不同的局部最小值。

凸函数这性质是我们使用这个特定成本函数的重要原因之一

1.为了找到最佳参数值,我们首先初始化 wb

可以用如图那个小红点来初始化参数 wb ,也可以采用随机初始化的方法,对于逻辑回归几乎所有的初始化方法都有效,因为函数是凸函数,无论在哪里初始化,应该都达到同一点或大致相同的点。

我们以如图的小红点的坐标来初始化参数  wb

2. 朝最陡的下坡方向走一步,不断地迭代

我们朝最陡的下坡方向走一步,如图,走到了如图中第二个小红点处。

我们可能停在这里也有可能继续朝最陡的下坡方向再走一步,如图,经过两次迭代走到第三个小红点处。

3.直到走到全局最优解或者接近全局最优解的地方 

通过以上的三个步骤我们可以找到全局最优解,也就是代价函数(成本函数)J(w,b)  这个凸函数的最小值点。

梯度下降法的细节化说明(仅有一个参数)

假定代价函数(成本函数)J(w) 只有一个参数 w ,即用一维曲线代替多维曲线,这样可以更好地画出图像。

迭代就是不断重复做如图的公式:

:= 表示更新参数,

\alpha 表示学习率(learning rate),用来控制步长(step),即向下走一步的长度 \frac{dJ(w)}{dw} 就是函数 J(w)w 求导(derivative),在代码中我们会使用 dw 表示这个结果

对于导数更加形象化的理解就是斜率(slope),如图该点的导数就是这个点相切于 J(w) 的小三角形的高除宽。假设我们以如图点为初始化点,该点处的斜率的符号是正的,即 \frac{dJ(w)}{dw}>0 ,所以接下来会向左走一步。

整个梯度下降法的迭代过程就是不断地向左走,直至逼近最小值点。

假设我们以如图点为初始化点,该点处的斜率的符号是负的,即 \frac{dJ(w)}{dw}<0 ,所以接下来会向右走一步。

整个梯度下降法的迭代过程就是不断地向右走,即朝着最小值点方向走。

梯度下降法的细节化说明(两个参数)

逻辑回归的代价函数(成本函数) J(w,b) 是含有两个参数的。

\partial 表示求偏导符号,可以读作round,\frac{\partial J(w,b)}{\partial w}​ 就是函数 J(w,b)w 求偏导,在代码中我们会使用 dw 表示这个结果, \frac{\partial J(w,b)}{\partial b}​ 就是函数 J(w,b)b 求偏导,在代码中我们会使用 db 表示这个结果, 小写字母 d 用在求导数(derivative),即函数只有一个参数的情况下, 偏导数符号 \partial 用在求偏导(partial derivative),即函数含有两个以上的参数的情况下。


http://chatgpt.dhexx.cn/article/U0s346sA.shtml

相关文章

吴恩达深度学习第一章第二周编程作业

文章目录 前言一、题目描述。二、相关库三、编程步骤1.数据预处理2.模型的封装3.模型的调用4.结果展示 总结 前言 本人处于初学阶段&#xff0c;编程能力有限&#xff0c;代码的编写参考了网上的大神。 一、题目描述。 我们需要训练得到一个逻辑回归分类器来对图片进行二分类&…

吴恩达深度学习之风格迁移

个人的学习笔记&#xff0c;一直更新中&#xff0c;如有错误&#xff0c;评论区见&#xff0c;冲冲冲&#xff01; 笔记来源&#xff1a;吴恩达深度学习 4.6 什么是神经风格转换&#xff1f;_哔哩哔哩_bilibili 1 输入输出 风格迁移输入&#xff1a;内容&#xff08;Conten…

吴恩达深度学习作业之deepleraning_L1W2_h1

#吴恩达《深度学习》L1W2作业1 知识点&#xff1a;numpy入门&#xff0c;函数向量化实现做完这个作业&#xff0c;你能学会&#xff1a;用ipython notebook 用numpy&#xff0c;包括函数调用及向量矩阵运算 理解“广播”的概念 向量化代码#我们很少在深度学习中使用“math”库。…

吴恩达深度学习编程作业报错解决方法汇总

概述及资源分享 大二结束后的暑假&#xff0c;学习吴恩达深度学习&#xff08;[双语字幕]吴恩达深度学习deeplearning.ai_哔哩哔哩_bilibili&#xff09;的课程&#xff0c;在做编程作业的时候总是遇到一些报错&#xff0c;尤其是导入所需要的库的时候会报一些No model。。。的…

旧版吴恩达深度学习环境搭建(anaconda+tensorflow+jupyter notebook)(呕心沥血诚意之作)

本人在参考多位博主的文章后&#xff0c;多次尝试才成功配置了tensorflow1.2.1的环境&#xff08;课程建议Python3.6tensorflow1.2.1Keras2.0.7&#xff09;。在此之前&#xff0c;曾经尝试用tensorflow2.x降级的方法&#xff08;import tensorflow.compat.v1 as tf&#xff09…

《吴恩达深度学习》编程作业-第二周

目录 1.题目&#xff1a;基于神经网络思维模式的逻辑回归 2.声明 3.知识回顾 4.Python编程分析 4.1.导入需要用的库 4.2.数据处理 4.2.1.读取数据&#xff08;包括训练集和测试集&#xff09; 4.2.2.取出数据&#xff08;包括训练集和测试集&#xff0c;还有标签的值&a…

吴恩达 深度学习 2021版 作业

练习 神经网络与深度学习神经网络基础Numpy基础1-使用numpy构建基本函数 神经网络与深度学习 神经网络基础 Numpy基础 学习目标&#xff1a; 使用numpy&#xff0c;包括函数调用及向量矩阵运算广播向量化代码 1-使用numpy构建基本函数 1.1- sigmoid function和np.exp&…

吴恩达深度学习

最近在学习吴恩达老师的深度学习&#xff0c;边学边随手记一些东西&#xff0c;留个简单的笔记&#xff0c;以便日后复习。 第一周 结构化数据&#xff1a;每个特征都有清晰的定义 非结构化数据&#xff1a;音频、图像、文本等 大规模的神经网络大规模的带标签数据 第一周习题…

吴恩达《深度学习专项》笔记(十二):目标检测与语义分割简介 (YOLO, U-Net)

这节课中&#xff0c;我们要学习计算机视觉中最重要的任务之一——目标检测任务。我们会先认识目标定位和关键点检测这两个比较简单的任务&#xff0c;慢慢过度到目标检测任务。之后&#xff0c;我们会详细学习目标检测的经典算法YOLO。最后&#xff0c;我们会稍微认识一下语义…

吴恩达:28张图全解深度学习知识

吴恩达在推特上展示了一份由 TessFerrandez 完成的深度学习专项课程信息图&#xff0c;这套信息图优美地记录了深度学习课程的知识与亮点。因此它不仅仅适合初学者了解深度学习&#xff0c;还适合机器学习从业者和研究者复习基本概念。喜欢记得关注、收藏、点赞。 这不仅仅是一…

吴恩达深度学习深度学习概述以及优化

深度学习概述及优化 1、深度学习概述2、神经网络基础之逻辑回归3、深层神经网络4、深度学习实用层面4.1 训练集、验证集、测试集4.2 偏差、方差4.3 L1、L2正则化4.4 归一化处理4.5 Dropout4.6 其他正则化方法4.7 梯度消失和爆炸 1、深度学习概述 在之前的吴恩达机器学习课程中…

深度学习-吴恩达:一、神经网络和深度学习

文章目录 1、what is a Neural Network?&#xff08;什么是神经网络&#xff09;2、Supervised Learning with Neural Networks &#xff08;监督学习&#xff09;3、为什么深度学习会兴起&#xff1f;第一周测验测验题答案 1、what is a Neural Network?&#xff08;什么是神…

IOS开发视频教程《保卫萝卜》-任亮-专题视频课程

IOS开发视频教程《保卫萝卜》—3411人已学习 课程介绍 《保卫萝卜CarrotFantasy》是一款由开发商“凯罗天下”开发的超萌塔防小。14种防御塔保卫萝卜战怪兽。保卫萝卜是一款制作精美的超萌塔防游戏&#xff0c;游戏含有丰富的关卡和主题包&#xff0c;拥有各自风格特色…

ios游戏开发 Sprite Kit教程:初学者 1

注&#xff1a;本文译自Sprite Kit Tutorial for Beginners 目录 Sprite Kit的优点和缺点Sprite Kit vs Cocos2D-iPhone vs Cocos2D-X vs UnityHello, Sprite Kit!横屏显示移动怪兽发射炮弹碰撞检测: 概述碰撞检测: 实现收尾何去何从? 在iOS 7中内置了一个新的Sprite Kit框架…

HTML5游戏开发高级教程 | Lynda教程 中文字幕

HTML5游戏开发高级教程 | Lynda教程 中文字幕 Advanced HTML5 Game Development 课程ID: 597988 时长: 2.3小时 所属类别:Html 全部游戏开发课程 了解如何使用HTML5创建交互式&#xff0c;动态和丰富多彩的游戏 在本课程中&#xff0c;学习如何充分利用所有HTML5功能来创建…

ios游戏开发 Sprite Kit教程:初学者 2

注&#xff1a;本文译自Sprite Kit Tutorial for Beginners 目录 Sprite Kit的优点和缺点Sprite Kit vs Cocos2D-iPhone vs Cocos2D-X vs UnityHello, Sprite Kit!横屏显示移动怪兽发射炮弹碰撞检测: 概述碰撞检测: 实现收尾何去何从? 横屏显示 首先&#xff0c;在Project Na…

【游戏开发教程】Unity iOS平台接入微信SDK,实现微信登录等功能(教程 | 流程讲解)

文章目录 一、前言二、流程1、申请开发者账号2、创建应用3、下载SDK4、导入到Unity中5、编写Objective-C代码5.1、CustomAppController.mm5.2、WXApiManager.h5.3、WXApiManager.mm5.4、注册回调对象5.5、封装初始化接口5.6、封装登录接口5.7、其他接口封装 6、XCodeAPI7、关于…

iOS开发知识概览

1、学习ios开发的知识概览&#xff0c;经常会认为ios开发会学那些知识&#xff0c;如何把断断续续的知识连接起来&#xff0c; 这就让你有了全局的了解&#xff0c;如何去计划和安排自己的学习计划&#xff0c;有了全局的知识体系。 原文来自&#xff1a;https://github.com/sh…

IOS 开发之逆向分析

在逆向过程中很多时候需要分析 APP 和 Web 端数据交互的内容那么最简单的方式即是抓包网络分析&#xff0c;而使用 Charles、Tcpdump 也是逆袭分析最基本的手段。本文以 Charles 为例来介绍网络相关的内容。 Charles 是在 Mac 下常用的网络封包截取工具&#xff0c;在做 移动开…

ios游戏开发

知识系统 英文教程网站 http://www.csdn.net/article/2012-12-20/2813035-game-dev-guide 开发类库 http://www.csdn.net/article/2012-11-07/2811587-pop-ios-dev-library