一、简介
面对较复杂的非线性系统问题时,由于 BP 网络设置的初始权值依赖设计者的经验和样本空间的反复试验,容易产生收敛速度慢、网络不稳定以及陷入局部最优等一系列问题.将 BP 神经网络算法与遗传算法结合,理论上可以对任意非线性系统进行映射,并且得到全局最优的效果,从而形成一种更加有效的非线性反演方法。本场 Chat 中遗传算法对 BP 神经网络进行如下优化,话题将从遗传算法,BP 神经网络两部分分别开始,主要进行 BP 神经网络应用的快速实用入门,学完之后能够学会调用 GA_BP 算法处理数据。
本场 Chat 主要内容:
BP 神经网络的原理;
遗传算法引入;
GA_BP 示范代码解读。
第一步 认识 BP 神经网络
我们主干是需要了解神经网络,因为遗传算法的的加入是对神经网络的改进,除了遗传算法还可以用小波算法,蚁群算法。遗传算法可以得到最优个体的初始权值和阈值。先从神经网络算法开始入门。
1.1神经网络的分类
人工神经网络分类为以下两种:
1.1.1 依学习策略(Algorithm)分类主要有:
监督式学习网络(Supervised Learning Network)为主。
无监督式学习网络(Unsupervised Learning Network)。
混合式学习网络(Hybrid Learning Network)。
联想式学习网络(Associate Learning Network)。
最适化学习网络(Optimization Application Network)。
1.1.2 依网络架构(Connectionism)分类主要有:
前向式架构(Feed Forward Network)。
回馈式架构(Recurrent Network)。
强化式架构(Reinforcement Network)。
1.2 学习算法
(1) Hebb 学习规则。
(2) Delta 学习规则。
(3) 梯度下降学习规则。
(4) Kohonen 学习规则(就是SOM)。
(5)向后传播学系规则(BP)。
(6) 概率式学习规则(GA)。
(7)竞争式学习规则(SOM,ART,CPN)。
1.3 BP 神经网络
BP 神经网络训练算法:
(1) 初始化网络设置。
(2) 向前传播输入。
(3) 反向误差传播。
(4) 网络权重与神经元偏置调整。
(5) 判断结束。
详细:BP 神经网络是怎样的一种定义?看这句话:一种按 “ 误差逆传播算法训练 ” 的多层前馈网络。
BP 的思想就是:利用输出后的误差来估计输出层前一层的误差,再用这层误差来估计更前一层误差,如此获取所有各层误差估计。这里的误差估计可以理解为某种偏导数,我们就是根据这种偏导数来调整各层的连接权值,再用调整后的连接权值重新计算输出误差。
直到输出的误差达到符合的要求或者迭代次数溢出设定值。
说来说去,“ 误差 ” 这个词说的很多嘛,说明这个算法是不是跟误差有很大的关系?
没错,BP 的传播对象就是 “ 误差 ”,传播目的就是得到所有层的估计误差。
它的学习规则是:使用最速下降法,通过反向传播(就是一层一层往前传)不断调整网络的权值和阈值,最后使全局误差系数最小。
它的学习本质就是:对各连接权值的动态调整。
BP 网络由输入层、隐层和输出层组成,隐层可以有一层或多层:输入层(input),隐藏层(hide layer),输出层(output)BP 网络的优势就是能学习和储存大量的输入输出的关系,而不用事先指出这种数学关系。那么它是如何学习的?
BP 利用处处可导的激活函数来描述该层输入与该层输出的关系,常用 S 型函数 δ 来当作激活函数。
是 m × k × n 的三层 BP 网络模型,网络选用 S 型传递函数,通过反传误差函数 ( (Ti 为期望输出、Oi 为网络的计算输出),不断调节网络权值和 阈值使误差函数 E 达到极小。
其中,n 为输入层神经元个数,m 为输出层神经元个数,a 为 [ 1, 10] 之间的常数。
我们现在开始有监督的 BP 神经网络学习算法:
1、正向传播得到输出层误差 e;=>输入层输入样本=>各隐藏层=>输出层。
2、判断是否反向传播;=>若输出层误差与期望不符=>反向传播。
3、误差反向传播;=>误差在各层显示=>修正各层单元的权值,直到误差减少到可接受程度。
算法阐述起来比较简单,接下来通过数学公式来认识 BP 的真实面目。
假设我们的网络结构是一个含有 N 个神经元的输入层,含有 P 个神经元的隐层,含有 Q 个神经元的输出层。
认识好以上变量后,开始计算:
一、 用(-1,1)内的随机数初始化误差函数,并设定精度 ε,最多迭代次数 M。
二、随机选取第 k 个输入样本及对应的期望输出。
重复以下步骤至误差达到要求:
三、计算隐含层各神经元的输入和输出。
四、计算误差函数 e 对输出层各神经元的偏导数,根据输出层期望输出和实际输出以及输出层输入等参数计算。
五、计算误差函数对隐藏层各神经元的偏导数,根据后一层(这里即输出层)的灵敏度(稍后介绍灵敏度) δo(k),后一层连接权值 w,以及该层的输入值等参数计算
六、利用第四步中的偏导数来修正输出层连接权值
七、利用第五步中的偏导数来修正隐藏层连接权值
八、计算全局误差(m 个样本,q 个类别)
第二步 加入遗传算法
1.1 遗传算法
目的:神经网络里面有很多参数,但是你并不知道哪些参数训练出来的效率最高,识别率最高。这时候就可以以这个识别率为目标函数,用遗传算法来优化神经网络的参数。
遗传神经网络算法和神经网络算法最本质的区别可以说是学习方法不同,或者说模型的优化方法不同。
前者应该是基于遗传算法进行网络权值的学习,而后者大都是采用反向传播(BP)算法进行权值学习,而这两种算法差异很大。可以分别了解:
1)遗传算法:
遗传算法属于进化算法,模拟大自然生物进化的过程:优胜略汰。个体不断进化,只有高质量的个体(目标函数最小(大))才能进入下一代的繁殖。如此往复,最终找到全局最优值。遗传算法能够很好的解决常规优化算法无法解决的高度非线性优化问题,广泛应用在各行各业中。差分进化,蚁群算法,粒子群算法等都属于进化算法,只是模拟的生物群体对象不一样而已。
2)反向传播算法
详细介绍遗传算法:遗传算法 GA —模拟自然界遗传机制和生物进化论而成的一种并行随机搜索最优化方法。(具有 “ 生存 + 检测 ” 的迭代过程的搜索算法)基于自然界 “ 优胜劣汰,适者生存 ” 的生物进化原理引入优化参数形成的编码串联群体中,按照所选择的适应度函数并通过遗传中的选择、交叉和变异对个体进行筛选,使适应度值好的个体被保留,适应度差的个体被淘汰,新的群体既继承了上一代的信息,又优于上一代。反复循环,直至满足条件。
种群中的每个个体是问题的一个解,称为 “ 染色体 ”,染色体是一串符号,如二进制字符串。利用 “ 适值 ”(适应性函数)测量染色体的好坏。 遗传算法基本操作分为:
选择操作:以一定概率选择旧群体个体到新群体中,个体被选中的概率跟适应度值有关个体适应度越好被选中改了吧越大。
交叉操作 – 信息交换思想选两个个体交换组合产生新的优秀个体,染色体位置互换。
变异操作 — 以一定的低概率发生,染色体位置产生变异(通常取值 0.001 - 0.01 之间)。 遗传算法是具有高效启发式搜索、并行计算等特点,应用于函数优化、组合优化及生产调度等方面。
算法基本要素:
1、染色体编码方法 。
2、适应度函数。
3、遗传操作(选择、交叉、变异) 。
4、运行参数 —(参数:群体大小 M、遗传代数 G、交叉概率 Pc 和变异概率 Pm) 。
1、种群初始化
个体编码方法为实数编码,每隔个体均为一个实数串,由输入层和隐含层连接权值、隐含层阈值、隐含层与输出层连接权值以及输出层阈值 4 个部分组成。个体包含了神经网络全部的权值和阈值,在网路结构一直的情况下,就可以构成一个结构、权值、阈值确定的神经网络。
2、适应度函数
根据个体得到 BP 神经网络的初始权值和阈值,用训练数据训练 BP 神经网络后预测系统输出,把预测输出个期望的输出之间的误差绝对值和 E 作为个体适应度值 F。
3、选择操作
遗传算法选择操作有轮盘赌法、锦标赛法等多种方法。选择轮盘赌法时,即基于适应度比例的选择策略,每个个体 i 的选择概率 pi。
4、交叉操作
由于个体采用实数编码,所以交叉操作方法采用实数交叉法。
5、变异操作
选取第 i 个个体的第 j 个基因 aij 进行变异变异操作。
1.2 神经网络加入遗传算法
1.2.1 遗传算法在神经网络中的应用
神经网络的设计要用到遗传算法,遗传算法在神经网络中的应用主要反映在 3 个方面: 网络的学习,网络的结构设计,网络的分析。
1.2.1.1 遗传算法在网络学习中的应用
在神经网络中,遗传算法可用于网络的学习。这时,它在两个方面起作用。学习规则的 优化用遗传算法对神经网络学习规则实现自动优化,从而提高学习速率。网络权系数的优化 用遗传算法的全局优化及隐含并行性的特点提高权系数优化速度。
1.2.1.2 遗传算法在网络设计中的应用
用遗传算法设计一个优秀的神经网络结构,首先是要解决网络结构的编码问题;然后才 能以选择、交叉、变异操作得出最优结构。
编码方法主要有下列 3 种:
直接编码法:这是把神经网络结构直接用二进制串表示,在遗传算法中,“ 染色体 ” 实质 上和神经网络是一种映射关系。通过对 “ 染色体 ” 的优化就实现了对网络的优化。
参数化编码法:参数化编码采用的编码较为抽象,编码包括网络层数、每层神经元数、 各层互连方式等信息。一般对进化后的优化“染色体”进行分析,然后产生网络的结构。
繁衍生长法:这种方法不是在 “ 染色体 ” 中直接编码神经网络的结构,而是把一些简单 的生长语法规则编码入 “ 染色体 ” 中;然后,由遗传算法对这些生长语法规则不断进行改变, 最后生成适合所解的问题的神经网络。这种方法与自然界生物地生长进化相一致。
1.2.1.3 遗传算法在网络分析中的应用
遗传算法可用于分析神经网络。神经网络由于有分布存储等特点,一般难以从其拓扑结构直接理解其功能。遗传算法可对神经网络进行功能分析,性质分析,状态分析。
遗传算法虽然可以在多种领域都有实际应用,并且也展示了它潜力和宽广前景;但 是,遗传算法还有大量的问题需要研究,目前也还有各种不足。首先,在变量多,取值范围 大或无给定范围时,收敛速度下降;其次,可找到最优解附近,但无法精确确定最扰解位置; 最后,遗传算法的参数选择尚未有定量方法。
对遗传算法,还需要进一步研究其数学基础理 论;还需要在理论上证明它与其它优化技术的优劣及原因;还需研究硬件化的遗传算法;以及遗传算法的通用编程和形式等。
小结:遗传算法和神经网络都是计算智能领域重要的算法,遗传算法借鉴生物界适者生存,优胜劣 汰遗传机制的规律,来寻找一个问题的最优解。
神经网络则是模拟生物神经网络的结构和功 能的数学模型或计算模型。大量细胞构成各种神经网络。通过在遗传算法调整神经网络的结 构,使得神经网络获得动态的结构,从而更加智能。用遗传算法调整权重,获得更快的速度, 同时更大程度的避免出现局部最优情况下收敛。将遗传算法应用于神经网络,大大提高神经网络的性能。
二、源代码
unction varargout = interface(varargin)
% INTERFACE M-file for interface.fig
% INTERFACE, by itself, creates a new INTERFACE or raises the existing
% singleton*.
%
% H = INTERFACE returns the handle to a new INTERFACE or the handle to
% the existing singleton*.
%
% INTERFACE('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in INTERFACE.M with the given input arguments.
%
% INTERFACE('Property','Value',...) creates a new INTERFACE or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before interface_OpeningFunction gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to interface_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Copyright 2002-2003 The MathWorks, Inc.
% Edit the above text to modify the response to help interface
% Last Modified by GUIDE v2.5 13-Mar-2006 11:25:28
% Begin initialization code - DO NOT EDIT
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%this define the global variables
global OriginImg; %this is the image of original
global SegmentImg ; %this is the image of segmented
global threshold ; %this is the fixed threshold for segment image
global nnet ; %this is the neural network
global P ; %this is the sample of original
global T ; %this is the sample of target
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @interface_OpeningFcn, ...
'gui_OutputFcn', @interface_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
%initialize variables
threshold = 80 ;
% End initialization code - DO NOT EDIT
% --- Executes just before interface is made visible.
function interface_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to interface (see VARARGIN)
% Choose default command line output for interface
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
global OriginImg;
global SegmentImg ;
OriginImg = imread('image\a.bmp');
SegmentImg = OriginImg ;
set(gcf,'CurrentAxes',handles.h1);
imshow(OriginImg);
set(gcf,'CurrentAxes',handles.h2);
imshow(SegmentImg);
% UIWAIT makes interface wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = interface_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
function edit1_Callback(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit1 as text
% str2double(get(hObject,'String')) returns contents of edit1 as a double
% --- Executes during object creation, after setting all properties.
function edit1_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit1 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function edit2_Callback(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit2 as text
% str2double(get(hObject,'String')) returns contents of edit2 as a double
% --- Executes during object creation, after setting all properties.
function edit2_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit2 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function edit3_Callback(hObject, eventdata, handles)
% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit3 as text
% str2double(get(hObject,'String')) returns contents of edit3 as a double
% --- Executes during object creation, after setting all properties.
function edit3_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
function edit4_Callback(hObject, eventdata, handles)
% hObject handle to edit4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: get(hObject,'String') returns contents of edit4 as text
% str2double(get(hObject,'String')) returns contents of edit4 as a double
% --- Executes during object creation, after setting all properties.
function edit4_CreateFcn(hObject, eventdata, handles)
% hObject handle to edit4 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: edit controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc
set(hObject,'BackgroundColor','white');
else
set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor'));
end
三、运行结果
四、备注
完整代码或者代写添加QQ 912100926