TIỂU LUẬN MÔN HỌC MÔ HÌNH HÓA HỆ THỐNG ĐO LƯỜNG VÀ ĐIỀU KHIỂN Tự chọn loại mạng neuron với chức năng nhận dạng một hàm phi tuyến bất kỳ và tiến hành mô phỏng trên matlab - Pdf 23

Tiểu luận môn học: MẠNG NEURON
TIỂU LUẬN MÔN HỌC
MÔ HÌNH HÓA HỆ THỐNG ĐO LƯỜNG VÀ ĐIỀU KHIỂN
Đề bài:
Tự chọn loại mạng neuron với chức năng nhận dạng một hàm phi tuyến bất
kỳ và tiến hành mô phỏng trên matlab
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 1
Tiểu luận môn học: MẠNG NEURON
1. Cấu trúc của mạng nơ ron
1.1. Mô hình một neuron nhân tạo
Nghiên cứu mạng neuron nhân tạo được xuất phát ý tưởng từ các neuron
sinh học của bộ não người. Mạng neuron nhân tạo là dùng kỹ thuật tái tạo lại
một vài chức năng tương tự như bộ não con người. Mạng neuron nhân tạo không
thể phức tạp như bộ não con người. Tuy vậy vẫn có 2 điểm tương tự giữa mạng
neuron nhân tạo và mạng neuron sinh học. Thứ nhất các khối của hai mạng đều
là các thiết bị tính toán được liên kết cao với các khối khác. Thứ hai là các liên
kết giữa các neuron xác định chức năng của một mạng. Mạng neuron nhân tạo
có những nhiều lợi điểm tiềm năng như sau cho điều khiển thông minh: chúng
học tập từ kinh nghiệm hơn là lập trình, có khả năng tạo ra dữ liệu không nhìn
thấy từ dữ liệu rèn luyện đã cho, nhanh và có thể được thực hiện trong thời gian
thực. Việc nghiên cứu ứng dụng mạng neuron mở ra một hướng mới trong việc
giải quyết các bài toán kỹ thuật và kinh tế. Trong bài toán kỹ thuật, mạng neuron
có thể dùng để nhận dạng, điều khiển, nhận mẫu, giải quyết các bài toán tối ưu
rất có hiệu quả.
- Mô hình một neuron có một đầu vào được mô tả như sau:

Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 2
p
w
n
f

Hàm truyền tuyến tính
p
1
w
1,1
n
a
b
1
Inputs
General Neuron

p
2
p
R
w
1,R
Mạng neuron nhiều đầu vào
Tiểu luận môn học: MẠNG NEURON
- Hàm ngưỡng (hardlim):



<

==
00
01
)lim(

-1
0
Hàm truyền ngưỡng
Tiểu luận môn học: MẠNG NEURON
này được sử dụng để lấy tín hiệu quá khứ và nó là yếu tố để tạo ra các đơn vị
neuron động lực học và mạng động lực học trong hệ thống rời rạc.
Quan hệ vào-ra như sau:
)(.)(
τ
itpwtq −=
với w là trọng số của TDL , i là bậc trễ, i=1,2,…,n. τ là thời gian trễ bậc một.
- Mạng nhiều lớp truyền thẳng : Gồm nhiều lớp (N lớp) ghép liên tiếp nhau,
đầu ra của lớp này nối với đầu vào của lớp ngay sau đó.
Lớp đầu tiên là lớp vào (input layer), có R đầu vào và S1 đầu ra.
Lớp cuối cùng là lớp ra (output layer) có SN-1 đầu vào và SN (gọi tắt là S)
đầu ra
Giữa chúng cũng có thể có một số lớp cũng nối liên tiếp nhau gọi là các lớp
ẩn, chúng đóng vai trò trung gian trong mạng, không tiếp xúc trực tiếp với bên
ngoài. Mỗi lớp ẩn có Sk-1 đầu vào, Sk đầu ra.
Các neuron trong một lớp được nối theo cấu trúc ghép nối hoàn toàn,
nghĩa là mỗi neuron sẽ được nối với tất cả các tín hiệu vào của lớp đó và các
neuron trong cùng lớp có cấu trúc liên kết hoàn toàn giống nhau.
- Mạng nơ ron hồi quy (mạng phản hồi): là loại mạng mà tín hiệu ra của
neuron được phản hồi ngược về làm tín hiệu vào cho các neuron lớp trước đó
hoặc cùng lớp đó tạo thành một vòng kín. Tín hiệu phản hồi có thể có phần tử
gây trễ (TDL)
1.3. Các luật học
Việc học của mạng neuron là để tìm chính xác ma trận trọng số liên kết W
của các neuron và xác định được cấu trúc cụ thể của mạng để giải quyết được
bài toán cụ thể.

Tiểu luận môn học: MẠNG NEURON
- Dạng chung của luật học thông số là xác định giá trị cần điều chỉnh ΔWi
cho vector trọng số Wi.
- Với mạng rời rạc:
)( )( txrtW
i
η
=∆
Trong đó : η là số dương xác định tốc độ học
r là tín hiệu học r=fr(Wi,x,di)
Lúc đó giá trị của vector trọng số tại thời điểm (t+1) là:
)().),(,(.)()1( txdtxWftWtW
iirii
η
+=+
Với mạng liên tục:
)(
)(
txr
dt
tdW
i
η
=
Có nhiều thuật toán để xác định ΔWi(t) được đưa ra. Một trong những thuật
toán có giám sát cho mạng nơ ron được Widrow-hoff đề nghị là thuật toán
"giảm Gradient" (gradient descent), sử dụng các tiểu sai lệch trung bình bình
phương bằng việc thêm vào các trọng số liên kết mạng một giá trị theo hướng
ngược với hướng tức thời của Gradient. Thuật toán sử dụng phương pháp sai
lệch trung bình bình phương nhỏ nhất (LMS: Least Mean Squares) hoặc gọi là

2.1. Nhận dạng bằng mạng neuron truyền thẳng nhiều lớp (multive-layer
feedforward neural networks)

Trong nội dung tiểu luận ta dùng mạng neuron có hai lớp, lớp 1 (lớp ẩn) có
lớn hơn hoặc bằng một neuron, lớp 2 (lớp ra) có một neuron.
Để thuận tiện trong quá trình khảo sát cấu hình và kết quả nhận dạng của
các mạng neron (2 lớp) tiêu biểu, ta xây dựng chương trình viết bằng GUI trong
Matlab (Graphical User Interface) để có thể nhận dạng hàm f(x) bất kỳ, cũng
như điều chỉnh các thông số mạng một cách linh hoạt.
Ta chọn hàm phi tuyến để nhận dạng là:
( ) ( )
xxxxf 2cos53
32
++=
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 8
Inputs
Σ
1
b
2
a
2
n
2
w
2
1,1
p
n
1

2,1
Một ví dụ về mạng 2 lớp
Tiểu luận môn học: MẠNG NEURON
Chọn hàm truyền lớp 1 là log-sigmoid (logsig), hàm truyền lớp 2 là tuyến tính
purelin để nhận dạng trong khoảng [-2.5 ÷ 2.5] với bước (step) của biến x là
0.05, tương ứng với 100 điểm lấy mẫu. Thuật toán huấn luyện là Levenberg-
Marquardt.
Nhận dạng hàm với số neuron ở lớp 1 bằng 3, lớp 2 bằng 1
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 9
Tiểu luận môn học: MẠNG NEURON
Nhận dạng hàm với số neuron ở lớp 1 bằng 7, lớp 2 bằng 1
2.2. Nhận dạng bằng mạng neuron hồi quy nhiều lớp (multive-layer recurrent
neural networks)
Xét mạng có R tín hiệu vào, S tín hiệu ra và có nhiều lớp ẩn. Lớp vào có R
tín hiệu vào vectơ x. Và có n lớp ẩn, lớp ẩn thứ i (i = 1, … n-1) có Si neuron hồi
quy và có lấy tín hiệu quá khứ qua khối trễ TDL. Lớp ra có S
n
neuron và truyền
thẳng tín hiệu cho S đầu ra.
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 10
IW
1,1
IW
1,R
LW
1,1
IW
S1,R
LW
S2,S1

( ) ( )
xxxxf 2cos53
32
++=
trong khoảng [-2.5 ÷ 2.5] với bước (step) của biến x là
0.05, tương ứng với 100 điểm lấy mẫu. Thuật toán huấn luyện vẫn là Levenberg-
Marquardt.
Nhận dạng hàm với số neuron ở lớp 1 bằng 3, lớp 2 bằng 1
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 11
Tiểu luận môn học: MẠNG NEURON
Nhận dạng hàm với số neuron ở lớp 1 bằng 7, lớp 2 bằng 1
2.3. Kết luận
Như vậy để nhận dạng hàm phi tuyến ta có thể dùng mạng truyền thẳng hay
mạng hồi quy. Khả năng nhận dạng hàm phụ thuộc vào số lớp, số neuron trong
mỗi lớp, số điểm lấy mẫu, số bước lặp và bình phương sai số. Số lớp và số
neuron càng lớn thì khả năng nhận dạng càng tốt nhưng khối lượng tính toán
tăng lên nên với những đối tượng phức tạp thì phải tối ưu các tham số trên là
một nhân tố quan trọng. So với mạng truyền thẳng thì mạng nơ ron hồi quy cục
bộ làm đơn giản các thuật toán dạy, số lớp neuron sẽ ít hơn. Mặt khác, khả năng
mô hình hóa đầy đủ của mỗi neuron cho phép kích thước toàn bộ của mạng là
nhỏ nhất. Như vậy, mạng hồi quy có ưu thế rộng hơn, nó đủ sức nhận dạng hệ
thống và điều khiển các hệ thống phi tuyến.
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 12
Tiểu luận môn học: MẠNG NEURON
Chương trình nhận dạng hàm phi tuyến ( được viết trên GUI, m-file)
function varargout = hung(varargin)
% hung M-file for hung.fig
% Begin initialization code
gui_Singleton = 0;
gui_State = struct('gui_Name', mfilename,

% 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;

% Executes on button press in Nhan_dang.
function Nhan_dang_Callback(hObject, eventdata, handles)
% hObject handle to Nhan_dang (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
t1 = get(handles.FF_net,'Value');
t2 = get(handles.RC_net,'Value');
if t1==1
% Chon thuat toan cho lop an
get_alg_1 = findobj(gcbf,'Tag','Lop_an');
alg_1 = get(get_alg_1,'Value');
if alg_1 ==1
str_alg_1 ='logsig';
elseif alg_1 ==2
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 13
Tiểu luận môn học: MẠNG NEURON
str_alg_1 ='purelin';
else
str_alg_1 ='tansig';
end;

% Chon thuat toan cho lop ra

% Xay dung mang
net = newff([varLim1 varLim2],[nnum1,1],{str_alg_1,str_alg_2}, 'trainlm');
% Cac thong so huan luyen mang net
% 1. Dat chi so Goal
int_G = '1E-';
get_Goal = findobj(gcbf,'Tag','Goal_Edit');
Str_G = get(get_Goal,'String');
Goal_str = [int_G, Str_G];
Goal_num = eval(Goal_str);
net.trainParam.goal = Goal_num;
% 2. Dat chi so Epochs
get_Epochs = findobj(gcbf,'Tag','Epochs_Slider');
Epochs_num = get(get_Epochs,'Value');
net.trainParam.epochs = Epochs_num;
[net,tr] = train(net,x,t);
% Qua trinh hoc
axes(handles.Trainning1_axes)
len = length(tr.perf);
x1 = 1:1:len;
y1 =tr.perf;
scalex = round(len/8); % (8 la so khoang chia tren truc x)
j = 1;
y1(:,1);
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 14
Tiểu luận môn học: MẠNG NEURON
scaley_set(:,1) = Goal_num/10;
while scaley_set(:,j)< y1(:,1)
scaley_set(:,j+1) = scaley_set(:,j)*10;
j=j+1;
end

ham = ['Nhan dang ham so: ' ham];
title(ham,'FontSize',13);
legend('\bf{ Duong cong chuan}','\bf{ Duong cong nhan dang bang
neuron}',2);
hold off
%=========================
elseif t2==1
% Chon thuat toan cho lop an
get_alg_1 = findobj(gcbf,'Tag','Lop_an');
alg_1 = get(get_alg_1,'Value');
if alg_1 ==1
str_alg_1 ='logsig';
elseif alg_1 ==2
str_alg_1 ='purelin';
else
str_alg_1 ='tansig';
end;

% Chon thuat toan cho lop ra
get_alg_2 = findobj(gcbf,'Tag','Lop_ra');
alg_2 = get(get_alg_2,'Value');
if alg_2 ==1
str_alg_2 ='logsig';
elseif alg_2 ==2
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 15
Tiểu luận môn học: MẠNG NEURON
str_alg_2 ='purelin';
else
str_alg_2 ='tansig';
end;

net.trainParam.goal = Goal_num;
% 2. Dat chi so Epochs
get_Epochs = findobj(gcbf,'Tag','Epochs_Slider');
Epochs_num = get(get_Epochs,'Value');
net.trainParam.epochs = Epochs_num;
[net,tr] = train(net,x,t);
% Qua trinh hoc
axes(handles.Trainning1_axes)
len = length(tr.perf);
x1 = 1:1:len;
y1 =tr.perf;
scalex = round(len/8); % (8 la so khoang chia tren truc x)
j = 1;
y1(:,1);
scaley_set(:,1) = Goal_num/10;
while scaley_set(:,j)< y1(:,1)
scaley_set(:,j+1) = scaley_set(:,j)*10;
j=j+1;
end
y1 = log10(y1);
y1_Lim = scaley_set(:,j);

set(gca,'xtick',0:scalex:scalex*8);
set(gca,'xticklabel',0:scalex:scalex*8);
plot(x1,y1,'-k','LineWidth',1.0);
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 16
Tiểu luận môn học: MẠNG NEURON
%hold on
%plot(x1,log10(Goal_num),'-b','LineWidth',1.0);
%hold on

else
set(handles.alert,'String','Chu y: Phai chon mang !');
end

% ====================================================

% Executes on key press with focus on Nhan_dang and no controls
selected.
function Nhan_dang_KeyPressFcn(hObject, eventdata, handles)

% Executes when figure1 is resized.
function figure1_ResizeFcn(hObject, eventdata, handles)

% Executes
% function mutual_exclude(off)
% set(off,'Value',0);

% Executes on button press in FF_net.
function FF_net_Callback(hObject, eventdata, handles)
% hObject handle to FF_net (see GCBO)
t1 = get(handles.FF_net,'Value');
if t1==1
set(handles.Lop_an,'Value',1);
set(handles.RC_net,'Value',0); % Thay cho function mutual_exclude(off)
else
set(handles.RC_net,'Value',1); % Thay cho function mutual_exclude(off)
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 17
Tiểu luận môn học: MẠNG NEURON
set(handles.Lop_an,'Value',3); % Thay cho function mutual_exclude(off)
end

Ng_tren_set = (round(get(handles.Ng_tren_Slider,'Value')/0.05))*0.05;
% 0.05 la step cua bien !!!
set(handles.Ng_tren_Slider,'Value',Ng_tren_set);
set(handles.Ng_tren_Edit,'String',
num2str(get(handles.Ng_tren_Slider,'Value')));
alert1 = get(handles.Ng_tren_Slider,'Value');
alert2 = get(handles.Ng_duoi_Slider,'Value');
if alert1 <= alert2
set(handles.alert,'String','Chu y: Phai > nguong duoi !');
else
set(handles.alert,'String',' ');
end
% Executes during object creation, after setting all properties.
function Ng_tren_Slider_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end

% Executes
function Ng_tren_Edit_Callback(hObject, eventdata, handles)
val1 = str2double(get(handles.Ng_tren_Edit,'String'));
if isnumeric(val1) && length(val1)==1 &&
val1 >= get(handles.Ng_tren_Slider,'Min') &&
val1 <= get(handles.Ng_tren_Slider,'Max')
if val1 <= get(handles.Ng_duoi_Slider,'Value')
set(handles.alert,'String','Chu y: Phai > nguong duoi !');
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 18
Tiểu luận môn học: MẠNG NEURON
else

alert2 = get(handles.Ng_duoi_Slider,'Value');
if alert2 >= alert1
set(handles.alert,'String','Chu y: Phai < nguong tren !');
else
set(handles.alert,'String',' ');
end

% Executes during object creation, after setting all properties.
function Ng_duoi_Slider_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end

% Executes
function Ng_duoi_Edit_Callback(hObject, eventdata, handles)
val2 = str2double(get(handles.Ng_duoi_Edit,'String'));
% Determine whether val is a number between 0 and 1
if isnumeric(val2) & length(val2)==1 &
val2 >= get(handles.Ng_duoi_Slider,'Min') &
val2 <= get(handles.Ng_duoi_Slider,'Max')
if val2 >= get(handles.Ng_tren_Slider,'Value')
set(handles.alert,'String','Chu y: Phai < nguong tren !');
else
set(handles.alert,'String',' ');
end
set_val2 = (round(val2*100))/100;
else
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 19
Tiểu luận môn học: MẠNG NEURON


% Executes during object creation, after setting all properties.
function Lop_ra_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% Executes during object creation, after setting all properties.
function Ham_so_Callback(hObject, eventdata, handles)

% Executes during object creation, after setting all properties.
function Ham_so_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% Executes during object creation, after setting all properties.
function Neuron_num_Edit_Callback(hObject, eventdata, handles)
val3 = str2double(get(handles.Neuron_num_Edit,'String'));
if isnumeric(val3) & length(val3)<=2 &
val3 >= (get(handles.Neuron_num_Slider,'Min')+1) &
val3 <= get(handles.Neuron_num_Slider,'Max')
set_val3 = round(val3);
else
set(handles.alert,'String','!!!: Vuot nguong (1-20): fixed');
pause(2);
set(handles.alert,'String',' ');
Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 20

set(hObject,'BackgroundColor',[.9 .9 .9]);
end

% Executes during object creation, af
function Goal_Edit_Callback(hObject, eventdata, handles)
val4 = str2double(get(handles.Goal_Edit,'String'));
if isnumeric(val4) & length(val4)<=2 &
val4 >= get(handles.Goal_Slider,'Min') &
val4 <= get(handles.Goal_Slider,'Max')
set_val4 = round(val4);
else
set(handles.alert,'String','!!!: Vuot nguong (1-10): fixed');
pause(2);
set(handles.alert,'String',' ');
set_val4 = get(handles.Goal_Slider,'Value');
end
set(handles.Goal_Slider,'Value',set_val4);
set(handles.Goal_Edit,'String',' ');
set(handles.Goal_Edit,'String',
num2str(get(handles.Goal_Slider,'Value')));

% Executes during object creation, after setting all properties.
function Goal_Edit_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% Executes on slider movement.
function Goal_Slider_Callback(hObject, eventdata, handles)

pause(2);
set(handles.alert,'String',' ');
set_val5 = get(handles.Epochs_Slider,'Value');
end
set(handles.Epochs_Slider,'Value',set_val5);
set(handles.Epochs_Edit,'String',' ');
set(handles.Epochs_Edit,'String',
num2str(get(handles.Epochs_Slider,'Value')));

% Executes during object creation, after setting all properties.
function Epochs_Edit_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end

% Executes on slider movement.
function Epochs_Slider_Callback(hObject, eventdata, handles)
Epochs_set = (round(get(handles.Epochs_Slider,'Value')/50))*50;
set(handles.Epochs_Slider,'Value',Epochs_set);
set(handles.Epochs_Edit,'String',
num2str(get(handles.Epochs_Slider,'Value')));

% Executes during object creation, after setting all properties.
function Epochs_Slider_CreateFcn(hObject, eventdata, handles)
if isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor',[.9 .9 .9]);
end


% handles structure with handles and user data (see GUIDATA)Học viên: Phan Việt Hùng – Lớp Cao học Tự động hóa K24 23


Nhờ tải bản gốc

Tài liệu, ebook tham khảo khác

Music ♫

Copyright: Tài liệu đại học © DMCA.com Protection Status