deeplearning.ai第一部分

Week 1

1. Welcome

  • Neural Networks and Deep Learning
  • Importing Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization
  • Structuring your Machine Learning project
  • Convolutional Neural Networks
  • Natural Language Processing: Building sequence models

2. What is a neural network?

image-20200730164444085
image-20200730164444085

这样可以吗?因为size不能影响隐藏层第二个神经元,但神经网络是全连接的。

3. Supervised Learning

4. Why is Deep Learning taking off?

image-20200730165915943
image-20200730165915943

Week 2

1. Binary Classification

2. Logistic Regression

Loss function is different from cost function.

3. What is vectorization?

CPU, GPU, SIMD

1
2
3
4
5
6
u = np.zeros((n,1))
for i in range(n):
u[i] = math.exp(v[i])
-->
import numpy as np
u = np.exp(v)

向量化和广播机制让我们可以摆脱for,提高运算效率。向量化,矩阵化让我们直接输入batch。

4. 减少bug的技巧

1
2
a = np.random.randn(5,1) // (5,1)
a = np.random.randn(5) // (5,)

尽量不要用”rank 1 array”,即(5,)形式的。

为了确保形状,可以用assert()声明和reshape函数。

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

Week 3

1. 浅层神经网络

计算神经网络时候,输入层不算作层数,因为它没有权重参数。

2. 计算神经网络的输出

对于一个普通的感知机,我们知道可以写成两个计算:

而对于一个神经网络,每一个节点对应的计算都是一个感知机。

image-20200802145711046
image-20200802145711046

这里每个输入作为列向量,但事实上我们输入属性的时候我们采用的方式是每行代表一个。

两层神经网络实际上是矩阵化之后,然后重复计算两层即可,需要四个公式。

image-20200802150235200
image-20200802150235200

3. 多个例子中的向量化

上一个视频中虽然权重$W^{[1]}$是矩阵了,但是对于训练样本,我们其实也是用矩阵的。这样就可以摆脱对四个方程的for循环。

可以跳过。

4. 激活函数

image-20200802152947728
image-20200802152947728

正向传播过程中,之前讲解都是$\sigma$函数。在更一般的情况下,我们可以用其它的激活函数。比如$tanh$,它的表达式:

对于隐藏层,激活函数$tanh(z)$几乎总是好于$\sigma$,因为它的平均值是0而不是0.5?跟函数特有的映射范围有关,变换就改变了。

对于输出层就不是这样了,输出层$\sigma$会好一些,理由同上。

两个激活函数都有一个问题,就是在$z$很大的时候梯度会变得非常小,这样对梯度下降不利。

$Relu$作为激活函数解决了这个问题,但是0点没有没有定义,不过其实到那里的概率很小。

建议中间层使用$ReLU$,不过还有个缺点,就是$<0$的时候斜率为0,所以可以用$Leaky \, ReLU$,但其实很少用。

image-20200802153005041
image-20200802153005041

总体建议,默认最常用$ReLU$,也可以尝试$Leaky ReLU$,$\sigma$很少用,只在输出层用用就好,然后$tanh$比$\sigma$大部分时候都好。

5. 为什么需要激活函数?

因为如果全是线性,那多层叠加最终结果还是线性的。

image-20200802153228248
image-20200802153228248

6. 激活函数的导数

其实里面的$z=0$时都可以。

7. 神经网络的梯度下降

对于一个两层的神经网络,我们可以计算出对于每一个参数的偏导数,然后算出梯度,然后进行计算即可。

8. 随机初始化

对于回归问题,如果当梯度初始化为0,再梯度下降会失败。

完全对称问题

如果权重一样,那么隐藏单元每次计算的就会一致,每次迭代之后依然对称。

b没有初始化问题,可以设置为0,并且不会破坏对称性。

1
2
w = np.random.randn((2,2))*0.01
b = np.zero((2,1))

Week 4

1. 深层神经网络

$Logistic\; regression$ 层数是一个超参数。学习深度神经网络的标注。

image-20200802162001865
image-20200802162001865

$l,n^{[l]},x,a^{[l]}$

2. 深层网络的前向传播

提炼出来,就是:

3. 为什么使用深层表示?

image-20200803151444773
image-20200803151444773

假设给出一个图像,那么第一层可能就是检测边缘的。第二层可能就是检测眼睛的、鼻子的什么得,后面可能检测人脸某个部分的。直觉上,不停提取微小的特征,并将它们组合。

音频的识别系统也是如此,就是从相对程度较低的特征组合,再到比较复杂的特征。

image-20200803151435961
image-20200803151435961

电路理论和神经网络。如果用浅层的网络,可能需要指数级别的单元。

举个例子,如果要解决异或问题,一个

需要$log(n)$个单元,但如果需要一层,需要$2^{n-1}$指数个单元。

不要盲目追求深度。

4. 搭建深层神经网络块

image-20200803152332692
image-20200803152332692

5. 前向传播和反向传播

输入$a^{[l-1]}$,输出$a^{[l]}$,cache

反向传播过程就是一个求导的过程。围绕之前的式子,对每个非输入的量进行求导,这其中可能会用到正向传播时候用到的公式,可以缓存起来方便这里计算。

6. 参数和超参数

超参数是能够控制参数的,它们对W和

b有一定的决定作用。超参数,比如学习率,迭代次数,隐藏层数,神经元数,激活函数等。

7. 大师采访

Geoffrey Hinton
Pieter Abbeel
Ian Goodfellow