1.人工神经网络
人工神经网络(Artificial Neural Network,ANN)是在受到了生物学的启发后创建的,在某种程度上它是对生物大脑的一种模拟。人们仿照生物神经网络的结构,使用简单运算单元模拟神经元,并将大量运算单元按某种形式密集连接,便构成了人工神经网络。结构如图:
带有权重值(w1,w2,...,wn)的信号(x1,x2,...,xn)经过z整合后进行激活函数f(x)的处理,最后输出处理的结果。
2.激活函数的类型
(1)阈值函数:
(2)Relu函数:
(3)分段线性函数
(4)非线性转移函数
3.常用的人工神经网络模型
(1)BP神经网络(反向传播算法)
(2)RBF神经网络
(3)FNN
(4)LM神经网络(精准度非常高)
4.BP神经网络
(1)主要思想:从后向前逐层传播输出层的误差,以间接算出隐层误差。
(2)模型图:
(3)算法分为两个阶段:
第一阶段(正向过程)输入信息从输入层经隐层逐层计算各神经元的输出值。
第二阶段(反向传播过程)输出误差逐层向前算出隐层各神经元的误差,并用此误差修正每层权值。
(4)工作流程:
(5)算法实现:
神经网络既可以用于处理分类问题,又可以处理回归问题,相应算法只是在输出层略有差别:
·对于分类问题,几元分类问题就有几个输出节点,每个节点对应一个类别。预测时,哪个节点输出值最大,该节点的输出编码为1,其它节点的输出编码为0,模型最终输出一个二进制编码。
·对于回归问题,需输出连续实数值(通常只有一个输出值),此时输出节点的激活单元f将被去除,线性单元的输出值z直接作为模型的最终输出。
(1)对于分类问题,实现方法有两种:
①利用深度学习Keras下的序列Sequencial模块构建人工神经网络
②利用sklearn库下的MLPClassifier模块构建人工神经网络
【注】
class sklearn.neural_network.MLPClassifier(hidden_layer_sizes=(100, ), activation=’relu’, solver=’adam’, alpha=0.0001,batch_size=’auto’,learning_rate=’constant’, learning_rate_init=0.001, power_t=0.5, max_iter=200, random_state=None)
重要参数说明:
①hidden_layer_sizes :元组格式,长度=n_layers-2,默认(100,),第i个元素表示第i个隐藏层的神经元的个数。
②activation :{‘identity’,‘logistic’,‘tanh’,‘relu’},默认’relu’。
Ps隐藏层的激活函数:
‘identity’,无操作激活,对实现线性瓶颈很有用,返回f(x)= x;
‘logistic’,logistic sigmoid函数,返回f(x)= 1 /(1 + exp(-x));
‘tanh’,双曲tan函数,返回f(x)= tanh(x);
‘relu’,整流后的线性单位函数,返回f(x)= max(0,x)。
③solver:{‘lbfgs’,‘sgd’,‘adam’},默认’adam’。
Ps权重优化的求解器:
'lbfgs’是准牛顿方法族的优化器;
'sgd’指的是随机梯度下降;
'adam’是指由Kingma,Diederik和Jimmy Ba提出的基于随机梯度的优化器。
注意:默认解算器“adam”在相对较大的数据集(包含数千个训练样本或更多)方面在训练时间和验证分数方面都能很好地工作。但是,对于小型数据集,“lbfgs”可以更快地收敛并且表现更好。
(2)对于回归问题,利用sklearn库下的MLPRegressor模块构建人工神经网络