深度学习笔记(二)

您所在的位置:网站首页 多层感知机模型 深度学习笔记(二)

深度学习笔记(二)

2024-01-01 23:35| 来源: 网络整理| 查看: 265

一、人工神经网络定义

        广义上来说,由神经元模型构成的模型就可以称之为人工神经网络模型。神经元模型已经在上一篇感知机的笔记中进行介绍。上一篇也提到,两层神经元模型即可组成最简单的感知机模型,其中第一层称为输入层,第二层称为输出层。由于单层感知机的学习能力限制,科研人员又提出将多个感知机组合到一起,构成了多层感知机(Multilayer Perceptron)模型。本文主要来介绍最基础的人工神经网络模型——多层感知机模型。

二、多层感知机模型

        在神经网络模型中,将信号逐层向前传播的神经网络称为前馈网络,感知机模型就是典型的前馈网络。而多个感知机模型排列而成的多层感知机模型也是前馈网络,也可以具体称为多层前馈网络(Multi-Layer FeedForward Neural Networks)。在多层感知机中,每一层的各个神经元的输出都会传到下一层的各个神经元中,因此多层感知机也称为全连接网络。

        由于多层感知机模型由多个感知机模型连接形成,因此,相邻两个感知机模型中,第一个感知机模型的输入即为第二个感知机模型的输入,因此第二个感知机模型的输入层可以省略掉不进行表示。在多层感知机中,除了整体模型的输入层和输出层之外,中间的各层都称为隐藏层(Hidden Layer)。下图是一个包含两层感知机的双层感知机模型,由于该模型包含一个隐藏层,也称为单隐藏层MLP。

        在该图中,n表示输入数据的维度,m表示输出数据的维度,p表示隐藏层的维度;在这个双层MLP中,输入变量为向量\bf{X}=\{x_1, x_2, ... , x_i,...,x_n\},输出向量为{\bf Y}=\{y_1, y_2,...,y_j,...,y_m\}I_i表示输入层的第i个神经元模型、H_t表示隐藏层第t个神经元模型、O_j表示输出层第j个神经元;权重v_{it}表示输入层神经元I_i到隐藏层神经元H_t之间的权重、权重u_{tj}表示神经元H_t到神经元O_j之间的权重;由输入数据和权重可以得到,隐藏层神经元H_t的输入数据\alpha _t=\sum_{i=0}^{n}v_{it}x_i,再结合激活函数,隐藏层神经元H_t的输出值为h_t=f_1(\alpha _t-\gamma _h),其中函数f_1(\cdot)为激活函数,\gamma _t表示神经元H_t的阈值;类似地,输出层神经元O_j的输入数据即为\beta _j = \sum_{t=0}^{p}u_{tj}h _t,可以得到输出神经元的输出数据为y_j=f_2(\beta _j-\theta _j),其中函数为f_2(\cdot)激活函数,\theta _j为神经元O_j的阈值。

三、双层感知机模型的学习 (一)、待学习参数数量

        由于MLP是由多个感知机模型组合构成的,整体模型的待学习参数即为每层感知机的参数量之和。每个单层感知机模型中待学习的参数为输出层与输入层的所有连接权重,及每个输出层神经元的阈值,其中阈值数量为输入层神经元数X输出层神经元数,阈值数等于输出层神经元数。同样,在多层感知机中,需要计算的包括所有相邻两层的连接权重,及所有隐藏层及输出层的阈值。

        计算上图中表示的双层感知机,需要学习的参数量即为: 

np+p+pm+m=(n+1)p+(p+1)m

(二)、参数学习算法(误差逆传播算法——BP算法[Error BackPropagation])

        本节来学习前馈网络中最常用也是最经典的BP算法,来研究多层感知机的参数学习算法。以前面提到的双层MLP模型为例。首先,定义模型的训练数据集中的某一个数据元组为({\bf X}_k,{\bf Y}_k),其中{\bf X}_k=\{x_1,x2,...,x_n\}为数据自变量,{\bf Y}_k=\{y_1,y_2,...,y_m\}为该自变量对应的真实值。假设当前MLP模型对输入数据{\bf X}_k给出的预测值为\hat{​{\bf Y}}_k=\{\hat{y}_1,\hat{y}_2,...,\hat{y}_m\},模型中应用的激活函数f_1(\cdot)f_2(\cdot)均为Sigmoid函数,针对数据预测误差采用均方误差进行计算,即

E_k=\frac{1}{2}\sum_{j=1}^{m}(\hat{y}_j-y_j)^2

        在双层感知机模型中,共有(n+1)p+(p+1)m个参数需要确定,对于每一个参数,我们均采用单层感知机中类似的方式进行参数更新,即对任意一个参数v\leftarrow v+\Delta v,其中\Delta v即为每轮学习参数的更新量。

        一下以隐藏层神经元H_t与输出层神经元O_j之间的连接权重u_{tj}的更新为例。BP算法基于梯度下降策略进行更新参数,即以目标的负梯度方向进行更新。根据误差进行反向梯度计算,假设学习率为\eta,则:

\Delta u_{tj}=-\eta\frac{\partial E_k}{\partial u_{tj}}......(1)

\hat{y}_j=f(\beta_j-\theta_j)......(2)

\beta _j = \sum_{t=0}^{p}u_{tj}h _t......(3)

其中,公式(1)为误差对参数计算的偏导数,考虑到从误差E_k计算参数u_{tj}需先计算输出层神经元O_j输出值\hat{y}_j及输出层神经元O_j输入值\beta _j,因此可以得到完整路径的偏导数计算公式:

\frac{\partial E_k}{\partial u_{tj}}=\frac{\partial E_k}{\partial \hat{y}_j}\frac{\partial \hat{y}_j}{\partial \beta_j}\frac{\partial \beta_j}{\partial u_{tj}}......(4)

根据公式(3)可得,\frac{\partial \beta_j}{\partial u_{tj}}=h_t,结合Sigmoid激活函数的导数性质f'(x)=f(x)(1-f(x))及均分误差计算函数,可以得到,

\frac{\partial E_k}{\partial u_{tj}}=\frac{\partial E_k}{\partial \hat{y}_j}\frac{\partial \hat{y}_j}{\partial \beta_j}\frac{\partial \beta_j}{\partial u_{tj}}

\frac{\partial E_k}{\partial u_{tj}}=(\hat{y}_j-y_j)f'(\beta _j-\theta_j)h_t

\frac{\partial E_k}{\partial u_{tj}}=(\hat{y}_j-y_j)f(\beta _j-\theta_j)(1-f(\beta _j-\theta_j))h_t

\frac{\partial E_k}{\partial u_{tj}}=(\hat{y}_j-y_j)\hat{y}_j(1-\hat{y}_j))h_t......(5)

将(5)式代入公式(1),可以得到权重的更新值为:

\Delta u_{tj}=-\eta (\hat{y}_j-y_j)\hat{y}_j(1-\hat{y}_j))h_t

        这样,我们就得到了第二次MLP中的权重参数更新值。模型中剩余待确定的参数为第二层阈值、第一次权重、第一次阈值。类似地我们可以推导出第二层的阈值参数更新:

\Delta \theta = -\eta\frac{\partial E_k}{\partial \hat{y}_j}\frac{\partial \hat{y}_j}{\partial \theta _j}=\eta(\hat{y}_j-y_j)\hat{y}_j(1-\hat{y}_j)

        采用和第二层权重更新同样的方法,来推导第一层权重:

\Delta v_{it}=-\eta\frac{\partial E_k}{\partial v_{it}}=-\eta\sum_{j=1}^{m}\frac{\partial E_k}{\partial \hat{y}_j}\frac{\partial \hat{y}_j}{\partial \beta_j}\frac{\partial \beta_j}{\partial h_t}\frac{\partial h_t}{\partial \alpha _t}\frac{\partial \alpha _t}{\partial v_{it}}

\\=-\eta \sum_{j=1}^{m}(\hat{y}_j-y_j)\hat{y}_j(1-\hat{y}_j)u_{tj}h_t(1-h_t)x_i

=-\eta h_t(1-h_t)x_i \sum_{j=1}^{m}(\hat{y}_j-y_j)\hat{y}_j(1-\hat{y}_j)u_{tj}

同理可以得到第一层阈值参数更新为\Delta \gamma_t=\eta h_t(1-h_t) \sum_{j=1}^{m}(\hat{y}_j-y_j)\hat{y}_j(1-\hat{y}_j)u_{tj}

        为了方便进一步计算,我们定义梯度项:

g_j=(\hat{y}_j-y_j)\hat{y}_j(1-\hat{y}_j))

e_t= h_t(1-h_t) \sum_{j=1}^{m}(\hat{y}_j-y_j)\hat{y}_j(1-\hat{y}_j)u_{tj}

        综上,我们可以得到双层感知机中所有模型参数的更新值如下:

\Delta u_{tj}=-\eta g_jh_t

\Delta \theta _j=\eta g_j

\Delta v_{it}=-\eta e_t x_i

\Delta \gamma =-\eta e_t

由此,我们可以得出双层感知机模型的参数更新算法:

''' 伪代码 输入:训练集D={(Xk,Yk)} 1


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3