神经网络--记一次西瓜书阅读

神经网络–记一次西瓜书阅读

神经元模型:

M-P神经元模型:神经元接收n个来自其他神经元传递过来的输入信号,这些输入信号通过带权重的连接进行传递,神经元接收到的总输入值与神经元阈值进行比较,通过激活函数处理产生神经元的输出.

常见的激活函数:

  1. 阶跃函数: f ( x ) = { 1 , x >= 0  0 , x < 0 f(x) = \begin{cases} 1, & \text {x >= 0 } \\ 0, & \text{x < 0} \end{cases} f(x)={1,0,x >= 0 x < 0
  2. sigmoid函数: s i g m o i d ( x ) = 1 1 + e − x sigmoid(x) = \frac{1}{1 + e^{-x}} sigmoid(x)=1+ex1

感知机与多层网络

  1. 感知机:由两层神经元组成,输入层接收外界输入信号,传递给输出层,输出层是M-P神经元(阈值逻辑单元),感知机能容易的实现逻辑运算(使用阶跃函数作为激活函数),一般处理线性可分的问题,也就是可以用一个线性超平面分割的问题。

  2. 对于非线性问题,使用多层功能神经元,输入层与输出层之间的一层神经元被称为隐层或者隐含层,隐含层和输出层的的神经元都是拥有激活函数的功能神经元。每层神经元只与下一层神经元相连,神经元之间不存在同层相连,也不存在跨层相连,这样的神经网络被称为多层前馈神经网络。

  3. 神经网络学习过程中,根据训练数据来调整神经元之间的“连接权”以及每个功能神经元的阈值,神经网络学到的东西蕴藏在连接权和阈值当中。

误差逆传播算法

误差逆传播(error BackPropagation,简称BP),用于训练多层神经网络。BP算法不仅可以用于多层前馈神经网络,也可以用于其他类型的神经网络。BP网络一般指用BP算法训练多层前馈神经网络。
如图,BP网络(图片来源于《机器学习》–周志华)
神经网络--记一次西瓜书阅读_第1张图片
网络中需要确定的参数: ( d + 1 + l ) × q + l (d + 1 + l)\times q + l (d+1+l)×q+l
个人理解为:

  • 输出层到隐层的边(连接权): d × q d \times q d×q
  • 隐层的神经元输出: q q q
  • 隐层到输出层的边(连接权): l × q l \times q l×q
  • 输出层神经元输出: l l l

参数变化量的计算:

对某一样本 ( x k , y k ) (x_k, y_k) (xk,yk),假定神经网络输出为 y ^ = ( y 1 k ^ , y 2 k ^ , . . . , y l k ^ ) \hat{y} = (\hat{y_1^k}, \hat{y_2^k}, ..., \hat{y^k_l}) y^=(y1k^,y2k^,...,ylk^)
其中 y j k ^ = f ( β j − θ j ) \hat{y_j^k} = f(\beta_j-\theta_j) yjk^=f(βjθj),这里面 β j = ∑ h = 1 q w h j b h \beta_j = \sum_{h = 1}^qw_{hj}b_h βj=h=1qwhjbh( b h b_h bh表示隐层的第 h h h个功能神经元, θ j \theta_j θj表示输出层的阈值)
在样本上的均方误差(针对样本 k k k来说,样本 k k k的均方误差): E k = 1 2 ∑ j = 1 l ( y j k ^ − y j k ) 2 E_k = \frac{1}{2}\sum_{j = 1}^l{(\hat{y_j^k }- y_j^k)}^2 Ek=21j=1l(yjk^yjk)2

对于任意参数 v v v更新的估计式为: v ← v + Δ v v \leftarrow v + \Delta v vv+Δv

也就是说任意参数的更新需要基于上述的公式,这里的 Δ v \Delta v Δv的计算根据梯度下降策略, Δ v = − η ∂ E ∂ v \Delta v = -\eta\frac{\partial E }{\partial v} Δv=ηvE

书中给出的为 Δ w h j = − η ∂ E k ∂ w h j \Delta w_{hj} = -\eta\frac{\partial E_k}{\partial w_{hj}} Δwhj=ηwhjEk
这里面的 w h j w_{hj} whj表示,从隐层中第 h h h个(例子中一共 q q q个)神经元到输出层中第 j j j个(例子中一个 l l l个)神经元的连接权。

可以知道,神经网络通过梯度下降对参数进行调整,梯度下降的目标函数也就是均方误差,对这个目标函数求梯度,也就是在各个方向上求偏导。
∂ E k ∂ w h j = ∂ E k ∂ y j k ^ ⋅ ∂ y j k ^ ∂ β j ⋅ ∂ β j ∂ w h j \frac{\partial E_k}{\partial w_{hj}} = \frac{\partial E_k}{\partial \hat{y_j^k}}\cdot \frac{\partial \hat{y_j^k}}{\partial \beta_j}\cdot\frac{\partial \beta_j}{\partial w_{hj}} whjEk=yjk^Ekβjyjk^whjβj其中 ∂ β j ∂ w h j = b h \frac{\partial \beta_j}{\partial w_{hj}} = b_h whjβj=bh( b h b_h bh表示隐层的第h个神经元)

书中这里提到了sigmoid函数的一个性质: f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) f'(x) = f(x)(1-f(x)) f(x)=f(x)(1f(x)),这里就不去证明了,上述也给出了sigmoid函数。这里提到sigmoid是因为 y j k ^ \hat{y_j^k} yjk^是网络中sigmoid函数的结果,sigmoid函数需要什么样的函数变量也在文章的最开始提到了,即神经元的总输入减神经元的阈值。

根据 ∂ E k ∂ w h j = ∂ E k ∂ y j k ^ ⋅ ∂ y j k ^ ∂ β j ⋅ ∂ β j ∂ w h j \frac{\partial E_k}{\partial w_{hj}} = \frac{\partial E_k}{\partial \hat{y_j^k}}\cdot \frac{\partial \hat{y_j^k}}{\partial \beta_j}\cdot\frac{\partial \beta_j}{\partial w_{hj}} whjEk=yjk^Ekβjyjk^whjβj等式右边的前两项,创建一个新的变量
g j = − ∂ E k ∂ y j k ^ ⋅ ∂ y j k ^ ∂ β j = − ( y j k ^ − y j k ) f ′ ( β j − θ j ) = y j k ^ ( 1 − y j k ^ ) ( y j k − y j k ^ ) g_j = -\frac{\partial E_k}{\partial \hat{y_j^k}}\cdot\frac{\partial \hat{y_j^k}}{\partial \beta_j}=-(\hat{y_j^k}-y_j^k)f'(\beta_j - \theta_j)=\hat{y_j^k}(1 - \hat{y_j^k})(y_j^k-\hat{y_j^k}) gj=yjk^Ekβjyjk^=(yjk^yjk)f(βjθj)=yjk^(1yjk^)(yjkyjk^)
前两项的值进行推导之后和 y j k ^ \hat{y_j^k} yjk^ y j k y_j^k yjk有关。

最后 Δ w h j = η g i b h \Delta w_{hj} = \eta g_i b_h Δwhj=ηgibh Δ θ j = − η g j \Delta \theta_j = -\eta g_j Δθj=ηgj Δ v i h = η e h x i \Delta v_{ih} = \eta e_h x_i Δvih=ηehxi Δ γ h = − η e h \Delta \gamma_h = -\eta e_h Δγh=ηeh

这里面的 e h = − ∂ E k ∂ b h ⋅ ∂ b h ∂ α h = − ∑ j = 1 l ∂ E k ∂ β j ⋅ ∂ β j ∂ b n f ′ ( α h − γ h ) = ∑ j = 1 l w h j g j f ′ ( α h − γ h ) = b n ( 1 − b n ) ∑ j = 1 l w h j g j e_h =- \frac{\partial E_k}{\partial b_h}\cdot\frac{\partial b_h}{\partial \alpha_h}=-\sum_{j=1}^l \frac{\partial E_k}{\partial \beta_j}\cdot\frac{\partial \beta_j}{\partial b_n}f'(\alpha_h - \gamma_h)=\sum_{j=1}^l w_{hj}g_j f'(\alpha_h - \gamma_h)=b_n(1-b_n)\sum_{j=1}^l w_{hj}g_j eh=bhEkαhbh=j=1lβjEkbnβjf(αhγh)=j=1lwhjgjf(αhγh)=bn(1bn)j=1lwhjgj这里的 α h = ∑ i = 1 d v i h x i \alpha_h = \sum_{i = 1}^d v_{ih} x_i αh=i=1dvihxi,表示隐层的第 h h h个神经元的输入,中间参数中 ∂ β j ∂ b n = w h j \frac{\partial \beta_j}{\partial b_n} = w_{hj} bnβj=whj

这一部分求出了所有参数的 Δ \Delta Δ,也就是变化量。变化量由 η \eta η(学习率或者步长)与对应参数上的梯度的反方向乘积决定。

BP算法的流程

  • 对训练集中的每个样本进行循环
    • 根据当前参数,计算当前样本的输出 y k ^ \hat{y^k} yk^
    • 计算输出层神经元梯度项 g j g_j gj
    • 计算隐层神经元梯度项 e h e_h eh
    • 根据公式更新连接权 w h j , v i h w_{hj},v_{ih} whjvih与阈值 θ j , γ h \theta_j,\gamma_h θjγh

BP算法的目标是最小化训练集上的累计误差。

处理过拟合问题

  1. 早停:将数据分为训练集和验证集,验证集误差升高时,停止训练,返回具有最小验证集误差的连接权和阈值。
  2. 正则化:更改误差目标函数,在误差目标函数中增加一个用于描述网络复杂度的部分,例如连接权与阈值的平方和。 E = λ 1 m ∑ k = 1 m E k + ( 1 − λ ) ∑ i w i 2 E=\lambda\frac{1}{m}\sum_{k=1}^m E_k + (1-\lambda)\sum_i w_i^2 E=λm1k=1mEk+(1λ)iwi2,其中 λ ∈ ( 0 , 1 ) \lambda \in (0,1) λ(0,1)通常使用交叉验证来估计 λ \lambda λ

各种神经网络模型

深度学习

多隐层的神经网络,多隐层神经网络难以直接用经典算法进行训练,无监督逐层训练时多隐层网络训练的有效手段,其基本思想是每次训练一层隐节点,称为预训练,全部预训练完后,在对整个网络进行微调训练。
节省训练开销的策略,权共享,即让一组神经元使用相同的连接权,这个策略在卷积神经网络中发挥了重要作用。

你可能感兴趣的:(机器学习,神经网络)