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 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:
Trang 1TIỂ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
Trang 21 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:
b 1 Inputs General neuron
Mạng neuron một đầu vào
Trang 3- Đầu vào vô hướng p được nhân trị số với đại lượng vô hướng w (trọng số)
để tạo ra tích wp là một đại lượng vô hướng Lượng wp được chuyển cho bộ tổng Đầu vào khác là 1 được nhân với độ dốc b rồi chuyển cho bộ tổng Đầu ra của bộ tổng là n được gọi là đầu vào của mạng và là đối số của hàm truyền f Đầu ra vô hướng của neuron là: a = f(wp + b)
- Mô hình neuron có vectơ đầu vào: Một neuron có thể có nhiều đầu vào và tạo nên một vector đầu vào Một neuron với R đầu vào và chỉ có một đầu ra được mô tả như sau:
- Quan hệ giữa đầu ra và các đầu vào của neuron: a = f(Wp+b)
- Trong đó: p: vectơ biến đầu vào
f: hàm chuyển đổi
a: biến đầu ra của neuron
- Hàm tổng hợp: Một số dạng hàm tổng hợp f(p) được dùng phổ biến:
- Hàm tổng hợp tuyến tính (purelin):
a f(n)n
a 1
n -1
0
p1 w
b 1
Inputs General Neuron
Trang 4)lim(
n neu
n neu n
hard
a
- Hàm truyền dạng log-sigmoid:
ne1
1
1.2 Mô hình mạng neuron nhân tạo
- Mô hình mạng nơ ron được hình thành từ việc liên kết các neuron với nhau theo một nguyên tắc nào đó Có rất nhiều loại mạng và việc phân loại mạng cũng có nhiều cách:
- Theo số lớp: mạng neuron 1 lớp, mạng nơ ron nhiều lớp.
- Theo cấu trúc liên kết giữa các đầu vào và đầu ra: mạng neuron truyền thẳng, mạng neuron hồi qui.
- Theo tính chất làm việc: mạng tĩnh và mạng động.
- Phần tử gây trễ: Là phần tử có tín hiệu ra của nó bị trễ một khoảng thời gian so với tín hiệu vào, có hai tham số trễ là thời gian trễ và bậc trễ Phần tử
0
1 a
n -1
Hàm truyền log-sigmoid
n
1
-1 0
Hàm truyền ngưỡng
Trang 5nà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: q(t)w.p(t i)
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ể.
Có hai kiểu học là học cấu trúc và học thông số:
Trang 6- Học cấu trúc: xác định cấu trúc của mạng bao gồm số lượng nút (neuron) trong mỗi lớp và giá trị của các ma trận trọng số W của mạng.
- Học thông số: tìm được được chính xác các giá trị của ma trận trọng số W ứng với cấu trúc (cố định) của mạng neuron đã cho.
ma trận trọng số W mong muốn.
Mạng noron W
Khối phát tín hiệu nhận xét
d e
x
Mạng nơron W
Khối phát tín hiệu nhận xét
d e
Trang 7- Dạng chung của luật học thông số là xác định giá trị cần điều chỉnh ΔWiWi cho vector trọng số Wi.
- Với mạng rời rạc: Wi( t ) r x ( t )
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 ( t W t f W x t d x t
Hàm chi phí chuẩn sử dụng trong mạng nơ ron, sai lệch trung bình bình phương, của thuật toán này là định nghĩa một hàm đạt cực tiểu E như sau:
1 N
n
L n
Trang 8Ngoài ra còn sử dụng một số thuật toán như thuật toán Marquardt: là một biến đổi của phương pháp Newton được thiết kế để cực tiểu hoá các hàm là tổng bình phương của hàm phi tuyến khác nhau.
Levenberg-2 Nhận dạng hàm phi tuyến bằng mạng neuron:
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à: f x x23x35cos 2x
p
n1 1
1
b1 1
a1 1
n1 2
Log-Sigmoid Layer Linear Layer
w1 1,1
w1 2,1
Một ví dụ về mạng 2 lớp
Trang 9Chọ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
Trang 11Hàm chuyển đổi cho các lớp có thể giống nhau hoặc khác nhau, tuy nhiên nếu hai lớp liền kề nhau có hàm chuyển đổi tuyến tính thì không cần thiết do có thể thay bằng một lớp tuyến tính để giảm bớt độ phức tạp của mạng khi thiết kế
Tương tự ta cũng dùng mạng neuron có hai lớp, hàm truyền lớp 1 là tansig, hàm truyền lớp 2 là tuyến tính purelin để nhận dạng hàm phi tuyến:
f 2 3 35cos2 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
Trang 12Nhậ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.
Trang 13Chươ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
% End initialization code
% - Executes just before hung is made visible
function hung_OpeningFcn(hObject, eventdata, handles, varargin)
% 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 hung (see VARARGIN)
% Choose default command line output for hung
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% - Outputs from this function are returned to the command line
function varargout = hung_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;
% - 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';
Trang 14str_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');
% Chon so neuron trong lop an
get_nnum1 = findobj(gcbf,'Tag','Neuron_num_Slider');
nnum1 = get(get_nnum1,'Value');
% Chon nguong duoi cua bien
get_varLim1 = findobj(gcbf,'Tag','Ng_duoi_Slider');
varLim1 = get(get_varLim1,'Value');
% Chon nguong tren cua bien
get_varLim2 = findobj(gcbf,'Tag','Ng_tren_Slider');
varLim2 = get(get_varLim2,'Value');
% Dai cua bien
x = varLim1:0.05:varLim2;
% Lay Ham so tu GUI
get_ham = findobj(gcbf,'Tag','Ham_so');
ham = get(get_ham,'String');
t = eval(ham);
% 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
% 2 Dat chi so Epochs
get_Epochs = findobj(gcbf,'Tag','Epochs_Slider');
Epochs_num = get(get_Epochs,'Value');
Trang 15set(gca,'xtick',0:scalex:scalex*8);
set(gca,'xticklabel',0:scalex:scalex*8);
% Tao cua so nen de ve do thi
% Ve cac do thi toa do ra theo dau vao
axes(handles.Result_axes) % Select the proper axes
plot(x,t,x,y,'*r','LineWidth',1)
set(handles.Result_axes,'XMinorTick','on')
grid on
xlabel('\bf{Truc x}','FontSize',12);
ylabel('\bf{Truc y}','FontSize',12);
ham = ['Nhan dang ham so: ' ham];
% Chon thuat toan cho lop an
get_alg_1 = findobj(gcbf,'Tag','Lop_an');
alg_1 = get(get_alg_1,'Value');
% 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
Trang 16str_alg_2 ='purelin';
else
str_alg_2 ='tansig';
end;
% Chon so neuron trong lop an
get_nnum1 = findobj(gcbf,'Tag','Neuron_num_Slider');
nnum1 = get(get_nnum1,'Value');
% Chon nguong duoi cua bien
get_varLim1 = findobj(gcbf,'Tag','Ng_duoi_Slider');
varLim1 = get(get_varLim1,'Value');
% Chon nguong tren cua bien
get_varLim2 = findobj(gcbf,'Tag','Ng_tren_Slider');
varLim2 = get(get_varLim2,'Value');
% Dai cua bien
x = varLim1:0.05:varLim2;
% Lay Ham so tu GUI
get_ham = findobj(gcbf,'Tag','Ham_so');
ham = get(get_ham,'String');
t = eval(ham);
% Xay dung mang
net = newlrn([varLim1 varLim2],[nnum1,1],{str_alg_1,str_alg_2}, 'trainlm');
% Cac thong so huan luyen mang net
% 1 Dat chi so Goal
% 2 Dat chi so Epochs
get_Epochs = findobj(gcbf,'Tag','Epochs_Slider');
Epochs_num = get(get_Epochs,'Value');
set(gca,'xtick',0:scalex:scalex*8);
set(gca,'xticklabel',0:scalex:scalex*8);
plot(x1,y1,'-k','LineWidth',1.0);
Trang 17% Tao cua so nen de ve do thi
% Ve cac do thi toa do ra theo dau vao
axes(handles.Result_axes) % Select the proper axes
plot(x,t,x,y,'*r','LineWidth',1)
set(handles.Result_axes,'XMinorTick','on')
grid on
xlabel('\bf{Truc x}','FontSize',12);
ylabel('\bf{Truc y}','FontSize',12);
ham = ['Nhan dang ham so: ' ham];
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)
Trang 18set(handles.Lop_an,'Value',3); % Thay cho function mutual_exclude(off)
end
%off = [handles.RC_net];
%mutual_exclude(off);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% - Executes on button press in RC_net
function RC_net_Callback(hObject, eventdata, handles)
% hObject handle to RC_net (see GCBO)
set(handles.FF_net,'Value',1); % Thay cho function mutual_exclude(off)
set(handles.Lop_an,'Value',1); % Thay cho function mutual_exclude(off)
end
%off = [handles.FF_net];
%mutual_exclude(off);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
function alert_Callback(hObject, eventdata, handles)
% - Executes during object creation, after setting all properties
function alert_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% - Executes on slider movement
function Ng_tren_Slider_Callback(hObject, eventdata, handles)
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');
% - Executes during object creation, after setting all properties
function Ng_tren_Slider_CreateFcn(hObject, eventdata, handles)
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 !');
Trang 19% - Executes during object creation, after setting all properties.
function Ng_tren_Edit_CreateFcn(hObject, eventdata, handles)
if ispc && isequal(get(hObject,'BackgroundColor'),
get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% - Executes on slider movement
function Ng_duoi_Slider_Callback(hObject, eventdata, handles)
Ng_duoi_set = (round(get(handles.Ng_duoi_Slider,'Value')/0.05))*0.05; % 0.05 la step cua bien !!!
set(handles.Ng_duoi_Slider,'Value',Ng_duoi_set);
set(handles.Ng_duoi_Edit,'String',
num2str(get(handles.Ng_duoi_Slider,'Value')));
alert1 = get(handles.Ng_tren_Slider,'Value');
alert2 = get(handles.Ng_duoi_Slider,'Value');
% - Executes during object creation, after setting all properties
function Ng_duoi_Slider_CreateFcn(hObject, eventdata, handles)
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 !');