第一门课 神经网络和深度学习(Neural Networks and Deep Learning)
文章目录
- 第一门课 神经网络和深度学习(Neural Networks and Deep Learning)
- 第一周:深度学习引言(Introduction to Deep Learning)
- 第二周:神经网络的编程基础(Basics of Neural Network programming)
- 2.1 二分类(Binary Classification)
- 2.2 逻辑回归(Logistic Regression)
- 2.3 逻辑回归的代价函数(Logistic Regression Cost Function)
- 2.4 梯度下降法(Gradient Descent)
- 2.7 计算图(Computation Graph)
- 2.8 使用计算图求导数(Derivatives with a Computation Graph)
- 2.9 逻辑回归中的梯度下降(Logistic Regression Gradient Descent)
- 2.10 m 个样本的梯度下降(Gradient Descent on m Examples)
- 2.11 向量化(Vectorization)
- 2.18 (选修)logistic 损失函数的解释(Explanation of logistic regression cost function)
第一周:深度学习引言(Introduction to Deep Learning)
1.1 欢迎(Welcome)
- 在第一门课程中,你将学习如何建立神经网络(包含一个深度神经网络),以及如何在数据上面训练他们。在这门课程的结尾,你将用一个深度神经网络进行辨认猫。
- 在第二门课中,我们将使用三周时间。你将进行深度学习方面的实践,学习严密地构建神经网络,如何真正让它表现良好,因此你将要学习超参数调整、正则化、诊断偏差和方差以及一些高级优化算法,比如Momentum和Adam算法,犹如黑魔法一样根据你建立网络的方式。第二门课只有三周学习时间。
- 在第三门课中,我们将使用两周时间来学习如何结构化你的机器学习工程。事实证明,构建机器学习系统的策略改变了深度学习的错误。
- 在第四门课程中,我们将会提到卷积神经网络(CNN(s))
- 在第五门课中,你将会学习到序列模型,以及如何将它们应用于自然语言处理,以及其它问题。
- 序列模型包括的模型有循环神经网络(RNN)、全称是长短期记忆网络(LSTM)。你将在课程五中了解其中的时期是什么含义,并且有能力应用到自然语言处理(NLP)问题。
1.2 什么是神经网络?(What is a Neural Network)

R e l u = m a x ( 0 , x ) Relu = max(0,x) Relu=max(0,x)
让我们来看一个例子,我们不仅仅用房屋的面积来预测它的价格,现在你有了一些有关房屋的其它特征,比如卧室的数量,或许有一个很重要的因素,一家人的数量也会影响房屋价格,这个房屋能住下一家人或者是四五个人的家庭吗?而这确实是基于房屋大小,以及真正决定一栋房子是否能适合你们家庭人数的卧室数。
换个话题,你可能知道邮政编码或许能作为一个特征,告诉你步行化程度。比如这附近是不是高度步行化,你是否能步行去杂货店或者是学校,以及你是否需要驾驶汽车。有些人喜欢居住在以步行为主的区域,另外根据邮政编码还和富裕程度相关(在美国是这样的)。但在其它国家也可能体现出附近学校的水平有多好。

在图上每一个画的小圆圈都可以是ReLU的一部分,也就是指修正线性单元,或者其它稍微非线性的函数。基于房屋面积和卧室数量,可以估算家庭人口,基于邮编,可以估测步行化程度或者学校的质量。最后你可能会这样想,这些决定人们乐意花费多少钱。
对于一个房子来说,这些都是与它息息相关的事情。在这个情景里,家庭人口、步行化程度以及学校的质量都能帮助你预测房屋的价格。
以此为例, x x x 是所有的这四个输入, y y y是你尝试预测的价格,把这些单个的神经元叠加在一起,我们就有了一个稍微大一点的神经网络。

1.3 神经网络的监督学习(Supervised Learning with Neural Networks)
到目前几乎所有由神经网络创造的经济价值,本质上都离不开一种叫做监督学习的机器学习类别
在监督学习中你有一些输入 x x x,你想学习到一个函数来映射到一些输出 y y y,比如我们之前提到的房价预测的例子,你只要输入有关房屋的一些特征,试着去输出或者估计价格 y y y。

对于图像应用,我们经常在神经网络上使用卷积(Convolutional Neural Network),通常缩写为CNN。对于序列数据,例如音频,有一个时间组件,随着时间的推移,音频被播放出来,所以音频是最自然的表现。作为一维时间序列(两种英文说法one-dimensional time series / temporal sequence).对于序列数据,经常使用RNN,一种递归神经网络(Recurrent Neural Network),语言,英语和汉语字母表或单词都是逐个出现的,所以语言也是最自然的序列数据,因此更复杂的RNNs版本经常用于这些应用。
1.4 为什么深度学习会兴起?(Why is Deep Learning taking off?)

如果你没有大量的训练集,那效果会取决于你的特征工程能力,那将决定最终的性能。假设有些人训练出了一个SVM(支持向量机)表现的更接近正确特征,然而有些人训练的规模大一些,可能在这个小的训练集中SVM算法可以做的更好。
sigmoid到Relu的转变

在x趋向于 ± ∞ ±∞ ±∞的时候,梯度几乎为零,学习的速度会变得非常缓慢,因为当你实现梯度下降以及梯度接近零的时候,参数会更新的很慢,所以学习的速率也会变的很慢
神经网络换用这一个函数,叫做ReLU的函数(修正线性单元),ReLU它的梯度对于所有输入的负值都是零,因此梯度更加不会趋向逐渐减少到零。而这里的梯度,这条线的斜率在这左边是零,仅仅通过将Sigmod函数转换成ReLU函数,便能够使得一个叫做梯度下降(gradient descent)的算法运行的更快
第二周:神经网络的编程基础(Basics of Neural Network programming)
2.1 二分类(Binary Classification)
当实现一个神经网络的时候,我们需要知道一些非常重要的技术和技巧。例如有一个包含个 m m m样本的训练集,你很可能习惯于用一个for循环来遍历训练集中的每个样本,但是当实现一个神经网络的时候,我们通常不直接使用for循环来遍历整个训练集.
通常先有一个叫做前向暂停(forward pause)或叫做前向传播(foward propagation)的步骤,接着有一个叫做反向暂停(backward pause) 或叫做反向传播**(backward propagation**)的步骤
逻辑回归是一个用于二分类(binary classification)的算法。首先我们从一个问题开始说起,这里有一个二分类问题的例子,假如你有一张图片作为输入,比如这只猫,如果识别这张图片为猫,则输出标签1作为结果;如果识别出不是猫,那么输出标签0作为结果。现在我们可以用字母 y y y来 表示输出的结果标签


2.2 逻辑回归(Logistic Regression)
y ^ = σ ( w T + b ) = P ( y = 1 ∣ x ) \hat{y}=\sigma(w^T+b)=P(y=1|x) y^=σ(wT+b)=P(y=1∣x)
0
≤
y
^
≤
1
0\leq\hat{y}\leq1
0≤y^≤1
σ
(
z
)
=
1
1
+
e
−
z
\sigma(z) = {{1}\over{1 + e^{-z}}}
σ(z)=1+e−z1
2.3 逻辑回归的代价函数(Logistic Regression Cost Function)
为什么需要代价函数:
为了训练逻辑回归模型的参数参数和参数我们,需要一个代价函数,通过训练代价函数来得到参数和参数。先看一下逻辑回归的输出函数:

请注意,这里的 ( i ) (i) (i)指第几个元素。我们使用这些带有圆括号的上标来区分索引和样本,训练样本 i i i所对应的预测值是 y ( i ) y^{(i)} y(i),是用训练样本的 w T x ( i ) + b w^Tx^{(i)}+b wTx(i)+b然后通过sigmoid函数来得到,也可以把定义为 z ( i ) = w T x ( i ) + b z^{(i)} = w^Tx^{(i)}+b z(i)=wTx(i)+b,我们将使用这个符号 ( i ) (i) (i)注解,上标 ( i ) (i) (i)来指明数据的第 ( i ) (i) (i)个训练样本,这就是上标的含义。
为了让模型通过学习调整参数,你需要给予一个样本的训练集,这会让你在训练集上找到参数和参数,,来得到你的输出。
我们将它写成 y ^ \hat{y} y^,我们更希望它会接近于训练集中的值 y y y
损失函数(误差函数) L ( y ^ , y ) = − y l o g ( y ^ ) − ( 1 − y ) l o g ( 1 − y ^ ) L(\hat{y},y) = -ylog(\hat{y})-(1-y)log(1-\hat{y}) L(y^,y)=−ylog(y^)−(1−y)log(1−y^)
损失函数,来衡量预测输出值和实际值有多接近
一般我们用预测值和实际值的平方差或者它们平方差的一半,但是通常在逻辑回归中我们不这么做,因为当我们在学习逻辑回归参数的时候,会发现我们的优化目标不是凸优化,只能找到多个局部最优值,梯度下降法很可能找不到全局最优值,虽然平方差是一个不错的损失函数,但是我们在逻辑回归模型中会定义另外一个损失函数。后面有更加详细的。
对于m个样本的,则求他们的期望值: J ( w , b ) = 1 m ∑ i = 1 m L ( y ^ , y ) = 1 m ∑ i = 1 m ( − y l o g ( y ^ ) − ( 1 − y ) l o g ( 1 − y ^ ) ) J(w,b) = \frac{1}{m}\sum_{i=1}^m{L(\hat{y},y)} = \frac{1}{m}\sum_{i=1}^m{(-ylog(\hat{y})-(1-y)log(1-\hat{y}))} J(w,b)=m1∑i=1mL(y^,y)=m1∑i=1m(−ylog(y^)−(1−y)log(1−y^))
2.4 梯度下降法(Gradient Descent)

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

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

梯度下降法的细节化说明(仅有一个参数)
R e p e a t { Repeat\{ Repeat{
w : = w − a d J ( a ) d w w:=w-a\frac{dJ(a)}{dw} w:=w−adwdJ(a)
} \} }
: = := :=表示更新参数,
a a a表示学习率(learning rate),用来控制步长(step),即向下走一步的长度 d J ( w ) d w \frac{dJ(w)}{dw} dwdJ(w)就是函数 J ( w ) J(w) J(w)对 w w w 求导(derivative),在代码中我们会使用 d w dw dw表示这个结果

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

2.7 计算图(Computation Graph)
一个神经网络的计算,都是按照前向或反向传播过程组织的
假设 J ( a , b , c ) = 3 ( a + b c ) J(a,b,c) = 3(a+bc) J(a,b,c)=3(a+bc),令 u = b c , v = a + u , J = 3 v u=bc,v=a+u,J = 3v u=bc,v=a+u,J=3v

而 为了计算导数,从右到左(红色箭头,和蓝色箭头的过程相反)的过程是用于计算导数最自然的方式。
2.8 使用计算图求导数(Derivatives with a Computation Graph)
还是前面这幅图

如何求导的呢?
$\frac{dJ}{du} =\frac{dJ}{dv}\frac{dv}{du},\frac{dJ}{db} =\frac{dJ}{du}\frac{du}{db},\frac{dJ}{da} =\frac{dJ}{du}\frac{du}{da}, $
- 求 d J d v \frac{dJ}{dv} dvdJ

- 求 d J d a \frac{dJ}{da} dadJ

2.9 逻辑回归中的梯度下降(Logistic Regression Gradient Descent)

其中 J ( w , b ) = 1 m ∑ i = 1 m L ( y ^ , y ) = 1 m ∑ i = 1 m ( − y l o g ( y ^ ) − ( 1 − y ) l o g ( 1 − y ^ ) ) J(w,b) = \frac{1}{m}\sum_{i=1}^m{L(\hat{y},y)} = \frac{1}{m}\sum_{i=1}^m{(-ylog(\hat{y})-(1-y)log(1-\hat{y}))} J(w,b)=m1∑i=1mL(y^,y)=m1∑i=1m(−ylog(y^)−(1−y)log(1−y^))
现在让我们来讨论通过反向计算出导数。 因为我们想要计算出的代价函数 L ( a , y ) L(a,y) L(a,y)的导数。
d a = d L ( a , y ) a d = − y a + 1 − y 1 − a da = \frac{dL(a,y)}{ad}=-\frac{y}{a}+\frac{1-y}{1-a} da=addL(a,y)=−ay+1−a1−y d L d z = a − y \frac{dL}{dz} = a-y dzdL=a−y
所以根据链式法则
d z = d L ( a , y ) a d = d L d z = ( d L d a ) ( d a d z ) = ( − y a + 1 − y 1 − a ) ⋅ a ( 1 − a ) = a − y dz =\frac{dL(a,y)}{ad} = \frac{dL}{dz} = (\frac{dL}{da})(\frac{da}{dz})= (-\frac{y}{a} + \frac{1-y}{1-a})·a(1-a) = a-y dz=addL(a,y)=dzdL=(dadL)(dzda)=(−ay+1−a1−y)⋅a(1−a)=a−y
现在进行最后一步反向推导,也就是计算和变化对代价函数的影响
d w 1 = x 1 ⋅ d z dw^1=x^1·dz dw1=x1⋅dz
然后: 更新 w 1 = w 1 − α d w 1 w_1=w_1-\alpha dw_1 w1=w1−αdw1, 更新 w 2 = w 2 − α d w 2 w_2=w_2-\alpha dw_2 w2=w2−αdw2, 更新 b = b − α d b b=b-\alpha db b=b−αdb。 这就是关于单个样本实例的梯度下降算法中参数更新一次的步骤。
2.10 m 个样本的梯度下降(Gradient Descent on m Examples)
首先记得损失函数的定义
J ( w , b ) = 1 m ∑ i = 1 m L ( y ^ , y ) = 1 m ∑ i = 1 m ( − y l o g ( y ^ ) − ( 1 − y ) l o g ( 1 − y ^ ) ) J(w,b) = \frac{1}{m}\sum_{i=1}^m{L(\hat{y},y)} = \frac{1}{m}\sum_{i=1}^m{(-ylog(\hat{y})-(1-y)log(1-\hat{y}))} J(w,b)=m1∑i=1mL(y^,y)=m1∑i=1m(−ylog(y^)−(1−y)log(1−y^))
# 累加后除样本总量
J=0;dw1=0;dw2=0;db=0;
for i = 1 to m
z(i) = wx(i)+b;
a(i) = sigmoid(z(i));
J += -[y(i)log(a(i))+(1-y(i))log(1-a(i));
dz(i) = a(i)-y(i);
dw1 += x1(i)dz(i);
dw2 += x2(i)dz(i);
db += dz(i);
J/= m;
dw1/= m;
dw2/= m;
db/= m;
w=w-alpha*dw
b=b-alpha*db
缺点:for循环太多,样本一个for,特征值一个for
2.11 向量化(Vectorization)
#非向量化的方法
z=0
for i in range(n_x):
z+=w[i]*x[i]
z+=b
# 向量化的方法
z = np.dot(w,x)+b

why?
- Python是解释语言,这意味着你的指令进行分析,并在每次执行解释。由于它们不是静态类型的,因此循环必须在每次迭代时评估操作数的类型,这导致计算开销。
- 向量化可以使一条指令并行地对多个操作数执行相同的操作(SIMD(单指令,多数据)操作)

总结一下,在这张幻灯片中我们已经看到,不需要for循环,利用 m m m个训练样本一次性计算出小写 z z z 和小写 a a a ,用一行代码即可完成。
Z = np.dot(w.T,X) + b
这一行代码: A = [ a ( 1 ) . . . . a ( m ) ] = σ ( Z ) A = [a^{(1)}....a^{(m)}]= \sigma(Z) A=[a(1)....a(m)]=σ(Z) ,通过恰当地运用 σ \sigma σ一次性计算所有 a a a 。这就是在同一时间内你如何完成一个所有 个训练样本的前向传播向量化计算。


2.18 (选修)logistic 损失函数的解释(Explanation of logistic regression cost function)
损失函数为: L = − y l o g ( y ^ ) − ( 1 − y ) l o g ( 1 − y ^ ) L= -ylog(\hat{y})-(1-y)log(1-\hat{y}) L=−ylog(y^)−(1−y)log(1−y^)
我们知道。

可以将
本文是深度学习课程的第一部分,介绍了神经网络的基本概念,包括监督学习、神经网络的构成以及为何深度学习受到重视。内容涵盖欢迎、神经网络定义、监督学习和深度学习兴起的原因。同时,讲解了逻辑回归的基础知识,如代价函数和梯度下降法,以及计算图和向量化在神经网络编程中的重要性。

554

被折叠的 条评论
为什么被折叠?



