23 神经网络(使用R)

## 1.神经网络特点
(1)可以充分逼近任意复杂的非线性关系; 
(2)所有定量或定性的信息都等势分布贮存于网络内的各神经元,故有很强的鲁棒性和容错性; 
(3)采用并行分布处理方法,使得快速进行大量运算成为可能; 
(4)可学习和自适应不知道或不确定的系统; 
(5)能够同时处理定量、定性知识。
(6)神经网络对于噪声数据有较强的鲁棒性。
## 2.神经网络的输入和输出
  对于一个神经网络而言,它的输入和输出需在0到1之间,不能让某一个节点变的特别有影响力,我们这里采用最小-最大规范化方法:
$$
X^{*}=\frac{X-\min (X)}{\operatorname{range}(X)}=\frac{X-\min (X)}{\max (X)-\min (X)}
$$
当然,我们还可以采用其他的规范方法,比如Relu函数等等,这里使用最大-最小规范化方法。
  对于存在的许多连续变量来说,我们其可转换为标识变量,将之转换为某一个能够反映关系大小的值,或者直接设置出一定数量的标识变量。
  我们在输出的时候,得到的结果,由于输入时我们采用了 最大最小规范化 的处理方法,我们输出时则有:Prediction= output(data range)+minimum
## 3.激活函数
来自上一层的节点传下来的作为输入的值,其和可能会超出这个即诶单那的输入所要求的范围。因此,我们使用激活函数 sigmod函数 来固定它的范围,使其在0到1之间。同理,我们可以在最开始的时候就使用 sigmod函数 就规范其输入值
                                                                  $y=\frac{1}{1+e^{-x}}$

## 4.误差分析
  神经网络的输出值将与训练集中被考察记录的目标变量比较,计算误差(实际值-输出值)。此预测误差与回归模型中的残差类似。为度量输出页测值与实际目标值,多数神经元网络利用误差平方和(SSE)来求得:
$$
\text{SSE}=\sum_{records}{\sum_{output\,\,nodes}{\left( actual-output \right) ^2}}
$$
这样,所有的预测误差的平方和都被累加,剩下的问题就是如何使它们变的更小了。
## 5.梯度下降法
  那我们又如何求到最小值呢?当然是考虑导数啦。因此需要考虑采用优化方法,特别是像梯度下降法这样的优化方法来帮助我们获得能够使误差平方和最小的权重集合。
  假设在神经元网络模型中有一个包含 $m$ 个权重的集(向量)$\mathrm{W}=w_{0}, w_{1}, w_{2}, \dots, w_{m}$,我们希望获得一个权重集合,能够使平方误差和最小。可以利用梯度下降法,利用该方法调整权重从而降低误差平方和。权重 W 向量的误差平方和的梯度是向量导数:
$$
\nabla \operatorname{SSE}(\mathrm{w})=\left[\frac{\partial S S E}{\partial w_{0}}, \frac{\partial S S E}{\partial w_{1}}, \dots, \frac{\partial S S E}{\partial w_{m}}\right]
$$
  也就是说,向量是SSE关于每个权重的偏导数。
  为了考虑所有的 w 的情况,我们首先考虑仅有一个权重的情况。我们希望 $w_1$ 能够最小化误差平方和 SSE。权重 $w_1$ 的最优化值用 $w^*_1$ 表示、我们希望的是建立一种规则能够使得 $w_1$ 移动并接近 $w^*_1$。如下图所示,该图描述了误差 SSE $\Delta w_{\text { current }}=-\eta\left(\partial \operatorname{SSE} / \partial w_{\text { current }}\right)$及权重 $w_1$ 的取值范围。
  我们存在规则:$w_{\text { new }}=w_{\text { current }}+\Delta w_{\text { current }}$。
其中,$\Delta w_{\text { current }}$表示“当前位置 $w$ 的变化情况”。而$\Delta w_{\text { current }}=-\eta\left(\partial \operatorname{SSE} / \partial w_{\text { current }}\right)$,意思是当前权重值变化等于小常量值与$W_{current}$ 处误差函数的斜率的积的负数。
![1559202727348](assets/1559202727348.png)
## 6.反响传播规则
  反向传播算法获取特定记录的预测误差(实际值-输出值)并将该误差通过网络反向传播,并分配划分的误差响应到各类连接上。这些连接的权重按照梯度下降方法进行相应调整以减少误差。
  利用sigmoid激活函数和梯度下降,Mitchell提出了一种如下的反响传播规则:
$$
w_{ij.new}=w_{ij.current}+\Delta w_{ij}
$$
其中$\Delta w_{i j}=\eta \delta_{j} x_{i j}$,$\eta$代表学习律,$x_ij$表示节点 j 的第 i 个输入,$\delta_{j}$表示属于节点 j 的特定误差的响应能力。而这个 误差响应能力由节点 j 的sigmoid函数的偏导数计算获得,分两种情况:是处于输出层还是隐藏层。
$$
\delta _j=\left\{ \begin{array}{l}
    \,\,\text{output}_j\left( 1-\text{output}_j \right) \left( \text{actual}_j-\text{output}_j \right) \,\,      \text{(对于输出层的点)}\\
    \,\,\text{output}_j\left( 1-\text{output}_j \right) \sum_{\text{downstream}}{\text{W}_{jk} \delta_j}\,\,              \text{(对于隐藏层的点)}\\
\end{array} \right. 
$$
  其中,$\sum_{\text { downstram }} W_{j k} \delta$表示来自特定隐藏层节点下游的节点误差响应能力的和。
  注意到反向传播规则还描述了为什么属性值需要被归约为0~1之间的值。例如,假设其取值范围为6个数字,未被归约,权重调整Aw,=n6x,将会被x,的数据值所控制。因此,经过网络的误差传播(形式为6)将被淹没,学习(权重调整)将被遏制。
## 7.手动计算使用反向传播
  首先,我们使用 一个简单的网络来讲解:
![1559220106054](assets/1559220106054.png)
![1559210513031](assets/1559210513031.png)
  首先,我们已经经过了一次争相传播了,输出的值为0.8750。我们假设真实值为0.800,设定学习率为0.1。则,预测误差为0.075。反响传播,顾名思义,是从结果开始,往前推,虽然可以在读取所有记录后修改权重,但神经元网络采用的是随机(或在线)反向传播,在读取每个记录后更新权重。寻找最佳的权重。根据上面讲述的规则,我们首先得到节点Z的误差响应能力 $\delta_Z$。由于Z是输出节点,有:
$$
\delta_Z=\text{output}_Z\left( 1-\text{output}_Z \right) \left( \text{actual}_Z-\text{output}_Z \right) 
\\
=0.8751\left( 1-0.8751 \right) \left( 0.8-0.8751 \right) 
\\
=-0.0082
$$
  于是,我们现在可以利用反响传播规则对权重 $W_{OZ}$ 做出调整,先算出它的响应能力:
$$
\Delta W_{0z}=\eta \delta _z\left( 1 \right) 
\\
=0.1\left( -0.0082 \right) \left( 1 \right) 
\\
=-0.00082
$$
然后计算出新的权重:
$$
w_{0Z, \text{new }}=w_{0Z, \text{current }}+\Delta w_{0Z}
\\
=0.5-0.00082
\\
=0.49918
$$
  现在,算出了节点 Z 的新的权重之后我们反响传播,计算节点 A 的权重,因为它在隐藏层中,其误差响应能力:
$$
\delta_{A}=\text { output }_{A}\left(1-\text { output }_{A}\right) \sum_{downstream} W_{A K} \delta_{K}
$$
  先观察,它的下游节点只有Z,其关联的权重是$W_{A Z}=0.9$,节点 Z 的误差响应能力为 -0.0082,因此
$$
\delta_{A}=0.7892(1-0.7892)(0.9)(-0.0082)=-0.00123
$$
  然后我们再考虑计算其新的权重 $W_{AZ}$:
$\Delta W_{A Z}=\eta \delta_{Z} \cdot$ output $_{A}=0.1(-0.0082)(0.7892)=-0.000647$
$w_{A Z, \text { new }}=w_{A Z, \text { current }}+\Delta w_{A Z}=0.9-0.000647=0.899353$
  对于节点 A 的上游节点,有权重 $W_1A$ :
$$
\Delta W_{1 A}=\eta \delta_{A} x_{1}=0.1(-0.00123)(0.4)=-0.0000492
\\
w_{1 A, \text { new }}=w_{1 A, \text { current }}+\Delta w_{1 A}=0.6-0.0000492=0.5999508
$$
  对权重 $W_2A$,我们有:
$$
\Delta W_{2 A}=\eta \delta_{A} x_{2}=0.1(-0.00123)(0.2)=-0.0000246
\\
w_{2 A, \text { new }}=w_{2 A, \text { current }}+\Delta w_{2 A}=0.6-0.0000246=0.7999754
$$
  对权重 $W_3A$,我们有:
$$
\Delta W_{3 A}=\eta \delta_{A} x_{3}=0.1(-0.00123)(0.7)=-0.0000861
\\
w_{3 A, \text { new }}=w_{3 A, \text { current }}+\Delta w_{3 A}=0.6-0.0000861=0.5999139
$$
  对权重 $W_0A$,我们有:
$$
\Delta W_{0 A}=\eta \delta_{A} x_{4}=0.1(-0.00123)(1)=-0.0000123
\\
w_{0 A, \text { new }}=w_{0 A, \text { current }}+\Delta w_{0 A}=0.5-0.0000123=0.499877
$$
  考虑节点 B ,其误差响应能力为:
$$
\delta_{B}=\text { output }_{B}\left(1-\text { output }_{B}\right) \sum_{downstream} W_{B K} \delta_{K}
$$
  只有一个下游节点 Z ,我们易得:
$$
\delta_{B}=0.8176(1-0.8176)(0.9)(-0.0082)=-0.0011
$$
  利用反响传播规则更新权重 $W_BZ$ ,计算如下:
$$
\Delta W_{B Z}=\eta \delta_{z} \cdot \text { output }_{B}=0.1(-0.0082)(0.8176)=-0.00067
\\
w_{B Z, \text { new }}=w_{B Z, \text { atrentent }}+\Delta w_{B Z}=0.9-0.00067=0.89933
$$
## 8.动量项(momentum)
  反向传播算法的应用如此广泛,所以已经开发出了许多反向传播算法的变体。其中最常见的就是修改算法公式$\Delta w_{i j}=\eta \delta_{j} x_{i j}$的权重更新法则,使第n次迭代的时候,其更新方法依赖于发生在第 n-1 次 迭代时的更新,我们加入 动量式 $\alpha$ :
$$
\Delta w_{\text { current }}=-\eta \frac{\partial \mathrm{SSE}}{\partial w_{\text { current }}}+\alpha \Delta w_{\text { previous }}
$$
  这里的 $\Delta w_{ji} (n)$是算法主循环中的第 n 次迭代进行的权重值更新。这个式子的第一项和之前的权重更新法是一样的,就是后面多了一项,表示前面的调整结果对现在的调整结果的调教。
&emsp;&emsp;其中$\Delta w_{\text { previous }}$表示先前的权重调整,且有$0 \leqslant \alpha<1$。合起来,$\alpha \Delta w_{\text { previous }}$表示对给定权重的先前权重调整结果。
## 9.敏感性分析
&emsp;&emsp;神经元网络的缺点之一是难以理解。神经元网络本身具有的使其能够建模范围广泛的非线性行为的灵活性同样限制了方便地制定规则来解释其结果。与决策树不同,我们无法将神经元网络权重转换为类似决策树那样的规则集。然而,我们可以采用一种称为敏感性分析的方法,该方法允许我们度量每个属性对输出结果的相关的影响情况。应用前述的测试数据集的敏感性分析如下:
(1)建立新观察值$x_{mean}$ ,$x_{mean}$ 的每个属性值等于测试集中所有记录的每个属性值的平均值。
(2)获得输入$x_{mean}$ 的网络输出,称为$output_{mean}$。
(3)逐个属性地,改变 $x_{mean}$ 以获取属性的最小和最大值。发现每个变化的网络输出,并将该结果与$output_{mean}$比较。
&emsp;&emsp;敏感性分析将发现某些属性的最大最小值的变化情况将比其他属性的最大最小值的变化情况对网络输出的影响大。

## 10.神经网络的实现
&emsp;&emsp;hhh,这个通常可以不用自己手动实现,可以调用现成的代码,稍微改动一点点就好了,Pytorch、Gulon什么的都是别人早好的轮子,R语言当然也有,本博客也有相关代码。


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值