侧边栏壁纸
  • 累计撰写 27 篇文章
  • 累计创建 91 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

机器学习:单隐层前馈神经网络

iforget
2022-02-22 / 0 评论 / 0 点赞 / 3,440 阅读 / 4,317 字
温馨提示:
本文最后更新于 2022-07-24,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

单隐层前馈神经网络

基本术语

由多个简单单元并行互连所构成的网络,这些基础单元被称为神经元,这个网络称为神经网络。神经网络被用来模拟生物对于外界刺激的真实反应。

神经元模型可以有若干个输入和一个输出,当输入的电信号足够强时,神经元会被激活。使用数学模型描述就是:

y=f(iwixiθ)y = f(\sum_i w_ix_i - \theta)

其中θ\theta是激活阈值,xix_i是第ii个输入信号,wiw_i是第ii个输入信号的权重,两者比较后送给激活函数f()f(\cdot) 进行处理,以决定到底是激活该神经元还是抑制该神经元。上述神经元模型类似于对数几率回归模型,只需要将f()f(\cdot)设置为sigmoid函数,并令θ\theta为一个输入恒为1-1的哑元,则上述模型即为对数几率回归模型。

由若干个神经元异层全连接、同层无连接的堆叠,可以得到神经网络。下图为单隐层前馈神经网络的结构示意图。

单隐层前馈神经网络指的是输入流动只能向前流动(即方向单一),输入层和输出层之间只有一层神经元。根据通用近似定理,具有单隐层的神经网络可以以任何精度拟合任意复杂的连续函数。但是需要注意的是:这个定理只告诉你一个单隐层足够,但是这个单隐层是有多少个神经元,参数都是多少他没有告诉你,因此实践中,常常用多层前馈神经网络来进行拟合。


:图5.7来源于《机器学习.周志华》

数学建模

单隐层前馈网络结构的数学描述

由一个输入层、一个隐层和一个输出层共三层堆叠所形成的前馈神经网络。共有dd个输入信号,隐层有qq个神经元,输出层有ll个神经元。

设:

  • xix_i 为输入层的第ii个输入信号
  • vihv_{ih}是由输入层的第ii个信号到隐层的第hh个神经元的信号权重
  • whjw_{hj}是隐层第hh个神经元到输出层第jj个神经元的信号的权重
  • αh=i=1dvihxi\alpha_h = \sum_{i = 1}^{d}v_{ih}x_i为隐层第hh个神经元的输入值
  • γh\gamma_h为隐层第hh个神经元的阈值,θj\theta_j为输出层第jj个神经元的阈值
  • bh=f(αhγh)b_h = f(\alpha_h - \gamma_h)为隐层第hh个神经元的输出值,f()f(\cdot)sigmoid 函数
  • βj=h=1qwhjbh\beta_j = \sum_{h = 1}^{q}w_{hj}b_h为输出层第jj个神经元的输入值

已知条件与目标

给定训练集D={(x1,y1),(x2,y2),,(xm,ym)},xiRd,yiRlD = \{(\pmb x_1, \pmb y_1), (\pmb x_2, \pmb y_2), \cdots, (\pmb x_m, \pmb y_m)\}, \pmb x_i\in \mathbb R^d, \pmb y_i \in \mathbb R^l。通过梯度下降法迭代式的进行训练。目标是使得每一个样本的预测输出值与样本的真实值在某种度量下的误差最小。

设使用的度量为均方误差,预测值y^\hat{y},真实值为yy,则对于单个样本(xk,yk)(\pmb x_k, \pmb y_k),有:

Ek=12j=1d(y^jkyjk)2 E_k = \frac{1}{2}\sum_{j = 1}^{d}(\hat y^k_j - y^k_j)^2

误差反向传播算法

反向传播算法中用到的数学解析式

η\eta为梯度下降的学习率,则梯度下降法的实质是:对于待求的参数vv,有:

vv+Δv v \leftarrow v + \Delta v

其中vv为上一轮迭代的值,而Δv\Delta v是本轮计算得到的修正值。

根据以上几节的定义,可以知道共有(d+l+1)×q+l(d + l+ 1) \times q + l 个参数,其中参数分别为:v,w,γ,θv, w, \gamma, \theta共四类参数。

误差传递到隐层的解析式的计算

对于任意的一个由隐层节点hh到输出节点的jj的权重的修正量为:

Δwhj=ηEkwhj \Delta w_{hj} = -\eta \frac{\partial E_k}{\partial w_{hj}}

根据求导的链式法则,有:

Ekwhj=Eky^jky^jkβjβjwhj \begin{aligned} \frac{\partial E_k}{\partial w_{hj}} &= \frac{\partial E_k}{\partial \hat y^k_j} \frac{\partial \hat y^k_j}{\partial \beta_j} \frac{\partial \beta_j}{\partial w_{hj}} \end{aligned}

由于Eky^jky^jkβj\frac{\partial E_k}{\partial \hat y^k_j} \frac{\partial \hat y^k_j}{\partial \beta_j}在下列计算中经常应用到,则提取公共表达式,并给予符号gj-g_j,即:

gj=Eky^jky^jkβj=(y^jkyjk)y^jkβj=(y^jkyjk)f(βjθj) \begin{aligned} g_j &= -\frac{\partial E_k}{\partial \hat y^k_j} \frac{\partial \hat y^k_j}{\partial \beta_j} \\ &= -(\hat{y}^k_j - y^k_j)\frac{\partial \hat y^k_j}{\partial \beta_j}\\ &= -(\hat{y}^k_j - y^k_j)f'(\beta_j - \theta_j) \end{aligned}

对于sigmoid函数有一个很好的性质,即:f(x)=f(x)(1f(x))f'(x) = f(x)(1 - f(x)),故上式整理有:

gj=(y^jkyjk)f(βjθj)=(y^jkyjk)y^jk(1y^jk)=y^jk(1y^jk)(y^jkyjk) \begin{aligned} g_j &= -(\hat{y}^k_j - y^k_j)f'(\beta_j - \theta_j) \\ &= -(\hat{y}^k_j - y^k_j)\hat y^k_j(1 - \hat y^k_j) \\ &= -\hat y^k_j(1 - \hat y^k_j)(\hat{y}^k_j - y^k_j) \end{aligned}

Ekwhj\frac{\partial E_k}{\partial w_{hj}}为:

Ekwhj=gjβjwhj=gjbh \begin{aligned} \frac{\partial E_k}{\partial w_{hj}} &= -g_j\frac{\partial \beta_j} {\partial w_{hj}} \\ &= -g_j b_h \end{aligned}

故有:

Δwhj=ηEkwhj=ηgjbh \Delta w_{hj} = -\eta \frac{\partial E_k}{\partial w_{hj}} = \eta g_j b_h

对于输出层的阈值θj\theta_j的修正量为:

Δθj=ηEkθj=ηEky^jkyjkθj \begin{aligned} \Delta \theta_j &= -\eta\frac{\partial E_k}{\partial \theta_j} \\ &= -\eta\frac{\partial E_k}{\partial \hat y^k_j}\frac{\partial y^k_j}{\partial \theta_j} \end{aligned}

而:

yjkθj=f(βjθj)(1)=y^jk(1y^jk) \begin{aligned} \frac{\partial y^k_j}{\partial \theta_j} &= f'(\beta_j - \theta_j)(-1) \\&=-\hat y^k_j(1 - \hat y^k_j) \end{aligned}

故有:

Ekθj=Eky^jkyjkθj=y^jk(1y^jk)(y^jkyjk)=gj \begin{aligned} \frac{\partial E_k}{\partial \theta_j} &= \frac{\partial E_k}{\partial \hat y^k_j}\frac{\partial y^k_j}{\partial \theta_j} \\ &= -\hat y^k_j(1 - \hat y^k_j)(\hat{y}^k_j - y^k_j) \\ &= g_j \end{aligned}

故输出层的阈值θj\theta_j的修正量为Δθj=ηgj\Delta \theta_j = -\eta g_j

误差传递到输入层的解析式的计算

计算输入层第ii个输入信号到隐层第hh个神经元的权重vijv_{ij}的修正量Δvih\Delta v_{ih},则有:

Δvih=ηEkvih \Delta v_{ih} = -\eta \frac{\partial E_k}{\partial v_{ih}}

而由于误差EkE_k 到节点vihv_{ih} 经过一个隐层,将一对一的关系变为了一对多的情形,因此偏导数Ekvih\frac{\partial E_k}{\partial v_{ih}}为:

Ekvih=j=1lEky^jkyjkβjβjbhbhαhαhvih=j=1l(gj)βjbhbhαhαhvih=j=1l(gj)βjbhbhαhxi=j=1l(gj)βjbhf(αhγh)xi=j=1l(gj)whjf(αhγh)xi=j=1l(gj)whjbh(1bh)xi=xibh(1bh)j=1lgjwhj \begin{aligned} \frac{\partial E_k}{\partial v_{ih}} &= \sum_{j = 1}^{l} \frac{\partial E_k}{\partial \hat y^k_j} \frac{\partial y^k_j}{\partial \beta_j} \frac{\partial \beta_j}{\partial b_h} \frac{\partial b_h}{\partial \alpha_h}\frac{\partial \alpha_h}{\partial v_{ih}} \\ &= \sum_{j = 1}^{l} (-g_j)\frac{\partial \beta_j}{\partial b_h} \frac{\partial b_h}{\partial \alpha_h} \frac{\partial \alpha_h}{\partial v_{ih}} \\ &= \sum_{j = 1}^{l} (-g_j)\frac{\partial \beta_j}{\partial b_h} \frac{\partial b_h}{\partial \alpha_h} x_i \\ &= \sum_{j = 1}^{l} (-g_j)\frac{\partial \beta_j}{\partial b_h}f'(\alpha_h - \gamma_h)x_i \\ &= \sum_{j = 1}^{l} (-g_j)w_{hj}f'(\alpha_h - \gamma_h)x_i \\ &= \sum_{j = 1}^{l} (-g_j)w_{hj}b_h(1 - b_h)x_i \\ &= -x_ib_h(1 - b_h)\sum_{j = 1}^{l} g_jw_{hj} \end{aligned}

eh=bh(1bh)j=1lgjwhje_h = b_h(1 - b_h)\sum_{j = 1}^{l} g_jw_{hj},则上式可以化简为:

Ekvih=ehxi \frac{\partial E_k}{\partial v_{ih}} = -e_hx_i

则修正量Δvih\Delta v_{ih}Δvih=ηehxi\Delta v_{ih} = \eta e_hx_i

而隐层第hh个神经元的权重γh\gamma_h的修正量Δγh=ηEkγh\Delta \gamma_h = -\eta \frac{\partial E_k}{\partial \gamma_h},其中:

Ekγh=j=1lEky^jky^jkβjβjbhbhγh=j=1l(gj)whjf(bhγh)(1)=j=1lgjwhjbh(1bh)=bh(1bh)j=1lgjwhj=eh \begin{aligned} \frac{\partial E_k}{\partial \gamma_h} &= \sum_{j = 1}^{l}\frac{\partial E_k}{\partial \hat y^k_j} \frac{\partial \hat y^k_j}{\partial \beta_j} \frac{\partial \beta_j}{\partial b_h} \frac{\partial b_h}{\partial \gamma_h} \\ &= \sum_{j = 1}^{l}(-g_j)w_{hj}f'(b_h - \gamma_h)(-1) \\ &= \sum_{j = 1}^{l}g_jw_{hj}b_h(1 - b_h) \\ &= b_h(1 - b_h)\sum_{j = 1}^{l}g_jw_{hj} \\ &= e_h \end{aligned}

故修正量Δγh=ηeh\Delta \gamma_h = -\eta e_h

反向传播算法的流程

根据反向传播算法所用到的解析式的计算,可以得到反向传播算法的流程:

  1. (0,1)(0, 1)范围内,随机初始化网络中的所有链接权和阈值,逐一从训练集中拿出一个样本(xk,yk)(\pmb x_k, \pmb y_k)进行训练
  2. 根据当前权值和阈值,计算预测输出y^jk\hat y^k_j
  3. 计算gjg_jehe_h
  4. 更新连接权值whj,vih,γh,θjw_{hj}, v_{ih}, \gamma_h, \theta_j
  5. 重复步骤2 - 4,直到满足退出条件

局部最优解与过拟合

前馈神经网络的总体目标是最小化训练集上的累积误差:

E=1mk=1mEk E = \frac{1}{m}\sum_{k = 1}^{m}E_k

由于神经网络的学习能力过于强大,很容易出现过拟合,常用的两种方法分别是:早停法和添加正则化项的方法。对于早停法,使用训练集进行更新参数,使用训练集进行误差估计,当训练集中的误差降低但是训练集的误差升高时,停止训练,并返回具有最小验证集误差的参数值;对于添加正则化项的方法,可以使用某种度量方式(如范数),将参量数值化并作为整体学习目标中的一项进行评估,即:在误差目标函数中增加一项使用参量来描述模型复杂度的部分。如使用L2L2范数作为模型复杂度的度量,令w^\hat w为连接权重和阈值的向量,则误差目标函数可以改写为:

E=λ1mk=1mEk+(1λ)w^22,λ(0,1) E = \lambda \frac{1}{m}\sum_{k = 1}^{m}E_k + (1 - \lambda)||\hat w||^2_2, \lambda \in (0, 1)

λ\lambda是超参数,为了进一步分方便看出来,将等号两侧均除以λ\lambda时,函数变为:

Eλ=1mk=1mEk+(1λ)λw^22,λ(0,1) \frac{E}{\lambda} = \frac{1}{m}\sum_{k = 1}^{m}E_k + \frac{(1 - \lambda)}{\lambda}||\hat w||^2_2, \lambda \in (0, 1)

此时不影响优化结果,且正则化项前的系数变为了α=1λλ\alpha = \frac{1 - \lambda}{\lambda}。由于正则化项不能太大,不能过于影响原来的目标函数项,因此正则化前的系数往往位于(0,1)(0, 1)之间,即:权衡两项。

神经网络极容易陷入局部最优解,常用的方法是将标准梯度下降法改为采用随机梯度下降法。标准梯度下降法当梯度为0时,即达到了最优解并停止迭代了,而采用随机梯度下降则有一定几率使得计算的梯度不为0,从而跳出局部极小值,向着全局最小值继续搜索。

博主关闭了所有页面的评论