DeepLearning.AI – 第二周

补充参考习题:

  1. GitHub – Kulbear/deep-learning-coursera: Deep Learning Specialization by Andrew Ng on Coursera.
  2. 0.0 目录-深度学习第四课《卷积神经网络》-Stanford吴恩达教授_Zhao-Jichao的博客-CSDN博客
  3. 吴恩达深度学习相关资源下载地址(蓝奏云)_何宽的博客-CSDN博客_蓝奏云学习资料合集
  4. 工作台 – Heywhale.com

笔记:大树先生的笔记

第二章 神经网络编程基础

作业:

a = np.random.randn(4, 3) # a.shape = (4, 3)
b = np.random.randn(3, 2) # b.shape = (3, 2)
c = a*b //元素乘法需要两个矩阵之间的维数相同

1. 请问数组c的维度是多少?
A. c.shape = (3, 3)
B. c.shape = (4,2)
C.计算无法发生,因为大小不匹配,会发生“错误”! D.c.shape = (4, 3)

2. 假设你的每一个实例有n_x个输入特征,想一下在X=[x^(1), x^ (2)…x^(m)]中,X的维度是多少?
A. (m,1)
B. (1,m)
C. (m,nx)
D. (nx,m)

编程练习:

https://github.com/liyouxia920/DeepLearning.AI/blob/main/1-Neural%20Networks%20and%20Deep%20Learning/Homework_2/DeepLearningAiWeek2.ipynb

第三章 浅层神经网络

1. 神经网络概览

[m]:第m层网络

2. 神经网络的表现形式

  • 输入层-隐藏层-输出层
  • 通过带方括号上标的形式来指出这些值来自于哪一层
  • 输入层和隐藏层之间
    • w(4,3):4个隐藏层神经元,3个输入特征
    • b(4,1)
  • 隐藏层和输出层之间
    • w(1,4):1个输出层神经元,4个隐藏层神经元
    • b(1,1)
  • 一个两层的神经网络示意图:

3. 计算神经网络的输出

  • 每个结点都对应两部分的运算:z运算和a运算
  • 只需要用Python实现右边的四个公式即可实现神经网络的输出计算。要使用向量化计算。

4. 多样本向量化

  • 逻辑回归:将各个训练样本组合成矩阵,对矩阵的各列进行计算
  • 神经网络:对逻辑回归中的等式简单地变形,让神经网络计算输出值
  • 其实是把多个实例矢量化
    • x -> X
    • z -> Z
    • a -> A
  • 水平方向:training examples
  • 垂直方向:hidden units

5. 向量化实现的解释

  • 使用向量的方法(例子是四维向量),而不需要显式循环
  • b -> Python 广播机制
  • 方程具有一定的对称性
  • 仅使用sigmoid函数作为激活函数不是最好的选择

6. 激活函数

  • tanh函数
  • 二元分类时在输出层应该使用sigmoid函数
  • 对函数斜率为0的影响最小
    • ReLU(线性修正单元)函数
    • leaky ReLU

7. 为什么需要非线性激活函数

  • 如果使用线性激活函数或者没有使用激活函数,无论神经网络有多少层,一直在做的只是计算线性函数,不如直接去掉全部隐藏层
  • 所以,不能在隐藏层中用线性激活函数,可以用ReLU/tanh/leaky ReLU或者其他非线性激活函数

8. 激活函数的导数

  • sigmoid函数
  • tanh双曲正切函数
  • ReLU函数和Leaky ReLU函数

9. 神经网络的梯度下降

  • 以本节中的浅层神经网络为例,我们给出神经网络的梯度下降法的公式。
    • 参数: 公式
    • 输入层特征向量个数: 公式
    • 隐藏层神经元个数: 公式
    • 输出层神经元个数: 公式
    • 公式 的维度为 公式公式 的维度为 公式
    • 公式 的维度为 公式公式 的维度为 公式
  • 前向传播的4个方程和反向传播的6个方程
  • keepdims和reshape可以防止输出奇怪的秩数

10. 反向传播的直觉

  • 线性代数对矩阵求导(链式法则):推导反向传播
左:反向梯度下降公式;右:其对应的代码向量化

11. 随机初始化

  • 对一个神经网络,如果权重或者参数初始化为0,梯度下降将不会起作用
  • 初始化的例子:在初始化的时候, 公式 参数要进行随机初始化, 公式 则不存在对称性的问题它可以设置为0。 以2个输入,2个隐藏神经元为例:
W = np.random.rand((2,2))* 0.01
b = np.zero((2,1))
  • 使用很小的随机数以提高算法的更新速度

发表评论