吴恩达《深度学习-神经网络和深度学习》4--深层神经网络
1. 深层神经网络长什么样?
所谓深层神经网络其实就是含有更多的隐藏层或隐藏层单元的神经网络。
2. 前向传播
深层神经网络前向传播的向量化实现:
这里需要逐层计算每层的z和a,一般只能用for循环(从第1层到第L层,输入层被称为第0层)
3. 如何确定矩阵的维数
n[0]是输入层的特征数,n[1]是第一层的单元数,以此类推,m为样本数。
4. 构建深层神经网络的块
前向传播计算a[l],同时缓存w b z,留待反向传播使用,反向传播计算导数
反向传播的初始传入值dA[L]是求解反向传播的关键,这里dA[L]是cost function对A[L]的导数,上图以logistics的cost function为例求解了dA[L]。
对于上图的深度神经网络,n[0]=3,n[1]=5,n[2]=5,n[3]=3,n[4]=1,L=4,m为样本数
正向传播过程:(先确定W的维数,W的维数等于当前层单元数乘以前一层单元数,b总是一列,加法计算的时候会把它复制成m列)
Z[1]=W[1]*A[0]+b[1]; A[0]=X∈ (3,m); W[1]∈(5,3); b[1]∈(5,1); Z[1]∈(5,m);
A[1]=g[1](Z[1]); //g[1](z[1])是以Z[1]为参数的**函数,可以是ReLU,sigmoid或tanh等,A[1]与Z[1]维数一直也是(5,m),此时缓存Z[1],W[1],b[1];
Z[2]=W[2]*A[1]+b[2]; A[1]=X∈ (5,m); W[2]∈(5,5); b[2]∈(5,1); Z[2]∈(5,m);
A[2]=g[2](Z[2]); //(5,m) ,此时缓存Z[2],W[2],b[2]
Z[3]=W[3]*A[2]+b[3]; A[2]=X∈ (5,m); W[3]∈(3,5); b[3]∈(3,1); Z[3]∈(3,m);
A[3]=g[3](Z[3]); //(3,m) 此时缓存Z[3],W[3],b[3]
Z[4]=W[4]*A[3]+b[4]; A[3]=X∈ (3,m); W[4]∈(1,3); b[4]∈(1,1); Z[4]∈(1,m);
A[4]=g[4](Z[4]); //(1,m) Z[4]即模型预估值,此时缓存Z[4],W[4],b[4]
反向传播过程:(带‘的所有的g都是表示求导,其他的都是表示矩阵转置)
dZ[4]=A[4]-Y; //A[4]∈(1,m); Y∈(1,m); dZ[4]∈(1,m) ;
dW[4]=1/m*dZ[4]*A[3]'; dZ[4]∈(1,m); A[3]'∈[m,3]此处表示转置矩阵; dW[4]∈(1,3)
db[4]=1/m*sum(dZ[4]); //按行求均值 db[4]∈(1,1)
dA[3]=W[4]'*dZ[4]; W[4]'∈(3,1)此处表示转置矩阵; dZ[4]∈ (1,m); dA[3]∈(3,m)
dZ[3]=dA[3]*g[3]'; //dA[3]∈(3,m); g[3]'∈(3,m) 此处表示导数;dZ[3]∈(3,m)这里的乘法表示对应的矩阵元素相乘;
dW[3]=1/m*dZ[3]*A[2]'; dZ[3]∈(3,m); A[2]'∈[m,5]; dW[3]∈(3,5)
db[3]=1/m*sum(dZ[3]); //按行求均值 db[3]∈(3,1)
dA[2]=W[3]'*dZ[3]; W[3]'∈(5,3)此处表示转置矩阵; dZ[3]∈ (3,m); dA[2]∈(5,m)
dZ[2]=dA[2]*g[2]'; //dA[2]∈(5,m); g[2]'∈(5,m) 此处表示导数;dZ[2]∈ (5,m)这里的乘法表示对应的矩阵元素相乘;
dW[2]=1/m*dZ[2]*A[1]'; dZ[2]∈(5,m); A[1]'∈[m,5]; dW[2]∈(5,5)
db[2]=1/m*sum(dZ[2]); //按行求均值 db[2]∈(5,1)
dA[1]=W[2]'*dZ[2]; W[2]'∈(5,5)此处表示转置矩阵; dZ[2]∈ (5,m); dA[1]∈(5,m)
dZ[1]=dA[1]*g[1]'; //dA[1]∈(5,m); g[1]'∈(5,m) 此处表示导数;dZ[1]∈ (5,m)这里的乘法表示对应的矩阵元素相乘;
dW[1]=1/m*dZ[1]*A[0]'; dZ[1]∈(5,m); A[0]'∈[m,3]; dW[1]∈(5,3)
db[1]=1/m*sum(dZ[1]); //按行求均值 db[1]∈(5,1)
5. 参数和超参数(Parameters vs Hyperparameters)
参数就是我们所关心的w和b
超参数就是能够影响或决定参数w和b的参数,超参数的选择是深度学习的一个难题,目前主要靠经验,需要尝试很多不同的值,每一次都需要实现模型,然后尝试保留交叉验证或其他验证方法来选择一个较好的值。值得一提的是即使你找到了某个模型的最优解,其值也可能随时间变化而变化,所以在应用模型的过程中,要注意经常的尝试不同的超参数,勤于检验结果。
6. 名人访谈
受限玻尔兹曼机
变分法
生成对抗网络
胶囊
增强学习
对抗性样本 //机器学习安全的新领域