深度学习:(七)梯度下降法在神经网络中的应用
详细说明了梯度下降法在神经网络中的应用,并给出公式和参数随机初始化的方法
梯度下降法在神经网络中的应用
事先规定:
用 nnn 表示个数(维度):
n[0]=nxn^{[0]}=n_xn[0]=nx ,表示单个训练样本 xxx 的元素个数;
n[1]n^{[1]}n[1] 表示隐藏层 111 的单元(节点)个数;
n[1]n^{[1]}n[1] 表示……
梯度下降法公式:
① www 和 bbb 参数随机初始化;
②计算预测值
③求导:dw[1]dw^{[1]}dw[1] 、db[1]db^{[1]}db[1] 、dw[2]dw^{[2]}dw[2] 、db[2]db^{[2]}db[2] 。
④更新参数:
W[1]=W[1]−α⋅dW[1]b[1]=b[1]−α⋅db[1]W[2]=W[2]−α⋅dW[2]b[2]=b[2]−α⋅db[2] \begin{align*} &W^{[1]}=W^{[1]}-\alpha·dW^{[1]}\\ &b^{[1]}=b^{[1]}-\alpha·db^{[1]}\\ &W^{[2]}=W^{[2]}-\alpha·dW^{[2]}\\ &b^{[2]}=b^{[2]}-\alpha·db^{[2]} \end{align*} W[1]=W[1]−α⋅dW[1]b[1]=b[1]−α⋅db[1]W[2]=W[2]−α⋅dW[2]b[2]=b[2]−α⋅db[2]
第三步反向传播求导的详细步骤:
dZ[2]=A[2]−YdW[2]=1mdZ[2]A[1]Tdb[2]=1mnp.sum(dZ[2],axis=1,keepdims=True)dZ[1]=W[2]TdZ[2]∗g[1]′(Z[1])//这里的∗是元素对应相乘dW[1]=1mdZ[1]XT//这里的转置是因为W[1]是由wi[1]T组成的db[1]=1mnp.sum(dZ[1],axis=1,keepdims=True) \begin{align*} &dZ^{[2]}=A^{[2]}-Y\\ &dW^{[2]}=\frac{1}{m}dZ^{[2]}A^{[1]T}\\ &db^{[2]}=\frac{1}{m}np.sum(dZ^{[2]},axis=1,keepdims=True)\\ &dZ^{[1]}=W^{[2]T}dZ^{[2]}*g^{[1]'}(Z^{[1]})//这里的*是元素对应相乘\\ &dW^{[1]}=\frac{1}{m}dZ^{[1]}X^{T}//这里的转置是因为W^{[1]}是由w_i^{[1]T}组成的\\ &db^{[1]}=\frac{1}{m}np.sum(dZ^{[1]},axis=1,keepdims=True)\\ \end{align*} dZ[2]=A[2]−YdW[2]=m1dZ[2]A[1]Tdb[2]=m1np.sum(dZ[2],axis=1,keepdims=True)dZ[1]=W[2]TdZ[2]∗g[1]′(Z[1])//这里的∗是元素对应相乘dW[1]=m1dZ[1]XT//这里的转置是因为W[1]是由wi[1]T组成的db[1]=m1np.sum(dZ[1],axis=1,keepdims=True)
参数随机初始化
神经网络的参数 wi[l]w_i^{[l]}wi[l] 和不能像逻辑回归一样,初始化为零,否则梯度下降算法就会无效。
也不要将隐藏层中的所有节点参数都初始化成一样的,否则每个节点都在做相同的运算,毫无意义。
W[1]=np.random.randn((n[1],n[0]))⋅0.01 //高斯分布随机变量再乘以0.01b[1]=np.zeros((n[1],1))W[2]=...b[2]=... \begin{align*} &W^{[1]}=np.random.randn((n^{[1]},n^{[0]}))·0.01~//高斯分布随机变量再乘以0.01\\ &b^{[1]}=np.zeros((n^{[1]},1))\\ &W^{[2]}=...\\ &b^{[2]}=... \end{align*} W[1]=np.random.randn((n[1],n[0]))⋅0.01 //高斯分布随机变量再乘以0.01b[1]=np.zeros((n[1],1))W[2]=...b[2]=...
通常情况下,会把参数随机初始化成很小很小的值,这也是乘以 0.010.010.01 的原因。
因为参数大的话, zzz 计算出来就会大,aaa 也会大,就会落在激活函数 σ(z)\sigma(z)σ(z) 或 tanh(z)tanh(z)tanh(z) 的平缓区域,就会降低梯度下降法的速度,甚至形成梯度消失问题。
更多推荐
所有评论(0)