前向传播是利用神经网络模型的过程,而反向传播是根据已知的输入输出关系,确定模型参数的过程。
在前向传播的过程中,值从一个节点传递到后面是通过函数关系实现的。一般网络的传递关系如上图所示。 为
层的
个节点的值,即
。
为线性变换后的结果。
为激活函数,至于激活函数有哪几种分别有什么功能咱们后面再说,可以先理解为激活函数就是一个可导的函数或者默认为sigmoid函数。
一、从期望的输出获取信息
我们知道,只要一个网络结构固定好,里面的参数随机生成,给一个已知的输入就会有一个相应的输出。那么这个输出和我们期望的输出之间会有一个差别。我们用损失函数来描述这个差别。损失函数的设定也有很多种,方便起见我们这里用平方损失函数,由输出层与期望输出的均方差值获得。(二范数)
我们希望通过不断优化 和
最小化损失函数
,优化方法我们选择梯度下降法。
首先,我们关注第L层即输出层的 和
与损失函数之间的梯度:
从矩阵求导维数不变原理可以推导出 ,但具体是为什么当时卡了我很久,所以我最后能理解到的位置是先看
有
。当n=2的时候这个式子还是成立,那么就这样吧哈哈。
一般地,我们看一下第 层
与损失函数的梯度:
同时 ,那么仔细看看就会发现,我们不知道的只有一系列
,
,...,
,...。
其实这个也很简单,由于 ,则
敲黑板!
重点,我们令灵敏度 ,存在递推关系
也就是说所有层的灵敏度都可以通过递推关系求出,则
可以轻易的求出。
梯度求出来了,剩下的事情是梯度下降法的部分了。大家可以看看关于这方面的内容,这里不再赘述。