2020-4-29 吴恩达DL学习-神经网络和深度学习Neural Network and Deep Learning-第二周 神经网络基础

1.视频网站:mooc慕课https://mooc.study.163.com/university/deeplearning_ai#/c
2.详细笔记网站(中文):http://www.ai-start.com/dl2017/
3.github课件+作业+答案:https://github.com/stormstone/deeplearning.ai

第二周 神经网络基础 Basics of Neural Network programming

  • 2.1 二分分类
  • 2.2 logistic 回归 Logistic Regression
  • 2.3 logistic 回归损失函数 Logistic Regression cost function
  • 2.4 梯度下降法 Gradient Descent
  • 2.5 导数 Derivatives
  • 2.6 更多导数的例子 More derivatives examples
  • 2.7 计算图 Computation Graph-前向传播
  • 2.8 计算图的导数计算 Derivatives with a Computation Graph-反向传播
  • 2.9 logistic 回归中的梯度下降法 Logistic Regression Gradient descent - 反向传播
  • 2.10 m 个样本的梯度下降 Gradient descent on m examples
  • 2.11 向量化 Vectorization-加速计算
  • 2.12 向量化的更多例子 More vectorization examples
  • 2.13 向量化 logistic 回归 Vectorizing Logistic Regression - 前向传播
  • 2.14 向量化 logistic 回归的梯度输出 Vectorizing Logistic Regression’s Gradient Computation -反向传播
  • 2.15 Python 中的广播 Broadcasting in Python
  • 2.16 关于 python / numpy 向量的说明 A note on p ython/numpy vectors
  • 2.17 Jupyter / Ipython 笔记本的快速指南
  • 2.18 (选修)logistic 损失函数的解释 Explanation of logistic regression cost function(Optional)
  • 课后测验
  • 课后编程

学习如何用神经网络的思维模式提出机器学习问题、如何使用向量化加速你的模型。

本周学习内容

  • NN,不需要用for循环遍历m个样本的训练集
  • NN计算过程分为正向传播和反向传播2个分开的过程
  • 逻辑回归的应用

2.1 二分分类

逻辑回归是一个用于二分分类的算法。
二分分类问题中,目标就是训练出一个分类器,以图片特征向量x作为输入,预测结果标签y是1或者0。

python命令: X.shape,输出矩阵X的维度(nx,m),表示X是一个nx X m矩阵
python命令: Y.shape,输出矩阵X的维度(1,m),表示Y是一个1 X m矩阵(构建NN中的输出标签通常放在矩阵列中)

惯用符号约定
2020-4-29 吴恩达DL学习-神经网络和深度学习Neural Network and Deep Learning-第二周 神经网络基础_第1张图片

2.2 logistic 回归 Logistic Regression

本节介绍逻辑回归模型。

给定x,想知道预测y为1的概率, y ^ = P ( y = 1 ∣ x ) \hat y=P(y=1|x) y^=P(y=1x)
x是一个nx维向量, x ∈ R n x x \in R^{n_x} xRnx
已知逻辑回归2个参数:w也是一个nx维向量, w ∈ R n x w \in R^{n_x} wRnx;b是一个实数, b ∈ R b \in R bR
由于在这里,y的预测概率值范围 0 ≤ y ^ ≤ 1 0\leq \hat y \leq1 0y^1,显然使用线性回归 y ^ = w T x + b \hat y =w^Tx+b y^=wTx+b来分类是不适合的(y可能比1大很多,也可能是复制)。
所以,我们这里要使用sigmoid函数,y预测值 y ^ = σ ( w T x + b ) \hat y =\sigma(w^Tx+b) y^=σ(wTx+b)

sigmoid函数表示如下
σ ( z ) = 1 1 + e − z \sigma{(z)}=\frac{1}{1+e^{-z}} σ(z)=1+ez1
2020-4-29 吴恩达DL学习-神经网络和深度学习Neural Network and Deep Learning-第二周 神经网络基础_第2张图片

  • 如果z是一个很大的正数,那么e-z就接近0, σ ( z ) \sigma(z) σ(z)接近1
  • 如果z是一个很大的负数,那么e-z就是一个很大的数, σ ( z ) \sigma(z) σ(z)接近0

这样一来,逻辑回归算法就是要学习w和b参数,使得y得到很好的预测。

2.3 logistic 回归损失函数 Logistic Regression cost function

为了训练逻辑回归的参数w和b,需要定义一个损失函数Loss function(或者叫误差函数error function)。优化模型,就是要最小化损失函数。

我们定义
y ^ ( i ) = σ ( w T x ( i ) + b ) \hat y^{(i)}=\sigma(w^Tx^{(i)}+b) y^(i)=σ(wTx(i)+b)
其中 σ ( z ( i ) ) = 1 1 + e − z ( i ) \sigma(z^{(i)})= \frac1{1+ e^{−z^{(i)}}} σ(z(i))=1+ez(i)1

符号约定:带有上标i的x,y和z,表示x,y和z与第i个训练样本有关。

损失函数(误差函数)用来测量预测值 y ^ ( i ) \hat y^{(i)} y^(i)和期望输出值 y ( i ) y^{(i)} y(i)之间的差异。它可以用来衡量算法的运行情况

简单来说,损失函数就是用来衡量预测值和实际值有多接近,即算法的效果。

我们可以利用平方误差定义损失函数 L ( y ^ , y ) = 1 2 ( y ^ − y ) 2 L(\hat y,y)=\frac 12(\hat y -y)^2 L(y^,y)=21(y^y)2,但是用这个损失函数学习参数,优化时候可能会非凸(可以得到多个局部最优值,但是找不到全局最优值),这对于梯度下降算法不太好。

在逻辑回归中定义损失函数如下,它会起到和平方误差相似的作用,这会给我们凸的优化问题(容易优化)
L ( y ^ ( i ) , y ( i ) ) = − ( y ( i ) l o g ( y ^ ( i ) ) + ( 1 − y ( i ) ) l o g ( 1 − y ^ ( i ) ) ) L(\hat y{(i)},y^{(i)})=−( y^{(i)}log(\hat y^{(i)})+(1−y^{(i)})log (1−\hat y^{(i)})) L(y^(i),y(i))=(y(i)log(y^(i))+(1y(i))log(1y^(i)))

分析一下这个损失函数的效果。这也是为什么要在逻辑回归中选用这个损失函数的原因。

  • 当y=1时, L = − l o g ( y ^ ) L=-log(\hat y) L=log(y^),此时要想让L变小,或者说让 − l o g ( y ^ ) -log(\hat y) log(y^)变小,那就是要让 l o g ( y ^ ) log(\hat y) log(y^)变大,这也就意味着让 y ^ \hat y y^变大。由于有sigmoid函数限制存在,那 y ^ \hat y y^的最大值就是1。总结一下:如果y=1,就要让 y ^ \hat y y^接近1。
  • 当y=0时, L = − l o g ( 1 − y ^ ) L=-log(1-\hat y) L=log(1y^),此时要想让L变小,显然就是要让 y ^ \hat y y^变大。由于有sigmoid函数限制存在,那 y ^ \hat y y^的最小值就是0。总结一下:如果y=0,就要让 y ^ \hat y y^接近0。

损失函数是在单个训练样本中定义的,它衡量了(参数w和b在)单个训练样本上的表现。

成本函数(cost function)衡量的是(参数w和b在)全体样本上的表现。
J ( w , b ) = 1 m ∑ i = 1 m L ( y ^ ( i ) , y ( i ) ) = − 1 m ∑ i = 1 m [ ( y ( i ) l o g ( y ^ ( i ) ) + ( 1 − y ( i ) ) l o g ( 1 − y ^ ( i ) ) ] J(w,b)= \frac1m\sum_{i=1}^m L(\hat y^{(i)},y^{(i)})=− \frac1m \sum_{i=1}^m[( y^{(i)}log(\hat y^{(i)})+(1−y^{(i)})log (1−\hat y^{(i)})] J(w,b)=m1i=1mL(y^(i),y(i))=m1i=1m[(y(i)log(y^(i))+(1y(i))log(1y^(i))]
上式表面成本函数即所有训练样本损失函数之和。

所以在逻辑回归中,我们就是要找到合适的w和b,让成本函数J(总体成本)尽量小。

2.4 梯度下降法 Gradient Descent

梯度下降算法用来训练或者学习训练集上的参数w和b。

我们已经知道成本函数J(w,b)被定义成损失函数的平均值,即 1 m \frac 1m m1的损失函数之和。显然,要提高算法的效果,就是要找到使得成本函数J尽可能小的w和b。下图中,最下方红色箭头所指的红点,就是J的最小值。
2020-4-29 吴恩达DL学习-神经网络和深度学习Neural Network and Deep Learning-第二周 神经网络基础_第3张图片

上图中的J函数是一个凸函数。凸函数是逻辑回归使用这个特定成本函数J的重要原因之一。

为了找到更好的参数值,我们首先要用某个初始值来初始化w和b。
对于逻辑回归,任何初始化方法都有效。一般做法会用0来初始化,不过逻辑回归并不需要如此。因为函数是凸的,无论在哪个点初始化,最终都会到达(或者大致到达)同一个点。

梯度下降法所做的就是,从初始点(图中最上方红色箭头指向的点)开始,朝最陡的下坡方向走一步。梯度下降一步后(初始点下方,箭头指向的点),或许会停下来,因为它试图沿着最快的方向向下走,或者说尽快向下走,这就是梯度下降的一次迭代。反复迭代后,梯度下降终于到达(或者大致接近)全局最优值点(图中最下方红点)。

以上就是梯度下降法的基本原理。

下面进一步解释梯度下降法
2020-4-29 吴恩达DL学习-神经网络和深度学习Neural Network and Deep Learning-第二周 神经网络基础_第4张图片

观察上图,有一个代表成本函数J(w)的曲线,为了方便说明,这里做了简化,省略了参数b,只使用一维曲线来替代多维曲线。

梯度下降算法实际就是在重复更新参数w
w : = w − α d J ( w ) d w w:=w - \alpha \frac{dJ(w)}{dw} w:=wαdwdJ(w)
其中

  • α \alpha α代表学习率,控制每一次迭代或者说下降算法的步长。
  • 函数J(w)的导数(或者说函数J(w)在w方向上的斜率), d J ( w ) d w \frac{dJ(w)}{dw} dwdJ(w)是参数w的变化量。通常用dw来表示,即 w : = w − α d w w:=w - \alpha dw w:=wαdw。它让w朝下降最快的方向走,知道下一步更新(迭代)的方向在哪里。

在算法收敛之前,会重复更新w。

上图中,假设算法从右边开始计算,函数J曲线上最右边点的导数代表了这个点的斜率dw,即高除以宽(看上去象一个小三角形)。在这个点的斜率dw是正的,根据公式 w : = w − α d w w:=w - \alpha dw w:=wαdw,w会变小,也就是沿曲线向左下方移动一步。梯度下降算法就是按照方法,逐步的减少参数w。

同理,如果w在曲线的最左部,这里点的斜率是负数, d J ( w ) d w < 0 \frac{dJ(w)}{dw}<0 dwdJ(w)<0,所以w是逐步增加。不断用梯度下降法来迭代,w会变得越来越大。

无论初始位置在左边或者右边,梯度下降法都会让参数w朝着全局最小值方向移动。

以上是J(w)只有一个参数w的简化情况。

对于J(w,b),梯度下降法实际需要更新两个参数w和b
w : = w − α d J ( w , b ) d w w:=w - \alpha \frac{dJ(w,b)}{dw} w:=wαdwdJ(w,b)
b : = b − α d J ( w , b ) d b b:=b - \alpha \frac{dJ(w,b)}{db} b:=bαdbdJ(w,b)
这里的 d J ( w , b ) d w \frac{dJ(w,b)}{dw} dwdJ(w,b)是函数J对于w的偏导数,通常用dw表示。 d J ( w , b ) d b \frac{dJ(w,b)}{db} dbdJ(w,b)是函数J对于b的偏导数,通常用db表示。偏导数就是计算函数关于其中一个变量在对应点的斜率。

符号约定
导数用符号 d 表示,而偏导数通常用符号 ∂ 表示。

2.5 导数 Derivatives

2020-4-29 吴恩达-NN&DL-w2 NN基础(2.5 导数,2.6 更多导数的例子)

2.6 更多导数的例子 More derivatives examples

2020-4-29 吴恩达-NN&DL-w2 NN基础(2.5 导数,2.6 更多导数的例子)

2.7 计算图 Computation Graph-前向传播

2020-4-30 吴恩达-NN&DL-w2 NN基础(2.7 计算图,2.8 计算图的导数计算,2.9 逻辑回归中的梯度下降法,2.10 m 个样本的梯度下降)

2.8 计算图的导数计算 Derivatives with a Computation Graph-反向传播

2020-4-30 吴恩达-NN&DL-w2 NN基础(2.7 计算图,2.8 计算图的导数计算,2.9 逻辑回归中的梯度下降法,2.10 m 个样本的梯度下降)

2.9 logistic 回归中的梯度下降法 Logistic Regression Gradient descent - 反向传播

2020-4-30 吴恩达-NN&DL-w2 NN基础(2.7 计算图,2.8 计算图的导数计算,2.9 逻辑回归中的梯度下降法,2.10 m 个样本的梯度下降)

2.10 m 个样本的梯度下降 Gradient descent on m examples

2020-4-30 吴恩达-NN&DL-w2 NN基础(2.7 计算图,2.8 计算图的导数计算,2.9 逻辑回归中的梯度下降法,2.10 m 个样本的梯度下降)

2.11 向量化 Vectorization-加速计算

2020-5-1 吴恩达-NN&DL-w2 NN基础(2.11 向量化 Vectorization,2.12 向量化的更多例子)

2.12 向量化的更多例子 More vectorization examples

2020-5-1 吴恩达-NN&DL-w2 NN基础(2.11 向量化 Vectorization,2.12 向量化的更多例子)

2.13 向量化 logistic 回归 Vectorizing Logistic Regression - 前向传播

2020-5-2 吴恩达-NN&DL-w2 NN基础(2.13 向量化逻辑回归,2.14 向量化逻辑回归的梯度输出)

2.14 向量化 logistic 回归的梯度输出 Vectorizing Logistic Regression’s Gradient Computation -反向传播

2020-5-2 吴恩达-NN&DL-w2 NN基础(2.13 向量化逻辑回归,2.14 向量化逻辑回归的梯度输出)

2.15 Python 中的广播 Broadcasting in Python

2020-5-3 吴恩达-NN&DL-w2 NN基础(2.15 Python 中的广播)

2.16 关于 python / numpy 向量的说明 A note on p ython/numpy vectors

2020-5-3 吴恩达-NN&DL-w2 NN基础(2.16 关于 python / numpy 向量的说明)

2.17 Jupyter / Ipython 笔记本的快速指南

省略

2.18 (选修)logistic 损失函数的解释 Explanation of logistic regression cost function(Optional)

2020-5-5 吴恩达-NN&DL-w2 NN基础(2.18 (选修)logistic 损失函数的解释)

课后测验

2020-5-31 吴恩达-NN&DL-w2 NN基础(课后作业)

课后编程

2020-6-6 吴恩达-NN&DL-w2 NN基础(课后编程-Logistic Regression with a Neural Network mindset)

你可能感兴趣的:(深度学习,IT,python,深度学习)