概述
预训练过程在不断地更新权重超参数与偏置超参数,最后选择合适的超参数,生成超参数文件。上一篇博客 是使用已有的预训练超参数文件,要训练自己的超参数,需要对神经网络层中前向传播与反向传播计算熟悉,了解计算逻辑,才能不断地更新选择合适的超参数。
神经网络计算详解
整个神经网络的层数是4层,从顺序来分别是:输入层,两层隐藏层,输出层。隐藏层的激活函数选择sigmoid函数;输出层用softmax函数归一化处理。
神经网络的各层参数和激活函数符号化如下:
- 输入层:(x)
- 第一个隐藏层:(
)
- 第二个隐藏层:(
)
- 输出层:(y)
- 权重参数:(
)
- 偏置参数:(
)
- 激活函数:(
) (例如,Sigmoid、ReLU)
- 损失函数:(L)
为简化推导,假设使用平方损失函数 (
),其中 (
) 为真实标签。
前向传播
前向传播过程如下:
- 输入层到第一个隐藏层:
- 第一个隐藏层到第二个隐藏层:
- 第二个隐藏层到输出层:
接下来计算反向传播的过程,反向传播的计算过程基于链式法则,目的是计算损失函数相对于网络参数(权重和偏置)的梯度。
图文并茂可以阅读 聊聊神经网络的基础知识
反向传播
损失函数对输出层输出的梯度
对于平方损失函数:
损失函数对输出层输入的梯度
记输出层的输入为
根据链式法则:
=>
这里
是激活函数
的导数。比如,如果使用 Sigmoid 激活函数,那么
损失函数对输出层超参数的梯度
且
则
=>
=
第二个隐藏层,损失函数对输入的梯度
根据链式求导法则:
由上可知,
其中
和
是输出层的参数矩阵,
是向量。我们想要计算
对
的导数。
我们对
求导数,由于
和
不包含
,它们在导数中变为零:
由于第二项为零。只需要计算第一项:
这里
是矩阵,
是向量。使用矩阵微积分规则:
所以,导数
是
,其中
是
的转置矩阵。
最终,
对
的导数是
。
=>
第二个隐藏层,损失函数权重和偏置的梯度
根据上述计算逻辑,可以很方便的推出,损失函数对超参数
的梯度为
第一个隐藏层,损失函数对输入,超参数的梯度
损失函数对输入
的梯度为
损失函数对超参数
的梯度为
这样就完成了反向传播的输入、超参数计算过程。这些梯度的计算用于以更新神经网络的权重和偏置。
超参数的更新
上述已计算出来了超参数的梯度,现在用于更新神经网络的超参数,以输出层的权重超参数
更新为例;其公式为:
其中
为学习率,
的值在上述已计算出来了,直接替换即可。