神经网络中的梯度下降——Gradient Descent

1 什么是梯度下降

梯度下降可以对神经网络中的成本函数(cost)进行反向传播,通过不断迭代,更新权值w、b,找到损失函数最低点,最终使我们的模型达到更优的效果。

成本函数有几种,不具体介绍,简单记为J(y,\alpha ),这里对模型进行输入X,\alpha是模型训练后得到结果,y是标准答案,模型训练的目的是使输出的结果\alpha更接近标准答案y,即要找到损失函数J(y,\alpha )的最低点。下面是交叉熵(cross entropy)成本函数,不具体介绍

2 梯度下降为什么能找到最低点

见链接。

3 具体过程

这是一个浅层神经网络

神经网络中的梯度下降——Gradient Descent_第1张图片

单个神经元

神经网络中的梯度下降——Gradient Descent_第2张图片

 公式化后

再加1层后 

前向传播

z1=w1*X+b1

a1=σ1(z1)

z2=w2*a1+b2

a2=σ(z2)

其中,X、b是1维列向量,w是2维矩阵,对应的输出a1、a2也是1维列向量,a2也是模型输出,σ是激活函数,为了计算我们假设σ为sigmoid(细节见往期)

https://blog.csdn.net/talkAC/article/details/121515392https://blog.csdn.net/talkAC/article/details/121515392icon-default.png?t=LA92https://blog.csdn.net/talkAC/article/details/121515392

反向传播

\frac{\partial J}{\partial a2}=\frac{1-y}{1-a2}-\frac{y}{a2}

\frac{\partial a2}{\partial z2}=a2(1-a2)

\frac{\partial z2}{\partial w2}=a1

\frac{\partial z2}{\partial b2}=1 

\frac{\partial z2}{\partial a1}=w2

\frac{\partial a1}{\partial z1}=a1(1-a1)

\frac{\partial z1}{\partial w1}=X

\frac{\partial z1}{\partial b1}=1

\frac{\partial J}{\partial w2} =\frac{\partial J}{\partial a2}\frac{\partial a2}{\partial z2}\frac{\partial z2}{\partial w2} =(a2-y)*a1 =dw2

\frac{\partial J}{\partial b2} =\frac{\partial J}{\partial a2}\frac{\partial a2}{\partial z2}\frac{\partial z2}{\partial b2} =a2-y =db2

\frac{\partial J}{\partial w1} =\frac{\partial J}{\partial a2}\frac{\partial a2}{\partial z2}\frac{\partial z2}{\partial a1} \frac{\partial a1}{\partial z1}\frac{\partial z1}{\partial w1} =(a2-y)*w2*a1*(1-a1)*X =dw1

\frac{\partial J}{\partial b1} =\frac{\partial J}{\partial a2}\frac{\partial a2}{\partial z2}\frac{\partial z2}{\partial a1} \frac{\partial a1}{\partial z1}\frac{\partial z1}{\partial b1} =(a2-y)*w2*a1*(1-a1) =db1

更新权值 

w=w-\alpha *dw        

b=b-\alpha *db

反向传播重点就是链式求导原则,其实我感觉就是复合函数求偏导,理解不难,但在实际代码实现时,要注意各个参数的维度,这里涉及矩阵乘法。

你可能感兴趣的:(deep,learning,算法,机器学习,神经网络,深度学习)