Hello,David!

There is geometry in the humming of the strings, there is music in the spacing of the spheres.

0%

人工神经网络

人工神经网络学习笔记,记录前馈传播信号和反向传播误差的矩阵表示

注意:神经网络输入层仅表示输入信号,输入节点不对输入值应用激活函数,历史就是这样规定的

structure

前馈传播信号

人工神经网络层与层之间前馈传播方式:

其中,W是权重矩阵,I是输入矩阵,X是组合调节后的信号,输入到下一层,然后应用激活函数,使神经网络的反应更像是生物神经元,激活函数为logistic function:$y=\frac{1}{1+e^{-x}}$

反向传播误差

忽略归一化因子分母,反向传播误差矩阵表示为:以输出层与挨着输出层的隐藏层为例,其他层之间也是一样的道理

实践证明,这种相对简单的误差信号反馈方式,与我们先前相对复杂的方式一样有效!

Cost function:

如果神经网络有n个输出节点:

对权重$w_{j, k}$的偏导数为

因为神经网络的结构,节点k的输出不依赖于其他不与它相连的链接,这可以让我们删除令人厌烦的求和运算。这是一个很有用的技巧。代价函数根本就不需要对所有输出节点求和。原因是节点的输出只取决于所连接的链接。这个过程在许多教科书中一略而过,这些教科书只是简单地声明了误差函数,却没有解释原因。所以我们有:

gradient descent:

这里我们以三层,每层三个节点的神经网络为例,用i表示输入层,j表示隐藏层,k表示输出层,利用链式法则:
$\frac{\partial E}{\partial w{j, k}}=\frac{\partial E}{\partial o{k}} \cdot \frac{\partial o{k}}{\partial w{j, k}}$
$\frac{\partial E}{\partial w{j, k}}=-2\left(t{k}-o{k}\right) \cdot \frac{\partial o{k}}{\partial w{j, k}}$
$\frac{\partial E}{\partial w
{j, k}}=-2\left(t{k}-o{k}\right) \cdot \frac{\partial}{\partial w{j, k}} \operatorname{sigmoid}\left(\Sigma{j} w{j, k} \cdot o{j}\right)$
$\frac{\partial E}{\partial w{j, k}}=-2\left(t{k}-o{k}\right) \cdot \operatorname{sigmoid}\left(\Sigma{j} w{j, k} \cdot o{j}\right)\left(1-\operatorname{sigmoid}\left(\Sigma{j} w{j, k} \cdot o{j}\right)\right) \cdot \frac{\partial}{\partial w{j, k}}\left(\Sigma{j} w{j, k} \cdot o{j}\right)$
$=-2\left(t
{k}-o{k}\right) \cdot \operatorname{sigmoid}\left(\Sigma{j} w{j, k} \cdot o{j}\right)\left(1-\operatorname{sigmoid}\left(\Sigma{j} w{j, k} \cdot o{j}\right)\right) \cdot o{j}$

同理,对于输入层和隐藏层,我们有

梯度的矩阵形式:

梯度的反向传播

cost function对输出层输入值$z{3}$的梯度$\nabla{z^{(3)}} J_{1}$

我们以手写数字识别为例,手写字体为$20 \times 20$像素的灰度值图片,神经网络结构为三层,第一层为输入层,为401维$(20 \times 20+1)$,第二层为隐藏层,25+1维,第三层是输出层,10维,每一个输出代表第k类的概率。神经网络前馈传播信号过程如下:

structure

神经网络的cost function:

为了方便,我们把cost function的前半部分用$J_{1}$表示:

因为
$\frac{\partial ln(h{\theta}(x){k})}{\partial z^{(3)}{k}}=\frac{1}{h{\theta}(x){k}}\frac{dh{\theta}(x){k}}{dz^{(3)}{k}}=\frac{1}{h{\theta}(x){k}}h{\theta}(x){k}(1-h{\theta}(x){k})=1-h{\theta}(x){k}$
$\frac{\partial ln(1-h{\theta}(x){k})}{\partial z^{(3)}{k}}=\frac{-1}{1-h{\theta}(x){k}}\frac{dh{\theta}(x){k}}{dz^{(3)}{k}}=\frac{-1}{1-h{\theta}(x){k}}h{\theta}(x){k}(1-h{\theta}(x){k})=-h{\theta}(x){k}$
$J{1}$虽然有求和符号,但是求梯度分量的过程中我们知道,第k个分量$z^{(3)}{k}$只与$h_{k}$有关,而与其他分量无关。所以求和符号在求梯度过程中可省略掉

$J_{1}$对$z^{(3)}$求梯度,经过化简最终我们有:

我们成功地求出了对输出层z3的梯度!而且对数似然链式求导和logistic函数链式求导后会约掉,数学之美!简洁之美!

cost function对隐藏层输出值$a{2}$的梯度$\nabla{a^{(2)}} J_{1}$

在前馈传播过程中,我们有:

接下来结论很重要,梯度的反向传播的求法:

我们以2维向量前馈传播为例,高维向量一样的道理!

其中,$\vec{y}$是神经网络在下一层输入,$\vec{x}$是前一层输出,$\Theta$是权重矩阵

我们有

cost function对向量$\vec{x}$求梯度,有

所以有

梯度$\nabla{z^{(3)}} J{1}$ 与参数$\Theta{2}$的梯度$\nabla{\Theta{2}} J{1}$的关系:

在前馈传播过程中,我们有:

我们还是以2维向量前馈传播为例,高维向量一样的道理!

其中,$\vec{y}$是神经网络在下一层输入,$\vec{x}$是前一层输出,$\Theta$是权重矩阵

我们有

cost function对$\Theta_{2}$求梯度,有

我们成功地求出了对参数$\Theta_{2}$的梯度!

cost function对隐藏层输入值$z{2}$的梯度$\nabla{z^{(2)}} J_{1}$

在前馈传播过程中,我们有:

对分量求偏导

把分量整合成向量的形式

cost function对参数$\Theta{1}$的梯度$\nabla{\Theta{(1)}} J{1}$

在前馈传播过程中,我们有: