神经网络的梯度下降

单层神经网络的参数:w[1] ,b[1] ,w[2] ,b[2]

以及还包括n[0]个输入特征,n[1]个隐藏单元,n[2]个输出单元

矩阵w[1]的维度是( n[1],n[0] ), b[1]的维度是( n[1],1 ),w[2]的维度是( n[2],n[1] ),b[2]的维度是( n[2],1 )

成本函数 J(w[1] ,b[1] ,w[2] ,b[2] )= 1/m Σ L( a[2] , y )

在训练神经网络时,随机初始化参数很重要

repeat {

  dw[1] = dJ / dw[1]    ,         db[1] = dJ / db[1]

       w[1] = w[1]   — αdw[1]

  b[1] = b[1]   — αdb[1]

  w[2] = w[2]   — αdw[2]

   b[2] = b[2]   — αdb[2]

}  //这是梯度下降的一次迭代循环

正向传播过程:

z[1] = w[1]x + b[1]

A[1] = g[1]( z[1] )

z[2] = w[2]x + b[2]

A[2] = g[2]( z[2] ) = σ( z[2] )

反向传播过程:

dz[2] = A[2] - Y

dw[2] = 1/m dz[2]A[1]T

db[2] = 1/m np.sum( dz[2] , axis = 1 , keepdims = True )                    //这是python中用来对矩阵的一个维度求和,axis=1是指水平方向求和,而再加上

                                                                                                       keepdims就是防止python直接输出这些古怪的秩为1的数组。确保python输出的是矩

                                                                                                       阵,对于db[2]这个向量输出的维度是(n,1)

dz[1] = w[2]Tdz[2] * g[1] ' ( z[1] )                                                               //g[1] '  是导数

dw[1] = 1/m dz[1] xT

db[1] = 1/m np.sum( dz[1] , axis = 1 , keepdims = True )

原文地址:https://www.cnblogs.com/nhdmmdxq/p/9555698.html