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中的输出标签通常放在矩阵列中)
惯用符号约定
2.2 logistic 回归 Logistic Regression
本节介绍逻辑回归模型。
给定x,想知道预测y为1的概率,
y
^
=
P
(
y
=
1
∣
x
)
\hat y=P(y=1|x)
y^=P(y=1∣x)
x是一个nx维向量,
x
∈
R
n
x
x \in R^{n_x}
x∈Rnx
已知逻辑回归2个参数:w也是一个nx维向量,
w
∈
R
n
x
w \in R^{n_x}
w∈Rnx;b是一个实数,
b
∈
R
b \in R
b∈R
由于在这里,y的预测概率值范围
0
≤
y
^
≤
1
0\leq \hat y \leq1
0≤y^≤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+e−z1
- 如果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+e−z(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))+(1−y(i))log(1−y^(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(1−y^),此时要想让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=1∑mL(y^(i),y(i))=−m1i=1∑m[(y(i)log(y^(i))+(1−y(i))log(1−y^(i))]
上式表面成本函数即所有训练样本损失函数之和。
所以在逻辑回归中,我们就是要找到合适的w和b,让成本函数J(总体成本)尽量小。
2.4 梯度下降法 Gradient Descent
梯度下降算法用来训练或者学习训练集上的参数w和b。
我们已经知道成本函数J(w,b)被定义成损失函数的平均值,即
1
m
\frac 1m
m1的损失函数之和。显然,要提高算法的效果,就是要找到使得成本函数J尽可能小的w和b。下图中,最下方红色箭头所指的红点,就是J的最小值。
上图中的J函数是一个凸函数。凸函数是逻辑回归使用这个特定成本函数J的重要原因之一。
为了找到更好的参数值,我们首先要用某个初始值来初始化w和b。
对于逻辑回归,任何初始化方法都有效。一般做法会用0来初始化,不过逻辑回归并不需要如此。因为函数是凸的,无论在哪个点初始化,最终都会到达(或者大致到达)同一个点。
梯度下降法所做的就是,从初始点(图中最上方红色箭头指向的点)开始,朝最陡的下坡方向走一步。梯度下降一步后(初始点下方,箭头指向的点),或许会停下来,因为它试图沿着最快的方向向下走,或者说尽快向下走,这就是梯度下降的一次迭代。反复迭代后,梯度下降终于到达(或者大致接近)全局最优值点(图中最下方红点)。
以上就是梯度下降法的基本原理。
下面进一步解释梯度下降法
观察上图,有一个代表成本函数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)