Автор: Пользователь скрыл имя, 29 Мая 2013 в 07:55, реферат
Под нейронными сетями подразумеваются вычислительные структуры, которые моделируют простые биологические процессы, обычно ассоциируемые с процессами человеческого мозга. Они представляют собой распределенные и параллельные системы, способные к адаптивному обучению путем анализа положительных и отрицательных воздействий.
1. Нейнонная сеть 3
1.1 Понятие нейронной сети 3
1.2 Структура и свойства искусственного нейрона 3
1.3 Нейронные сети обратного распространения 4
1.4 Алгоритм обучения НС обратного распространения 5
2. Нейронная сеть прогнозирования курса рубля (примеры работы программы) 7
2.1 Примеры работы программы 7
2.2 Код программы 8
Министерство образования и науки Российской федерации
Федеральное агентство по образованию
Государственное образовательное учреждение
ОРЕНБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ
Факультет гуманитарных и социальных наук
Кафедра политологии и права
РЕФЕРАТ
по дисциплине «Правоведение»
Руководитель работы:
Доцент кафедры
политологии и права
____________Максименко Е.И.
«_____» ____________ 2013 г.
Исполнитель:
Студент группы З-09ААХ
_____________Степанов Е.Ю.
«_____» ____________ 2013 г.
Оренбург 2013
Содержание
1. Нейнонная сеть
1.1 Понятие нейронной сети
Под нейронными сетями подразумеваются вычислительные структуры, которые моделируют простые биологические процессы, обычно ассоциируемые с процессами человеческого мозга. Они представляют собой распределенные и параллельные системы, способные к адаптивному обучению путем анализа положительных и отрицательных воздействий. Элементарным преобразователем в данных сетях является искусственный нейрон или просто нейрон, названный так по аналогии с биологическим прототипом.
К настоящему времени предложено и изучено большое количество моделей нейронодобных элементов и нейронных сетей.
1.2 Структура и свойства
Нейрон является составной частью нейронной сети. На рис 1. показана его структура. Он состоит из элементов трех типов: умножителей (синапсов), сумматора и нелинейного преобразователя. Синапсы осуществляют связь между нейронами, умножают входной сигнал на число, характеризующее силу связи (вес синапса). Сумматор выполняет сложение сигналов, поступающих по синаптическим связям от других нейронов, и внешних входных сигналов. Нелинейный преобразователь реализует нелинейную функцию одного аргумента - выхода сумматора. Эта функция называется функцией активации или передаточной функцией нейрона. Нейрон в целом реализует скалярную функцию векторного аргумента. Математическая модель нейрона:
где - вес синапса, ; , s - результат суммирования; - компонент входного вектора (входной сигнал). ; у- выходной сигнал нейрона; п - число входов нейрона; f - нелинейное преобразование (функция активации).
Рис 1. Структура искусственного нейрона
В общем случае входной сигнал, весовые коэффициенты могут принимать действительные значения, а во многих практических задачах - лишь некоторые фиксированные значения. Выход у определяется видом функции активации и может быть как действительным, так и целым.
Синоптические связи с положительными весами называют возбуждающими, с отрицательными весами – тормозящими.
Описанный вычислительный элемент можно считать упрощенной математической моделью биологических нейронов
На входной сигнал s нелинейный преобразователь отвечает выходным сигналом f(s). который представляет собой выход у нейрона.
Примеры активационной логистическая (сигмоидальная)функции:
|
|
1.3 Нейронные сети обратного распространения
Нейронная сеть обратного распространения состоит из нескольких слоев нейронов, причем каждый нейрон предыдущего слоя связан с каждым слоем последующего слоя. В большинстве практических приложений оказывается достаточно рассмотрения двухслойной нейронной сети, входной(скрытый) и выходной слой нейронов.
Матрица весовых коэффициентов от входов к скрытому слою обозначим W, а матрицу весов, соединяющий скрытый и выходной слой – V. Число входов сети Равно n, число нейронов в скрытом слое - m, число нейронов в выходном слое – p. Пусть сеть обучается на выборке .
Согласно методу наименьших квадратов, минимизируемой целевой функцией ошибки НС является величина:
, (1)
где – реальное выходное состояние нейрона k выходного слоя нейронной сети при подаче на ее входы одного из обучающих образов; – идеальное (желаемое) выходное состояние этого нейрона.
Суммирование ведется по всем нейронам выходного слоя и по всем обрабатываемым сетью образам. Минимизация ведется методом градиентного спуска, что означает подстройку весовых коэффициентов следующим образом:
Здесь h – коэффициент скорости обучения, 0<h<1.
Для придания процессу коррекции весов некоторой инерционности, сглаживающей резкие скачки при перемещении по поверхности целевой функции, формулы коррекции весовых коэффициентов дополняется значением изменения веса на предыдущей итерации:
(4)
где m – коэффициент инерционности, t – номер текущей итерации.
1.4 Алгоритм обучения НС обратного распространения
Полный алгоритм обучения НС с помощью процедуры обратного распространения строится так:
1. Инициализация сети. Весовым коэффициентам присваиваются малые случайные значения (-0,3;0,3);задается e -параметр точности обучения, m – коэффициент инерционности; h – коэффициент скорости обучения; - максимальное число итераций.
2. Подать на входы сети один из возможных образов и в режиме обычного функционирования НС, когда сигналы распространяются от входов к выходам, рассчитать значения последних.
3. Рассчитать , по формулам (3), (4). Пересчитать синаптические веса.
4. Шаги 2-3 повторяются пока значение функции ошибки (1) не будет меньше e или после максимального допустимого числа итераций, что возможно означает недостаточное количество нейронов скрытого слоя.
5 Шаги 2-4 повторяются для всех обучающих векторов пока сеть не будет ошибаться на всех них в пределах e, чтобы сеть, образно говоря, не забывала одни по мере запоминания других.
Замечание 1. Векторы из обучающей выборки лучше подавать на вход в случайном порядке.
Замечание 2. Количество входов и выходов обычно диктуются условиями задачи, а количество нейронов скрытого слоя экспериментально. Обычно число нейронов в нем составляет 30-50% от числа входов. Слишком большое число нейронов скрытого слоя приведет к тому, что сеть теряет способность к обобщению (она просто досконально запоминает элементы обучающей выборки и не реагирует на схожие образы). Если же число нейронов скрытом слое слишком мало, сеть оказывается не в состоянии обучаться.
Замечание 3. Необходимо чтобы значения входов и выходов находились в приделах области значений функции активации. Для этого применяется нормировка и предобработка данных.
1.5 Нормировка и предобработка данных
Как входами, так и выходами нейросети могут быть совершенно разнородные величины. Очевидно, что результаты нейросетевого моделирования не должны зависеть от единиц измерения этих величин. А именно, чтобы сеть трактовала их значения единообразно, все входные и выходные величины должны быть приведены к единому - единичному - масштабу. Кроме того, для повышения скорости и качества обучения полезно провести дополнительную предобработку данных, выравнивающую распределение (если значение переменной равномерно распределены в пределах конечного интервала, то информация передаваемой такой переменной максимальна) значений еще до этапа обучения.
Приведение данных к единичному масштабу обеспечивается нормировкой каждой переменной на диапазон разброса ее значений. В простейшем варианте это - линейное преобразование:
в единичный отрезок: .
2. Нейронная сеть
прогнозирования курса рубля (примеры
работы программы)
2.1 Примеры работы программы
Прежде чем нейронная сеть обратного распространения могла выдавать правильные результаты, ее необходимо обучить. Чем на большем числе выборок будет обучена нейронная сеть, тем точнее будет результат ее прогнозирования.
Рисунок 1. Загрузка выборки и обучение
После обучения нейронной сети можно на вход подать любую выборку и получить спрогнозированный ею результат.
Рисунок 2. Прогнозирование. (Результат, который должен получиться в идеале равен 29,931 руб.)
2.2 Код программы
void __fastcall TMainForm::LearnClick(TObject *Sender)
{
double s, y;
pair< vector<double>, double > p;
vector<double> dw_1, dw_2, dv_1, dv_2;
dw_1.resize(n); dv_1.resize(m);
dw_2.resize(n); dv_2.resize(m);
vector<double> y_s; // на скрытом слое
y_s.resize(m);
// шаг 1
for(int i = 0; i < (int)W.size(); i++)
{
double t = rand()%2;
if(t == 1)
t -= 0.8;
else
t -= 0.15;
W[i] = t;
V[i] = t;
}
eps = StrToFloat(eps_->Text);
mu = StrToFloat(mu_->Text);
etta = StrToFloat(etta_->Text);
N_max = N_max_->Value;
for(int i = 0; i < (int)X.size(); i++)
{
X[i] =
in[i+1];//StrToFloat(Euro_->
}
//------------------ нормировка данных ------------------------------
for(int i = 0; i < (int)X.size(); i++)
{
X[i] = norm(X[i]);
}
//----------------------------
p.first = X;
p.second = norm(in[(int)in.size()-1]);//
VX.push_back(p);
int j = 0; // номер выборки
int count_error = 0;
double d = p.second; // идеальное выходное значение
int iter = 0;
while(1)
{
if(j == (int)VX.size() )
{
if(count_error == 0)
break;
else
j = 0;
count_error = 0;
iter = 0;
}
count_error = 0;
while(1)
{
// шаг 2
iter++;
s = 0;
X = VX[j].first;
d = VX[j].second;
for(int i = 0; i < (int)X.size(); i++) // на скрытом слое
{
y_s[i] = X[i]*W[i]; // ????
}
for(int i = 0; i < (int)y_s.size(); i++)
{
s += y_s[i]*V[i];
}
y = f(s);
// шаг 3 поправка весов
for(int i = 0; i < (int)dv_2.size(); i++)
{
dv_2[i] = mu*dv_1[i] - etta*y*(y * (1 - y));
}
for(int i = 0; i < (int)dw_2.size(); i++)
{
dw_2[i] = mu*dw_1[i] - dv_2[i];
}
for(int i = 0; i < (int)W.size(); i++)
{
W[i] += dw_2[i];
}
dw_1 = dw_2; dv_1 = dv_2;
// шаг 4 проверка ошибки
if( E(y,d) <= eps || iter > N_max)
{
j++;
break;
}
else
count_error++;
}
}
}
//----------------------------
void __fastcall TMainForm::PrognozClick(
{
vector<double> y_s; y_s.resize(m);
double s = 0;
for(int i = 0; i < (int)W.size(); i++)
{
double t = rand()%2;
if(t == 1)
t -= 0.8;
else
t -= 0.15;
W[i] = t;
V[i] = t;
}
eps = StrToFloat(eps_->Text);
mu = StrToFloat(mu_->Text);
etta = StrToFloat(etta_->Text);
N_max = N_max_->Value;
for(int i = 0; i < (int)X.size(); i++)
{
X[i] = norm(in[i+1]);
}
for(int j = 0; j < (int)VX.size(); j++)
{
for(int i = 0; i < (int)VX[j].first.size(); i++)
{
y_s[i] = VX[j].first[i]*W[i];
}
for(int i = 0; i < (int)y_s.size(); i++)
{
s += y_s[i]*V[i];
}
double y = f(s);
if(E(y,VX[j].second) < eps)
{
y = unnorm(y); // операция обратная нормировки данных
float tmp = in[0];
for(int i = 1; i < (int)in.size()-1; i++)
{
tmp += in[i];
}
Result->Text = tmp + y;