本站原创文章,转载请说明来自《老饼讲解-BP神经网络》bp.bbbdata.com
由于神经网络往往需要将数据归一化再训练,
因此得到的模型也是对应归一化数据的,在使用中有所不便。
本文我们讲解,如何将 归一化数据的神经网络模型 映射回 原始数据的网络模型。
我们知道,神经网络一般会先将训练数据归一化,再进行训练。
但这样训练出来的网络,是归一化数据所对应的网络,
这样训练出来的网络,投入使用时,必须遵守:
先将输入归一化 ---> 在网络中计算输出 ---> 将输出反归一化
这样的过程是繁琐的,
且提取出的网络表达式,是对应归一化数据的,而有时我们希望直观看到原始数据 输入与输出的权重关系。
基于以上两点需求,本文我们讲解,如何将 归一化数据网络 映射回 原始数据的网络
下面为方便讲述,我们称 归一化数据所对应的网络 为"归一化网络",称对应原始数据的网络为"原始网络"。
X : 原始数据的输入
y : 原始数据的输出
W : 原始网络的权重
B : 原始网络的阈值
: 归一化后的X
:归一化后的 y
: 归一化网络的权重
: 归一化网络的阈值
hideNode :指的是隐节点上的值,形如 W *X +b
hideAct( hideActive): 指隐节点上经过传递函数激活后的值,形如 tansig( W *X +b)
转换公式
输入层->隐层的权重阈值转换公式:
隐层 - > 输出层的权重阈值转换公式:
例 子
背 景
现有原始数据:
我们将原始数据归一化后得到如下归一化数据:
使用归一化数据,训练得到一个3层3隐节点网络,其表达式如下:
该模型只适用于归一化后的数据,并不适用于原始数据。
下面我们展示如何将该表达式 转换成 原始数据的模型表达式。
模 型 转 换 操 作 过 程
● 转换 输入->隐节点 的权重和阈值 :
输入->第一个隐节点权重 [2 ,3 ] 按公式作如下转换:
第一个隐节点阈值 2.5 按公式作如下转换:
类似,转换第二第三个隐节点的权重和阈值,得到
第一个隐节点转换后的权重:[0.4, 1.2 ] ,阈值 : 1.1
第二个隐节点转换后的权重:[0.8, 2.4 ] ,阈值 : -0.3
第三个隐节点转换后的权重:[1.6,0.8 ] ,阈值 : 13.4
● 转换输出节点权重和阈值
隐层->输出层的权重为 [-2, 6 , 5 ]和阈值: 3 按公式作如下转换:
即,输出节点转换后的权重: [-10, 30, 25] ,阈值: 15
● 原始数据模型结果
综上,即可得到原始数据对应的网络表达式:
使用转换后的模型,只需要输入 原始数据 [ -2,2 ], 就能输出 原始数据的预测值 y : 5
输入->隐层 分析
重温-网络输入的归一化公式:
x : 当前网络输入
:当前输入x归一化后的值
: 训练数据中输入的最小值
: 训练数据中输入的最大值
对于原始网络,单个隐层的神经元的值为
从最后两式可知,原始网络与归一化网络 的 隐层权值阈值 关系如下:
隐层->输出层 分析
对单个输出神经元:
由反归一化公式:
综合得:
由最后两式可知,原始网络与归一化网络 的 输出层权值阈值 关系如下:
这样,利用上面讨论得到的两个公式,就能得到对应原始数据的权重和阈值,在网络投入使用时,就不再需要做归一化和反归一化的步骤。
End