<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Margarita</id>
	<title>Алговики - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Margarita"/>
	<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Margarita"/>
	<updated>2026-10-22T16:05:08Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.43.5</generator>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24619</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24619"/>
		<updated>2017-11-30T10:11:17Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путём минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного дифференцирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм представляет собой итерационный процесс, на каждом шаге которого происходит вычисление последующей точки  &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;. Для этого необходимо знать начальное приближение &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;, значение градиента в предыдущей точке &amp;lt;math&amp;gt;\nabla f(x_{k})&amp;lt;/math&amp;gt; и правило определения параметра  &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;, определяемое условием задачи. Кроме того, задачей определён и критерий останова, который проверяется на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшую вычислительную сложность из арифметических операций представляют деление и умножение чисел с плавающей точкой.&lt;br /&gt;
На каждом шаге необходимо численно вычислять производную по формуле: &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
 f&#039;(x_0) ≈ \frac{f(x_0 + \delta) - f(x_0))}{\delta},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
для этого потребуется &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; делений, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — размерность пространства. &lt;br /&gt;
Пусть сложность вычисления коэффициента &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;p_{\alpha}&amp;lt;/math&amp;gt;, а сложность вычисления функции &amp;lt;math&amp;gt;p_{f}&amp;lt;/math&amp;gt;. Умножение &amp;lt;math&amp;gt;\alpha_{k} \nabla f(x_0)&amp;lt;/math&amp;gt; даёт ещё &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений. В итоге получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
P(n, p_{\alpha},  p_{f}) = 2n + p_{\alpha} +2p_{f},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = f(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
[[file: InfoGr.png|thumb|center|700px|Информационный граф.]]&lt;br /&gt;
&lt;br /&gt;
Синие вершины графа — итерационное вычисление последовательности &amp;lt;math&amp;gt;x_{k-1}, x_k, x_{k+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Зелёные вершины графа — численное вычисление частных производных.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма необходимо численно пересчитывать градиент функции. В случае пространства большой размерности, основная часть времени выполнения приходится на вычисление частных производных в точке, которые вычисляются независимо друг от друга.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
* функция &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;, которая может быть задана неявно;&lt;br /&gt;
* начальная точка &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* правило вычисления &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* критерий останова;&lt;br /&gt;
* точность &amp;lt;math&amp;gt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
* минимальное значение функции.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим функцию &amp;lt;math&amp;gt;f(x) = \langle x,x \rangle&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;x = (x_1, \ldots, x_n)&amp;lt;/math&amp;gt;. Коэффициент &amp;lt;math&amp;gt;\alpha_k&amp;lt;/math&amp;gt; будем вычислять по следующему правилу: &amp;lt;math&amp;gt;\alpha_k = \frac{1}{2}\alpha_{k-1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Будем изменять размерность пространства от &amp;lt;math&amp;gt;2^{14}&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;2^{18}&amp;lt;/math&amp;gt;, а число процессоров от &amp;lt;math&amp;gt;2&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;128&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[file:Gradscale.png|thumb|center|700px|Масштабируемость алгоритма]]&lt;br /&gt;
&lt;br /&gt;
Из графика видно, что время работы программы обратно пропорционально числу процессоров, что согласуется с теоретическими результатами.&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/dmitrime/gradient-descent/ GitHub] — реализация градиентного спуска на языке С++.&lt;br /&gt;
&lt;br /&gt;
[https://gist.github.com/RichardWarburton/7390520/ GitHub] — реализация градиентного спуска на языке Java.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/schneems/Octave/blob/master/mlclass-ex1/gradientDescent.m/ GitHub] — реализация градиентного спуска на языке Octave.&lt;br /&gt;
&lt;br /&gt;
[https://www.mathworks.com/matlabcentral/fileexchange/35535-simplified-gradient-descent-optimization/ MathWorks] — реализация градиентного спуска на языке MATLAB.&lt;br /&gt;
&lt;br /&gt;
[https://www.pyimagesearch.com/2016/10/10/gradient-descent-with-python/ Gradient descent with Python] — реализация градиентного спуска на языке Python.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24617</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24617"/>
		<updated>2017-11-30T09:27:25Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путём минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного дифференцирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм представляет собой итерационный процесс, на каждом шаге которого происходит вычисление последующей точки  &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;. Для этого необходимо знать начальное приближение &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;, значение градиента в предыдущей точке &amp;lt;math&amp;gt;\nabla f(x_{k})&amp;lt;/math&amp;gt; и правило определения параметра  &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;, определяемое условием задачи. Кроме того, задачей определён и критерий останова, который проверяется на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшую вычислительную сложность из арифметических операций представляют деление и умножение чисел с плавающей точкой.&lt;br /&gt;
На каждом шаге необходимо численно вычислять производную по формуле: &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
 f&#039;(x_0) ≈ \frac{f(x_0 + \delta) - f(x_0))}{\delta},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
для этого потребуется &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; делений, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — размерность пространства. &lt;br /&gt;
Пусть сложность вычисления коэффициента &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;p_{\alpha}&amp;lt;/math&amp;gt;, а сложность вычисления функции &amp;lt;math&amp;gt;p_{f}&amp;lt;/math&amp;gt;. Умножение &amp;lt;math&amp;gt;\alpha_{k} \nabla f(x_0)&amp;lt;/math&amp;gt; даёт ещё &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений. В итоге получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
P(n, p_{\alpha},  p_{f}) = 2n + p_{\alpha} +2p_{f},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = f(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
[[file: InfoGr.png|thumb|center|700px|Информационный граф.]]&lt;br /&gt;
&lt;br /&gt;
Синие вершины графа — итерационное вычисление последовательности &amp;lt;math&amp;gt;x_{k-1}, x_k, x_{k+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Зелёные вершины графа — численное вычисление частных производных.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма необходимо численно пересчитывать градиент функции. В случае пространства большой размерности, основная часть времени выполнения приходится на вычисление частных производных в точке, которые вычисляются независимо друг от друга.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
* функция &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;, которая может быть задана неявно;&lt;br /&gt;
* начальная точка &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* правило вычисления &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* критерий останова;&lt;br /&gt;
* точность &amp;lt;math&amp;gt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
* минимальное значение функции.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
В качестве примера рассмотрим функцию &amp;lt;math&amp;gt;f(x) = \langle x,x \rangle&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;x = (x_1, \ldots, x_n)&amp;lt;/math&amp;gt;. Будем изменять размерность пространства от &amp;lt;math&amp;gt;2^{14}&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;2^{18}&amp;lt;/math&amp;gt;, а число процессоров от &amp;lt;math&amp;gt;2&amp;lt;/math&amp;gt; до &amp;lt;math&amp;gt;128&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
[[file:Gradscale.png|thumb|center|700px|Масштабируемость алгоритма]]&lt;br /&gt;
&lt;br /&gt;
Из графика видно, что время работы программы обратно пропорционально числу процессоров, что согласуется с теоретическими результатами.&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/dmitrime/gradient-descent/ GitHub] — реализация градиентного спуска на языке С++.&lt;br /&gt;
&lt;br /&gt;
[https://gist.github.com/RichardWarburton/7390520/ GitHub] — реализация градиентного спуска на языке Java.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/schneems/Octave/blob/master/mlclass-ex1/gradientDescent.m/ GitHub] — реализация градиентного спуска на языке Octave.&lt;br /&gt;
&lt;br /&gt;
[https://www.mathworks.com/matlabcentral/fileexchange/35535-simplified-gradient-descent-optimization/ MathWorks] — реализация градиентного спуска на языке MATLAB.&lt;br /&gt;
&lt;br /&gt;
[https://www.pyimagesearch.com/2016/10/10/gradient-descent-with-python/ Gradient descent with Python] — реализация градиентного спуска на языке Python.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24611</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24611"/>
		<updated>2017-11-30T09:01:21Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путём минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного дифференцирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм представляет собой итерационный процесс, на каждом шаге которого происходит вычисление последующей точки  &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;. Для этого необходимо знать начальное приближение &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;, значение градиента в предыдущей точке &amp;lt;math&amp;gt;\nabla f(x_{k})&amp;lt;/math&amp;gt; и правило определения параметра  &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;, определяемое условием задачи. Кроме того, задачей определён и критерий останова, который проверяется на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшую вычислительную сложность из арифметических операций представляют деление и умножение чисел с плавающей точкой.&lt;br /&gt;
На каждом шаге необходимо численно вычислять производную по формуле: &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
 f&#039;(x_0) ≈ \frac{f(x_0 + \delta) - f(x_0))}{\delta},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
для этого потребуется &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; делений, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — размерность пространства. &lt;br /&gt;
Пусть сложность вычисления коэффициента &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;p_{\alpha}&amp;lt;/math&amp;gt;, а сложность вычисления функции &amp;lt;math&amp;gt;p_{f}&amp;lt;/math&amp;gt;. Умножение &amp;lt;math&amp;gt;\alpha_{k} \nabla f(x_0)&amp;lt;/math&amp;gt; даёт ещё &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений. В итоге получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
P(n, p_{\alpha},  p_{f}) = 2n + p_{\alpha} +2p_{f},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;f = f(n)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
[[file: InfoGr.png|thumb|center|700px|Информационный граф.]]&lt;br /&gt;
&lt;br /&gt;
Синие вершины графа — итерационное вычисление последовательности &amp;lt;math&amp;gt;x_{k-1}, x_k, x_{k+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Зелёные вершины графа — численное вычисление частных производных.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма необходимо численно пересчитывать градиент функции. В случае пространства большой размерности, основная часть времени выполнения приходится на вычисление частных производных в точке, которые вычисляются независимо друг от друга.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
* функция &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;, которая может быть задана неявно;&lt;br /&gt;
* начальная точка &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* правило вычисления &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* критерий останова;&lt;br /&gt;
* точность &amp;lt;math&amp;gt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
* минимальное значение функции.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
[[file:Gradscale.png|thumb|center|700px|Масштабируемость алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/dmitrime/gradient-descent/ GitHub] — реализация градиентного спуска на языке С++.&lt;br /&gt;
&lt;br /&gt;
[https://gist.github.com/RichardWarburton/7390520/ GitHub] — реализация градиентного спуска на языке Java.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/schneems/Octave/blob/master/mlclass-ex1/gradientDescent.m/ GitHub] — реализация градиентного спуска на языке Octave.&lt;br /&gt;
&lt;br /&gt;
[https://www.mathworks.com/matlabcentral/fileexchange/35535-simplified-gradient-descent-optimization/ MathWorks] — реализация градиентного спуска на языке MATLAB.&lt;br /&gt;
&lt;br /&gt;
[https://www.pyimagesearch.com/2016/10/10/gradient-descent-with-python/ Gradient descent with Python] — реализация градиентного спуска на языке Python.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24602</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24602"/>
		<updated>2017-11-30T08:45:07Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путём минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного дифференцирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм представляет собой итерационный процесс, на каждом шаге которого происходит вычисление последующей точки  &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;. Для этого необходимо знать начальное приближение &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;, значение градиента в предыдущей точке &amp;lt;math&amp;gt;\nabla f(x_{k})&amp;lt;/math&amp;gt; и правило определения параметра  &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;, определяемое условием задачи. Кроме того, задачей определён и критерий останова, который проверяется на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшую вычислительную сложность из арифметических операций представляют деление и умножение чисел с плавающей точкой.&lt;br /&gt;
На каждом шаге необходимо численно вычислять производную по формуле: &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
 f&#039;(x_0) ≈ \frac{f(x_0 + \delta) - f(x_0))}{\delta},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
для этого потребуется &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; делений, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — размерность пространства.&lt;br /&gt;
Пусть сложность вычисления коэффициента &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;p_{\alpha}&amp;lt;/math&amp;gt;. Умножение &amp;lt;math&amp;gt;\alpha_{k} \nabla f(x_0)&amp;lt;/math&amp;gt; даёт ещё &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений. В итоге получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
P(n, p_{\alpha}) = 2n + p_{\alpha}.&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
[[file: InfoGr.png|thumb|center|700px|Информационный граф.]]&lt;br /&gt;
&lt;br /&gt;
Синие вершины графа — итерационное вычисление последовательности &amp;lt;math&amp;gt;x_{k-1}, x_k, x_{k+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Зелёные вершины графа — численное вычисление частных производных.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма необходимо численно пересчитывать градиент функции. В случае пространства большой размерности, основная часть времени выполнения приходится на вычисление частных производных в точке, которые вычисляются независимо друг от друга.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
* функция &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;, которая может быть задана неявно;&lt;br /&gt;
* начальная точка &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* правило вычисления &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* критерий останова;&lt;br /&gt;
* точность &amp;lt;math&amp;gt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
* минимальное значение функции.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
[[file:Gradscale.png|thumb|center|700px|Масштабируемость алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/dmitrime/gradient-descent/ GitHub] — реализация градиентного спуска на языке С++.&lt;br /&gt;
&lt;br /&gt;
[https://gist.github.com/RichardWarburton/7390520/ GitHub] — реализация градиентного спуска на языке Java.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/schneems/Octave/blob/master/mlclass-ex1/gradientDescent.m/ GitHub] — реализация градиентного спуска на языке Octave.&lt;br /&gt;
&lt;br /&gt;
[https://www.mathworks.com/matlabcentral/fileexchange/35535-simplified-gradient-descent-optimization/ MathWorks] — реализация градиентного спуска на языке MATLAB.&lt;br /&gt;
&lt;br /&gt;
[https://www.pyimagesearch.com/2016/10/10/gradient-descent-with-python/ Gradient descent with Python] — реализация градиентного спуска на языке Python.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24601</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24601"/>
		<updated>2017-11-30T08:44:56Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путём минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного дифференцирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм представляет собой итерационный процесс, на каждом шаге которого происходит вычисление последующей точки  &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;. Для этого необходимо знать начальное приближение &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;, значение градиента в предыдущей точке &amp;lt;math&amp;gt;\nabla f(x_{k})&amp;lt;/math&amp;gt; и правило определения параметра  &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;, определяемое условием задачи. Кроме того, задачей определён и критерий останова, который проверяется на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшую вычислительную сложность из арифметических операций представляют деление и умножение чисел с плавающей точкой.&lt;br /&gt;
На каждом шаге необходимо численно вычислять производную по формуле: &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
 f&#039;(x_0) ≈ \frac{f(x_0 + \delta) - f(x_0))}{\delta},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
для этого потребуется &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; делений, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — размерность пространства.&lt;br /&gt;
Пусть сложность вычисления коэффициента &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;p_{\alpha}&amp;lt;/math&amp;gt;. Умножение &amp;lt;math&amp;gt;\alpha_{k} \nabla f(x_0)&amp;lt;/math&amp;gt; даёт ещё &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений. В итоге получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
P(n, p_{\alpha}) = 2n + p_{\alpha}.&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
[[file: InfoGr.png|thumb|center|700px|Информационный граф.]]&lt;br /&gt;
&lt;br /&gt;
Синие вершины графа — итерационное вычисление последовательности &amp;lt;math&amp;gt;x_{k-1}, x_k, x_{k+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Зелёные вершины графа — численное вычисление частных производных.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма необходимо численно пересчитывать градиент функции. В случае пространства большой размерности, основная часть времени выполнения приходится на вычисление частных производных в точке, которые вычисляются независимо друг от друга.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
* функция &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;, которая может быть задана неявно;&lt;br /&gt;
* начальная точка &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* правило вычисления &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* критерий останова;&lt;br /&gt;
* точность &amp;lt;math&amp;gt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
* минимальное значение функции.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
[[file:Gradscale.png|thumb|center|700px|Рисунок 2. Масштабируемость алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/dmitrime/gradient-descent/ GitHub] — реализация градиентного спуска на языке С++.&lt;br /&gt;
&lt;br /&gt;
[https://gist.github.com/RichardWarburton/7390520/ GitHub] — реализация градиентного спуска на языке Java.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/schneems/Octave/blob/master/mlclass-ex1/gradientDescent.m/ GitHub] — реализация градиентного спуска на языке Octave.&lt;br /&gt;
&lt;br /&gt;
[https://www.mathworks.com/matlabcentral/fileexchange/35535-simplified-gradient-descent-optimization/ MathWorks] — реализация градиентного спуска на языке MATLAB.&lt;br /&gt;
&lt;br /&gt;
[https://www.pyimagesearch.com/2016/10/10/gradient-descent-with-python/ Gradient descent with Python] — реализация градиентного спуска на языке Python.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24599</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24599"/>
		<updated>2017-11-30T08:44:37Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путём минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного дифференцирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм представляет собой итерационный процесс, на каждом шаге которого происходит вычисление последующей точки  &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;. Для этого необходимо знать начальное приближение &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;, значение градиента в предыдущей точке &amp;lt;math&amp;gt;\nabla f(x_{k})&amp;lt;/math&amp;gt; и правило определения параметра  &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;, определяемое условием задачи. Кроме того, задачей определён и критерий останова, который проверяется на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшую вычислительную сложность из арифметических операций представляют деление и умножение чисел с плавающей точкой.&lt;br /&gt;
На каждом шаге необходимо численно вычислять производную по формуле: &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
 f&#039;(x_0) ≈ \frac{f(x_0 + \delta) - f(x_0))}{\delta},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
для этого потребуется &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; делений, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — размерность пространства.&lt;br /&gt;
Пусть сложность вычисления коэффициента &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;p_{\alpha}&amp;lt;/math&amp;gt;. Умножение &amp;lt;math&amp;gt;\alpha_{k} \nabla f(x_0)&amp;lt;/math&amp;gt; даёт ещё &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений. В итоге получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
P(n, p_{\alpha}) = 2n + p_{\alpha}.&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
[[file: InfoGr.png|thumb|center|700px|Рисунок 1. Информационный граф.]]&lt;br /&gt;
&lt;br /&gt;
Синие вершины графа — итерационное вычисление последовательности &amp;lt;math&amp;gt;x_{k-1}, x_k, x_{k+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Зелёные вершины графа — численное вычисление частных производных.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма необходимо численно пересчитывать градиент функции. В случае пространства большой размерности, основная часть времени выполнения приходится на вычисление частных производных в точке, которые вычисляются независимо друг от друга.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
* функция &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;, которая может быть задана неявно;&lt;br /&gt;
* начальная точка &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* правило вычисления &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* критерий останова;&lt;br /&gt;
* точность &amp;lt;math&amp;gt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
* минимальное значение функции.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
[[file:Gradscale.png|thumb|center|700px|Рисунок 2. Масштабируемость алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/dmitrime/gradient-descent/ GitHub] — реализация градиентного спуска на языке С++.&lt;br /&gt;
&lt;br /&gt;
[https://gist.github.com/RichardWarburton/7390520/ GitHub] — реализация градиентного спуска на языке Java.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/schneems/Octave/blob/master/mlclass-ex1/gradientDescent.m/ GitHub] — реализация градиентного спуска на языке Octave.&lt;br /&gt;
&lt;br /&gt;
[https://www.mathworks.com/matlabcentral/fileexchange/35535-simplified-gradient-descent-optimization/ MathWorks] — реализация градиентного спуска на языке MATLAB.&lt;br /&gt;
&lt;br /&gt;
[https://www.pyimagesearch.com/2016/10/10/gradient-descent-with-python/ Gradient descent with Python] — реализация градиентного спуска на языке Python.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24598</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24598"/>
		<updated>2017-11-30T08:43:56Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Масштабируемость алгоритма и его реализации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путём минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного дифференцирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм представляет собой итерационный процесс, на каждом шаге которого происходит вычисление последующей точки  &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;. Для этого необходимо знать начальное приближение &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;, значение градиента в предыдущей точке &amp;lt;math&amp;gt;\nabla f(x_{k})&amp;lt;/math&amp;gt; и правило определения параметра  &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;, определяемое условием задачи. Кроме того, задачей определён и критерий останова, который проверяется на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшую вычислительную сложность из арифметических операций представляют деление и умножение чисел с плавающей точкой.&lt;br /&gt;
На каждом шаге необходимо численно вычислять производную по формуле: &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
 f&#039;(x_0) ≈ \frac{f(x_0 + \delta) - f(x_0))}{\delta},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
для этого потребуется &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; делений, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — размерность пространства.&lt;br /&gt;
Пусть сложность вычисления коэффициента &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;p_{\alpha}&amp;lt;/math&amp;gt;. Умножение &amp;lt;math&amp;gt;\alpha_{k} \nabla f(x_0)&amp;lt;/math&amp;gt; даёт ещё &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений. В итоге получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
P(n, p_{\alpha}) = 2n + p_{\alpha}.&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
[[file: InfoGr.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Синие вершины графа — итерационное вычисление последовательности &amp;lt;math&amp;gt;x_{k-1}, x_k, x_{k+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Зелёные вершины графа — численное вычисление частных производных.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма необходимо численно пересчитывать градиент функции. В случае пространства большой размерности, основная часть времени выполнения приходится на вычисление частных производных в точке, которые вычисляются независимо друг от друга.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
* функция &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;, которая может быть задана неявно;&lt;br /&gt;
* начальная точка &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* правило вычисления &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* критерий останова;&lt;br /&gt;
* точность &amp;lt;math&amp;gt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
* минимальное значение функции.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
[[file:Gradscale.png|thumb|center|700px|Рисунок 2. Масштабируемость алгоритма]]&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/dmitrime/gradient-descent/ GitHub] — реализация градиентного спуска на языке С++.&lt;br /&gt;
&lt;br /&gt;
[https://gist.github.com/RichardWarburton/7390520/ GitHub] — реализация градиентного спуска на языке Java.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/schneems/Octave/blob/master/mlclass-ex1/gradientDescent.m/ GitHub] — реализация градиентного спуска на языке Octave.&lt;br /&gt;
&lt;br /&gt;
[https://www.mathworks.com/matlabcentral/fileexchange/35535-simplified-gradient-descent-optimization/ MathWorks] — реализация градиентного спуска на языке MATLAB.&lt;br /&gt;
&lt;br /&gt;
[https://www.pyimagesearch.com/2016/10/10/gradient-descent-with-python/ Gradient descent with Python] — реализация градиентного спуска на языке Python.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24515</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24515"/>
		<updated>2017-11-29T18:55:54Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путём минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного дифференцирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм представляет собой итерационный процесс, на каждом шаге которого происходит вычисление последующей точки  &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;. Для этого необходимо знать начальное приближение &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;, значение градиента в предыдущей точке &amp;lt;math&amp;gt;\nabla f(x_{k})&amp;lt;/math&amp;gt; и правило определения параметра  &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;, определяемое условием задачи. Кроме того, задачей определён и критерий останова, который проверяется на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшую вычислительную сложность из арифметических операций представляют деление и умножение чисел с плавающей точкой.&lt;br /&gt;
На каждом шаге необходимо численно вычислять производную по формуле: &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
 f&#039;(x_0) ≈ \frac{f(x_0 + \delta) - f(x_0))}{\delta},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
для этого потребуется &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; делений, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — размерность пространства.&lt;br /&gt;
Пусть сложность вычисления коэффициента &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;p_{\alpha}&amp;lt;/math&amp;gt;. Умножение &amp;lt;math&amp;gt;\alpha_{k} \nabla f(x_0)&amp;lt;/math&amp;gt; даёт ещё &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений. В итоге получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
P(n, p_{\alpha}) = 2n + p_{\alpha}.&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
[[file: InfoGr.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Синие вершины графа — итерационное вычисление последовательности &amp;lt;math&amp;gt;x_{k-1}, x_k, x_{k+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Зелёные вершины графа — численное вычисление частных производных.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма необходимо численно пересчитывать градиент функции. В случае пространства большой размерности, основная часть времени выполнения приходится на вычисление частных производных в точке, которые вычисляются независимо друг от друга.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
* функция &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;, которая может быть задана неявно;&lt;br /&gt;
* начальная точка &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* правило вычисления &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* критерий останова;&lt;br /&gt;
* точность &amp;lt;math&amp;gt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
* минимальное значение функции.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/dmitrime/gradient-descent/ GitHub] — реализация градиентного спуска на языке С++.&lt;br /&gt;
&lt;br /&gt;
[https://gist.github.com/RichardWarburton/7390520/ GitHub] — реализация градиентного спуска на языке Java.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/schneems/Octave/blob/master/mlclass-ex1/gradientDescent.m/ GitHub] — реализация градиентного спуска на языке Octave.&lt;br /&gt;
&lt;br /&gt;
[https://www.mathworks.com/matlabcentral/fileexchange/35535-simplified-gradient-descent-optimization/ MathWorks] — реализация градиентного спуска на языке MATLAB.&lt;br /&gt;
&lt;br /&gt;
[https://www.pyimagesearch.com/2016/10/10/gradient-descent-with-python/ Gradient descent with Python] — реализация градиентного спуска на языке Python.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24509</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24509"/>
		<updated>2017-11-29T18:21:07Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Последовательная сложность алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного дифференцирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм представляет собой итерационный процесс, на каждом шаге которого происходит вычисление последующей точки  &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;. Для этого необходимо знать начальное приближение &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;, значение градиента в предыдущей точке &amp;lt;math&amp;gt;\nabla f(x_{k})&amp;lt;/math&amp;gt; и правило определения параметра  &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;, определяемое условием задачи. Кроме того, задачей определён и критерий останова, который проверяется на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшую вычислительную сложность из арифметических операций представляют деление и умножение чисел с плавающей точкой.&lt;br /&gt;
На каждом шаге необходимо численно вычислять производную по формуле: &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
 f&#039;(x_0) ≈ \frac{f(x_0 + \delta) - f(x_0))}{\delta},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
для этого потребуется &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; делений, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — размерность пространства.&lt;br /&gt;
Пусть сложность вычисления коэффициента &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;p_{\alpha}&amp;lt;/math&amp;gt;. Умножение &amp;lt;math&amp;gt;\alpha_{k} \nabla f(x_0)&amp;lt;/math&amp;gt; даёт ещё &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений. В итоге получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
P(n, p_{\alpha}) = 2n + p_{\alpha}.&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
[[file: InfoGr.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Синие вершины графа — итерационное вычисление последовательности &amp;lt;math&amp;gt;x_{k-1}, x_k, x_{k+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Зелёные вершины графа — численное вычисление частных производных.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма необходимо численно пересчитывать градиент функции. В случае пространства большой размерности, основная часть времени выполнения приходится на вычисление частных производных в точке, которые вычисляются независимо друг от друга.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
* функция &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;, которая может быть задана неявно;&lt;br /&gt;
* начальная точка &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* правило вычисления &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* критерий останова;&lt;br /&gt;
* точность &amp;lt;math&amp;gt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
* минимальное значение функции.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/dmitrime/gradient-descent/ GitHub] — реализация градиентного спуска на языке С++.&lt;br /&gt;
&lt;br /&gt;
[https://gist.github.com/RichardWarburton/7390520/ GitHub] — реализация градиентного спуска на языке Java.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/schneems/Octave/blob/master/mlclass-ex1/gradientDescent.m/ GitHub] — реализация градиентного спуска на языке Octave.&lt;br /&gt;
&lt;br /&gt;
[https://www.mathworks.com/matlabcentral/fileexchange/35535-simplified-gradient-descent-optimization/ MathWorks] — реализация градиентного спуска на языке MATLAB.&lt;br /&gt;
&lt;br /&gt;
[https://www.pyimagesearch.com/2016/10/10/gradient-descent-with-python/ Gradient descent with Python] — реализация градиентного спуска на языке Python.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24508</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24508"/>
		<updated>2017-11-29T18:20:15Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного дифференцирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм представляет собой итерационный процесс, на каждом шаге которого происходит вычисление последующей точки  &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;. Для этого необходимо знать начальное приближение &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;, значение градиента в предыдущей точке &amp;lt;math&amp;gt;\nabla f(x_{k})&amp;lt;/math&amp;gt; и правило определения параметра  &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;, определяемое условием задачи. Кроме того, задачей определён и критерий останова, который проверяется на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшую вычислительную сложность из арифметических операций представляют деление и умножение чисел с плавающей точкой.&lt;br /&gt;
На каждом шаге необходимо численно вычислять производную по формуле: &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
 f&#039;(x_0) ≈ \frac{f(x_0) - f(x_0 + \delta) )}{\delta},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
для этого потребуется &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; делений, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — размерность пространства.&lt;br /&gt;
Пусть сложность вычисления коэффициента &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;p_{\alpha}&amp;lt;/math&amp;gt;. Умножение &amp;lt;math&amp;gt;\alpha_{k} \nabla f(x_0)&amp;lt;/math&amp;gt; даёт ещё &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений. В итоге получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
P(n, p_{\alpha}) = 2n + p_{\alpha}.&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
[[file: InfoGr.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Синие вершины графа — итерационное вычисление последовательности &amp;lt;math&amp;gt;x_{k-1}, x_k, x_{k+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Зелёные вершины графа — численное вычисление частных производных.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма необходимо численно пересчитывать градиент функции. В случае пространства большой размерности, основная часть времени выполнения приходится на вычисление частных производных в точке, которые вычисляются независимо друг от друга.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
* функция &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;, которая может быть задана неявно;&lt;br /&gt;
* начальная точка &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* правило вычисления &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* критерий останова;&lt;br /&gt;
* точность &amp;lt;math&amp;gt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
* минимальное значение функции.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/dmitrime/gradient-descent/ GitHub] — реализация градиентного спуска на языке С++.&lt;br /&gt;
&lt;br /&gt;
[https://gist.github.com/RichardWarburton/7390520/ GitHub] — реализация градиентного спуска на языке Java.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/schneems/Octave/blob/master/mlclass-ex1/gradientDescent.m/ GitHub] — реализация градиентного спуска на языке Octave.&lt;br /&gt;
&lt;br /&gt;
[https://www.mathworks.com/matlabcentral/fileexchange/35535-simplified-gradient-descent-optimization/ MathWorks] — реализация градиентного спуска на языке MATLAB.&lt;br /&gt;
&lt;br /&gt;
[https://www.pyimagesearch.com/2016/10/10/gradient-descent-with-python/ Gradient descent with Python] — реализация градиентного спуска на языке Python.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:InfoGr.png&amp;diff=24443</id>
		<title>Файл:InfoGr.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:InfoGr.png&amp;diff=24443"/>
		<updated>2017-11-29T10:41:06Z</updated>

		<summary type="html">&lt;p&gt;Margarita: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24440</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24440"/>
		<updated>2017-11-29T10:40:31Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Информационный граф */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного дифференцирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм представляет собой итерационный процесс, на каждом шаге которого происходит вычисление последующей точки  &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;. Для этого необходимо знать начальное приближение &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;, значение градиента в предыдущей точке &amp;lt;math&amp;gt;\nabla f(x_{k})&amp;lt;/math&amp;gt; и правило определения параметра  &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;, определяемое условием задачи. Кроме того, задачей определён и критерий останова, который проверяется на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшую вычислительную сложность из арифметических операций представляют деление и умножение чисел с плавающей точкой.&lt;br /&gt;
На каждом шаге необходимо численно вычислять производную по формуле: &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
 f&#039;(x_0) ≈ \frac{f(x_0) - f(x_0 + \delta) )}{\delta},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
для этого потребуется &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; делений, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — размерность пространства.&lt;br /&gt;
Пусть сложность вычисления коэффициента &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;p_{\alpha}&amp;lt;/math&amp;gt;. Умножение &amp;lt;math&amp;gt;\alpha_{k} \nabla f(x_0)&amp;lt;/math&amp;gt; даёт ещё &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений. В итоге получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
P(n, p_{\alpha}) = 2n + p_{\alpha}.&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
[[file: InfoGr.png|400px]]&lt;br /&gt;
&lt;br /&gt;
Синие вершины графа — последовательные значения &amp;lt;math&amp;gt;x_{k-1}, x_k, x_{k+1}&amp;lt;/math&amp;gt;.&lt;br /&gt;
Зелёные вершины графа — численное вычисление частных производных.&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма необходимо численно пересчитывать градиент функции. В случае пространства большой размерности, основная часть времени выполнения приходится на вычисление частных производных в точке, которые вычисляются независимо друг от друга.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
* функция &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;, которая может быть задана неявно;&lt;br /&gt;
* начальная точка &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* правило вычисления &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* критерий останова;&lt;br /&gt;
* точность &amp;lt;math&amp;gt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
* минимальное значение функции.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/dmitrime/gradient-descent/ GitHub] — реализация градиентного спуска на языке С++.&lt;br /&gt;
&lt;br /&gt;
[https://gist.github.com/RichardWarburton/7390520/ GitHub] — реализация градиентного спуска на языке Java.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/schneems/Octave/blob/master/mlclass-ex1/gradientDescent.m/ GitHub] — реализация градиентного спуска на языке Octave.&lt;br /&gt;
&lt;br /&gt;
[https://www.mathworks.com/matlabcentral/fileexchange/35535-simplified-gradient-descent-optimization/ MathWorks] — реализация градиентного спуска на языке MATLAB.&lt;br /&gt;
&lt;br /&gt;
[https://www.pyimagesearch.com/2016/10/10/gradient-descent-with-python/ Gradient descent with Python] — реализация градиентного спуска на языке Python.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24390</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24390"/>
		<updated>2017-11-28T12:18:06Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Постановка задачи */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного дифференцирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм представляет собой итерационный процесс, на каждом шаге которого происходит вычисление последующей точки  &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;. Для этого необходимо знать начальное приближение &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;, значение градиента в предыдущей точке &amp;lt;math&amp;gt;\nabla f(x_{k})&amp;lt;/math&amp;gt; и правило определения параметра  &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;, определяемое условием задачи. Кроме того, задачей определён и критерий останова, который проверяется на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшую вычислительную сложность из арифметических операций представляют деление и умножение чисел с плавающей точкой.&lt;br /&gt;
На каждом шаге необходимо численно вычислять производную по формуле: &lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
 f&#039;(x_0) ≈ \frac{f(x_0) - f(x_0 + \delta) )}{\delta},&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
для этого потребуется &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; делений, где &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; — размерность пространства.&lt;br /&gt;
Пусть сложность вычисления коэффициента &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; равна &amp;lt;math&amp;gt;p_{\alpha}&amp;lt;/math&amp;gt;. Умножение &amp;lt;math&amp;gt;\alpha_{k} \nabla f(x_0)&amp;lt;/math&amp;gt; даёт ещё &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; умножений. В итоге получаем:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
P(n, p_{\alpha}) = 2n + p_{\alpha}.&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма необходимо численно пересчитывать градиент функции. В случае пространства большой размерности, основная часть времени выполнения приходится на вычисление частных производных в точке, которые вычисляются независимо друг от друга.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
* функция &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;, которая может быть задана неявно;&lt;br /&gt;
* начальная точка &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* правило вычисления &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* критерий останова;&lt;br /&gt;
* точность &amp;lt;math&amp;gt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
* минимальное значение функции.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/dmitrime/gradient-descent/ GitHub] — реализация градиентного спуска на языке С++.&lt;br /&gt;
&lt;br /&gt;
[https://gist.github.com/RichardWarburton/7390520/ GitHub] — реализация градиентного спуска на языке Java.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/schneems/Octave/blob/master/mlclass-ex1/gradientDescent.m/ GitHub] — реализация градиентного спуска на языке Octave.&lt;br /&gt;
&lt;br /&gt;
[https://www.mathworks.com/matlabcentral/fileexchange/35535-simplified-gradient-descent-optimization/ MathWorks] — реализация градиентного спуска на языке MATLAB.&lt;br /&gt;
&lt;br /&gt;
[https://www.pyimagesearch.com/2016/10/10/gradient-descent-with-python/ Gradient descent with Python] — реализация градиентного спуска на языке Python.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24378</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24378"/>
		<updated>2017-11-28T10:10:44Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Существующие реализации алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного дифференцирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм представляет собой итерационный процесс, на каждом шаге которого происходит вычисление последующей точки  &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;. Для этого необходимо знать начальное приближение &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;, значение градиента в предыдущей точке &amp;lt;math&amp;gt;\nabla f(x_{k})&amp;lt;/math&amp;gt; и правило определения параметра  &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;, определяемое условием задачи. Кроме того, задачей определён и критерий останова, который проверяется на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма необходимо численно пересчитывать градиент функции. В случае пространства большой размерности, основная часть времени выполнения приходится на вычисление частных производных в точке, которые вычисляются независимо друг от друга.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
* функция &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;, которая может быть задана неявно;&lt;br /&gt;
* начальная точка &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* правило вычисления &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* критерий останова;&lt;br /&gt;
* точность &amp;lt;math&amp;gt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
* минимальное значение функции.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[https://github.com/dmitrime/gradient-descent/ GitHub] — реализация градиентного спуска на языке С++.&lt;br /&gt;
&lt;br /&gt;
[https://gist.github.com/RichardWarburton/7390520/ GitHub] — реализация градиентного спуска на языке Java.&lt;br /&gt;
&lt;br /&gt;
[https://github.com/schneems/Octave/blob/master/mlclass-ex1/gradientDescent.m/ GitHub] — реализация градиентного спуска на языке Octave.&lt;br /&gt;
&lt;br /&gt;
[https://www.mathworks.com/matlabcentral/fileexchange/35535-simplified-gradient-descent-optimization/ MathWorks] — реализация градиентного спуска на языке MATLAB.&lt;br /&gt;
&lt;br /&gt;
[https://www.pyimagesearch.com/2016/10/10/gradient-descent-with-python/ Gradient descent with Python] — реализация градиентного спуска на языке Python.&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24377</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24377"/>
		<updated>2017-11-28T09:27:35Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Постановка задачи */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного дифференцирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм представляет собой итерационный процесс, на каждом шаге которого происходит вычисление последующей точки  &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;. Для этого необходимо знать начальное приближение &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;, значение градиента в предыдущей точке &amp;lt;math&amp;gt;\nabla f(x_{k})&amp;lt;/math&amp;gt; и правило определения параметра  &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;, определяемое условием задачи. Кроме того, задачей определён и критерий останова, который проверяется на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма необходимо численно пересчитывать градиент функции. В случае пространства большой размерности, основная часть времени выполнения приходится на вычисление частных производных в точке, которые вычисляются независимо друг от друга.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Входные данные&#039;&#039;&#039;:&lt;br /&gt;
* функция &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;, которая может быть задана неявно;&lt;br /&gt;
* начальная точка &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* правило вычисления &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;;&lt;br /&gt;
* критерий останова;&lt;br /&gt;
* точность &amp;lt;math&amp;gt; \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Выходные данные&#039;&#039;&#039;:&lt;br /&gt;
* минимальное значение функции.&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24367</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24367"/>
		<updated>2017-11-27T21:13:46Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного дифференцирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм представляет собой итерационный процесс, на каждом шаге которого происходит вычисление последующей точки  &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;. Для этого необходимо знать начальное приближение &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;, значение градиента в предыдущей точке &amp;lt;math&amp;gt;\nabla f(x_{k})&amp;lt;/math&amp;gt; и правило определения параметра  &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;, определяемое условием задачи. Кроме того, задачей определён и критерий останова, который проверяется на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма необходимо численно пересчитывать градиент функции. В случае пространства большой размерности, основная часть времени выполнения приходится на вычисление частных производных в точке, которые вычисляются независимо друг от друга.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24366</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24366"/>
		<updated>2017-11-27T21:13:18Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного дифференцирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм представляет собой итерационный процесс, на каждом шаге которого происходит вычисление последующей точки  &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;. Для этого необходимо знать начальное приближение &amp;lt;math&amp;gt;x_{0}&amp;lt;/math&amp;gt;, значение градиента в предыдущей точке &amp;lt;math&amp;gt;\nabla f(x_{k})&amp;lt;/math&amp;gt; и правило определения параметра  &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;, определяемое из условия задачи. Кроме того, задачей определён и критерий останова, который проверяется на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма необходимо численно пересчитывать градиент функции. В случае пространства большой размерности, основная часть времени выполнения приходится на вычисление частных производных в точке, которые вычисляются независимо друг от друга.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24365</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24365"/>
		<updated>2017-11-27T21:13:00Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного дифференцирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм представляет собой итерационный процесс, на каждом шаге которого происходит вычисление последующей точки  &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;. Для этого необходимо знать начальное приближение &amp;lt;math&amp;gt;x_{k}&amp;lt;/math&amp;gt;, значение градиента в предыдущей точке &amp;lt;math&amp;gt;\nabla f(x_{k})&amp;lt;/math&amp;gt; и правило определения параметра  &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;, определяемое из условия задачи. Кроме того, задачей определён и критерий останова, который проверяется на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма необходимо численно пересчитывать градиент функции. В случае пространства большой размерности, основная часть времени выполнения приходится на вычисление частных производных в точке, которые вычисляются независимо друг от друга.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24364</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24364"/>
		<updated>2017-11-27T21:10:20Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Постановка задачи */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного дифференцирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Алгоритм представляет собой итерационный процесс, на каждом шаге которого происходит вычисление последующей точки. Для этого необходимо знать начальное приближение, значение градиента в предыдущей точке и правило определения параметра  &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;, которое определено задачей. Кроме того, задачей определён и критерий останова, который проверяется на каждой итерации.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма необходимо численно пересчитывать градиент функции. В случае пространства большой размерности, основная часть времени выполнения приходится на вычисление частных производных в точке, которые вычисляются независимо друг от друга.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24362</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24362"/>
		<updated>2017-11-27T20:16:58Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Ресурс параллелизма алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного дифференцирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждом шаге происходит вычисление точки, пока не выполнится критерий останова.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждой итерации алгоритма необходимо численно пересчитывать градиент функции. В случае пространства большой размерности, основная часть времени выполнения приходится на вычисление частных производных в точке, которые вычисляются независимо друг от друга.&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24361</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24361"/>
		<updated>2017-11-27T20:09:53Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Макроструктура алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного дифференцирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
На каждом шаге происходит вычисление точки, пока не выполнится критерий останова.&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24359</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24359"/>
		<updated>2017-11-27T19:45:55Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного дифференцирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24358</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24358"/>
		<updated>2017-11-27T19:45:18Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Вычислительное ядро алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
Наибольшая сложность алгоритма приходится на вычисление частных производных. Это особенно касается более общего случая, когда функция задана неявно и производную можно вычислить только с помощью численного интегрирования.&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24289</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24289"/>
		<updated>2017-11-26T20:15:11Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Постановка задачи */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума (зел.) в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24287</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=24287"/>
		<updated>2017-11-26T20:03:12Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Постановка задачи */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
[[Файл:grad.png|thumb|250px|Последовательные приближения к точке экстремума в направлении наискорейшего спуска (красн.). Синим отмечены линии уровня функции.]]&lt;br /&gt;
&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Grad.png&amp;diff=24286</id>
		<title>Файл:Grad.png</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Grad.png&amp;diff=24286"/>
		<updated>2017-11-26T20:01:21Z</updated>

		<summary type="html">&lt;p&gt;Margarita: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23760</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23760"/>
		<updated>2017-11-04T19:25:53Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
Таким образом идём пока не выполнится некоторый критерий останова, определяемый конкретной задачей.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23759</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23759"/>
		<updated>2017-11-04T18:10:25Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Схема реализации последовательного алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23758</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23758"/>
		<updated>2017-11-04T18:00:49Z</updated>

		<summary type="html">&lt;p&gt;Margarita: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23757</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23757"/>
		<updated>2017-11-04T18:00:21Z</updated>

		<summary type="html">&lt;p&gt;Margarita: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В. Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita&amp;diff=23756</id>
		<title>Участник:Margarita</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita&amp;diff=23756"/>
		<updated>2017-11-04T17:52:35Z</updated>

		<summary type="html">&lt;p&gt;Margarita: Новая страница: «Зайцева Маргарита Владимировна, ВМК МГУ, 415 группа 2017/2018.  Статьи:&amp;lt;br&amp;gt; Участник:Margarita/Гради…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Зайцева Маргарита Владимировна, ВМК МГУ, 415 группа 2017/2018.&lt;br /&gt;
&lt;br /&gt;
Статьи:&amp;lt;br&amp;gt;&lt;br /&gt;
[[Участник:Margarita/Градиентный спуск|Градиентный спуск]].&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23755</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23755"/>
		<updated>2017-11-04T17:49:25Z</updated>

		<summary type="html">&lt;p&gt;Margarita: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;автор: [[Участник:Margarita|М.В.Зайцева]]&lt;br /&gt;
&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23395</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23395"/>
		<updated>2017-10-23T16:36:19Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Математическое описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Постановка задачи ==&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23381</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23381"/>
		<updated>2017-10-23T15:38:02Z</updated>

		<summary type="html">&lt;p&gt;Margarita: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Постановка задачи ==&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении антиградиента &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt; (отсюда название метода), то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается по одному из следующих правил:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha_{k}\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23380</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23380"/>
		<updated>2017-10-23T15:31:58Z</updated>

		<summary type="html">&lt;p&gt;Margarita: /* Общее описание алгоритма */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Постановка задачи ==&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск активно применяется в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt;, то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где выбирается  &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;по следующему правилу:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha_{k}\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23330</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23330"/>
		<updated>2017-10-22T21:14:58Z</updated>

		<summary type="html">&lt;p&gt;Margarita: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Постановка задачи ==&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что у функции &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; существуют частные производные.&lt;br /&gt;
&lt;br /&gt;
Если в задаче требуется найти максимум, вместо &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; следует брать &amp;lt;math&amp;gt;-f(x)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Градиентный спуск — это метод нахождения локального экстремума функции с помощью движения вдоль направления градиента. На каждой итерации для минимизации функции в направлении градиента используются методы одномерной оптимизации.&lt;br /&gt;
&lt;br /&gt;
Градиентный спуск является популярным методом в области машинного обучения, так как часть процесса машинного обучения — это поиск максимальной точности или минимизация частоты ошибок. Метод градиентного спуска используется для поиска минимальной ошибки путем минимизации функции цены.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея &amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва «Наука», 1978&amp;lt;/ref&amp;gt; метода состоит в том, чтобы идти в направлении &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt;, то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k}),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где выбирается  &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt;по следующему правилу:&lt;br /&gt;
* постоянной, в таком случае метод может не сходиться;&lt;br /&gt;
* дробным шагом, то есть во время итерации длина шага делится на некоторое число;&lt;br /&gt;
* наискорейшим спуском&amp;lt;ref&amp;gt;A. D. Belegundu and T. R. Chandrupatla. Optimization Concepts and Applications in Engineering, chapter 3. Prentice Hall, 1999&amp;lt;/ref&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k} = \operatorname{arg}\min_{\alpha}  f(x_{k} - \alpha_{k}\nabla f(x_{k}))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&#039;&#039;&#039;Алгоритм:&#039;&#039;&#039;&lt;br /&gt;
# Выбираем начальную точку &amp;lt;math&amp;gt;x_{0}, \varepsilon&amp;lt;/math&amp;gt;.&lt;br /&gt;
# Вычисляем &amp;lt;math&amp;gt;x_{k+1} = x_{k} - \alpha_{k}\nabla f(x_{k})&amp;lt;/math&amp;gt;, где &amp;lt;math&amp;gt;\alpha_{k}&amp;lt;/math&amp;gt; выбирается одним из описанных выше способом.&lt;br /&gt;
# Если выполнено условие останова, то возвращаем &amp;lt;math&amp;gt;x_{k+1}&amp;lt;/math&amp;gt;, иначе переходим к шагу 2.&lt;br /&gt;
&lt;br /&gt;
Критерии останова могут различаться, исходя из различных соображений. Ниже приведены некоторые из них:&lt;br /&gt;
*&amp;lt;math&amp;gt; \| x_{k+1} - x_{k} \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| f(x_{k+1}) - f(x_{k}) \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
*&amp;lt;math&amp;gt; \| \nabla f(x_{k+1})  \| &amp;lt;\varepsilon &amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9D%D0%B0%D0%B8%D1%81%D0%BA%D0%BE%D1%80%D0%B5%D0%B9%D1%88%D0%B8%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23283</id>
		<title>Наискорейший спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9D%D0%B0%D0%B8%D1%81%D0%BA%D0%BE%D1%80%D0%B5%D0%B9%D1%88%D0%B8%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23283"/>
		<updated>2017-10-22T16:08:37Z</updated>

		<summary type="html">&lt;p&gt;Margarita: Полностью удалено содержимое страницы&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23282</id>
		<title>Участник:Margarita/Градиентный спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:Margarita/%D0%93%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23282"/>
		<updated>2017-10-22T16:07:57Z</updated>

		<summary type="html">&lt;p&gt;Margarita: Новая страница: «== Постановка задачи == Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Постановка задачи ==&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; такова, что можно вычислить её градиент.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Наискорейший спуск&amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва &amp;lt;&amp;lt;Наука&amp;gt;&amp;gt;, 1978&amp;lt;/ref&amp;gt; — это вариант градиентного спуска: метода нахождения локального экстремума функции с помощью движения вдоль направления градиента.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея метода состоит в том, чтобы идти в направлении &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt;, то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x^{k+1} = x^{k} - \lambda^{k}(\nabla f),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где выбирается  &amp;lt;math&amp;gt;\lambda^{k} &amp;lt;/math&amp;gt;по следующему правилу: &amp;lt;math&amp;gt;\lambda^{k} = \operatorname{arg}\min_{\lambda}  f(x^{k} - \lambda^{k}(\nabla f))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
	<entry>
		<id>https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9D%D0%B0%D0%B8%D1%81%D0%BA%D0%BE%D1%80%D0%B5%D0%B9%D1%88%D0%B8%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23280</id>
		<title>Наискорейший спуск</title>
		<link rel="alternate" type="text/html" href="https://xn--80aecvaldz.xn--80ahdrnmvk.xn--p1ai/w/ru/index.php?title=%D0%9D%D0%B0%D0%B8%D1%81%D0%BA%D0%BE%D1%80%D0%B5%D0%B9%D1%88%D0%B8%D0%B9_%D1%81%D0%BF%D1%83%D1%81%D0%BA&amp;diff=23280"/>
		<updated>2017-10-22T15:57:41Z</updated>

		<summary type="html">&lt;p&gt;Margarita: Новая страница: « == Постановка задачи == Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Постановка задачи ==&lt;br /&gt;
Рассмотрим задачу поиска минимума функции &amp;lt;math&amp;gt;f(x)\colon \mathbb{R}^n \to \mathbb{R}&amp;lt;/math&amp;gt;&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
f(x) \rightarrow \min_{x \in  \mathbb{R}^n}&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
Будем считать, что функция &amp;lt;math&amp;gt;f(x)&amp;lt;/math&amp;gt; такова, что можно вычислить её градиент.&lt;br /&gt;
&lt;br /&gt;
=== Общее описание алгоритма ===&lt;br /&gt;
Наискорейший спуск&amp;lt;ref&amp;gt;, Н. Н. Калиткин “Численные методы.” Москва &amp;lt;&amp;lt;Наука&amp;gt;&amp;gt;, 1978&amp;lt;/ref&amp;gt; — это вариант градиентного спуска: метода нахождения локального экстремума функции с помощью движения вдоль направления градиента.&lt;br /&gt;
&lt;br /&gt;
===Математическое описание алгоритма ===&lt;br /&gt;
Основная идея метода состоит в том, чтобы идти в направлении &amp;lt;math&amp;gt;-\nabla f&amp;lt;/math&amp;gt;, то есть в направлении, в котором функция быстрее всего убывает при бесконечно малом движении из данной точки:&lt;br /&gt;
:&amp;lt;math&amp;gt;&lt;br /&gt;
\begin{align}&lt;br /&gt;
x^{k+1} = x^{k} - \lambda^{k}(\nabla f),&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
где выбирается  &amp;lt;math&amp;gt;\lambda^{k} &amp;lt;/math&amp;gt;по следующему правилу: &amp;lt;math&amp;gt;\lambda^{k} = \operatorname{arg}\min_{\lambda}  f(x^{k} - \lambda^{k}(\nabla f))&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== Вычислительное ядро алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Макроструктура алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Схема реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Последовательная сложность алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Информационный граф ===&lt;br /&gt;
&lt;br /&gt;
=== Ресурс параллелизма алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Входные и выходные данные алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Свойства алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Программная реализация алгоритма ==&lt;br /&gt;
=== Особенности реализации последовательного алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Локальность данных и вычислений ===&lt;br /&gt;
&lt;br /&gt;
=== Возможные способы и особенности параллельной реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Масштабируемость алгоритма и его реализации ===&lt;br /&gt;
&lt;br /&gt;
=== Динамические характеристики и эффективность реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
=== Выводы для классов архитектур ===&lt;br /&gt;
&lt;br /&gt;
=== Существующие реализации алгоритма ===&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Margarita</name></author>
	</entry>
</feed>