为了更好的学习神经网络,建议学习零基础入门深度学习https://www.zybuluo.com/hanbingtao/note/448086
以下为我自己学习后为方便记忆的总结,可能从在一些偏差。
神经网络的训练:
bp算法是神经网络训练算法的基础,bptt算法也主要是来源于bp算法。
以下是全连接的网络。
在神经网络全连接的方式中,这是一个较为简单的网络,也是基础的网络
他的计算方式如下的(3)(4)。
这里主要是要记住全连接神经网络在激活函数之前的运算为+(加和运算)。将各链接的加和运算输入激活函数输出各自神经的输出。
(5)(6)两式是输出层的计算方式
a4,a5,a6,a7,隐含层的计算方式
对于bp算法,下图是很重要的,主要是方便理解每一个神经元的误差项()的反向传播过程,以及在写程序时,是如何来写反向传播算法的。它的过程是什么样的。
误差项是用来干什么的
上图是梯度下降算法优化的示意图。
大致说明了梯度下降是去求 f(x)在最优解(上图为最小值)时 x 的值得过程
用于对神经网络的bp运算,主要是用来对权重值(w)的优化,而在全连接的过程中权重(w)始终参与运算的全过程,这就使得输出值y=f(w)是w的函数,而label是y的标签(就是y真实值),这相当于知道y的最优值去求解w,而目标函数为了符合优化的特点,我们希望是y与label越向近越好,因此用误差平方和来做目标函数,公式如下:
用梯度下降的方式来训练的公式如下:
这里为误差平方和对w的梯度,为啥选梯度,梯度对于普通方程来说就是带有方向的导数,而导数是函数在该点的切线的斜率,可以画出切线,而切线是和函数本体不相交的,同时个点的切线方向又是不相同的,是随着函数本身的改变而变化的,而当斜率为0时,正好为最优解,用微分的思想可以这样用各点的切线近似出函数本体,达到上图中的最低点。
现在来求,
而我们要求的其实是,这里定义net为各个点的加权值,net=w*a(net=w*x(x是输入值))
xji是节点i传递给节点j的输入值有时记为aji,
对于不同的节点有不同的计算方式,对于全连接来说,主要是分为隐藏层,和输出层,对于rnn来说,隐藏层的计算方式,就是多加了一个时间节点上反向传播,对于lstm不同的门,有不同的计算方式,但根本还是bp方法。
这里分为 输出层 和 隐含层
对于输出层:
:
最后的梯度下降公式为:
对于隐藏层来说:
这是重点:需要记忆的部分
以上是公式的推导,其实我们主要是了解公式的来源,和公式中的来源,以及计算方式,以下是在编程时需要记忆的过程,也是bp算法的真实的核心:
还是先看图:
对于输出节点,计算需要记下例子:
例如
用可以计算,例如
对于隐含层节点,计算需要记下例子:
例如
用可以计算,例如
以上可以看出反向传播其实是一个递推过程,这样写代码时,其实并不是非常的复杂。
bptt算法:
这里是要记忆的部分,推导过程,理解就可以。
注意ppt中的,在实际计算时,用到的算法是:
再用公式其中=。
下面是推到过程:
计算w和u时,用bptt算法,最后一个时刻的误差项,是如全连接一样的算法来计算的。
而中间个时刻的误差项是以下公式推导出来的:
但是由于如上图(右)所示,w在正向传播时是同一个矩阵,所以在最后去用梯度下降算法计算w时,用的是各个时刻(t)的梯度的总和,计算公式如下:
以上是的推导过程。
下面这是式子说明w的链接方式,就是说,w在各个时间之间的连接时和全连接一样的链接方式。这样才有w21,w12.