第二周:神经网络基础
- numpy中的广播:
一个(m,n)的矩阵加减乘除(1,n)或者(m,1)的A向量,python会自动把A向量变成(m,n)维度
Eg:
- 在写代码中不要用shape=(5,)这种秩为1的数据类型,它既不是行向量也不是列向量,记得reshape(1,5)或者(5,1)
- 神经网络中,比如a[m](i),方括号中的m表示神经网络第m层,圆括号里面的i表示训练样本i。
第三周:浅层神经网络
- 神经网络中,可以用矩阵表示神经网络的向量化实现,比如说下面:横向表示了不同的样本,竖向表示了神经网络中的不同节点(隐藏单元,即样本特征以及计算得到的特征)。
eg这个双层神经网络的例子
- 初始化权重非常重要,如果把W全部初始化为0,那么所有的隐藏单元都是对称的,不管做多久梯度下降都毫无意义,比如,
- 因此随机初始化权重是个好方法,比如可以让W[1]=np.random.randn((2,2))*0.01(产生参数为(2,2)的高斯随机分布)得到一个很小的权重,我们喜欢较小的初始化权重,因为权重过大时,z值会非常大或者非常小,则激活函数会落在平缓部分,造成梯度过于平缓,训练太慢。对于b,则没有这个对称问题,则可以吧b初始化为0
2.反向传播图示
第四周 深层神经网络
- 怎么检查神经网络的权重矩阵?
前向传播:
W[l] = (n[l], n[l-1])
B[l] = (n[l], 1)
反向传播:
dW[l] = W[l] = (n[l], n[l-1])
Db[l] = B[l] = (n[l], 1)
Z[l] = a[l]
向量化后,W,b,dW和db的维度应该始终是一样的,但是Z,A以及X的维度会在向量化后发生变化。比如下面的Z[1]:
- 一个梯度下降循环,记得缓存各种用到的参数