神经网络入门篇:神经网络的梯度下降(Gradient descent for neural networks)

神经网络的梯度下降

  • 在这篇博客中,讲的是实现反向传播或者说梯度下降算法的方程组

单隐层神经网络会有W[1]b[1]W[2]b[2]这些参数,还有个nx表示输入特征的个数,n[1]表示隐藏单元个数,n[2]表示输出单元个数。

在这个例子中,只介绍过的这种情况,那么参数:

矩阵W[1]的维度就是(n[1],n[0]),b[1]就是n[1]维向量,可以写成(n[1],1),就是一个的列向量。
矩阵W[2]的维度就是(n[2],n[1]),b[2]的维度就是(n[2],1)维度。

还有一个神经网络的成本函数,假设在做二分类任务,那么的成本函数等于:

Cost function:

公式:

J(W[1],b[1],W[2],b[2])=1mi=1mL(y^,y)

loss function和之前做logistic回归完全一样。

训练参数需要做梯度下降,在训练神经网络的时候,随机初始化参数很重要,而不是初始化成全零。当参数初始化成某些值后,每次梯度下降都会循环计算以下预测值:

y^(i),(i=1,2,,m)

公式1.28:

dW[1]=dJdW[1],db[1]=dJdb[1]

公式1.29:

dW[2]=dJdW[2],db[2]=dJdb[2]

其中

公式1.30:

W[1]W[1]adW[1],b[1]b[1]adb[1]

公式1.31:

W[2]W[2]αdW[2],b[2]b[2]αdb[2]

正向传播方程如下(之前讲过):

forward propagation

(1)
z[1]=W[1]x+b[1]
(2)
a[1]=σ(z[1])
(3)
z[2]=W[2]a[1]+b[2]
(4)
a[2]=g[2](z[z])=σ(z[2])

反向传播方程如下:

back propagation

公式1.32:

dz[2]=A[2]Y,Y=[y[1]y[2]y[m] ]

公式1.33:

$ dW^{[2]} = {\frac{1}{m}}dz{[2]}A $

公式1.34:

db[2]=1mnp.sum(dz[2],axis=1,keepdims=True)

公式1.35:

$ dz^{[1]} = \underbrace{W^{[2]T}{\rm d}z{[2]}}_{(n,m)}\quad\underbrace{{g{[1]}}{'}}_{activation ; function ; of ; hidden ; layer}\quad\underbrace{(z{[1]})}_{(n,m)} $

公式1.36:

dW[1]=1mdz[1]xT

公式1.37:

db[1](n[1],1)=1mnp.sum(dz[1],axis=1,keepdims=True)

上述是反向传播的步骤,注:这些都是针对所有样本进行过向量化,Y1×m的矩阵;这里np.sum是python的numpy命令,axis=1表示水平相加求和,keepdims是防止python输出那些古怪的秩数(n,),加上这个确保阵矩阵db[2]这个向量输出的维度为(n,1)这样标准的形式。

目前为止,计算的都和Logistic回归十分相似,但当开始计算反向传播时,需要计算,是隐藏层函数的导数,输出在使用sigmoid函数进行二元分类。这里是进行逐个元素乘积,因为W[2]Tdz[2](z[1])这两个都为(n[1],m)矩阵;

还有一种防止python输出奇怪的秩数,需要显式地调用reshapenp.sum输出结果写成矩阵形式。

以上就是正向传播的4个方程和反向传播的6个方程,这里是直接给出的。

posted @   Oten  阅读(130)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示