赞
踩
训练神经网络的方法如下所示:
(1) traingd:基本梯度下降法,收敛速度比较慢。
(2) traingda:自适应学习率的梯度下降法
(3) traingdm:带有动量项的梯度下降法, 通常要比traingd 速度快。
(4) traingdx: 带有动量项的自适应学习算法, 速度要比traingdm 快。
(5) trainrp: 弹性BP 算法, 具有收敛速度快和占用内存小的优点。
(6) trainscg: 归一化共轭梯度法
(7) trainbfg: BFGS- 拟牛顿法
(8) traino ss: 一步分割法,为共轭梯度法和拟牛顿法的一种折衷方法。
(9) trainlm: Levenberg-Marquardt算法,对中等规模的网络来说, 是速度最快的一种训练算法, 其缺点是占用内存较大。 (10) trainbr: 贝叶斯规则法,对Levenberg-Marquardt算法进行修改, 以使网络的泛化能力更好,同时降低了确定最优网络结构的难度。
其中常用的包括梯度下降法、牛顿法、拟牛顿法以及共轭梯度法
一、 梯度下降法(Gradient descent)
1、梯度下降方法简介:它是最简单的训练算法。它仅需要用到梯度向量的信息,因此属于一阶算法。 梯度下降方法有一个严重的弊端,该方法需要进行很多次迭代运算。当神经网络模型非常庞大、包含上千个参数时,梯度下降方法是我们推荐的算法。
2、梯度下降的算法推导:
3、梯度下降的算法调优
(1)算法的步长选择。
实际取值取决于数据样本,可以多取一些值,从大到小,分别运行算法,看看迭代效果,如果损失函数在变小,说明取值有效,否则要增大步长。步长太大,会导致迭代过快,甚至有可能错过最优解。步长太小,迭代速度太慢,很长时间算法都不能结束。所以算法的步长需要多次运行后才能得到一个较为优的值。
(2)算法参数的初始值选择。
初始值不同,获得的最小值也有可能不同,因此梯度下降求得的只是局部最小值;当然如果损失函数是凸函数则一定是最优解。由于有局部最优解的风险,需要多次用不同初始值运行算法,关键损失函数的最小值,选择损失函数最小化的初值。
(3)归一化。
由于样本不同特征的取值范围不一样,可能导致迭代很慢,为了减少特征取值的影响,可以对特征数据归一化,也就是对于每个特征x,求出它的期望。
下面给出梯度下降法matlab代码的思路
clc % 清屏 clear % 清除内存以便加快运算速度 close all % 关闭当前所有figure图像 %% 初始化神经网络 %设置训练与测试样本数 %% 设置神经网络输入数据 %给输入变量进行赋值 %归一化 %使用mapminmax该函数 %% 设置神经网络训练集和测试集 %设置训练集数据输入输出矩阵,p代表输入,T代表输出,将给出的数据前90个作为训练集 P_train =; T_train =; % 设置测试集数据输入输出矩阵,将给出数据的后10个作为测试集 P_test = %%测试集输出矩阵 %% 设置训练参数 MaxEpochs=5000; % 最多训练次数为50000 lr=0.01; % 学习速率为0.01 E0=0.001; % 目标误差为0.001 % e1=0.01; %梯度法最优值收敛精度 %% 给定初始权值及偏置 W1=rand(HiddenUnitNum,Network_InNum); % 初始化输入层与隐含层之间的权值 B1=rand(HiddenUnitNum,1); % 初始化输入层与隐含层之间的偏置 W2=rand(Network_outNum,HiddenUnitNum); % 初始化输出层与隐含层之间的权值 B2=rand(Network_outNum,1); % 初始化输出层与隐含层之间的偏置 %% 训练神经网络 %这里i是当训练的模型最终不满足精度时,训练到最大训练次数就截止 for i=1:MaxEpochs HiddenOut=tansig(W1*P_train+repmat(B1,1,TrainSamNum)); % 隐含层网络输出 ,双曲正切S型传输函数;另外一种是对数s型logsig=1/1+e^(-x) NetworkOut=W2*HiddenOut+repmat(B2,1,TrainSamNum); %输出层网络输出 tansig=1/arctan(x)+1 Error=T_train-NetworkOut; % 实际输出与网络输出之差 f=sumsqr(Error); % 能量函数(误差平方和) 1/2*sum(Error)^2 %% 用测试集测试已经训练好的神经网络 %% 求解网络输出的均方误差以及平均误差 %%绘图
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。