浅谈神经网络
Posted 帅帅的飞猪
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅谈神经网络相关的知识,希望对你有一定的参考价值。
神经网络中可以改变的有:
1、各神经元的权值
2、bias,广义上,也是权值
3、激活函数
4、神经网络的层数
5、各层神经元的个数
6、神经网络的连接结构
7、输入输出的格式和质量
下面我们一项一项进行说明,如何改变这些参数
一、权值
权值的改变分为 有监督的学习 和 无监督的学习
1、有监督的学习Supervised Learning
给定许多样本(包含输入与输出),将输入数据通过神经网络后,产生的实际输出和期望输出进行比较,通过差值逐步调整各神经元的权值和bias,两个问题:
(1)期望输出是什么?
期望输出就是给定的样本的输出,而实际输出就是输入经过神经网络后产生的输出
(2)各权值初始化的值为多少?
初始化权值随机分配,一般为较小的非零随机数,比如归一化到(-1,1)
例:C语言中利用rand()函数(随机产生0-RAND_MAX之间的数),初始化权值为-1到1之间:w[i][j]=rand()*2.0/RAND_MAX-1;
2、无监督的学习UnSupervised Learning
大概思想是:当两个神经元同时处于激发状态时两者间的连接权会被加强,否则被减弱。
注:关于训练算法有以下这些:
BP算法、...(留待后续补充)
......
算法多多,就像C语言中一个排序就有那么多算法一样,神经网络的训练算法有这么几种也不足为奇。
二、激活函数
(1) 线性函数 ( Liner Function )
Matlab中可以使用:purelin函数
(2) 阈值函数 ( Threshold Function )
Matlab中可以使用:hardlim和hardlims函数,值域分别为[0,1]和[-1,1]
(3) S形函数 ( Sigmoid Function )
Matlab中可以使用:logsig函数
(4) 双极S形函数
Matlab中可以使用:tansig函数
(5)后续补充...
......
三、输入输出的质量和格式
输入输出数据的质量:保证输入数据准确完整等等就行,这里不做深入讲解,具体可以看看数据预处理。
输入输出数据的格式:这里涉及到的就是数据的归一化问题,这里简单说一下。
1、什么是归一化?
归一化就是利用一定的算法,将输入输出数据归一化到[0,1]或者[-1,1]之间
2、为什么要归一化?
(1)输入输出的单位不一样(比如输入是温度,输出是电流),范围不一样(比如输入数据之间数值相差很大),会导致神经网络的收敛速度变慢、训练时间变长;
(2)数据范围大的输入在模式分类中的作用可能会偏大,而数据范围小的输入作用就可能会偏小;
(3)激活函数本身的输出是有范围的,比如用sigmoid函数,其值域范围为[0,1],这样就要求必须将输出数据映射到[0,1]上面,也就是输出数据的归一化问题;
(4)sigmoid函数在[-5,5]范围之外偏向饱和,函数值之间差别太小,很难进行训练,比如f(5)和f(100)只相差0.0067,因此,我们取有效区间[-1,1],将输入数据映射到[-1,1]
上面,方便进行训练,这也就是输入数据的归一化问题;
3、如何进行归一化?
输入数据的归一化
(通常归一化到(-1,1)之间)
(1)var = ( x - min )/( max - min),那么数据x就化简到[0,1]之间了。(编程中,可以var = ( x - min + 1 )/( max - min - 1),加上常数1防止分母为0)
(2)var = 2 * ( x - min ) / ( max - min ) - 1,那么数据x就化简到[-1,1]之间了。(C编程中,可以采用 var = rand()*2.0/RAND_MAX-1)
输出数据的反归一化
如果采用sigmoid函数,函数值区间为(0,1),由var = ( x - min )/( max - min)可得反归一化后的值为
x = var*(max - min) + min (若有常数A,则x = var*(max - min + 1) + min - 1)
以上是关于浅谈神经网络的主要内容,如果未能解决你的问题,请参考以下文章