<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ventosa</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ventosa"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%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/Ventosa"/>
		<updated>2026-05-19T18:03:20Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69593</id>
		<title>Настройка глубокой сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69593"/>
				<updated>2019-01-28T15:50:02Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: /* Граф вычислений */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Глубокое обучение|Глубокая сеть]] состоит из нескольких слоев, где каждый слой организован таким образом, что каждый нейрон в одном слое получает свою копию всех выходных данных предыдущего слоя. Эта модель идеально подходит для определенных типов задач, например, обучение на ограниченном количестве более или менее неструктурированных параметров. Существует множество способов изменения параметров (весов) в такой модели, когда ей на вход поступают необработанные данные. &lt;br /&gt;
&lt;br /&gt;
== Инициализация сети ==&lt;br /&gt;
&lt;br /&gt;
Принцип выбора начальных значений весов для слоев, составляющих модель очень важен: установка всех весов в 0 будет серьезным препятствием для обучения, так как ни один из весов изначально не будет активен. Присваивать весам значения из интервала &amp;lt;tex&amp;gt;[-1, 1]&amp;lt;/tex&amp;gt; — тоже обычно не лучший вариант — на самом деле, иногда (в зависимости от задачи и сложности модели) от правильной инициализации модели может зависеть, достигнет она высочайшей производительности или вообще не будет сходиться. Даже если задача не предполагает такой крайности, удачно выбранный способ инициализации весов может значительно влиять на способность модели к обучению, так как он предустанавливает параметры модели с учетом функции потерь&amp;lt;ref&amp;gt;[https://habr.com/company/wunderfund/blog/315476/ Тонкая настройка нейронной сети, Habr]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Всегда можно выбрать случайно начальное приближение, но лучше выбирать определённым образом, ниже приведены самые распространённые из них:&lt;br /&gt;
&lt;br /&gt;
* Метод инициализации Завьера (Xavier) (иногда — метод Glorot’а)&amp;lt;ref&amp;gt;[http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf Understanding the difficulty of training deep feedforward neural networks]&amp;lt;/ref&amp;gt;. Основная идея этого метода — упростить прохождение сигнала через слой во время как прямого, так и обратного распространения ошибки для линейной функции активации (этот метод также хорошо работает для сигмоидной функции, так как участок, где она ненасыщена, также имеет линейный характер). При вычислении весов этот метод опирается на вероятностное распределение (равномерное или нормальное) с дисперсией, равной &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in} + n_{out}}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n_{in}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n_{out}&amp;lt;/tex&amp;gt; — количества нейронов в предыдущем и последующем слоях соответственно.&lt;br /&gt;
&lt;br /&gt;
* Метод инициализации Ге (He) — это вариация метода Завьера, больше подходящая функции активации ReLU, компенсирующая тот факт, что эта функция возвращает нуль для половины области определения. А именно, в этом случае &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in}}}&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1502.01852.pdf Delving Deep into Rectifiers]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Граф вычислений ==&lt;br /&gt;
Глубокие сети являются особенной формой графа вычиcлений.&lt;br /&gt;
[[Файл: tree-def.png|450px|thumb|Рис.1. Граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Граф вычислений — это ориентированный граф, узлы которого соответствуют операциям или переменным. Переменные могут передавать свое значение в операции, а операции могут передавать свои результаты в другие операции. Таким образом, каждый узел в графе определяет функцию переменных.&lt;br /&gt;
&lt;br /&gt;
Значения, которые вводятся в узлы и выходят из узлов, называются тензорами (т.е. многомерными массивами). На рисунке 1 представлен граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;. В нейронах сетях функций имеют больше аргументов и сложнее, но смысл операций остаётся прежним.&lt;br /&gt;
&lt;br /&gt;
Процесс передачи значений от входных нейронов к выходным называется прямым распространением (от англ. Forward pass). После чего мы вычисляем ошибку обработанных сетью данных на выходном нейроне и, основываясь на её значении, делаем обратную передачу ошибки ([[Обратное распространение ошибки|Back propagation]]). Обратное распространение ошибки заключается в том, чтобы последовательно менять веса нейронной сети, начиная с весов выходного нейрона. Значения весов будут меняться в сторону уменьшения ошибки.&lt;br /&gt;
&lt;br /&gt;
[[Файл: C_graph.png|400px|thumb|Рис.2. Граф вычислений для функции &amp;lt;tex&amp;gt;f(x,y,z)=(x+y)*z&amp;lt;/tex&amp;gt;. Зелёные цифры — значения вычислений по ходу выполнения операций графа, красные — значения производной выходной функции по текущей переменной в точке &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Преимуществом такого представления функции является простота вычисления производных. Используя следующие правила вычисления частных производных: &lt;br /&gt;
*&amp;lt;tex&amp;gt;q=x+y:\frac{\partial q}{\partial x}=1, \frac{\partial q}{\partial y}=1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
*&amp;lt;tex&amp;gt;q=xy:\frac{\partial q}{\partial x}=y, \frac{\partial q}{\partial y}=x;&amp;lt;/tex&amp;gt;&lt;br /&gt;
*&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x}=\frac{\partial f}{\partial q}\frac{\partial q}{\partial y}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим граф вычислений на рисунке 2 с поданными на вход значениями &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;. Подсчёт производных по графу вычислений производим от значения функции к значениям независимых переменных-входов.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\partial f}{\partial f} = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\partial f}{\partial q} = z_0 = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial z} = q_0 = 3&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial x} = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial y} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial y} = -4&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Граф вычислений является частью нейронной сети, у которой &amp;lt;tex&amp;gt;x_{n_{in}}&amp;lt;/tex&amp;gt; — входные значения, &amp;lt;tex&amp;gt;y_{n_{out}}&amp;lt;/tex&amp;gt; — выходные с сети значения, &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; — матрица весов, приводящая значения предыдущего слоя к выходным значениям.&lt;br /&gt;
&lt;br /&gt;
Зная производные, можно искать матрицы весов &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; (числа, на которые умножаются входные для этого слоя значения) с помощью [[Настройка глубокой сети#Способы настройки параметров|градиентного спуска]] сдвигаемся&lt;br /&gt;
в сторону градиента (при максимизации) или обратную ему&lt;br /&gt;
(при минимизации) &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\eta \frac{\partial L(w^{(k)})}{\partial w^{(k)}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; — функция потерь, а &amp;lt;tex&amp;gt;w^{(k)}&amp;lt;/tex&amp;gt; — веса после &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-ой итерации, или его модификаций&amp;lt;ref&amp;gt;[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%81%D0%BF%D1%83%D1%81%D0%BA%D0%B0 Метод градиентного спуска]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Способы настройки параметров ==&lt;br /&gt;
[[File:basins.png|450px|thumb|right|Рис.3. Сравение мотификаций метода градиентного спуска на ландшафте &amp;quot;бассейны и стены&amp;quot;&amp;lt;ref&amp;gt;[https://habr.com/post/318970/ Методы оптимизации нейронных сетей, Habr]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
[[File:wolby.png|450px|thumb|right|Рис.4. Сравение мотификаций метода градиентного спуска на &amp;quot;шатком&amp;quot; ландшафте&amp;lt;ref&amp;gt;[https://habr.com/post/318970/ Методы оптимизации нейронных сетей, Habr]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
Ниже представлены различные вариации градиентного спуска (более подробное сравнение, применительно к данной задаче &amp;lt;ref&amp;gt;[https://habr.com/post/318970/ Методы оптимизации нейронных сетей, Habr]&amp;lt;/ref&amp;gt;). Градиентный спуск — итеративный алгоритм поиска минимума или максимума функции, метриками качества алгоритма этого семейства методов являются скорость сходимости и сходимость в глобальный оптимум. Методы имеют различные преимущества на различных функциях. Так например на рисунке 3 из локального минимума метод adam и метод Нестерова не могут достигнуть глобального, а в случае &amp;quot;шаткого&amp;quot; ландшафта (рисунок 4) эти методы сходятся быстрее.&lt;br /&gt;
&lt;br /&gt;
* [[Стохастический градиентный спуск|Метод стохастического градиентного спуска]] заключается в том, что алгоритм делает шаг постоянной величины в направлении, указанном градиентом в текущей точке: &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu\frac{\partial L(w^{(k)})}{\partial w^{(k)}}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Модификация Momentum &amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum Momentum, Wikipedia]&amp;lt;/ref&amp;gt; запоминает скорость на предыдущем шаге и добавляет в &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; раз меньшую величину на следующем шаге: &amp;lt;tex&amp;gt; v^{(k+1)}=\alpha v^{(k)} -\eta \frac{\partial L(w^{(k)})}{\partial w^{(k)}}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; w^{(k+1)}=w^{(k)}+v^{(k)}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Метод Нестерова (англ. Nesterov accelerated gradient, NAG)&amp;lt;ref&amp;gt;[https://jlmelville.github.io/mize/nesterov.html#nag Nesterov accelerated gradient]&amp;lt;/ref&amp;gt; добавляет к методу Momentum идею &amp;quot;заглядывания вперёд&amp;quot;, используя производную не в текущей точке, а в следующей (если бы мы продолжали двигаться в этом же направлении без измений): &amp;lt;tex&amp;gt; w^{(k+1)} = w^{(k)}-v^{(k)}; v^{(k+1)}=\gamma v^{(k)}+\mu\frac{\partial L(w^{(k)}-v^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adagrad имеет преимущество в плане обучения нейронных сетей в предположении, что процесс обучения должен сходится (т.е. не нужно сильно менять веса сети, когда мы уже немного научились). В процессе обучения после каждого прецендента алгоритм будет уменьшать шаг за счёт суммы квадратов координат градиента предыдущих итераций&amp;lt;ref&amp;gt;[http://akyrillidis.github.io/notes/AdaGrad AdaGrad]&amp;lt;/ref&amp;gt;: &amp;lt;tex&amp;gt;g_i^{(k)}=\frac{\partial L(w_i^{(k)})}{\partial w_i^{(k)}}, w_i^{(k+1)}=w_i^{(k)}-\frac{\mu}{\sqrt{G^{(k)}_{i,i}+\epsilon}}g_{i}^{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; — диагональная матрица, элементы которой, суммы квадратов координат градиента к &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-ой итерации алгоритма: &amp;lt;tex&amp;gt;G_{i,i}^{(k)} = \sum_{t=0}^k (g_i^{(t)})^2&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*RMSProp&amp;lt;ref&amp;gt;[https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b RMSProp]&amp;lt;/ref&amp;gt; основан на идее Adagrad'a, но с учётом того элементы матрицы &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; могут быть большими величинами и начать препятствовать обучению. Для этого RMSProp делит шаг не на полную сумму градиентов, а на скользящую, т.е. &amp;lt;tex&amp;gt;E_i^{(k)} = \gamma E_i^{(k-1)}+(1-\gamma)(g_{i}^{(k)})^2&amp;lt;/tex&amp;gt;, обновление весов осталось таким же как в Adagrad : &amp;lt;tex&amp;gt; w_i^{(k+1)} = w_i^{(k)}-\frac{\mu}{\sqrt{E_i^{(k)}+\epsilon}}g_{i}^{(k)}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adadelta&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1212.5701 Adadelta]&amp;lt;/ref&amp;gt; устраняет &amp;quot;нефизичность&amp;quot; методов Adagrad и RMSProp, добавка с градиентом в которых не имеет размерности весов(точнее вообще безразмерна). Умножение этого слагаемого на любую величину правильной размерности — не самая хорошая идея. Используем разложение ряда Тейлора в точке с большим числом членов, тогда появится матрица &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; вторых производных функции потерь: &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu(Q(w^{(k)})^{-1}Q(w^{(k)}))&amp;lt;/tex&amp;gt;, рассчёт которой повлечёт за собой дополнительные затраты на её расчёт (сами градиенты мы получаем сразу при обратном распространии ошибки), поэтому вместо неё можно брать приближение (из сложных выводов получаем необходимиый множитель &amp;lt;tex&amp;gt;RMS^{(k-1)}[\delta w_i]&amp;lt;/tex&amp;gt;), однако в данном случае знание предыдущей скорости не добавляет алгоритму &amp;quot;инерции&amp;quot; методов Momentum и NAG): &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\frac{RMS^{(k-1)}[\delta w_i]}{RMS^{(k)}[g_i]}g_i^{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;RMS^{(k)}[x_i]=\sqrt{E^{(k)}[x^2_i]+\epsilon}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adam&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1412.6980.pdf Adam]&amp;lt;/ref&amp;gt; сочетает в себе преимущества NAG и Adadelta над обычным градиентным спуском: &amp;lt;tex&amp;gt; w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{\hat{b}^2_{(k)}+\epsilon}}\hat{m}_{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\hat{m}_{(k)}=\frac{\gamma_1 E^{(k-1)}[g_i]+(1-\gamma_1)g_{i,(k)}}{1-\gamma_1^k}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\hat{b}^2_{(k)}= \frac{\gamma_2 E^{(k-1)}[g^2_i]+(1-\gamma_2)g:2_{i,(k)}}{1-\gamma_2^k}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Стохастический градиентный спуск]]&lt;br /&gt;
* [[Обратное распространение ошибки]]&amp;lt;sup&amp;gt;[на 28.01.19 страница не создана]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%28%D0%BA%D1%83%D1%80%D1%81_%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D0%B9%2C_%D0%9A.%D0%92.%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D1%86%D0%BE%D0%B2%29 Курс лекций по машинному обучению] {{---}} Воронцов К.В.&lt;br /&gt;
# Riedmiller, M., &amp;amp; Braun, H. (1993). A direct adaptive method for faster backpropagation learning: The RPROP algorithm. In Neural Networks, 1993., IEEE International Conference on (pp. 586-591). IEEE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69592</id>
		<title>Настройка глубокой сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69592"/>
				<updated>2019-01-28T15:43:42Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Глубокое обучение|Глубокая сеть]] состоит из нескольких слоев, где каждый слой организован таким образом, что каждый нейрон в одном слое получает свою копию всех выходных данных предыдущего слоя. Эта модель идеально подходит для определенных типов задач, например, обучение на ограниченном количестве более или менее неструктурированных параметров. Существует множество способов изменения параметров (весов) в такой модели, когда ей на вход поступают необработанные данные. &lt;br /&gt;
&lt;br /&gt;
== Инициализация сети ==&lt;br /&gt;
&lt;br /&gt;
Принцип выбора начальных значений весов для слоев, составляющих модель очень важен: установка всех весов в 0 будет серьезным препятствием для обучения, так как ни один из весов изначально не будет активен. Присваивать весам значения из интервала &amp;lt;tex&amp;gt;[-1, 1]&amp;lt;/tex&amp;gt; — тоже обычно не лучший вариант — на самом деле, иногда (в зависимости от задачи и сложности модели) от правильной инициализации модели может зависеть, достигнет она высочайшей производительности или вообще не будет сходиться. Даже если задача не предполагает такой крайности, удачно выбранный способ инициализации весов может значительно влиять на способность модели к обучению, так как он предустанавливает параметры модели с учетом функции потерь&amp;lt;ref&amp;gt;[https://habr.com/company/wunderfund/blog/315476/ Тонкая настройка нейронной сети, Habr]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Всегда можно выбрать случайно начальное приближение, но лучше выбирать определённым образом, ниже приведены самые распространённые из них:&lt;br /&gt;
&lt;br /&gt;
* Метод инициализации Завьера (Xavier) (иногда — метод Glorot’а)&amp;lt;ref&amp;gt;[http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf Understanding the difficulty of training deep feedforward neural networks]&amp;lt;/ref&amp;gt;. Основная идея этого метода — упростить прохождение сигнала через слой во время как прямого, так и обратного распространения ошибки для линейной функции активации (этот метод также хорошо работает для сигмоидной функции, так как участок, где она ненасыщена, также имеет линейный характер). При вычислении весов этот метод опирается на вероятностное распределение (равномерное или нормальное) с дисперсией, равной &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in} + n_{out}}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n_{in}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n_{out}&amp;lt;/tex&amp;gt; — количества нейронов в предыдущем и последующем слоях соответственно.&lt;br /&gt;
&lt;br /&gt;
* Метод инициализации Ге (He) — это вариация метода Завьера, больше подходящая функции активации ReLU, компенсирующая тот факт, что эта функция возвращает нуль для половины области определения. А именно, в этом случае &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in}}}&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1502.01852.pdf Delving Deep into Rectifiers]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Граф вычислений ==&lt;br /&gt;
Глубокие сети являются особенной формой графа вычиcлений.&lt;br /&gt;
[[Файл: tree-def.png|450px|thumb|Рис.1. Граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Граф вычислений — это ориентированный граф, узлы которого соответствуют операциям или переменным. Переменные могут передавать свое значение в операции, а операции могут передавать свои результаты в другие операции. Таким образом, каждый узел в графе определяет функцию переменных.&lt;br /&gt;
&lt;br /&gt;
Значения, которые вводятся в узлы и выходят из узлов, называются тензорами (т.е. многомерными массивами). На рисунке 1 представлен граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;. В нейронах сетях функций имеют больше аргументов и сложнее, но смысл операций остаётся прежним.&lt;br /&gt;
&lt;br /&gt;
Процесс передачи значений от входных нейронов к выходным называется прямым распространеним (от англ. Forward pass). После чего мы вычисляем ошибку обработанных сетью данных на выходном нейроне и, основываясь на её значении, делаем обратную передачу ошибки ([[Обратное распространение ошибки|Back propagation]]). Обратное распространение ошибки заключается в том, чтобы последовательно менять веса нейронной сети, начиная с весов выходного нейрона. Значения весов будут меняться в сторону уменьшения ошибки.&lt;br /&gt;
&lt;br /&gt;
[[Файл: C_graph.png|400px|thumb|Рис.2. Граф вычислений для функции &amp;lt;tex&amp;gt;f(x,y,z)=(x+y)*z&amp;lt;/tex&amp;gt;. Зелёные цифры — значения вычислений по ходу выполнения операций графа, красные — значения производной выходной функции по текущей переменной в точке &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Преимуществом такого представления функции является простота вычисления производных. Используя следующие правила вычисления частных производных: &lt;br /&gt;
*&amp;lt;tex&amp;gt;q=x+y:\frac{\partial q}{\partial x}=1, \frac{\partial q}{\partial y}=1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
*&amp;lt;tex&amp;gt;q=xy:\frac{\partial q}{\partial x}=y, \frac{\partial q}{\partial y}=x;&amp;lt;/tex&amp;gt;&lt;br /&gt;
*&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x}=\frac{\partial f}{\partial q}\frac{\partial q}{\partial y}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим граф вычислений на рисунке 2 с поданными на вход значениями &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;. Подсчёт производных по графу вычислений производим от значения функции к значениям независимых переменных-входов.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\partial f}{\partial f} = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\partial f}{\partial q} = z_0 = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial z} = q_0 = 3&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial x} = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial y} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial y} = -4&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Граф вычислений является частью нейронной сети, у которой &amp;lt;tex&amp;gt;x_{n_{in}}&amp;lt;/tex&amp;gt; — входные значения, &amp;lt;tex&amp;gt;y_{n_{out}}&amp;lt;/tex&amp;gt; — выходные с сети значения, &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; — матрица весов, изменяющая с помощью линейной комбинации значения предыдущего слоя.&lt;br /&gt;
&lt;br /&gt;
Зная производные, можно искать матрицы весов &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; (числа, на которые умножаются входные для этого слоя значения) с помощью [[Настройка глубокой сети#Способы настройки параметров|градиентного спуска]] сдвигаемся&lt;br /&gt;
в сторону градиента (при максимизации) или обратную ему&lt;br /&gt;
(при минимизации) &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\eta \frac{\partial L(w^{(k)})}{\partial w^{(k)}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; — функция потерь, а &amp;lt;tex&amp;gt;w^{(k)}&amp;lt;/tex&amp;gt; — веса после &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-ой итерации, или его модификаций&amp;lt;ref&amp;gt;[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%81%D0%BF%D1%83%D1%81%D0%BA%D0%B0 Метод градиентного спуска]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Способы настройки параметров ==&lt;br /&gt;
[[File:basins.png|450px|thumb|right|Рис.3. Сравение мотификаций метода градиентного спуска на ландшафте &amp;quot;бассейны и стены&amp;quot;&amp;lt;ref&amp;gt;[https://habr.com/post/318970/ Методы оптимизации нейронных сетей, Habr]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
[[File:wolby.png|450px|thumb|right|Рис.4. Сравение мотификаций метода градиентного спуска на &amp;quot;шатком&amp;quot; ландшафте&amp;lt;ref&amp;gt;[https://habr.com/post/318970/ Методы оптимизации нейронных сетей, Habr]&amp;lt;/ref&amp;gt;.]]&lt;br /&gt;
Ниже представлены различные вариации градиентного спуска (более подробное сравнение, применительно к данной задаче &amp;lt;ref&amp;gt;[https://habr.com/post/318970/ Методы оптимизации нейронных сетей, Habr]&amp;lt;/ref&amp;gt;). Градиентный спуск — итеративный алгоритм поиска минимума или максимума функции, метриками качества алгоритма этого семейства методов являются скорость сходимости и сходимость в глобальный оптимум. Методы имеют различные преимущества на различных функциях. Так например на рисунке 3 из локального минимума метод adam и метод Нестерова не могут достигнуть глобального, а в случае &amp;quot;шаткого&amp;quot; ландшафта (рисунок 4) эти методы сходятся быстрее.&lt;br /&gt;
&lt;br /&gt;
* [[Стохастический градиентный спуск|Метод стохастического градиентного спуска]] заключается в том, что алгоритм делает шаг постоянной величины в направлении, указанном градиентом в текущей точке: &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu\frac{\partial L(w^{(k)})}{\partial w^{(k)}}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Модификация Momentum &amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum Momentum, Wikipedia]&amp;lt;/ref&amp;gt; запоминает скорость на предыдущем шаге и добавляет в &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; раз меньшую величину на следующем шаге: &amp;lt;tex&amp;gt; v^{(k+1)}=\alpha v^{(k)} -\eta \frac{\partial L(w^{(k)})}{\partial w^{(k)}}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; w^{(k+1)}=w^{(k)}+v^{(k)}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Метод Нестерова (англ. Nesterov accelerated gradient, NAG)&amp;lt;ref&amp;gt;[https://jlmelville.github.io/mize/nesterov.html#nag Nesterov accelerated gradient]&amp;lt;/ref&amp;gt; добавляет к методу Momentum идею &amp;quot;заглядывания вперёд&amp;quot;, используя производную не в текущей точке, а в следующей (если бы мы продолжали двигаться в этом же направлении без измений): &amp;lt;tex&amp;gt; w^{(k+1)} = w^{(k)}-v^{(k)}; v^{(k+1)}=\gamma v^{(k)}+\mu\frac{\partial L(w^{(k)}-v^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adagrad имеет преимущество в плане обучения нейронных сетей в предположении, что процесс обучения должен сходится (т.е. не нужно сильно менять веса сети, когда мы уже немного научились). В процессе обучения после каждого прецендента алгоритм будет уменьшать шаг за счёт суммы квадратов координат градиента предыдущих итераций&amp;lt;ref&amp;gt;[http://akyrillidis.github.io/notes/AdaGrad AdaGrad]&amp;lt;/ref&amp;gt;: &amp;lt;tex&amp;gt;g_i^{(k)}=\frac{\partial L(w_i^{(k)})}{\partial w_i^{(k)}}, w_i^{(k+1)}=w_i^{(k)}-\frac{\mu}{\sqrt{G^{(k)}_{i,i}+\epsilon}}g_{i}^{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; — диагональная матрица, элементы которой, суммы квадратов координат градиента к &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-ой итерации алгоритма: &amp;lt;tex&amp;gt;G_{i,i}^{(k)} = \sum_{t=0}^k (g_i^{(t)})^2&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*RMSProp&amp;lt;ref&amp;gt;[https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b RMSProp]&amp;lt;/ref&amp;gt; основан на идее Adagrad'a, но с учётом того элементы матрицы &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; могут быть большими величинами и начать препятствовать обучению. Для этого RMSProp делит шаг не на полную сумму градиентов, а на скользящую, т.е. &amp;lt;tex&amp;gt;E_i^{(k)} = \gamma E_i^{(k-1)}+(1-\gamma)(g_{i}^{(k)})^2&amp;lt;/tex&amp;gt;, обновление весов осталось таким же как в Adagrad : &amp;lt;tex&amp;gt; w_i^{(k+1)} = w_i^{(k)}-\frac{\mu}{\sqrt{E_i^{(k)}+\epsilon}}g_{i}^{(k)}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adadelta&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1212.5701 Adadelta]&amp;lt;/ref&amp;gt; устраняет &amp;quot;нефизичность&amp;quot; методов Adagrad и RMSProp, добавка с градиентом в которых не имеет размерности весов(точнее вообще безразмерна). Умножение этого слагаемого на любую величину правильной размерности — не самая хорошая идея. Используем разложение ряда Тейлора в точке с большим числом членов, тогда появится матрица &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; вторых производных функции потерь: &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu(Q(w^{(k)})^{-1}Q(w^{(k)}))&amp;lt;/tex&amp;gt;, рассчёт которой повлечёт за собой дополнительные затраты на её расчёт (сами градиенты мы получаем сразу при обратном распространии ошибки), поэтому вместо неё можно брать приближение (из сложных выводов получаем необходимиый множитель &amp;lt;tex&amp;gt;RMS^{(k-1)}[\delta w_i]&amp;lt;/tex&amp;gt;), однако в данном случае знание предыдущей скорости не добавляет алгоритму &amp;quot;инерции&amp;quot; методов Momentum и NAG): &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\frac{RMS^{(k-1)}[\delta w_i]}{RMS^{(k)}[g_i]}g_i^{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;RMS^{(k)}[x_i]=\sqrt{E^{(k)}[x^2_i]+\epsilon}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adam&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1412.6980.pdf Adam]&amp;lt;/ref&amp;gt; сочетает в себе преимущества NAG и Adadelta над обычным градиентным спуском: &amp;lt;tex&amp;gt; w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{\hat{b}^2_{(k)}+\epsilon}}\hat{m}_{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\hat{m}_{(k)}=\frac{\gamma_1 E^{(k-1)}[g_i]+(1-\gamma_1)g_{i,(k)}}{1-\gamma_1^k}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\hat{b}^2_{(k)}= \frac{\gamma_2 E^{(k-1)}[g^2_i]+(1-\gamma_2)g:2_{i,(k)}}{1-\gamma_2^k}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Стохастический градиентный спуск]]&lt;br /&gt;
* [[Обратное распространение ошибки]]&amp;lt;sup&amp;gt;[на 28.01.19 страница не создана]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%28%D0%BA%D1%83%D1%80%D1%81_%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D0%B9%2C_%D0%9A.%D0%92.%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D1%86%D0%BE%D0%B2%29 Курс лекций по машинному обучению] {{---}} Воронцов К.В.&lt;br /&gt;
# Riedmiller, M., &amp;amp; Braun, H. (1993). A direct adaptive method for faster backpropagation learning: The RPROP algorithm. In Neural Networks, 1993., IEEE International Conference on (pp. 586-591). IEEE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:C_graph.png&amp;diff=69590</id>
		<title>Файл:C graph.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:C_graph.png&amp;diff=69590"/>
				<updated>2019-01-28T15:36:09Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Tree-def.png&amp;diff=69588</id>
		<title>Файл:Tree-def.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Tree-def.png&amp;diff=69588"/>
				<updated>2019-01-28T15:23:40Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69585</id>
		<title>Настройка глубокой сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69585"/>
				<updated>2019-01-28T15:21:51Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Глубокое обучение|Глубокая сеть]] состоит из нескольких слоев, где каждый слой организован таким образом, что каждый нейрон в одном слое получает свою копию всех выходных данных предыдущего слоя. Эта модель идеально подходит для определенных типов задач, например, обучение на ограниченном количестве более или менее неструктурированных параметров. Существует множество способов изменения параметров (весов) в такой модели, когда ей на вход поступают необработанные данные. &lt;br /&gt;
&lt;br /&gt;
== Инициализация сети ==&lt;br /&gt;
&lt;br /&gt;
Принцип выбора начальных значений весов для слоев, составляющих модель очень важен: установка всех весов в 0 будет серьезным препятствием для обучения, так как ни один из весов изначально не будет активен. Присваивать весам значения из интервала &amp;lt;tex&amp;gt;[-1, 1]&amp;lt;/tex&amp;gt; — тоже обычно не лучший вариант — на самом деле, иногда (в зависимости от задачи и сложности модели) от правильной инициализации модели может зависеть, достигнет она высочайшей производительности или вообще не будет сходиться. Даже если задача не предполагает такой крайности, удачно выбранный способ инициализации весов может значительно влиять на способность модели к обучению, так как он предустанавливает параметры модели с учетом функции потерь&amp;lt;ref&amp;gt;[https://habr.com/company/wunderfund/blog/315476/ Тонкая настройка нейронной сети, Habr]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Всегда можно выбрать случайно начальное приближение, но лучше выбирать определённым образом, ниже приведены самые распространённые из них:&lt;br /&gt;
&lt;br /&gt;
* Метод инициализации Завьера (Xavier) (иногда — метод Glorot’а)&amp;lt;ref&amp;gt;[http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf Understanding the difficulty of training deep feedforward neural networks]&amp;lt;/ref&amp;gt;. Основная идея этого метода — упростить прохождение сигнала через слой во время как прямого, так и обратного распространения ошибки для линейной функции активации (этот метод также хорошо работает для сигмоидной функции, так как участок, где она ненасыщена, также имеет линейный характер). При вычислении весов этот метод опирается на вероятностное распределение (равномерное или нормальное) с дисперсией, равной &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in} + n_{out}}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n_{in}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n_{out}&amp;lt;/tex&amp;gt; — количества нейронов в предыдущем и последующем слоях соответственно.&lt;br /&gt;
&lt;br /&gt;
* Метод инициализации Ге (He) — это вариация метода Завьера, больше подходящая функции активации ReLU, компенсирующая тот факт, что эта функция возвращает нуль для половины области определения. А именно, в этом случае &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in}}}&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1502.01852.pdf Delving Deep into Rectifiers]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Граф вычислений ==&lt;br /&gt;
Глубокие сети являются особенной формой графа вычиcлений.&lt;br /&gt;
[[Файл: Graph_comp.png|400px|thumb|Рис.1. Граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Граф вычислений — это ориентированный граф, узлы которого соответствуют операциям или переменным. Переменные могут передавать свое значение в операции, а операции могут передавать свои результаты в другие операции. Таким образом, каждый узел в графе определяет функцию переменных.&lt;br /&gt;
&lt;br /&gt;
Значения, которые вводятся в узлы и выходят из узлов, называются тензорами (т.е. многомерными массивами). На рисунке 1 представлен граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;. В нейронах сетях функций имеют больше аргументов и сложнее, но смысл операций остаётся прежним.&lt;br /&gt;
&lt;br /&gt;
Процесс передачи значений от входных нейронов к выходным называется прямым распространеним (от англ. Forward pass). После чего мы вычисляем ошибку обработанных сетью данных на выходном нейроне и, основываясь на её значении, делаем обратную передачу ошибки ([[Обратное распространение ошибки|Back propagation]]). Обратное распространение ошибки заключается в том, чтобы последовательно менять веса нейронной сети, начиная с весов выходного нейрона. Значения весов будут меняться в сторону уменьшения ошибки.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Graph_compilation.jpg|400px|thumb|Рис.2. Граф вычислений для функции &amp;lt;tex&amp;gt;f(x,y,z)=(x+y)*z&amp;lt;/tex&amp;gt;. Зелёные цифры — значения вычислений по ходу выполнения операций графа, красные — значения производной выходной функции по текущей переменной в точке &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Преимуществом такого представления функции является простота вычисления производных. Используя следующие правила вычисления частных производных: &amp;lt;tex&amp;gt;q=x+y:\frac{\partial q}{\partial x}=1, \frac{\partial q}{\partial y}=1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;q=xy:\frac{\partial q}{\partial x}=y, \frac{\partial q}{\partial y}=x;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x}=\frac{\partial f}{\partial q}\frac{\partial q}{\partial y}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим граф вычислений на рисунке 2 с поданными на вход значениями &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;. Подсчёт производных по графу вычислений производим от значения функции к значениям независимых переменных-входов.&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\partial f}{\partial f} = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\partial f}{\partial q} = z_0 = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial z} = q_0 = 3&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial x} = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial y} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial y} = -4&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Граф вычислений - является частью нейронной сети, у которой &amp;lt;tex&amp;gt;x_{n_{in}}&amp;lt;/tex&amp;gt; — входные значения, &amp;lt;tex&amp;gt;y_{n_{out}}&amp;lt;/tex&amp;gt; — выходные с сети значения, &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; — матрица весов, изменяющая с помощью линейной комбинации значения предыдущего слоя.&lt;br /&gt;
&lt;br /&gt;
Зная производные, можно искать матрицы весов &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; (числа, на которые умножаются входные для этого слоя значения) с помощью [[Настройка глубокой сети#Способы настройки параметров|градиентного спуска]] сдвигаемся&lt;br /&gt;
в сторону градиента (при максимизации) или обратную ему&lt;br /&gt;
(при минимизации) &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\eta \frac{\partial L(w^{(k)})}{\partial w^{(k)}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; — функция потерь, а &amp;lt;tex&amp;gt;w^{(k)}&amp;lt;/tex&amp;gt; — веса после &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-ой итерации, или его модификаций&amp;lt;ref&amp;gt;[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%81%D0%BF%D1%83%D1%81%D0%BA%D0%B0 Метод градиентного спуска]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Способы настройки параметров ==&lt;br /&gt;
[[File:basins.png|450px|thumb|right|Рисунок 3. Сравение мотификаций метода градиентного спуска на ландшафте &amp;quot;бассейны и стены&amp;quot;.]]&lt;br /&gt;
[[File:wolby.png|450px|thumb|right|Рисунок 4. Сравение мотификаций метода градиентного спуска на &amp;quot;шатком&amp;quot; ландшафте.]]&lt;br /&gt;
Ниже представлены различные вариации градиентного спуска (более подробное сравнение, применительно к данной задаче &amp;lt;ref&amp;gt;[https://habr.com/post/318970/ Методы оптимизации нейронных сетей, Habr]&amp;lt;/ref&amp;gt;). Градиентный спуск — итеративный алгоритм поиска минимума или максимума функции, метриками качества алгоритма этого семейства методов являются скорость сходимости и сходимость в глобальный оптимум. Методы имеют различные преимущества на различных функциях. Так например на рисунке 3 из локального минимума метод adam и метод Нестерова не могут достигнуть глобального, а в случае &amp;quot;шаткого&amp;quot; ландшафта (рисунок 4) эти методы сходятся быстрее.&lt;br /&gt;
&lt;br /&gt;
* [[Стохастический градиентный спуск|Метод стохастического градиентного спуска]] заключается в том, что алгоритм делает шаг постоянной величины в направлении, указанном градиентом в текущей точке: &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu\frac{\partial L(w^{(k)})}{\partial w^{(k)}}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Модификация Momentum &amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum Momentum, Wikipedia]&amp;lt;/ref&amp;gt; запоминает скорость на предыдущем шаге и добавляет в &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; раз меньшую величину на следующем шаге: &amp;lt;tex&amp;gt; v^{(k+1)}=\alpha v^{(k)} -\eta \frac{\partial L(w^{(k)})}{\partial w^{(k)}}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; w^{(k+1)}=w^{(k)}+v^{(k)}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Метод Нестерова (англ. Nesterov accelerated gradient, NAG)&amp;lt;ref&amp;gt;[https://jlmelville.github.io/mize/nesterov.html#nag Nesterov accelerated gradient]&amp;lt;/ref&amp;gt; добавляет к методу Momentum идею &amp;quot;заглядывания вперёд&amp;quot;, используя производную не в текущей точке, а в следующей (если бы мы продолжали двигаться в этом же направлении без измений): &amp;lt;tex&amp;gt; w^{(k+1)} = w^{(k)}-v^{(k)}; v^{(k+1)}=\gamma v^{(k)}+\mu\frac{\partial L(w^{(k)}-v^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adagrad имеет преимущество в плане обучения нейронных сетей в предположении, что процесс обучения должен сходится (т.е. не нужно сильно менять веса сети, когда мы уже немного научились). В процессе обучения после каждого прецендента алгоритм будет уменьшать шаг за счёт суммы квадратов координат градиента предыдущих итераций&amp;lt;ref&amp;gt;[http://akyrillidis.github.io/notes/AdaGrad AdaGrad]&amp;lt;/ref&amp;gt;: &amp;lt;tex&amp;gt;g_i^{(k)}=\frac{\partial L(w_i^{(k)})}{\partial w_i^{(k)}}, w_i^{(k+1)}=w_i^{(k)}-\frac{\mu}{\sqrt{G^{(k)}_{i,i}+\epsilon}}g_{i}^{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; — диагональная матрица, элементы которой, суммы квадратов координат градиента к &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-ой итерации алгоритма: &amp;lt;tex&amp;gt;G_{i,i}^{(k)} = \sum_{t=0}^k (g_i^{(t)})^2&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*RMSProp&amp;lt;ref&amp;gt;[https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b RMSProp]&amp;lt;/ref&amp;gt; основан на идее Adagrad'a, но с учётом того элементы матрицы &amp;lt;tex&amp;gt;G&amp;lt;/tex&amp;gt; могут быть большими величинами и начать препятствовать обучению. Для этого RMSProp делит шаг не на полную сумму градиентов, а на скользящую, т.е. &amp;lt;tex&amp;gt;E_i^{(k)} = \gamma E_i^{(k-1)}+(1-\gamma)(g_{i}^{(k)})^2&amp;lt;/tex&amp;gt;, обновление весов осталось таким же как в Adagrad : &amp;lt;tex&amp;gt; w_i^{(k+1)} = w_i^{(k)}-\frac{\mu}{\sqrt{E_i^{(k)}+\epsilon}}g_{i}^{(k)}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adadelta&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1212.5701 Adadelta]&amp;lt;/ref&amp;gt; устраняет &amp;quot;нефизичность&amp;quot; методов Adagrad и RMSProp, добавка с градиентом в которых не имеет размерности весов(точнее вообще безразмерна). Умножение этого слагаемого на любую величину правильной размерности — не самая хорошая идея. Используем разложение ряда Тейлора в точке с большим числом членов, тогда появится матрица &amp;lt;tex&amp;gt;Q&amp;lt;/tex&amp;gt; вторых производных функции потерь: &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu(Q(w^{(k)})^{-1}Q(w^{(k)}))&amp;lt;/tex&amp;gt;, рассчёт которой повлечёт за собой дополнительные затраты на её расчёт (сами градиенты мы получаем сразу при обратном распространии ошибки), поэтому вместо неё можно брать приближение (из сложных выводов получаем необходимиый множитель &amp;lt;tex&amp;gt;RMS^{(k-1)}[\delta w_i]&amp;lt;/tex&amp;gt;), однако в данном случае знание предыдущей скорости не добавляет алгоритму &amp;quot;инерции&amp;quot; методов Momentum и NAG): &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\frac{RMS^{(k-1)}[\delta w_i]}{RMS^{(k)}[g_i]}g_i^{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;RMS^{(k)}[x_i]=\sqrt{E^{(k)}[x^2_i]+\epsilon}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adam&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1412.6980.pdf Adam]&amp;lt;/ref&amp;gt; сочетает в себе преимущества NAG и Adadelta над обычным градиентным спуском: &amp;lt;tex&amp;gt; w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{\hat{b}^2_{(k)}+\epsilon}}\hat{m}_{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\hat{m}_{(k)}=\frac{\gamma_1 E^{(k-1)}[g_i]+(1-\gamma_1)g_{i,(k)}}{1-\gamma_1^k}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\hat{b}^2_{(k)}= \frac{\gamma_2 E^{(k-1)}[g^2_i]+(1-\gamma_2)g:2_{i,(k)}}{1-\gamma_2^k}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Стохастический градиентный спуск]]&lt;br /&gt;
* [[Обратное распространение ошибки]]&amp;lt;sup&amp;gt;[на 28.01.19 страница не создана]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%28%D0%BA%D1%83%D1%80%D1%81_%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D0%B9%2C_%D0%9A.%D0%92.%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D1%86%D0%BE%D0%B2%29 Курс лекций по машинному обучению] {{---}} Воронцов К.В.&lt;br /&gt;
# Riedmiller, M., &amp;amp; Braun, H. (1993). A direct adaptive method for faster backpropagation learning: The RPROP algorithm. In Neural Networks, 1993., IEEE International Conference on (pp. 586-591). IEEE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69578</id>
		<title>Настройка глубокой сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69578"/>
				<updated>2019-01-28T15:02:58Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Глубое обучение|Глубокая сеть]] состоит из нескольких слоев, где каждый слой организован таким образом, что каждый нейрон в одном слое получает свою копию всех выходных данных предыдущего слоя. Эта модель идеально подходит для определенных типов задач, например, обучение на ограниченном количестве более или менее неструктурированных параметров. Существует множество способов изменения параметров (весов) в такой модели, когда ей на вход поступают необработанные данные. &lt;br /&gt;
&lt;br /&gt;
== Инициализация сети ==&lt;br /&gt;
&lt;br /&gt;
Принцип выбора начальных значений весов для слоев, составляющих модель очень важен: установка всех весов в 0 будет серьезным препятствием для обучения, так как ни один из весов изначально не будет активен. Присваивать весам значения из интервала &amp;lt;tex&amp;gt;[-1, 1]&amp;lt;/tex&amp;gt; — тоже обычно не лучший вариант — на самом деле, иногда (в зависимости от задачи и сложности модели) от правильной инициализации модели может зависеть, достигнет она высочайшей производительности или вообще не будет сходиться. Даже если задача не предполагает такой крайности, удачно выбранный способ инициализации весов может значительно влиять на способность модели к обучению, так как он предустанавливает параметры модели с учетом функции потерь&amp;lt;ref&amp;gt;[https://habr.com/company/wunderfund/blog/315476/ Тонкая настройка нейронной сети, Habr]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Всегда можно выбрать случайно начальное приближение, но лучше выбирать определённым образом, ниже приведены самые распространённые из них:&lt;br /&gt;
&lt;br /&gt;
* Метод инициализации Завьера (Xavier) (иногда — метод Glorot’а)&amp;lt;ref&amp;gt;[http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf Understanding the difficulty of training deep feedforward neural networks]&amp;lt;/ref&amp;gt;. Основная идея этого метода — упростить прохождение сигнала через слой во время как прямого, так и обратного распространения ошибки для линейной функции активации (этот метод также хорошо работает для сигмоидной функции, так как участок, где она ненасыщена, также имеет линейный характер). При вычислении весов этот метод опирается на вероятностное распределение (равномерное или нормальное) с дисперсией, равной &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in} + n_{out}}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n_{in}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n_{out}&amp;lt;/tex&amp;gt; — количества нейронов в предыдущем и последующем слоях соответственно.&lt;br /&gt;
&lt;br /&gt;
* Метод инициализации Ге (He) — это вариация метода Завьера, больше подходящая функции активации ReLU, компенсирующая тот факт, что эта функция возвращает нуль для половины области определения. А именно, в этом случае &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in}}}&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1502.01852.pdf Delving Deep into Rectifiers]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Граф вычислений ==&lt;br /&gt;
Глубокие сети являются особенной формой графа вычиcлений.&lt;br /&gt;
[[Файл: Graph_comp.png|800px|thumb|Рис.1. Граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Граф вычислений — это ориентированный граф, узлы которого соответствуют операциям или переменным. Переменные могут передавать свое значение в операции, а операции могут передавать свои результаты в другие операции. Таким образом, каждый узел в графе определяет функцию переменных.&lt;br /&gt;
&lt;br /&gt;
Значения, которые вводятся в узлы и выходят из узлов, называются тензорами (т.е. многомерными массивами). На рисунке 1 представлен граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;. В нейронах сетях функций имеют больше аргументов и сложнее, но смысл операций остаётся прежним.&lt;br /&gt;
&lt;br /&gt;
Процесс передачи значений от входных нейронов к выходным называется прямым распространеним (от англ. Forward pass). После чего мы вычисляем ошибку обработанных сетью данных на выходном нейроне и, основываясь на её значении, делаем обратную передачу ошибки ([[Обратное распространение ошибки|Back propagation]]). Обратное распространение ошибки заключается в том, чтобы последовательно менять веса нейронной сети, начиная с весов выходного нейрона. Значения весов будут меняться в сторону уменьшения ошибки.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Graph_compilation.jpg|400px|thumb|Рис.2. Граф вычислений для функции &amp;lt;tex&amp;gt;f(x,y,z)=(x+y)*z&amp;lt;/tex&amp;gt;. Зелёные цифры — значения вычислений по ходу выполнения операций графа, красные — значения производной выходной функции по текущей переменной в точке &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Преимуществом такого представления функции является простота вычисления производных. Используя следующие правила вычисления частных производных: &amp;lt;tex&amp;gt;q=x+y:\frac{\partial q}{\partial x}=1, \frac{\partial q}{\partial y}=1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;q=xy:\frac{\partial q}{\partial x}=y, \frac{\partial q}{\partial y}=x;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x}=\frac{\partial f}{\partial q}\frac{\partial q}{\partial y}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим граф вычислений на рисунке 2 с поданными на вход значениями &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;. Подсчёт производных по графу вычислений производим от значения функции к значениям независимых переменных-входов.&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\partial f}{\partial f} = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\partial f}{\partial q} = z_0 = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial z} = q_0 = 3&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial x} = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial y} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial y} = -4&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Граф вычислений - является частью нейронной сети, у которой &amp;lt;tex&amp;gt;x_{n_{in}}&amp;lt;/tex&amp;gt; — входные значения, &amp;lt;tex&amp;gt;y_{n_{out}}&amp;lt;/tex&amp;gt; — выходные с сети значения, &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; — матрица весов, изменяющая с помощью линейной комбинации значения предыдущего слоя.&lt;br /&gt;
&lt;br /&gt;
Зная производные, можно искать матрицы весов &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; (числа, на которые умножаются входные для этого слоя значения) с помощью [[Настройка глубокой сети#Способы настройки параметров|градиентного спуска]] сдвигаемся&lt;br /&gt;
в сторону градиента (при максимизации) или обратную ему&lt;br /&gt;
(при минимизации) &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\eta \frac{\partial L(w^{(k)})}{\partial w^{(k)}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; — функция потерь, а &amp;lt;tex&amp;gt;w^{(k)}&amp;lt;/tex&amp;gt; — веса после &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-ой итерации, или его модификаций&amp;lt;ref&amp;gt;[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%81%D0%BF%D1%83%D1%81%D0%BA%D0%B0 Метод градиентного спуска]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Способы настройки параметров ==&lt;br /&gt;
[[File:basins.png|450px|thumb|right|Рисунок 3. Сравение мотификаций метода градиентного спуска на ландшафте &amp;quot;бассейны и стены&amp;quot;.]]&lt;br /&gt;
[[File:wolby.png|450px|thumb|right|Рисунок 4. Сравение мотификаций метода градиентного спуска на &amp;quot;шатком&amp;quot; ландшафте.]]&lt;br /&gt;
Ниже представлены различные вариации градиентного спуска (более подробное сравнение, применительно к данной задаче &amp;lt;ref&amp;gt;[https://habr.com/post/318970/ Методы оптимизации нейронных сетей, Habr]&amp;lt;/ref&amp;gt;). Градиентный спуск — итеративный алгоритм поиска минимума или максимума функции, метриками качества алгоритма этого семейства методов являются скорость сходимости и сходимость в глобальный оптимум. Методы имеют различные преимущества на различных функциях. Так например на рисунке 3 из локального минимума метод adam и метод Нестерова не могут достигнуть глобального, а в случае &amp;quot;шаткого&amp;quot; ландшафта (рисунок 4) эти методы сходятся быстрее.&lt;br /&gt;
&lt;br /&gt;
* [[Стохастический градиентный спуск|Метод стохастического градиентного спуска]] заключается в том, что алгоритм делает шаг постоянной величины в направлении, указанном градиентом в текущей точке: &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu\frac{\partial L(w^{(k)})}{\partial w^{(k)}}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Модификация Momentum &amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum Momentum, Wikipedia]&amp;lt;/ref&amp;gt; запоминает скорость на предыдущем шаге и добавляет в &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; раз меньшую величину на следующем шаге: &amp;lt;tex&amp;gt; v^{(k+1)}=\alpha v^{(k)} -\eta \frac{\partial L(w^{(k)})}{\partial w^{(k)}}&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; w^{(k+1)}=w^{(k)}+v^{(k)}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Метод Нестерова (англ. Nesterov accelerated gradient, NAG)&amp;lt;ref&amp;gt;[https://jlmelville.github.io/mize/nesterov.html#nag Nesterov accelerated gradient]&amp;lt;/ref&amp;gt; добавляет к методу Momentum идею &amp;quot;заглядывания вперёд&amp;quot;, используя производную не в текущей точке, а в следующей (если бы мы продолжали двигаться в этом же направлении без измений): &amp;lt;tex&amp;gt; w^{(k+1)} = w^{(k)}-v^{(k)}; v^{(k+1)}=\gamma v^{(k)}+\mu\frac{\partial L(w^{(k)}-v^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adagrad имеет преимущество в плане обучения нейронных сетей в предположении, что процесс обучения должен сходится (т.е. не нужно сильно менять веса сети, когда мы уже немного научились). В процессе обучения после каждого прецендента алгоритм будет уменьшать шаг за счёт суммы квадратов координат градиента предыдущих итераций&amp;lt;ref&amp;gt;[http://akyrillidis.github.io/notes/AdaGrad AdaGrad]&amp;lt;/ref&amp;gt;: &amp;lt;tex&amp;gt;g_{i,(k)}=\frac{\partial L(w_i^{(k)})}{\partial w_i^{(k)}}, w_i^{(k+1)}=w_i^{(k)}-\frac{\mu}{\sqrt{G^{(k)}_i,i+\epsilon}}g_{i,(k)}&amp;lt;/tex&amp;gt;, где G — диагональная матрица, элементы которой, суммы квадратов координат градиента к k-ой итерации алгоритма;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*RMSProp&amp;lt;ref&amp;gt;[https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b RMSProp]&amp;lt;/ref&amp;gt; основан на идее Adagrad'a, но с учётом того элементы матрицы G могут быть большими величинами и начать препятствовать обучению. Для этого RMSProp делит шаг не на полную сумму градиентов, а на скользящую, т.е. &amp;lt;tex&amp;gt;E^{(k)}[g_i^2] = \gamma E^{(k-1)}[g_i^2]+(1-\gamma)g^2_{i, (k)}&amp;lt;/tex&amp;gt;, обновление весов осталось таким же как в Adagrad : &amp;lt;tex&amp;gt; w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{E^{(k)}[g_i^2]+\epsilon}}g_{i, (k)}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adadelta&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1212.5701 Adadelta]&amp;lt;/ref&amp;gt; устраняет &amp;quot;нефизичность&amp;quot; методов Adagrad и RMSProp, добавка с градиентом в которых не имеет размерности весов(точнее вообще безразмерна). Умножение этого слагаемого на любую величину правильной размерности — не самая хорошая идея. Используем разложение ряда Тейлора в точке с большим числом членов, тогда появится матрица Q вторых производных:&amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu(Q''(w^{(k)})^{-1}Q'(w^{(k)}&amp;lt;/tex&amp;gt;, рассчёт которой повлечёт за собой дополнительные затраты на её расчёт (сами градиенты мы получаем сразу при обратном распространии ошибки), поэтому вместо неё можно брать приближение (из сложных выводов получаем необходимиый множитель &amp;lt;tex&amp;gt;RMS^{(k-1)}[\delta w_i]&amp;lt;/tex&amp;gt;, однако в данном случае знание предыдущей скорости не довляет алгоритму &amp;quot;инерции&amp;quot; методов Momentum и NAG): &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\frac{RMS^{(k-1)}[\delta w_i]}{RMS^{(k)}[g_i]}g_i^{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;RMS^{(k)}[x_i]=\sqrt{E^{(k)}[x^2_i]+\epsilon}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adam&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1412.6980.pdf Adam]&amp;lt;/ref&amp;gt; сочетает в себе преимущества Nag и Adadelta над обычным градиентным спуском: &amp;lt;tex&amp;gt; w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{\hat{b}^2_{(k)}+\epsilon}}\hat{m}_{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\hat{m}_{(k)}=\frac{\gamma_1 E^{(k-1)}[g_i]+(1-\gamma_1)g_{i,(k)}}{1-\gamma_1^k}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\hat{b}^2_{(k)}= \frac{\gamma_2 E^{(k-1)}[g^2_i]+(1-\gamma_2)g:2_{i,(k)}}{1-\gamma_2^k}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Стохастический градиентный спуск]]&lt;br /&gt;
* [[Обратное распространение ошибки]]&amp;lt;sup&amp;gt;[на 28.01.19 страница не создана]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%28%D0%BA%D1%83%D1%80%D1%81_%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D0%B9%2C_%D0%9A.%D0%92.%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D1%86%D0%BE%D0%B2%29 Курс лекций по машинному обучению] {{---}} Воронцов К.В.&lt;br /&gt;
# Riedmiller, M., &amp;amp; Braun, H. (1993). A direct adaptive method for faster backpropagation learning: The RPROP algorithm. In Neural Networks, 1993., IEEE International Conference on (pp. 586-591). IEEE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69576</id>
		<title>Настройка глубокой сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69576"/>
				<updated>2019-01-28T14:57:50Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Глубое обучение|Глубокая сеть]] состоит из нескольких слоев, где каждый слой организован таким образом, что каждый нейрон в одном слое получает свою копию всех выходных данных предыдущего слоя. Эта модель идеально подходит для определенных типов задач, например, обучение на ограниченном количестве более или менее неструктурированных параметров. Существует множество способов изменения параметров (весов) в такой модели, когда ей на вход поступают необработанные данные. &lt;br /&gt;
&lt;br /&gt;
== Инициализация сети ==&lt;br /&gt;
&lt;br /&gt;
Принцип выбора начальных значений весов для слоев, составляющих модель очень важен: установка всех весов в 0 будет серьезным препятствием для обучения, так как ни один из весов изначально не будет активен. Присваивать весам значения из интервала &amp;lt;tex&amp;gt;[-1, 1]&amp;lt;/tex&amp;gt; — тоже обычно не лучший вариант — на самом деле, иногда (в зависимости от задачи и сложности модели) от правильной инициализации модели может зависеть, достигнет она высочайшей производительности или вообще не будет сходиться. Даже если задача не предполагает такой крайности, удачно выбранный способ инициализации весов может значительно влиять на способность модели к обучению, так как он предустанавливает параметры модели с учетом функции потерь&amp;lt;ref&amp;gt;[https://habr.com/company/wunderfund/blog/315476/ Тонкая настройка нейронной сети, Habr]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Всегда можно выбрать случайно начальное приближение, но лучше выбирать определённым образом, ниже приведены самые распространённые из них:&lt;br /&gt;
&lt;br /&gt;
* Метод инициализации Завьера (Xavier) (иногда — метод Glorot’а)&amp;lt;ref&amp;gt;[http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf Understanding the difficulty of training deep feedforward neural networks]&amp;lt;/ref&amp;gt;. Основная идея этого метода — упростить прохождение сигнала через слой во время как прямого, так и обратного распространения ошибки для линейной функции активации (этот метод также хорошо работает для сигмоидной функции, так как участок, где она ненасыщена, также имеет линейный характер). При вычислении весов этот метод опирается на вероятностное распределение (равномерное или нормальное) с дисперсией, равной &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in} + n_{out}}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n_{in}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n_{out}&amp;lt;/tex&amp;gt; — количества нейронов в предыдущем и последующем слоях соответственно.&lt;br /&gt;
&lt;br /&gt;
* Метод инициализации Ге (He) — это вариация метода Завьера, больше подходящая функции активации ReLU, компенсирующая тот факт, что эта функция возвращает нуль для половины области определения. А именно, в этом случае &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in}}}&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1502.01852.pdf Delving Deep into Rectifiers]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Граф вычислений ==&lt;br /&gt;
Глубокие сети являются особенной формой графа вычиcлений.&lt;br /&gt;
[[Файл: Graph_comp.png|800px|thumb|Рис.1. Граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Граф вычислений — это ориентированный граф, узлы которого соответствуют операциям или переменным. Переменные могут передавать свое значение в операции, а операции могут передавать свои результаты в другие операции. Таким образом, каждый узел в графе определяет функцию переменных.&lt;br /&gt;
&lt;br /&gt;
Значения, которые вводятся в узлы и выходят из узлов, называются тензорами (т.е. многомерными массивами). На рисунке 1 представлен граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;. В нейронах сетях функций имеют больше аргументов и сложнее, но смысл операций остаётся прежним.&lt;br /&gt;
&lt;br /&gt;
Процесс передачи значений от входных нейронов к выходным называется прямым распространеним (от англ. Forward pass). После чего мы вычисляем ошибку обработанных сетью данных на выходном нейроне и, основываясь на её значении, делаем обратную передачу ошибки ([[Обратное распространение ошибки|Back propagation]]). Обратное распространение ошибки заключается в том, чтобы последовательно менять веса нейронной сети, начиная с весов выходного нейрона. Значения весов будут меняться в сторону уменьшения ошибки.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Graph_compilation.jpg|400px|thumb|Рис.2. Граф вычислений для функции &amp;lt;tex&amp;gt;f(x,y,z)=(x+y)*z&amp;lt;/tex&amp;gt;. Зелёные цифры — значения вычислений по ходу выполнения операций графа, красные — значения производной выходной функции по текущей переменной в точке &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Преимуществом такого представления функции является простота вычисления производных. Используя следующие правила вычисления частных производных: &amp;lt;tex&amp;gt;q=x+y:\frac{\partial q}{\partial x}=1, \frac{\partial q}{\partial y}=1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;q=xy:\frac{\partial q}{\partial x}=y, \frac{\partial q}{\partial y}=x;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x}=\frac{\partial f}{\partial q}\frac{\partial q}{\partial y}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим граф вычислений на рисунке 2 с поданными на вход значениями &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;. Подсчёт производных по графу вычислений производим от значения функции к значениям независимых переменных-входов.&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\partial f}{\partial f} = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\partial f}{\partial q} = z_0 = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial z} = q_0 = 3&amp;lt;/tex&amp;gt;&lt;br /&gt;
* &amp;lt;tex&amp;gt;\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial x} = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial y} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial y} = -4&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
Граф вычислений - является частью нейронной сети, у которой &amp;lt;tex&amp;gt;x_{n_{in}}&amp;lt;/tex&amp;gt; — входные значения, &amp;lt;tex&amp;gt;y_{n_{out}}&amp;lt;/tex&amp;gt; — выходные с сети значения, &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; — матрица весов, изменяющая с помощью линейной комбинации значения предыдущего слоя.&lt;br /&gt;
&lt;br /&gt;
Зная производные, можно искать матрицы весов &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; (числа, на которые умножаются входные для этого слоя значения) с помощью [[Настройка глубокой сети#Способы настройки параметров|градиентного спуска]] сдвигаемся&lt;br /&gt;
в сторону градиента (при максимизации) или обратную ему&lt;br /&gt;
(при минимизации) &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\eta \frac{\partial L(w^{(k)})}{\partial w^{(k)}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;L&amp;lt;/tex&amp;gt; — функция потерь, а &amp;lt;tex&amp;gt;w^{(k)}&amp;lt;/tex&amp;gt; — веса после &amp;lt;tex&amp;gt;k&amp;lt;/tex&amp;gt;-ой итерации, или его модификаций&amp;lt;ref&amp;gt;[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%81%D0%BF%D1%83%D1%81%D0%BA%D0%B0 Метод градиентного спуска]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Способы настройки параметров ==&lt;br /&gt;
[[File:basins.png|450px|thumb|right|Рисунок 3. Сравение мотификаций метода градиентного спуска на ландшафте &amp;quot;бассейны и стены&amp;quot;.]]&lt;br /&gt;
[[File:wolby.png|450px|thumb|right|Рисунок 4. Сравение мотификаций метода градиентного спуска на &amp;quot;шатком&amp;quot; ландшафте.]]&lt;br /&gt;
Ниже представлены различные вариации градиентного спуска (более подробное сравнение, применительно к данной задаче &amp;lt;ref&amp;gt;[https://habr.com/post/318970/ Методы оптимизации нейронных сетей, Habr]&amp;lt;/ref&amp;gt;). Градиентный спуск — итеративный алгоритм поиска минимума или максимума функции, метриками качества алгоритма этого семейства методов являются скорость сходимости и сходимость в глобальный оптимум. Методы имеют различные преимущества на различных функциях. Так например на рисунке 3 из локального минимума метод adam и метод Нестерова не могут достигнуть глобального, а в случае &amp;quot;шаткого&amp;quot; ландшафта (рисунок 4) эти методы сходятся быстрее.&lt;br /&gt;
&lt;br /&gt;
* [[Стохастический градиентный спуск|Метод стохастического градиентного спуска]] заключается в том, что алгоритм делает шаг постоянной величины в направлении, указанном градиентом в текущей точке: &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu\frac{\partial L(w^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Модификация Momentum &amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum Momentum, Wikipedia]&amp;lt;/ref&amp;gt; запоминает скорость на предыдущем шаге и добавляет в &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; раз меньшую величину на следующем шаге: &amp;lt;tex&amp;gt; \Delta w:=\alpha \Delta w-\eta \nabla Q_{i}(w)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; w=w+\Delta w&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; w=w-\eta \nabla Q_{i}(w)+\alpha \Delta w&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Метод Нестерова (англ. Nesterov accelerated gradient, NAG)&amp;lt;ref&amp;gt;[https://jlmelville.github.io/mize/nesterov.html#nag Nesterov accelerated gradient]&amp;lt;/ref&amp;gt; добавляет к методу Momentum идею &amp;quot;заглядывания вперёд&amp;quot;, используя производную не в текущей точке, а в следующей (если бы мы продолжали двигаться в этом же направлении без измений): &amp;lt;tex&amp;gt; w^{(k+1)} = w^{(k)}-v^{(k)}; v^{(k+1)}=\gamma v^{(k)}+\mu\frac{\partial L(w^{(k)}-v^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adagrad имеет преимущество в плане обучения нейронных сетей в предположении, что процесс обучения должен сходится (т.е. не нужно сильно менять веса сети, когда мы уже немного научились). В процессе обучения после каждого прецендента алгоритм будет уменьшать шаг за счёт суммы квадратов координат градиента предыдущих итераций&amp;lt;ref&amp;gt;[http://akyrillidis.github.io/notes/AdaGrad AdaGrad]&amp;lt;/ref&amp;gt;: &amp;lt;tex&amp;gt;g_{i,(k)}=\frac{\partial L(w_i^{(k)})}{\partial w_i}, w_i^{(k+1)}=w_i^{(k)}-\frac{\mu}{\sqrt{G^{(k)}_i,i+\epsilon}}g_{i,(k)}&amp;lt;/tex&amp;gt;, где G — диагональная матрица, элементы которой, суммы квадратов координат градиента к k-ой итерации алгоритма;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*RMSProp&amp;lt;ref&amp;gt;[https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b RMSProp]&amp;lt;/ref&amp;gt; основан на идее Adagrad'a, но с учётом того элементы матрицы G могут быть большими величинами и начать препятствовать обучению. Для этого RMSProp делит шаг не на полную сумму градиентов, а на скользящую, т.е. &amp;lt;tex&amp;gt;E^{(k)}[g_i^2] = \gamma E^{(k-1)}[g_i^2]+(1-\gamma)g^2_{i, (k)}&amp;lt;/tex&amp;gt;, обновление весов осталось таким же как в Adagrad : &amp;lt;tex&amp;gt; w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{E^{(k)}[g_i^2]+\epsilon}}g_{i, (k)}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adadelta&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1212.5701 Adadelta]&amp;lt;/ref&amp;gt; устраняет &amp;quot;нефизичность&amp;quot; методов Adagrad и RMSProp, добавка с градиентом в которых не имеет размерности весов(точнее вообще безразмерна). Умножение этого слагаемого на любую величину правильной размерности — не самая хорошая идея. Используем разложение ряда Тейлора в точке с большим числом членов, тогда появится матрица Q вторых производных:&amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu(Q''(w^{(k)})^{-1}Q'(w^{(k)}&amp;lt;/tex&amp;gt;, рассчёт которой повлечёт за собой дополнительные затраты на её расчёт (сами градиенты мы получаем сразу при обратном распространии ошибки), поэтому вместо неё можно брать приближение (из сложных выводов получаем необходимиый множитель &amp;lt;tex&amp;gt;RMS^{(k-1)}[\delta w_i]&amp;lt;/tex&amp;gt;, однако в данном случае знание предыдущей скорости не довляет алгоритму &amp;quot;инерции&amp;quot; методов Momentum и NAG): &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\frac{RMS^{(k-1)}[\delta w_i]}{RMS^{(k)}[g_i]}g_i^{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;RMS^{(k)}[x_i]=\sqrt{E^{(k)}[x^2_i]+\epsilon}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adam&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1412.6980.pdf Adam]&amp;lt;/ref&amp;gt; сочетает в себе преимущества Nag и Adadelta над обычным градиентным спуском: &amp;lt;tex&amp;gt; w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{\hat{b}^2_{(k)}+\epsilon}}\hat{m}_{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\hat{m}_{(k)}=\frac{\gamma_1 E^{(k-1)}[g_i]+(1-\gamma_1)g_{i,(k)}}{1-\gamma_1^k}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\hat{b}^2_{(k)}= \frac{\gamma_2 E^{(k-1)}[g^2_i]+(1-\gamma_2)g:2_{i,(k)}}{1-\gamma_2^k}&amp;lt;/tex&amp;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;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%28%D0%BA%D1%83%D1%80%D1%81_%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D0%B9%2C_%D0%9A.%D0%92.%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D1%86%D0%BE%D0%B2%29 Курс лекций по машинному обучению] {{---}} Воронцов К.В.&lt;br /&gt;
# Riedmiller, M., &amp;amp; Braun, H. (1993). A direct adaptive method for faster backpropagation learning: The RPROP algorithm. In Neural Networks, 1993., IEEE International Conference on (pp. 586-591). IEEE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69448</id>
		<title>Настройка глубокой сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69448"/>
				<updated>2019-01-27T06:01:51Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: /* Способы настройки параметров */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5 Глубокая сеть] состоит из нескольких слоев, где каждый слой организован таким образом, что каждый нейрон в одном слое получает свою копию всех выходных данных предыдущего слоя. Эта модель идеально подходит для определенных типов задач, например, обучение на ограниченном количество более или менее неструктурированных параметров. Существует множество способов изменения параметров (весов) в такой модели, когда ей на вход поступают необработанные данные. &lt;br /&gt;
&lt;br /&gt;
== Инициализация сети ==&lt;br /&gt;
&lt;br /&gt;
Принцип выбора начальных значений весов для слоев, составляющих модель очень важен: установка всех весов в 0 будет серьезным препятствием для обучения, так как ни один из весов изначально не будет активен. Присваивать весам значения из интервала ±1 — тоже обычно не лучший вариант — на самом деле, иногда (в зависимости от задачи и сложности модели) от правильной инициализации модели может зависеть, достигнет она высочайшей производительности или вообще не будет сходиться. Даже если задача не предполагает такой крайности, удачно выбранный способ инициализации весов может значительно влиять на способность модели к обучению, так как он предустанавливает параметры модели с учетом функции потерь&amp;lt;ref&amp;gt;[https://habr.com/company/wunderfund/blog/315476/ Тонкая настройка нейронной сети, Habr]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Всегда можно выбрать случайно начальное приближение, но лучше выбирать определённым образом, ниже приведены самые распространённые из них.&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Завьера (Xavier) (иногда — метод Glorot’а)&amp;lt;ref&amp;gt;[http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf Understanding the difficulty of training deep feedforward neural networks]&amp;lt;/ref&amp;gt;. Основная идея этого метода — упростить прохождение сигнала через слой во время как прямого, так и обратного распространения ошибки для линейной функции активации (этот метод также хорошо работает для сигмоидной функции, так как участок, где она ненасыщена, также имеет линейный характер). При вычислении весов этот метод опирается на вероятностное распределение (равномерное или нормальное) с дисперсией, равной &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in} + n_{out}}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n_{in}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n_{out}&amp;lt;/tex&amp;gt; — количества нейронов в предыдущем и последующем слоях соответственно.&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Ге (He) — это вариация метода Завьера, больше подходящая функции активации ReLU, компенсирующая тот факт, что эта функция возвращает нуль для половины области определения. А именно, в этом случае &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in}}}&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1502.01852.pdf Delving Deep into Rectifiers]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Граф вычислений ==&lt;br /&gt;
Глубокие сети являются особенной формой графа вычиcлений.&lt;br /&gt;
[[Файл: Graph_comp.png|800px|thumb|Рис.1. Граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Граф вычислений — это ориентированный граф, узлы которого соответствуют операциям или переменным. Переменные могут передавать свое значение в операции, а операции могут передавать свои результаты в другие операции. Таким образом, каждый узел в графе определяет функцию переменных.&lt;br /&gt;
&lt;br /&gt;
Значения, которые вводятся в узлы и выходят из узлов, называются тензорами (т.е. многомерными массивами). На рисунке 1 представлен граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;. В нейронах сетях функций имеют больше аргументов и сложнее, но смысл операций остаётся прежним.&lt;br /&gt;
&lt;br /&gt;
Процесс передачи значений от входных нейронов к выходным называется прямым распространеним (от англ. Forward pass). После чего мы вычисляем ошибку обработанных сетью данных на выходном нейроне и, основываясь на её значении, делаем обратную передачу (Back propagation)&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Backpropagation Backpropagation, Wikipedia]&amp;lt;/ref&amp;gt;. Back propagation заключается в том, чтобы последовательно менять веса нейронной сети, начиная с весов выходного нейрона. Значения весов будут меняться в сторону уменьшения ошибки.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Graph_compilation.jpg|400px|thumb|Рис.2. Граф вычислений для функции &amp;lt;tex&amp;gt;f(x,y,z)=(x+y)*z&amp;lt;/tex&amp;gt;. Зелёные цифры — значения вычислений по ходу выполнения операций графа, красные — значения производной выходной функции по текущей переменной в точке &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Преимуществом такого представления функции является простота вычисления производных. Используя следующие правила вычисления частных производных: &amp;lt;tex&amp;gt;q=x+y:\frac{\partial q}{\partial x}=1, \frac{\partial q}{\partial y}=1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;q=xy:\frac{\partial q}{\partial x}=y, \frac{\partial q}{\partial y}=x;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x}=\frac{\partial f}{\partial q}\frac{\partial q}{\partial y}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим граф вычислений на рисунке 2 с поданными на вход значениями &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;. Подсчёт производных по графу вычислений производим от значения функции к значениям независимых переменных-входов.&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial f} = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial q} = z_0 = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial z} = q_0 = 3&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial x} = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial y} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial y} = -4&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл: Schematic-diagram-of-a-general-back-propagation-neural-network.png|400px|thumb|Рис.3. Архитекутра нейронной сети: &amp;lt;tex&amp;gt;x_{N_i}&amp;lt;/tex&amp;gt; — входные значения, &amp;lt;tex&amp;gt;y_{N_i}&amp;lt;/tex&amp;gt; — выходные с сети значения, &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; — матрица весов, изменяющая с помощью линейной комбинации значения предыдущего слоя]] &lt;br /&gt;
&lt;br /&gt;
Зная производные, можно искать матрицы весов &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; (числа, на которые умножаются входные для этого слоя значения) с помощью градиентного спуска сдвигаемся&lt;br /&gt;
в сторону градиента (при максимизации) или обратную ему&lt;br /&gt;
(при минимизации) &amp;lt;tex&amp;gt;w:=w-\eta\nabla_w f&amp;lt;/tex&amp;gt;, или его модификаций&amp;lt;ref&amp;gt;[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%81%D0%BF%D1%83%D1%81%D0%BA%D0%B0 Метод градиентного спуска]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Способы настройки параметров ==&lt;br /&gt;
[[File:basins.png|450px|thumb|right|Рисунок 4. Сравение мотификаций метода градиентного спуска на ландшафте &amp;quot;бассейны и стены&amp;quot;.]]&lt;br /&gt;
[[File:wolby.png|450px|thumb|right|Рисунок 5. Сравение мотификаций метода градиентного спуска на &amp;quot;шатком&amp;quot; ландшафте.]]&lt;br /&gt;
Ниже представлены различные вариации градиентного спуска (более подробное сравнение, применительно к данной задаче &amp;lt;ref&amp;gt;[https://habr.com/post/318970/ Методы оптимизации нейронных сетей, Habr]&amp;lt;/ref&amp;gt;). Градиентный спуск — итеративный алгоритм поиска минимума или максимума функции, метриками качества алгоритма этого семейства методов являются скорость сходимости и сходимость в глобальный оптимум. Методы имеют различные преимущества на различных функциях. Так например на рисунке 4 из локального минимума методы adam и nag не могут достигнуть глобального, а в случае &amp;quot;шаткого&amp;quot; ландшафта (рисунок 5) эти методы сходятся быстрее.&lt;br /&gt;
&lt;br /&gt;
* Стохастический градиентный спуск&amp;lt;ref&amp;gt;[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D1%81%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%B0 Метод стохастического градиента]&amp;lt;/ref&amp;gt; заключается в том, что алгоритм делает шаг постоянной величины в направлении, указанном градиентом в текущей точке: &amp;lt;tex&amp;gt;w^{(0)}&amp;lt;/tex&amp;gt; — начальные весы сети, &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu\frac{\partial L(w^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Модификация Momentum &amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum Momentum, Wikipedia]&amp;lt;/ref&amp;gt; запоминает скорость на предыдущем шаге и добавляет в &amp;lt;tex&amp;gt;\alpha&amp;lt;/tex&amp;gt; раз меньшую величину на следующем шаге: &amp;lt;tex&amp;gt; \Delta w:=\alpha \Delta w-\eta \nabla Q_{i}(w)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; w:=w+\Delta w&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; w:=w-\eta \nabla Q_{i}(w)+\alpha \Delta w&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* NAG (Nesterov accelerated gradient)&amp;lt;ref&amp;gt;[https://jlmelville.github.io/mize/nesterov.html#nag Nesterov accelerated gradient]&amp;lt;/ref&amp;gt; добавляет к методу Momentum идею &amp;quot;заглядывания вперёд&amp;quot;, используя производную не в текущей точке, а в следующей (если бы мы продолжали двигаться в этом же направлении без измений): &amp;lt;tex&amp;gt; w^{(k+1)} = w^{(k)}-v^{(k)}; v^{(k+1)}=\gamma v^{(k)}+\mu\frac{\partial L(w^{(k)}-v^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adagrad имеет преимущество в плане обучения нейронных сетей в предположении, что процесс обучения должен сходится (т.е. не нужно сильно менять веса сети, когда мы уже немного научились). В процессе обучения после каждого прецендента алгоритм будет уменьшать шаг за счёт суммы квадратов координат градиента предыдущих итераций&amp;lt;ref&amp;gt;[http://akyrillidis.github.io/notes/AdaGrad AdaGrad]&amp;lt;/ref&amp;gt;: &amp;lt;tex&amp;gt;g_{i,(k)}=\frac{\partial L(w_i^{(k)})}{\partial w_i}, w_i^{(k+1)}=w_i^{(k)}-\frac{\mu}{\sqrt{G^{(k)}_i,i+\epsilon}}g_{i,(k)}&amp;lt;/tex&amp;gt;, где G — диагональная матрица, элементы которой, суммы квадратов координат градиента к k-ой итерации алгоритма;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*RMSProp&amp;lt;ref&amp;gt;[https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b RMSProp]&amp;lt;/ref&amp;gt; основан на идее Adagrad'a, но с учётом того элементы матрицы G могут быть большими величинами и начать препятствовать обучению. Для этого RMSProp делит шаг не на полную сумму градиентов, а на скользящую, т.е. &amp;lt;tex&amp;gt;E^{(k)}[g_i^2] = \gamma E^{(k-1)}[g_i^2]+(1-\gamma)g^2_{i, (k)}&amp;lt;/tex&amp;gt;, обновление весов осталось таким же как в Adagrad : &amp;lt;tex&amp;gt; w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{E^{(k)}[g_i^2]+\epsilon}}g_{i, (k)}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adadelta&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1212.5701 Adadelta]&amp;lt;/ref&amp;gt; устраняет &amp;quot;нефизичность&amp;quot; методов Adagrad и RMSProp, добавка с градиентом в которых не имеет размерности весов(точнее вообще безразмерна). Умножение этого слагаемого на любую величину правильной размерности — не самая хорошая идея. Используем разложение ряда Тейлора в точке с большим числом членов, тогда появится матрица Q вторых производных:&amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu(Q''(w^{(k)})^{-1}Q'(w^{(k)}&amp;lt;/tex&amp;gt;, рассчёт которой повлечёт за собой дополнительные затраты на её расчёт (сами градиенты мы получаем сразу при обратном распространии ошибки), поэтому вместо неё можно брать приближение (из сложных выводов получаем необходимиый множитель &amp;lt;tex&amp;gt;RMS^{(k-1)}[\delta w_i]&amp;lt;/tex&amp;gt;, однако в данном случае знание предыдущей скорости не довляет алгоритму &amp;quot;инерции&amp;quot; методов Momentum и NAG): &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\frac{RMS^{(k-1)}[\delta w_i]}{RMS^{(k)}[g_i]}g_i^{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;RMS^{(k)}[x_i]=\sqrt{E^{(k)}[x^2_i]+\epsilon}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adam&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1412.6980.pdf Adam]&amp;lt;/ref&amp;gt; сочетает в себе преимущества Nag и Adadelta над обычным градиентным спуском: &amp;lt;tex&amp;gt; w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{\hat{b}^2_{(k)}+\epsilon}}\hat{m}_{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\hat{m}_{(k)}=\frac{\gamma_1 E^{(k-1)}[g_i]+(1-\gamma_1)g_{i,(k)}}{1-\gamma_1^k}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\hat{b}^2_{(k)}= \frac{\gamma_2 E^{(k-1)}[g^2_i]+(1-\gamma_2)g:2_{i,(k)}}{1-\gamma_2^k}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Стохастический градиентный спуск]]&amp;lt;sup&amp;gt;[на 21.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%28%D0%BA%D1%83%D1%80%D1%81_%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D0%B9%2C_%D0%9A.%D0%92.%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D1%86%D0%BE%D0%B2%29 Курс лекций по машинному обучению] {{---}} Воронцов К.В.&lt;br /&gt;
# Riedmiller, M., &amp;amp; Braun, H. (1993). A direct adaptive method for faster backpropagation learning: The RPROP algorithm. In Neural Networks, 1993., IEEE International Conference on (pp. 586-591). IEEE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Wolby.png&amp;diff=69447</id>
		<title>Файл:Wolby.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Wolby.png&amp;diff=69447"/>
				<updated>2019-01-27T05:15:15Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Basins.png&amp;diff=69446</id>
		<title>Файл:Basins.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Basins.png&amp;diff=69446"/>
				<updated>2019-01-27T05:14:59Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Bassins.gif&amp;diff=69445</id>
		<title>Файл:Bassins.gif</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Bassins.gif&amp;diff=69445"/>
				<updated>2019-01-27T05:11:47Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69444</id>
		<title>Настройка глубокой сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69444"/>
				<updated>2019-01-27T05:03:14Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5 Глубокая сеть] состоит из нескольких слоев, где каждый слой организован таким образом, что каждый нейрон в одном слое получает свою копию всех выходных данных предыдущего слоя. Эта модель идеально подходит для определенных типов задач, например, обучение на ограниченном количество более или менее неструктурированных параметров. Существует множество способов изменения параметров (весов) в такой модели, когда ей на вход поступают необработанные данные. &lt;br /&gt;
&lt;br /&gt;
== Инициализация сети ==&lt;br /&gt;
&lt;br /&gt;
Принцип выбора начальных значений весов для слоев, составляющих модель очень важен: установка всех весов в 0 будет серьезным препятствием для обучения, так как ни один из весов изначально не будет активен. Присваивать весам значения из интервала ±1 — тоже обычно не лучший вариант — на самом деле, иногда (в зависимости от задачи и сложности модели) от правильной инициализации модели может зависеть, достигнет она высочайшей производительности или вообще не будет сходиться. Даже если задача не предполагает такой крайности, удачно выбранный способ инициализации весов может значительно влиять на способность модели к обучению, так как он предустанавливает параметры модели с учетом функции потерь&amp;lt;ref&amp;gt;[https://habr.com/company/wunderfund/blog/315476/ Тонкая настройка нейронной сети, Habr]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Всегда можно выбрать случайно начальное приближение, но лучше выбирать определённым образом, ниже приведены самые распространённые из них.&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Завьера (Xavier) (иногда — метод Glorot’а)&amp;lt;ref&amp;gt;[http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf Understanding the difficulty of training deep feedforward neural networks]&amp;lt;/ref&amp;gt;. Основная идея этого метода — упростить прохождение сигнала через слой во время как прямого, так и обратного распространения ошибки для линейной функции активации (этот метод также хорошо работает для сигмоидной функции, так как участок, где она ненасыщена, также имеет линейный характер). При вычислении весов этот метод опирается на вероятностное распределение (равномерное или нормальное) с дисперсией, равной &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in} + n_{out}}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n_{in}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n_{out}&amp;lt;/tex&amp;gt; — количества нейронов в предыдущем и последующем слоях соответственно.&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Ге (He) — это вариация метода Завьера, больше подходящая функции активации ReLU, компенсирующая тот факт, что эта функция возвращает нуль для половины области определения. А именно, в этом случае &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in}}}&amp;lt;/tex&amp;gt;&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1502.01852.pdf Delving Deep into Rectifiers]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Граф вычислений ==&lt;br /&gt;
Глубокие сети являются особенной формой графа вычиcлений.&lt;br /&gt;
[[Файл: Graph_comp.png|800px|thumb|Рис.1. Граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Граф вычислений — это ориентированный граф, узлы которого соответствуют операциям или переменным. Переменные могут передавать свое значение в операции, а операции могут передавать свои результаты в другие операции. Таким образом, каждый узел в графе определяет функцию переменных.&lt;br /&gt;
&lt;br /&gt;
Значения, которые вводятся в узлы и выходят из узлов, называются тензорами (т.е. многомерными массивами). На рисунке 1 представлен граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;. В нейронах сетях функций имеют больше аргументов и сложнее, но смысл операций остаётся прежним.&lt;br /&gt;
&lt;br /&gt;
Процесс передачи значений от входных нейронов к выходным называется прямым распространеним (от англ. Forward pass). После чего мы вычисляем ошибку обработанных сетью данных на выходном нейроне и, основываясь на её значении, делаем обратную передачу (Back propagation)&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Backpropagation Backpropagation, Wikipedia]&amp;lt;/ref&amp;gt;. Back propagation заключается в том, чтобы последовательно менять веса нейронной сети, начиная с весов выходного нейрона. Значения весов будут меняться в сторону уменьшения ошибки.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Graph_compilation.jpg|400px|thumb|Рис.2. Граф вычислений для функции &amp;lt;tex&amp;gt;f(x,y,z)=(x+y)*z&amp;lt;/tex&amp;gt;. Зелёные цифры — значения вычислений по ходу выполнения операций графа, красные — значения производной выходной функции по текущей переменной в точке &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Преимуществом такого представления функции является простота вычисления производных. Используя следующие правила вычисления частных производных: &amp;lt;tex&amp;gt;q=x+y:\frac{\partial q}{\partial x}=1, \frac{\partial q}{\partial y}=1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;q=xy:\frac{\partial q}{\partial x}=y, \frac{\partial q}{\partial y}=x;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x}=\frac{\partial f}{\partial q}\frac{\partial q}{\partial y}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим граф вычислений на рисунке 2 с поданными на вход значениями &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;. Подсчёт производных по графу вычислений производим от значения функции к значениям независимых переменных-входов.&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial f} = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial q} = z_0 = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial z} = q_0 = 3&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial x} = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial y} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial y} = -4&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл: Schematic-diagram-of-a-general-back-propagation-neural-network.png|400px|thumb|Рис.3. Архитекутра нейронной сети: &amp;lt;tex&amp;gt;x_{N_i}&amp;lt;/tex&amp;gt; — входные значения, &amp;lt;tex&amp;gt;y_{N_i}&amp;lt;/tex&amp;gt; — выходные с сети значения, &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; — матрица весов, изменяющая с помощью линейной комбинации значения предыдущего слоя]] &lt;br /&gt;
&lt;br /&gt;
Зная производные, можно искать матрицы весов &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; (числа, на которые умножаются входные для этого слоя значения) с помощью градиентного спуска сдвигаемся&lt;br /&gt;
в сторону градиента (при максимизации) или обратную ему&lt;br /&gt;
(при минимизации) &amp;lt;tex&amp;gt;w:=w-\eta\nabla_w f&amp;lt;/tex&amp;gt;, или его модификаций&amp;lt;ref&amp;gt;[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%81%D0%BF%D1%83%D1%81%D0%BA%D0%B0 Метод градиентного спуска]&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Способы настройки параметров ==&lt;br /&gt;
&lt;br /&gt;
Ниже представлены различные вариации градиентного спуска (более подробное сравнение, применительно к данной задаче &amp;lt;ref&amp;gt;[https://habr.com/post/318970/ Методы оптимизации нейронных сетей, Habr]&amp;lt;/ref&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
* Стохастический градиентный спуск&amp;lt;ref&amp;gt;[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D1%81%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%B0 Метод стохастического градиента]&amp;lt;/ref&amp;gt;: &amp;lt;tex&amp;gt;w^{(0)}&amp;lt;/tex&amp;gt; — начальные весы сети, &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu\frac{\partial L(w^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* Momentum &amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum Momentum, Wikipedia]&amp;lt;/ref&amp;gt;: &amp;lt;tex&amp;gt; \Delta w:=\alpha \Delta w-\eta \nabla Q_{i}(w)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; w:=w+\Delta w&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; w:=w-\eta \nabla Q_{i}(w)+\alpha \Delta w&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* NAG (Nesterov accelerated gradient)&amp;lt;ref&amp;gt;[https://jlmelville.github.io/mize/nesterov.html#nag Nesterov accelerated gradient]&amp;lt;/ref&amp;gt;: &amp;lt;tex&amp;gt; w^{(k+1)} = w^{(k)}-v^{(k)}; v^{(k+1)}=\gamma v^{(k)}+\mu\frac{\partial L(w^{(k)}-v^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Adagrad&amp;lt;ref&amp;gt;[http://akyrillidis.github.io/notes/AdaGrad AdaGrad]&amp;lt;/ref&amp;gt;: &amp;lt;tex&amp;gt;g_{i,(k)}=\frac{\partial L(w_i^{(k)})}{\partial w_i}, w_i^{(k+1)}=w_i^{(k)}-\frac{\mu}{\sqrt{G^{(k)}_i,i+\epsilon}}g_{i,(k)}&amp;lt;/tex&amp;gt;, где G — диагональная матрица, элементы которой, суммы квадратов координат градиента к k-ой итерации алгоритма;&lt;br /&gt;
&lt;br /&gt;
*RMSProp&amp;lt;ref&amp;gt;[https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b RMSProp]&amp;lt;/ref&amp;gt;: &amp;lt;tex&amp;gt;E^{(k)}[g_i^2] = \gamma E^{(k-1)}[g_i^2]+(1-\gamma)g^2_{i, (k)}, w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{E^{(k)}[g_i^2]+\epsilon}}g_{i, (k)}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adadelta&amp;lt;ref&amp;gt;[https://arxiv.org/abs/1212.5701 Adadelta]&amp;lt;/ref&amp;gt;:&amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu(Q''(w^{(k)})^{-1}Q'(w^{(k)}&amp;lt;/tex&amp;gt;, вычисление матрицы Q вторых производных довольно сложная задача, поэтому вместо неё можно брать приближение: &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\frac{RMS^{(k-1)}[\delta w_i}{RMS^{(k)}[g_i]}g_i^{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;RMS^{(k)}[x_i]=\sqrt{E^{(k)}[x^2_i]+\epsilon}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*Adam&amp;lt;ref&amp;gt;[https://arxiv.org/pdf/1412.6980.pdf Adam]&amp;lt;/ref&amp;gt;: &amp;lt;tex&amp;gt; w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{\hat{b}^2_{(k)}+\epsilon}}\hat{m}_{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\hat{m}_{(k)}=\frac{\gamma_1 E^{(k-1)}[g_i]+(1-\gamma_1)g_{i,(k)}}{1-\gamma_1^k}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\hat{b}^2_{(k)}= \frac{\gamma_2 E^{(k-1)}[g^2_i]+(1-\gamma_2)g:2_{i,(k)}}{1-\gamma_2^k}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Стохастический градиентный спуск]]&amp;lt;sup&amp;gt;[на 21.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Источники информации==&lt;br /&gt;
&lt;br /&gt;
#[http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%28%D0%BA%D1%83%D1%80%D1%81_%D0%BB%D0%B5%D0%BA%D1%86%D0%B8%D0%B9%2C_%D0%9A.%D0%92.%D0%92%D0%BE%D1%80%D0%BE%D0%BD%D1%86%D0%BE%D0%B2%29 Курс лекций по машинному обучению] {{---}} Воронцов К.В.&lt;br /&gt;
# Riedmiller, M., &amp;amp; Braun, H. (1993). A direct adaptive method for faster backpropagation learning: The RPROP algorithm. In Neural Networks, 1993., IEEE International Conference on (pp. 586-591). IEEE.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69247</id>
		<title>Настройка глубокой сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69247"/>
				<updated>2019-01-24T19:01:36Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: /* Граф вычислений */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5 Глубокая сеть] состоит из нескольких слоев, где каждый слой организован таким образом, что каждый нейрон в одном слое получает свою копию всех выходных данных предыдущего слоя. Эта модель идеально подходит для определенных типов задач, например, обучение на ограниченном количество более или менее неструктурированных параметров. Существует множество способов изменения параметров (весов) в такой модели, когда ей на вход поступают необработанные данные. &lt;br /&gt;
&lt;br /&gt;
== Инициализация сети ==&lt;br /&gt;
&lt;br /&gt;
Принцип выбора начальных значений весов для слоев, составляющих модель очень важен: установка всех весов в 0 будет серьезным препятствием для обучения, так как ни один из весов изначально не будет активен. Присваивать весам значения из интервала ±1 — тоже обычно не лучший вариант — на самом деле, иногда (в зависимости от задачи и сложности модели) от правильной инициализации модели может зависеть, достигнет она высочайшей производительности или вообще не будет сходиться. Даже если задача не предполагает такой крайности, удачно выбранный способ инициализации весов может значительно влиять на способность модели к обучению, так как он предустанавливает параметры модели с учетом функции потерь.[https://habr.com/company/wunderfund/blog/315476/]&lt;br /&gt;
&lt;br /&gt;
Всегда можно выбрать случайно начальное приближение, но лучше выбирать определённым образом, ниже приведены самые распространённые из них.&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Завьера (Xavier) (иногда — метод Glorot’а)[http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf]. Основная идея этого метода — упростить прохождение сигнала через слой во время как прямого, так и обратного распространения ошибки для линейной функции активации (этот метод также хорошо работает для сигмоидной функции, так как участок, где она ненасыщена, также имеет линейный характер). При вычислении весов этот метод опирается на вероятностное распределение (равномерное или нормальное) с дисперсией, равной &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in} + n_{out}}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n_{in}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n_{out}&amp;lt;/tex&amp;gt; — количества нейронов в предыдущем и последующем слоях соответственно.&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Ге (He) — это вариация метода Завьера, больше подходящая функции активации ReLU, компенсирующая тот факт, что эта функция возвращает нуль для половины области определения. А именно, в этом случае &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in}}}&amp;lt;/tex&amp;gt;[https://arxiv.org/pdf/1502.01852.pdf].&lt;br /&gt;
&lt;br /&gt;
== Граф вычислений ==&lt;br /&gt;
Глубокие сети являются особенной формой графа вычиcлений.&lt;br /&gt;
[[Файл: Graph_comp.png|800px|thumb|Рис.1. Граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Граф вычислений — это ориентированный граф, узлы которого соответствуют операциям или переменным. Переменные могут передавать свое значение в операции, а операции могут передавать свои результаты в другие операции. Таким образом, каждый узел в графе определяет функцию переменных.&lt;br /&gt;
&lt;br /&gt;
Значения, которые вводятся в узлы и выходят из узлов, называются тензорами (т.е. многомерными массивами). На рисунке 1 представлен граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;. В нейронах сетях функций имеют больше аргументов и сложнее, но смысл операций остаётся прежним.&lt;br /&gt;
&lt;br /&gt;
Процесс передачи значений от входных нейронов к выходным называется прямым распространеним (от англ. Forward pass). После чего мы вычисляем ошибку обработанных сетью данных на выходном нейроне и, основываясь на её значении, делаем обратную передачу (Back propagation)[https://en.wikipedia.org/wiki/Backpropagation]. Back propagation заключается в том, чтобы последовательно менять веса нейронной сети, начиная с весов выходного нейрона. Значения весов будут меняться в сторону уменьшения ошибки.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Graph_compilation.jpg|400px|thumb|Рис.2. Граф вычислений для функции &amp;lt;tex&amp;gt;f(x,y,z)=(x+y)*z&amp;lt;/tex&amp;gt;. Зелёные цифры — значения вычислений по ходу выполнения операций графа, красные — значения производной выходной функции по текущей переменной в точке &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Преимуществом такого представления функции является простота вычисления производных. Используя следующие правила вычисления частных производных: &amp;lt;tex&amp;gt;q=x+y:\frac{\partial q}{\partial x}=1, \frac{\partial q}{\partial y}=1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;q=xy:\frac{\partial q}{\partial x}=y, \frac{\partial q}{\partial y}=x;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x}=\frac{\partial f}{\partial q}\frac{\partial q}{\partial y}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим граф вычислений на рисунке 2 с поданными на вход значениями &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;. Подсчёт производных по графу вычислений производим от значения функции к значениям независимых переменных-входов.&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial f} = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial q} = z_0 = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial z} = q_0 = 3&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial x} = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial y} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial y} = -4&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл: Schematic-diagram-of-a-general-back-propagation-neural-network.png|400px|thumb|Рис.3. Архитекутра нейронной сети: &amp;lt;tex&amp;gt;x_{N_i}&amp;lt;/tex&amp;gt; — входные значения, &amp;lt;tex&amp;gt;y_{N_i}&amp;lt;/tex&amp;gt; — выходные с сети значения, &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; — матрица весов, изменяющая с помощью линейной комбинации значения предыдущего слоя]] &lt;br /&gt;
&lt;br /&gt;
Зная производные, можно искать матрицы весов &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; (числа, на которые умножаются входные для этого слоя значения) с помощью градиентного спуска сдвигаемся&lt;br /&gt;
в сторону градиента (при максимизации) или обратную ему&lt;br /&gt;
(при минимизации) &amp;lt;tex&amp;gt;w:=w-\eta\nabla_w f&amp;lt;/tex&amp;gt;, или его модификаций [http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%81%D0%BF%D1%83%D1%81%D0%BA%D0%B0].&lt;br /&gt;
&lt;br /&gt;
== Способы настройки параметров ==&lt;br /&gt;
&lt;br /&gt;
Ниже представлены различные вариации градиентного спуска (более подробное сравнение, применительно к данной задаче [https://habr.com/post/318970/]).&lt;br /&gt;
&lt;br /&gt;
* Стохастический градиентный спуск [http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D1%81%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%B0]: &amp;lt;tex&amp;gt;w^{(0)}&amp;lt;/tex&amp;gt; — начальные весы сети, &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu\frac{\partial L(w^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* Momentum  [https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum]: &amp;lt;tex&amp;gt; \Delta w:=\alpha \Delta w-\eta \nabla Q_{i}(w)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; w:=w+\Delta w&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; w:=w-\eta \nabla Q_{i}(w)+\alpha \Delta w&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* NAG (Nesterov accelerated gradient)[https://jlmelville.github.io/mize/nesterov.html#nag]: &amp;lt;tex&amp;gt; w^{(k+1)} = w^{(k)}-v^{(k)}; v^{(k+1)}=\gamma v^{(k)}+\mu\frac{\partial L(w^{(k)}-v^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Adagrad [http://akyrillidis.github.io/notes/AdaGrad]: &amp;lt;tex&amp;gt;g_{i,(k)}=\frac{\partial L(w_i^{(k)})}{\partial w_i}, w_i^{(k+1)}=w_i^{(k)}-\frac{\mu}{\sqrt{G^{(k)}_i,i+\epsilon}}g_{i,(k)}&amp;lt;/tex&amp;gt;, где G — диагональная матрица, элементы которой, суммы квадратов координат градиента к k-ой итерации алгоритма;&lt;br /&gt;
&lt;br /&gt;
*RMSProp[https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b]: &amp;lt;tex&amp;gt;E^{(k)}[g_i^2] = \gamma E^{(k-1)}[g_i^2]+(1-\gamma)g^2_{i, (k)}, w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{E^{(k)}[g_i^2]+\epsilon}}g_{i, (k)}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adadelta[https://arxiv.org/abs/1212.5701]:&amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu(Q''(w^{(k)})^{-1}Q'(w^{(k)}&amp;lt;/tex&amp;gt;, вычисление матрицы Q вторых производных довольно сложная задача, поэтому вместо неё можно брать приближение: &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\frac{RMS^{(k-1)}[\delta w_i}{RMS^{(k)}[g_i]}g_i^{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;RMS^{(k)}[x_i]=\sqrt{E^{(k)}[x^2_i]+\epsilon}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*Adam[https://arxiv.org/pdf/1412.6980.pdf]: &amp;lt;tex&amp;gt; w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{\hat{b}^2_{(k)}+\epsilon}}\hat{m}_{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\hat{m}_{(k)}=\frac{\gamma_1 E^{(k-1)}[g_i]+(1-\gamma_1)g_{i,(k)}}{1-\gamma_1^k}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\hat{b}^2_{(k)}= \frac{\gamma_2 E^{(k-1)}[g^2_i]+(1-\gamma_2)g:2_{i,(k)}}{1-\gamma_2^k}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Стохастический градиентный спуск]]&amp;lt;sup&amp;gt;[на 21.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
==Источники информации==&lt;br /&gt;
# https://habr.com/company/wunderfund/blog/315476/&lt;br /&gt;
# http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf&lt;br /&gt;
# https://arxiv.org/pdf/1502.01852.pdf&lt;br /&gt;
# https://en.wikipedia.org/wiki/Backpropagation&lt;br /&gt;
# https://habr.com/post/318970/&lt;br /&gt;
# http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D1%81%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%B0&lt;br /&gt;
# https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum&lt;br /&gt;
# https://jlmelville.github.io/mize/nesterov.html#nag&lt;br /&gt;
# http://akyrillidis.github.io/notes/AdaGrad&lt;br /&gt;
# https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b&lt;br /&gt;
# https://arxiv.org/abs/1212.5701&lt;br /&gt;
# https://arxiv.org/pdf/1412.6980.pdf&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69246</id>
		<title>Настройка глубокой сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69246"/>
				<updated>2019-01-24T19:01:14Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: /* Граф вычислений */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5 Глубокая сеть] состоит из нескольких слоев, где каждый слой организован таким образом, что каждый нейрон в одном слое получает свою копию всех выходных данных предыдущего слоя. Эта модель идеально подходит для определенных типов задач, например, обучение на ограниченном количество более или менее неструктурированных параметров. Существует множество способов изменения параметров (весов) в такой модели, когда ей на вход поступают необработанные данные. &lt;br /&gt;
&lt;br /&gt;
== Инициализация сети ==&lt;br /&gt;
&lt;br /&gt;
Принцип выбора начальных значений весов для слоев, составляющих модель очень важен: установка всех весов в 0 будет серьезным препятствием для обучения, так как ни один из весов изначально не будет активен. Присваивать весам значения из интервала ±1 — тоже обычно не лучший вариант — на самом деле, иногда (в зависимости от задачи и сложности модели) от правильной инициализации модели может зависеть, достигнет она высочайшей производительности или вообще не будет сходиться. Даже если задача не предполагает такой крайности, удачно выбранный способ инициализации весов может значительно влиять на способность модели к обучению, так как он предустанавливает параметры модели с учетом функции потерь.[https://habr.com/company/wunderfund/blog/315476/]&lt;br /&gt;
&lt;br /&gt;
Всегда можно выбрать случайно начальное приближение, но лучше выбирать определённым образом, ниже приведены самые распространённые из них.&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Завьера (Xavier) (иногда — метод Glorot’а)[http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf]. Основная идея этого метода — упростить прохождение сигнала через слой во время как прямого, так и обратного распространения ошибки для линейной функции активации (этот метод также хорошо работает для сигмоидной функции, так как участок, где она ненасыщена, также имеет линейный характер). При вычислении весов этот метод опирается на вероятностное распределение (равномерное или нормальное) с дисперсией, равной &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in} + n_{out}}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n_{in}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n_{out}&amp;lt;/tex&amp;gt; — количества нейронов в предыдущем и последующем слоях соответственно.&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Ге (He) — это вариация метода Завьера, больше подходящая функции активации ReLU, компенсирующая тот факт, что эта функция возвращает нуль для половины области определения. А именно, в этом случае &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in}}}&amp;lt;/tex&amp;gt;[https://arxiv.org/pdf/1502.01852.pdf].&lt;br /&gt;
&lt;br /&gt;
== Граф вычислений ==&lt;br /&gt;
Глубокие сети являются особенной формой графа вычиcлений.&lt;br /&gt;
[[Файл: Graph_comp.png|800px|thumb|Рис.1. Граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Граф вычислений — это ориентированный граф, узлы которого соответствуют операциям или переменным. Переменные могут передавать свое значение в операции, а операции могут передавать свои результаты в другие операции. Таким образом, каждый узел в графе определяет функцию переменных.&lt;br /&gt;
&lt;br /&gt;
Значения, которые вводятся в узлы и выходят из узлов, называются тензорами (т.е. многомерными массивами). На рисунке 1 представлен граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;. В нейронах сетях функций имеют больше аргументов и сложнее, но смысл операций остаётся прежним.&lt;br /&gt;
&lt;br /&gt;
Процесс передачи значений от входных нейронов к выходным называется прямым распространеним (от англ. Forward pass). После чего мы вычисляем ошибку обработанных сетью данных на выходном нейроне и, основываясь на её значении, делаем обратную передачу (Back propagation)[https://en.wikipedia.org/wiki/Backpropagation]. Back propagation заключается в том, чтобы последовательно менять веса нейронной сети, начиная с весов выходного нейрона. Значения весов будут меняться в сторону уменьшения ошибки.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Graph_compilation.jpg|400px|thumb|Рис.2. Граф вычислений для функции &amp;lt;tex&amp;gt;f(x,y,z)=(x+y)*z&amp;lt;/tex&amp;gt;. Зелёные цифры — значения вычислений по ходу выполнения операций графа, красные — значения производной выходной функции по текущей переменной в точке &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Преимуществом такого представления функции является простота вычисления производных. Используя следующие правила вычисления частных производных: &amp;lt;tex&amp;gt;q=x+y:\frac{\partial q}{\partial x}=1, \frac{\partial q}{\partial y}=1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;q=xy:\frac{\partial q}{\partial x}=y, \frac{\partial q}{\partial y}=x;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x}=\frac{\partial f}{\partial q}\frac{\partial q}{\partial y}&amp;lt;/tex&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Рассмотрим граф вычислений на рисунке 2 с поданными на вход значениями &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;. Подсчёт производных по графу вычислений производим от значения функции к значениям независимых переменных-входов.&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial f} = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial q} = z_0 = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial z} = q_0 = 3&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial x} = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial y} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial y} = -4&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Файл: Schematic-diagram-of-a-general-back-propagation-neural-network.png|400px|thumb|Рис.3. Архитекутра нейронной сети: &amp;lt;tex&amp;gt;x_{N_i}&amp;lt;/tex&amp;gt; — входные значения, &amp;lt;tex&amp;gt;y_{N_i}&amp;lt;/tex&amp;gt; — выходные с сети значения, &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; — матрица весов, изменяющая с помощью линейной комбинации значения предыдущего слоя]] &lt;br /&gt;
&lt;br /&gt;
Зная производные, можно искать матрицы весов &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt;(числа, на которые умножаются входные для этого слоя значения) с помощью градиентного спуска сдвигаемся&lt;br /&gt;
в сторону градиента (при максимизации) или обратную ему&lt;br /&gt;
(при минимизации) &amp;lt;tex&amp;gt;w:=w-\eta\nabla_w f&amp;lt;/tex&amp;gt;, или его модификаций [http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%81%D0%BF%D1%83%D1%81%D0%BA%D0%B0].&lt;br /&gt;
&lt;br /&gt;
== Способы настройки параметров ==&lt;br /&gt;
&lt;br /&gt;
Ниже представлены различные вариации градиентного спуска (более подробное сравнение, применительно к данной задаче [https://habr.com/post/318970/]).&lt;br /&gt;
&lt;br /&gt;
* Стохастический градиентный спуск [http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D1%81%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%B0]: &amp;lt;tex&amp;gt;w^{(0)}&amp;lt;/tex&amp;gt; — начальные весы сети, &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu\frac{\partial L(w^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* Momentum  [https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum]: &amp;lt;tex&amp;gt; \Delta w:=\alpha \Delta w-\eta \nabla Q_{i}(w)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; w:=w+\Delta w&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; w:=w-\eta \nabla Q_{i}(w)+\alpha \Delta w&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* NAG (Nesterov accelerated gradient)[https://jlmelville.github.io/mize/nesterov.html#nag]: &amp;lt;tex&amp;gt; w^{(k+1)} = w^{(k)}-v^{(k)}; v^{(k+1)}=\gamma v^{(k)}+\mu\frac{\partial L(w^{(k)}-v^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Adagrad [http://akyrillidis.github.io/notes/AdaGrad]: &amp;lt;tex&amp;gt;g_{i,(k)}=\frac{\partial L(w_i^{(k)})}{\partial w_i}, w_i^{(k+1)}=w_i^{(k)}-\frac{\mu}{\sqrt{G^{(k)}_i,i+\epsilon}}g_{i,(k)}&amp;lt;/tex&amp;gt;, где G — диагональная матрица, элементы которой, суммы квадратов координат градиента к k-ой итерации алгоритма;&lt;br /&gt;
&lt;br /&gt;
*RMSProp[https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b]: &amp;lt;tex&amp;gt;E^{(k)}[g_i^2] = \gamma E^{(k-1)}[g_i^2]+(1-\gamma)g^2_{i, (k)}, w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{E^{(k)}[g_i^2]+\epsilon}}g_{i, (k)}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adadelta[https://arxiv.org/abs/1212.5701]:&amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu(Q''(w^{(k)})^{-1}Q'(w^{(k)}&amp;lt;/tex&amp;gt;, вычисление матрицы Q вторых производных довольно сложная задача, поэтому вместо неё можно брать приближение: &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\frac{RMS^{(k-1)}[\delta w_i}{RMS^{(k)}[g_i]}g_i^{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;RMS^{(k)}[x_i]=\sqrt{E^{(k)}[x^2_i]+\epsilon}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*Adam[https://arxiv.org/pdf/1412.6980.pdf]: &amp;lt;tex&amp;gt; w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{\hat{b}^2_{(k)}+\epsilon}}\hat{m}_{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\hat{m}_{(k)}=\frac{\gamma_1 E^{(k-1)}[g_i]+(1-\gamma_1)g_{i,(k)}}{1-\gamma_1^k}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\hat{b}^2_{(k)}= \frac{\gamma_2 E^{(k-1)}[g^2_i]+(1-\gamma_2)g:2_{i,(k)}}{1-\gamma_2^k}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Стохастический градиентный спуск]]&amp;lt;sup&amp;gt;[на 21.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
==Источники информации==&lt;br /&gt;
# https://habr.com/company/wunderfund/blog/315476/&lt;br /&gt;
# http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf&lt;br /&gt;
# https://arxiv.org/pdf/1502.01852.pdf&lt;br /&gt;
# https://en.wikipedia.org/wiki/Backpropagation&lt;br /&gt;
# https://habr.com/post/318970/&lt;br /&gt;
# http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D1%81%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%B0&lt;br /&gt;
# https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum&lt;br /&gt;
# https://jlmelville.github.io/mize/nesterov.html#nag&lt;br /&gt;
# http://akyrillidis.github.io/notes/AdaGrad&lt;br /&gt;
# https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b&lt;br /&gt;
# https://arxiv.org/abs/1212.5701&lt;br /&gt;
# https://arxiv.org/pdf/1412.6980.pdf&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Schematic-diagram-of-a-general-back-propagation-neural-network.png&amp;diff=69239</id>
		<title>Файл:Schematic-diagram-of-a-general-back-propagation-neural-network.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Schematic-diagram-of-a-general-back-propagation-neural-network.png&amp;diff=69239"/>
				<updated>2019-01-24T18:51:12Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Cnn_scheme.png&amp;diff=69238</id>
		<title>Файл:Cnn scheme.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Cnn_scheme.png&amp;diff=69238"/>
				<updated>2019-01-24T18:48:28Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69234</id>
		<title>Настройка глубокой сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69234"/>
				<updated>2019-01-24T18:41:46Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: /* Источники информации */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5 Глубокая сеть] состоит из нескольких слоев, где каждый слой организован таким образом, что каждый нейрон в одном слое получает свою копию всех выходных данных предыдущего слоя. Эта модель идеально подходит для определенных типов задач, например, обучение на ограниченном количество более или менее неструктурированных параметров. Существует множество способов изменения параметров (весов) в такой модели, когда ей на вход поступают необработанные данные. &lt;br /&gt;
&lt;br /&gt;
== Инициализация сети ==&lt;br /&gt;
&lt;br /&gt;
Принцип выбора начальных значений весов для слоев, составляющих модель очень важен: установка всех весов в 0 будет серьезным препятствием для обучения, так как ни один из весов изначально не будет активен. Присваивать весам значения из интервала ±1 — тоже обычно не лучший вариант — на самом деле, иногда (в зависимости от задачи и сложности модели) от правильной инициализации модели может зависеть, достигнет она высочайшей производительности или вообще не будет сходиться. Даже если задача не предполагает такой крайности, удачно выбранный способ инициализации весов может значительно влиять на способность модели к обучению, так как он предустанавливает параметры модели с учетом функции потерь.[https://habr.com/company/wunderfund/blog/315476/]&lt;br /&gt;
&lt;br /&gt;
Всегда можно выбрать случайно начальное приближение, но лучше выбирать определённым образом, ниже приведены самые распространённые из них.&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Завьера (Xavier) (иногда — метод Glorot’а)[http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf]. Основная идея этого метода — упростить прохождение сигнала через слой во время как прямого, так и обратного распространения ошибки для линейной функции активации (этот метод также хорошо работает для сигмоидной функции, так как участок, где она ненасыщена, также имеет линейный характер). При вычислении весов этот метод опирается на вероятностное распределение (равномерное или нормальное) с дисперсией, равной &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in} + n_{out}}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n_{in}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n_{out}&amp;lt;/tex&amp;gt; — количества нейронов в предыдущем и последующем слоях соответственно.&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Ге (He) — это вариация метода Завьера, больше подходящая функции активации ReLU, компенсирующая тот факт, что эта функция возвращает нуль для половины области определения. А именно, в этом случае &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in}}}&amp;lt;/tex&amp;gt;[https://arxiv.org/pdf/1502.01852.pdf].&lt;br /&gt;
&lt;br /&gt;
== Граф вычислений ==&lt;br /&gt;
Глубокие сети являются особенной формой графа вычиcлений.&lt;br /&gt;
[[Файл: Graph_comp.png|800px|thumb|Рис.1. Граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Граф вычислений — это ориентированный граф, узлы которого соответствуют операциям или переменным. Переменные могут передавать свое значение в операции, а операции могут передавать свои результаты в другие операции. Таким образом, каждый узел в графе определяет функцию переменных.&lt;br /&gt;
&lt;br /&gt;
Значения, которые вводятся в узлы и выходят из узлов, называются тензорами (т.е. многомерными массивами). Forward pass — то есть мы последовательно передаем информацию от входных нейронов к выходным. После чего мы вычисляем ошибку и основываясь на ней делаем обратную передачу, которая заключается в том, чтобы последовательно менять веса нейронной сети, начиная с весов выходного нейрона. Значение весов будут меняться в ту сторону, которая даст нам наилучший результат.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Graph_compilation.jpg|500px|thumb|Рис.2. Граф вычислений для функции &amp;lt;tex&amp;gt;f(x,y,z)=(x+y)*z&amp;lt;/tex&amp;gt;. Зелёные цифры — значения вычислений по ходу выполнения операций графа, красные — значения производной выходной функции по текущей переменной в точке &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
&lt;br /&gt;
Преимуществом такого представления функции является простота вычисления производных. Используя следующие правила вычисления частных производных: &amp;lt;tex&amp;gt;q=x+y:\frac{\partial q}{\partial x}=1, \frac{\partial q}{\partial y}=1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;q=xy:\frac{\partial q}{\partial x}=y, \frac{\partial q}{\partial y}=x;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x}=\frac{\partial f}{\partial q}\frac{\partial q}{\partial y}&amp;lt;/tex&amp;gt;. Подсчёт производных по графу вычислений производим от значения функции к значениям независимых переменных-входов&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial f} = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial q} = z_0 = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial z} = q_0 = 3&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial x} = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial y} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial y} = -4&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Зная производные, можно искать параметры &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; с помощью градиентного спуска сдвигаемся&lt;br /&gt;
в сторону градиента (при максимизации) или обратную ему&lt;br /&gt;
(при минимизации) &amp;lt;tex&amp;gt;w:=w-\eta\nabla_w f&amp;lt;/tex&amp;gt;, или его модификаций [http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%81%D0%BF%D1%83%D1%81%D0%BA%D0%B0].&lt;br /&gt;
&lt;br /&gt;
== Способы настройки параметров ==&lt;br /&gt;
&lt;br /&gt;
Ниже представлены различные вариации градиентного спуска (более подробное сравнение, применительно к данной задаче [https://habr.com/post/318970/]).&lt;br /&gt;
&lt;br /&gt;
* Стохастический градиентный спуск [http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D1%81%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%B0]: &amp;lt;tex&amp;gt;w^{(0)}&amp;lt;/tex&amp;gt; — начальные весы сети, &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu\frac{\partial L(w^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* Momentum  [https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum]: &amp;lt;tex&amp;gt; \Delta w:=\alpha \Delta w-\eta \nabla Q_{i}(w)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; w:=w+\Delta w&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; w:=w-\eta \nabla Q_{i}(w)+\alpha \Delta w&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* NAG (Nesterov accelerated gradient)[https://jlmelville.github.io/mize/nesterov.html#nag]: &amp;lt;tex&amp;gt; w^{(k+1)} = w^{(k)}-v^{(k)}; v^{(k+1)}=\gamma v^{(k)}+\mu\frac{\partial L(w^{(k)}-v^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Adagrad [http://akyrillidis.github.io/notes/AdaGrad]: &amp;lt;tex&amp;gt;g_{i,(k)}=\frac{\partial L(w_i^{(k)})}{\partial w_i}, w_i^{(k+1)}=w_i^{(k)}-\frac{\mu}{\sqrt{G^{(k)}_i,i+\epsilon}}g_{i,(k)}&amp;lt;/tex&amp;gt;, где G — диагональная матрица, элементы которой, суммы квадратов координат градиента к k-ой итерации алгоритма;&lt;br /&gt;
&lt;br /&gt;
*RMSProp[https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b]: &amp;lt;tex&amp;gt;E^{(k)}[g_i^2] = \gamma E^{(k-1)}[g_i^2]+(1-\gamma)g^2_{i, (k)}, w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{E^{(k)}[g_i^2]+\epsilon}}g_{i, (k)}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adadelta[https://arxiv.org/abs/1212.5701]:&amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu(Q''(w^{(k)})^{-1}Q'(w^{(k)}&amp;lt;/tex&amp;gt;, вычисление матрицы Q вторых производных довольно сложная задача, поэтому вместо неё можно брать приближение: &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\frac{RMS^{(k-1)}[\delta w_i}{RMS^{(k)}[g_i]}g_i^{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;RMS^{(k)}[x_i]=\sqrt{E^{(k)}[x^2_i]+\epsilon}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*Adam[https://arxiv.org/pdf/1412.6980.pdf]: &amp;lt;tex&amp;gt; w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{\hat{b}^2_{(k)}+\epsilon}}\hat{m}_{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\hat{m}_{(k)}=\frac{\gamma_1 E^{(k-1)}[g_i]+(1-\gamma_1)g_{i,(k)}}{1-\gamma_1^k}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\hat{b}^2_{(k)}= \frac{\gamma_2 E^{(k-1)}[g^2_i]+(1-\gamma_2)g:2_{i,(k)}}{1-\gamma_2^k}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Стохастический градиентный спуск]]&amp;lt;sup&amp;gt;[на 21.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
==Источники информации==&lt;br /&gt;
# https://habr.com/company/wunderfund/blog/315476/&lt;br /&gt;
# http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf&lt;br /&gt;
# https://arxiv.org/pdf/1502.01852.pdf&lt;br /&gt;
# https://en.wikipedia.org/wiki/Backpropagation&lt;br /&gt;
# https://habr.com/post/318970/&lt;br /&gt;
# http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D1%81%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%B0&lt;br /&gt;
# https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum&lt;br /&gt;
# https://jlmelville.github.io/mize/nesterov.html#nag&lt;br /&gt;
# http://akyrillidis.github.io/notes/AdaGrad&lt;br /&gt;
# https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b&lt;br /&gt;
# https://arxiv.org/abs/1212.5701&lt;br /&gt;
# https://arxiv.org/pdf/1412.6980.pdf&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69226</id>
		<title>Настройка глубокой сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69226"/>
				<updated>2019-01-24T18:22:42Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: /* Способы настройки параметров */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5 Глубокая сеть] состоит из нескольких слоев, где каждый слой организован таким образом, что каждый нейрон в одном слое получает свою копию всех выходных данных предыдущего слоя. Эта модель идеально подходит для определенных типов задач, например, обучение на ограниченном количество более или менее неструктурированных параметров. Существует множество способов изменения параметров (весов) в такой модели, когда ей на вход поступают необработанные данные. &lt;br /&gt;
&lt;br /&gt;
== Инициализация сети ==&lt;br /&gt;
&lt;br /&gt;
Принцип выбора начальных значений весов для слоев, составляющих модель очень важен: установка всех весов в 0 будет серьезным препятствием для обучения, так как ни один из весов изначально не будет активен. Присваивать весам значения из интервала ±1 — тоже обычно не лучший вариант — на самом деле, иногда (в зависимости от задачи и сложности модели) от правильной инициализации модели может зависеть, достигнет она высочайшей производительности или вообще не будет сходиться. Даже если задача не предполагает такой крайности, удачно выбранный способ инициализации весов может значительно влиять на способность модели к обучению, так как он предустанавливает параметры модели с учетом функции потерь.[https://habr.com/company/wunderfund/blog/315476/]&lt;br /&gt;
&lt;br /&gt;
Всегда можно выбрать случайно начальное приближение, но лучше выбирать определённым образом, ниже приведены самые распространённые из них.&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Завьера (Xavier) (иногда — метод Glorot’а)[http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf]. Основная идея этого метода — упростить прохождение сигнала через слой во время как прямого, так и обратного распространения ошибки для линейной функции активации (этот метод также хорошо работает для сигмоидной функции, так как участок, где она ненасыщена, также имеет линейный характер). При вычислении весов этот метод опирается на вероятностное распределение (равномерное или нормальное) с дисперсией, равной &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in} + n_{out}}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n_{in}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n_{out}&amp;lt;/tex&amp;gt; — количества нейронов в предыдущем и последующем слоях соответственно.&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Ге (He) — это вариация метода Завьера, больше подходящая функции активации ReLU, компенсирующая тот факт, что эта функция возвращает нуль для половины области определения. А именно, в этом случае &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in}}}&amp;lt;/tex&amp;gt;[https://arxiv.org/pdf/1502.01852.pdf].&lt;br /&gt;
&lt;br /&gt;
== Граф вычислений ==&lt;br /&gt;
Глубокие сети являются особенной формой графа вычиcлений.&lt;br /&gt;
[[Файл: Graph_comp.png|800px|thumb|Рис.1. Граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Граф вычислений — это ориентированный граф, узлы которого соответствуют операциям или переменным. Переменные могут передавать свое значение в операции, а операции могут передавать свои результаты в другие операции. Таким образом, каждый узел в графе определяет функцию переменных.&lt;br /&gt;
&lt;br /&gt;
Значения, которые вводятся в узлы и выходят из узлов, называются тензорами (т.е. многомерными массивами). Forward pass — то есть мы последовательно передаем информацию от входных нейронов к выходным. После чего мы вычисляем ошибку и основываясь на ней делаем обратную передачу, которая заключается в том, чтобы последовательно менять веса нейронной сети, начиная с весов выходного нейрона. Значение весов будут меняться в ту сторону, которая даст нам наилучший результат.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Graph_compilation.jpg|500px|thumb|Рис.2. Граф вычислений для функции &amp;lt;tex&amp;gt;f(x,y,z)=(x+y)*z&amp;lt;/tex&amp;gt;. Зелёные цифры — значения вычислений по ходу выполнения операций графа, красные — значения производной выходной функции по текущей переменной в точке &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
&lt;br /&gt;
Преимуществом такого представления функции является простота вычисления производных. Используя следующие правила вычисления частных производных: &amp;lt;tex&amp;gt;q=x+y:\frac{\partial q}{\partial x}=1, \frac{\partial q}{\partial y}=1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;q=xy:\frac{\partial q}{\partial x}=y, \frac{\partial q}{\partial y}=x;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x}=\frac{\partial f}{\partial q}\frac{\partial q}{\partial y}&amp;lt;/tex&amp;gt;. Подсчёт производных по графу вычислений производим от значения функции к значениям независимых переменных-входов&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial f} = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial q} = z_0 = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial z} = q_0 = 3&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial x} = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial y} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial y} = -4&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Зная производные, можно искать параметры &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; с помощью градиентного спуска сдвигаемся&lt;br /&gt;
в сторону градиента (при максимизации) или обратную ему&lt;br /&gt;
(при минимизации) &amp;lt;tex&amp;gt;w:=w-\eta\nabla_w f&amp;lt;/tex&amp;gt;, или его модификаций [http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%81%D0%BF%D1%83%D1%81%D0%BA%D0%B0].&lt;br /&gt;
&lt;br /&gt;
== Способы настройки параметров ==&lt;br /&gt;
&lt;br /&gt;
Ниже представлены различные вариации градиентного спуска (более подробное сравнение, применительно к данной задаче [https://habr.com/post/318970/]).&lt;br /&gt;
&lt;br /&gt;
* Стохастический градиентный спуск [http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D1%81%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%B0]: &amp;lt;tex&amp;gt;w^{(0)}&amp;lt;/tex&amp;gt; — начальные весы сети, &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu\frac{\partial L(w^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* Momentum  [https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum]: &amp;lt;tex&amp;gt; \Delta w:=\alpha \Delta w-\eta \nabla Q_{i}(w)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; w:=w+\Delta w&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; w:=w-\eta \nabla Q_{i}(w)+\alpha \Delta w&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* NAG (Nesterov accelerated gradient)[https://jlmelville.github.io/mize/nesterov.html#nag]: &amp;lt;tex&amp;gt; w^{(k+1)} = w^{(k)}-v^{(k)}; v^{(k+1)}=\gamma v^{(k)}+\mu\frac{\partial L(w^{(k)}-v^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Adagrad [http://akyrillidis.github.io/notes/AdaGrad]: &amp;lt;tex&amp;gt;g_{i,(k)}=\frac{\partial L(w_i^{(k)})}{\partial w_i}, w_i^{(k+1)}=w_i^{(k)}-\frac{\mu}{\sqrt{G^{(k)}_i,i+\epsilon}}g_{i,(k)}&amp;lt;/tex&amp;gt;, где G — диагональная матрица, элементы которой, суммы квадратов координат градиента к k-ой итерации алгоритма;&lt;br /&gt;
&lt;br /&gt;
*RMSProp[https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b]: &amp;lt;tex&amp;gt;E^{(k)}[g_i^2] = \gamma E^{(k-1)}[g_i^2]+(1-\gamma)g^2_{i, (k)}, w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{E^{(k)}[g_i^2]+\epsilon}}g_{i, (k)}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adadelta[https://arxiv.org/abs/1212.5701]:&amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu(Q''(w^{(k)})^{-1}Q'(w^{(k)}&amp;lt;/tex&amp;gt;, вычисление матрицы Q вторых производных довольно сложная задача, поэтому вместо неё можно брать приближение: &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\frac{RMS^{(k-1)}[\delta w_i}{RMS^{(k)}[g_i]}g_i^{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;RMS^{(k)}[x_i]=\sqrt{E^{(k)}[x^2_i]+\epsilon}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*Adam[https://arxiv.org/pdf/1412.6980.pdf]: &amp;lt;tex&amp;gt; w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{\hat{b}^2_{(k)}+\epsilon}}\hat{m}_{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\hat{m}_{(k)}=\frac{\gamma_1 E^{(k-1)}[g_i]+(1-\gamma_1)g_{i,(k)}}{1-\gamma_1^k}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\hat{b}^2_{(k)}= \frac{\gamma_2 E^{(k-1)}[g^2_i]+(1-\gamma_2)g:2_{i,(k)}}{1-\gamma_2^k}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Стохастический градиентный спуск]]&amp;lt;sup&amp;gt;[на 21.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
==Источники информации==&lt;br /&gt;
# https://habr.com/company/wunderfund/blog/315476/&lt;br /&gt;
# http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf&lt;br /&gt;
# https://arxiv.org/pdf/1502.01852.pdf&lt;br /&gt;
# https://habr.com/post/318970/&lt;br /&gt;
# http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D1%81%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%B0&lt;br /&gt;
# https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum&lt;br /&gt;
# https://jlmelville.github.io/mize/nesterov.html#nag&lt;br /&gt;
# http://akyrillidis.github.io/notes/AdaGrad&lt;br /&gt;
# https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b&lt;br /&gt;
# https://arxiv.org/abs/1212.5701&lt;br /&gt;
# https://arxiv.org/pdf/1412.6980.pdf&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69224</id>
		<title>Настройка глубокой сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69224"/>
				<updated>2019-01-24T18:16:43Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: /* Граф вычислений */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5 Глубокая сеть] состоит из нескольких слоев, где каждый слой организован таким образом, что каждый нейрон в одном слое получает свою копию всех выходных данных предыдущего слоя. Эта модель идеально подходит для определенных типов задач, например, обучение на ограниченном количество более или менее неструктурированных параметров. Существует множество способов изменения параметров (весов) в такой модели, когда ей на вход поступают необработанные данные. &lt;br /&gt;
&lt;br /&gt;
== Инициализация сети ==&lt;br /&gt;
&lt;br /&gt;
Принцип выбора начальных значений весов для слоев, составляющих модель очень важен: установка всех весов в 0 будет серьезным препятствием для обучения, так как ни один из весов изначально не будет активен. Присваивать весам значения из интервала ±1 — тоже обычно не лучший вариант — на самом деле, иногда (в зависимости от задачи и сложности модели) от правильной инициализации модели может зависеть, достигнет она высочайшей производительности или вообще не будет сходиться. Даже если задача не предполагает такой крайности, удачно выбранный способ инициализации весов может значительно влиять на способность модели к обучению, так как он предустанавливает параметры модели с учетом функции потерь.[https://habr.com/company/wunderfund/blog/315476/]&lt;br /&gt;
&lt;br /&gt;
Всегда можно выбрать случайно начальное приближение, но лучше выбирать определённым образом, ниже приведены самые распространённые из них.&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Завьера (Xavier) (иногда — метод Glorot’а)[http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf]. Основная идея этого метода — упростить прохождение сигнала через слой во время как прямого, так и обратного распространения ошибки для линейной функции активации (этот метод также хорошо работает для сигмоидной функции, так как участок, где она ненасыщена, также имеет линейный характер). При вычислении весов этот метод опирается на вероятностное распределение (равномерное или нормальное) с дисперсией, равной &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in} + n_{out}}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n_{in}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n_{out}&amp;lt;/tex&amp;gt; — количества нейронов в предыдущем и последующем слоях соответственно.&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Ге (He) — это вариация метода Завьера, больше подходящая функции активации ReLU, компенсирующая тот факт, что эта функция возвращает нуль для половины области определения. А именно, в этом случае &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in}}}&amp;lt;/tex&amp;gt;[https://arxiv.org/pdf/1502.01852.pdf].&lt;br /&gt;
&lt;br /&gt;
== Граф вычислений ==&lt;br /&gt;
Глубокие сети являются особенной формой графа вычиcлений.&lt;br /&gt;
[[Файл: Graph_comp.png|800px|thumb|Рис.1. Граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Граф вычислений — это ориентированный граф, узлы которого соответствуют операциям или переменным. Переменные могут передавать свое значение в операции, а операции могут передавать свои результаты в другие операции. Таким образом, каждый узел в графе определяет функцию переменных.&lt;br /&gt;
&lt;br /&gt;
Значения, которые вводятся в узлы и выходят из узлов, называются тензорами (т.е. многомерными массивами). Forward pass — то есть мы последовательно передаем информацию от входных нейронов к выходным. После чего мы вычисляем ошибку и основываясь на ней делаем обратную передачу, которая заключается в том, чтобы последовательно менять веса нейронной сети, начиная с весов выходного нейрона. Значение весов будут меняться в ту сторону, которая даст нам наилучший результат.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Graph_compilation.jpg|500px|thumb|Рис.2. Граф вычислений для функции &amp;lt;tex&amp;gt;f(x,y,z)=(x+y)*z&amp;lt;/tex&amp;gt;. Зелёные цифры — значения вычислений по ходу выполнения операций графа, красные — значения производной выходной функции по текущей переменной в точке &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
&lt;br /&gt;
Преимуществом такого представления функции является простота вычисления производных. Используя следующие правила вычисления частных производных: &amp;lt;tex&amp;gt;q=x+y:\frac{\partial q}{\partial x}=1, \frac{\partial q}{\partial y}=1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;q=xy:\frac{\partial q}{\partial x}=y, \frac{\partial q}{\partial y}=x;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x}=\frac{\partial f}{\partial q}\frac{\partial q}{\partial y}&amp;lt;/tex&amp;gt;. Подсчёт производных по графу вычислений производим от значения функции к значениям независимых переменных-входов&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial f} = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial q} = z_0 = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial z} = q_0 = 3&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial x} = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial y} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial y} = -4&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Зная производные, можно искать параметры &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; с помощью градиентного спуска сдвигаемся&lt;br /&gt;
в сторону градиента (при максимизации) или обратную ему&lt;br /&gt;
(при минимизации) &amp;lt;tex&amp;gt;w:=w-\eta\nabla_w f&amp;lt;/tex&amp;gt;, или его модификаций [http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%81%D0%BF%D1%83%D1%81%D0%BA%D0%B0].&lt;br /&gt;
&lt;br /&gt;
== Способы настройки параметров ==&lt;br /&gt;
&lt;br /&gt;
Ниже представлены различные вариации градиентного спуска, более подробное сравнение, применительно к данной задаче [https://habr.com/post/318970/].&lt;br /&gt;
&lt;br /&gt;
* Стохастический градиентный спуск [http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D1%81%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%B0]: &amp;lt;tex&amp;gt;w^{(0)}&amp;lt;/tex&amp;gt; - начальные весы сети, &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu\frac{\partial L(w^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* Momentum  [https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum]: &amp;lt;tex&amp;gt; \Delta w:=\alpha \Delta w-\eta \nabla Q_{i}(w)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; w:=w+\Delta w&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; w:=w-\eta \nabla Q_{i}(w)+\alpha \Delta w&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* NAG (Nesterov accelerated gradient)[https://jlmelville.github.io/mize/nesterov.html#nag]: &amp;lt;tex&amp;gt; w^{(k+1)} = w^{(k)}-v^{(k)}; v^{(k+1)}=\gamma v^{(k)}+\mu\frac{\partial L(w^{(k)}-v^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Adagrad [http://akyrillidis.github.io/notes/AdaGrad]: &amp;lt;tex&amp;gt;g_{i,(k)}=\frac{\partial L(w_i^{(k)})}{\partial w_i}, w_i^{(k+1)}=w_i^{(k)}-\frac{\mu}{\sqrt{G^{(k)}_i,i+\epsilon}}g_{i,(k)}&amp;lt;/tex&amp;gt;, где G - диагональная матрица, элементы которой, суммы квадратов координат градиента к k-ой итерации алгоритма;&lt;br /&gt;
&lt;br /&gt;
*RMSProp[https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b]: &amp;lt;tex&amp;gt;E^{(k)}[g_i^2] = \gamma E^{(k-1)}[g_i^2]+(1-\gamma)g^2_{i, (k)}, w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{E^{(k)}[g_i^2]+\epsilon}}g_{i, (k)}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adadelta[https://arxiv.org/abs/1212.5701]:&amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu(Q''(w^{(k)})^{-1}Q'(w^{(k)}&amp;lt;/tex&amp;gt;, вычисление матрицы Q вторых производных довольно сложная задача, поэтому вместо неё можно брать приближение: &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\frac{RMS^{(k-1)}[\delta w_i}{RMS^{(k)}[g_i]}g_i^{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;RMS^{(k)}[x_i]=\sqrt{E^{(k)}[x^2_i]+\epsilon}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*Adam[https://arxiv.org/pdf/1412.6980.pdf]: &amp;lt;tex&amp;gt; w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{\hat{b}^2_{(k)}+\epsilon}}\hat{m}_{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\hat{m}_{(k)}=\frac{\gamma_1 E^{(k-1)}[g_i]+(1-\gamma_1)g_{i,(k)}}{1-\gamma_1^k}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\hat{b}^2_{(k)}= \frac{\gamma_2 E^{(k-1)}[g^2_i]+(1-\gamma_2)g:2_{i,(k)}}{1-\gamma_2^k}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Стохастический градиентный спуск]]&amp;lt;sup&amp;gt;[на 21.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
==Источники информации==&lt;br /&gt;
# https://habr.com/company/wunderfund/blog/315476/&lt;br /&gt;
# http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf&lt;br /&gt;
# https://arxiv.org/pdf/1502.01852.pdf&lt;br /&gt;
# https://habr.com/post/318970/&lt;br /&gt;
# http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D1%81%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%B0&lt;br /&gt;
# https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum&lt;br /&gt;
# https://jlmelville.github.io/mize/nesterov.html#nag&lt;br /&gt;
# http://akyrillidis.github.io/notes/AdaGrad&lt;br /&gt;
# https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b&lt;br /&gt;
# https://arxiv.org/abs/1212.5701&lt;br /&gt;
# https://arxiv.org/pdf/1412.6980.pdf&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69219</id>
		<title>Настройка глубокой сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=69219"/>
				<updated>2019-01-24T18:11:10Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: /* Инициализация сети */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5 Глубокая сеть] состоит из нескольких слоев, где каждый слой организован таким образом, что каждый нейрон в одном слое получает свою копию всех выходных данных предыдущего слоя. Эта модель идеально подходит для определенных типов задач, например, обучение на ограниченном количество более или менее неструктурированных параметров. Существует множество способов изменения параметров (весов) в такой модели, когда ей на вход поступают необработанные данные. &lt;br /&gt;
&lt;br /&gt;
== Инициализация сети ==&lt;br /&gt;
&lt;br /&gt;
Принцип выбора начальных значений весов для слоев, составляющих модель очень важен: установка всех весов в 0 будет серьезным препятствием для обучения, так как ни один из весов изначально не будет активен. Присваивать весам значения из интервала ±1 — тоже обычно не лучший вариант — на самом деле, иногда (в зависимости от задачи и сложности модели) от правильной инициализации модели может зависеть, достигнет она высочайшей производительности или вообще не будет сходиться. Даже если задача не предполагает такой крайности, удачно выбранный способ инициализации весов может значительно влиять на способность модели к обучению, так как он предустанавливает параметры модели с учетом функции потерь.[https://habr.com/company/wunderfund/blog/315476/]&lt;br /&gt;
&lt;br /&gt;
Всегда можно выбрать случайно начальное приближение, но лучше выбирать определённым образом, ниже приведены самые распространённые из них.&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Завьера (Xavier) (иногда — метод Glorot’а)[http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf]. Основная идея этого метода — упростить прохождение сигнала через слой во время как прямого, так и обратного распространения ошибки для линейной функции активации (этот метод также хорошо работает для сигмоидной функции, так как участок, где она ненасыщена, также имеет линейный характер). При вычислении весов этот метод опирается на вероятностное распределение (равномерное или нормальное) с дисперсией, равной &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in} + n_{out}}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n_{in}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n_{out}&amp;lt;/tex&amp;gt; — количества нейронов в предыдущем и последующем слоях соответственно.&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Ге (He) — это вариация метода Завьера, больше подходящая функции активации ReLU, компенсирующая тот факт, что эта функция возвращает нуль для половины области определения. А именно, в этом случае &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in}}}&amp;lt;/tex&amp;gt;[https://arxiv.org/pdf/1502.01852.pdf].&lt;br /&gt;
&lt;br /&gt;
== Граф вычислений ==&lt;br /&gt;
Глубокие сети являются особенной формой графа вычиcлений.&lt;br /&gt;
[[Файл: Graph_comp.png|800px|thumb|Рис.1. Граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Граф вычислений - это ориентированный граф, узлы которого соответствуют операциям или переменным. Переменные могут передавать свое значение в операции, а операции могут передавать свои результаты в другие операции. Таким образом, каждый узел в графе определяет функцию переменных.&lt;br /&gt;
&lt;br /&gt;
Значения, которые вводятся в узлы и выходят из узлов, называются тензорами (т.е. многомерными массивами). Forward pass - то есть мы последовательно передаем информацию от входных нейронов к выходным. После чего мы вычисляем ошибку и основываясь на ней делаем обратную передачу, которая заключается в том, чтобы последовательно менять веса нейронной сети, начиная с весов выходного нейрона. Значение весов будут меняться в ту сторону, которая даст нам наилучший результат.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Graph_compilation.jpg|500px|thumb|Рис.2. Граф вычислений для функции &amp;lt;tex&amp;gt;f(x,y,z)=(x+y)*z&amp;lt;/tex&amp;gt;. Зелёные цифры - значения вычислений по ходу выполнения операций графа, красные - значения производной выходной функции по текущей переменной в точке &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
&lt;br /&gt;
Преимуществом такого представления функции является простота вычисления производных. Используя следующие правила вычисления частных производных: &amp;lt;tex&amp;gt;q=x+y:\frac{\partial q}{\partial x}=1, \frac{\partial q}{\partial y}=1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;q=xy:\frac{\partial q}{\partial x}=y, \frac{\partial q}{\partial y}=x;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x}=\frac{\partial f}{\partial q}\frac{\partial q}{\partial y}&amp;lt;/tex&amp;gt;. Подсчёт производных по графу вычислений производим от значения функции к значениям независимых переменных-входов&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial f} = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial q} = z_0 = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial z} = q_0 = 3&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial x} = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial y} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial y} = -4&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Зная производные, можно искать параметры &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; с помощью градиентного спуска сдвигаемся&lt;br /&gt;
в сторону градиента (при максимизации) или обратную ему&lt;br /&gt;
(при минимизации) &amp;lt;tex&amp;gt;w:=w-\eta\nabla_w f&amp;lt;/tex&amp;gt;, или его модификаций [http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%81%D0%BF%D1%83%D1%81%D0%BA%D0%B0].&lt;br /&gt;
&lt;br /&gt;
== Способы настройки параметров ==&lt;br /&gt;
&lt;br /&gt;
Ниже представлены различные вариации градиентного спуска, более подробное сравнение, применительно к данной задаче [https://habr.com/post/318970/].&lt;br /&gt;
&lt;br /&gt;
* Стохастический градиентный спуск [http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D1%81%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%B0]: &amp;lt;tex&amp;gt;w^{(0)}&amp;lt;/tex&amp;gt; - начальные весы сети, &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu\frac{\partial L(w^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* Momentum  [https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum]: &amp;lt;tex&amp;gt; \Delta w:=\alpha \Delta w-\eta \nabla Q_{i}(w)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; w:=w+\Delta w&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; w:=w-\eta \nabla Q_{i}(w)+\alpha \Delta w&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* NAG (Nesterov accelerated gradient)[https://jlmelville.github.io/mize/nesterov.html#nag]: &amp;lt;tex&amp;gt; w^{(k+1)} = w^{(k)}-v^{(k)}; v^{(k+1)}=\gamma v^{(k)}+\mu\frac{\partial L(w^{(k)}-v^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Adagrad [http://akyrillidis.github.io/notes/AdaGrad]: &amp;lt;tex&amp;gt;g_{i,(k)}=\frac{\partial L(w_i^{(k)})}{\partial w_i}, w_i^{(k+1)}=w_i^{(k)}-\frac{\mu}{\sqrt{G^{(k)}_i,i+\epsilon}}g_{i,(k)}&amp;lt;/tex&amp;gt;, где G - диагональная матрица, элементы которой, суммы квадратов координат градиента к k-ой итерации алгоритма;&lt;br /&gt;
&lt;br /&gt;
*RMSProp[https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b]: &amp;lt;tex&amp;gt;E^{(k)}[g_i^2] = \gamma E^{(k-1)}[g_i^2]+(1-\gamma)g^2_{i, (k)}, w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{E^{(k)}[g_i^2]+\epsilon}}g_{i, (k)}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adadelta[https://arxiv.org/abs/1212.5701]:&amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu(Q''(w^{(k)})^{-1}Q'(w^{(k)}&amp;lt;/tex&amp;gt;, вычисление матрицы Q вторых производных довольно сложная задача, поэтому вместо неё можно брать приближение: &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\frac{RMS^{(k-1)}[\delta w_i}{RMS^{(k)}[g_i]}g_i^{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;RMS^{(k)}[x_i]=\sqrt{E^{(k)}[x^2_i]+\epsilon}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*Adam[https://arxiv.org/pdf/1412.6980.pdf]: &amp;lt;tex&amp;gt; w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{\hat{b}^2_{(k)}+\epsilon}}\hat{m}_{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\hat{m}_{(k)}=\frac{\gamma_1 E^{(k-1)}[g_i]+(1-\gamma_1)g_{i,(k)}}{1-\gamma_1^k}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\hat{b}^2_{(k)}= \frac{\gamma_2 E^{(k-1)}[g^2_i]+(1-\gamma_2)g:2_{i,(k)}}{1-\gamma_2^k}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Стохастический градиентный спуск]]&amp;lt;sup&amp;gt;[на 21.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
==Источники информации==&lt;br /&gt;
# https://habr.com/company/wunderfund/blog/315476/&lt;br /&gt;
# http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf&lt;br /&gt;
# https://arxiv.org/pdf/1502.01852.pdf&lt;br /&gt;
# https://habr.com/post/318970/&lt;br /&gt;
# http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D1%81%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%B0&lt;br /&gt;
# https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum&lt;br /&gt;
# https://jlmelville.github.io/mize/nesterov.html#nag&lt;br /&gt;
# http://akyrillidis.github.io/notes/AdaGrad&lt;br /&gt;
# https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b&lt;br /&gt;
# https://arxiv.org/abs/1212.5701&lt;br /&gt;
# https://arxiv.org/pdf/1412.6980.pdf&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=68721</id>
		<title>Настройка глубокой сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=68721"/>
				<updated>2019-01-21T14:53:44Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5 Глубокая сеть] состоит из нескольких слоев, где каждый слой организован таким образом, что каждый нейрон в одном слое получает свою копию всех выходных данных предыдущего слоя. Эта модель идеально подходит для определенных типов задач, например, обучение на ограниченном количество более или менее неструктурированных параметров. Существует множество способов изменения параметров (весов) в такой модели, когда ей на вход поступают необработанные данные. &lt;br /&gt;
&lt;br /&gt;
== Инициализация сети ==&lt;br /&gt;
&lt;br /&gt;
Принцип выбора начальных значений весов для слоев, составляющих модель очень важен: установка всех весов в 0 будет серьезным препятствием для обучения, так как ни один из весов изначально не будет активен. Присваивать весам значения из интервала ±1 — тоже обычно не лучший вариант — на самом деле, иногда (в зависимости от задачи и сложности модели) от правильной инициализации модели может зависеть, достигнет она высочайшей производительности или вообще не будет сходиться. Даже если задача не предполагает такой крайности, удачно выбранный способ инициализации весов может значительно влиять на способность модели к обучению, так как он предустанавливает параметры модели с учетом функции потерь.[https://habr.com/company/wunderfund/blog/315476/]&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Завьера (Xavier) (иногда — метод Glorot’а)[http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf]. Основная идея этого метода — упростить прохождение сигнала через слой во время как прямого, так и обратного распространения ошибки для линейной функции активации (этот метод также хорошо работает для сигмоидной функции, так как участок, где она ненасыщена, также имеет линейный характер). При вычислении весов этот метод опирается на вероятностное распределение (равномерное или нормальное) с дисперсией, равной &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in} + n_{out}}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n_{in}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n_{out}&amp;lt;/tex&amp;gt; — количества нейронов в предыдущем и последующем слоях соответственно.&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Ге (He) — это вариация метода Завьера, больше подходящая функции активации ReLU, компенсирующая тот факт, что эта функция возвращает нуль для половины области определения. А именно, в этом случае &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in}}}&amp;lt;/tex&amp;gt;[https://arxiv.org/pdf/1502.01852.pdf].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Граф вычислений ==&lt;br /&gt;
Глубокие сети являются особенной формой графа вычиcлений.&lt;br /&gt;
[[Файл: Graph_comp.png|800px|thumb|Рис.1. Граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Граф вычислений - это ориентированный граф, узлы которого соответствуют операциям или переменным. Переменные могут передавать свое значение в операции, а операции могут передавать свои результаты в другие операции. Таким образом, каждый узел в графе определяет функцию переменных.&lt;br /&gt;
&lt;br /&gt;
Значения, которые вводятся в узлы и выходят из узлов, называются тензорами (т.е. многомерными массивами). Forward pass - то есть мы последовательно передаем информацию от входных нейронов к выходным. После чего мы вычисляем ошибку и основываясь на ней делаем обратную передачу, которая заключается в том, чтобы последовательно менять веса нейронной сети, начиная с весов выходного нейрона. Значение весов будут меняться в ту сторону, которая даст нам наилучший результат.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Graph_compilation.jpg|500px|thumb|Рис.2. Граф вычислений для функции &amp;lt;tex&amp;gt;f(x,y,z)=(x+y)*z&amp;lt;/tex&amp;gt;. Зелёные цифры - значения вычислений по ходу выполнения операций графа, красные - значения производной выходной функции по текущей переменной в точке &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
&lt;br /&gt;
Преимуществом такого представления функции является простота вычисления производных. Используя следующие правила вычисления частных производных: &amp;lt;tex&amp;gt;q=x+y:\frac{\partial q}{\partial x}=1, \frac{\partial q}{\partial y}=1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;q=xy:\frac{\partial q}{\partial x}=y, \frac{\partial q}{\partial y}=x;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x}=\frac{\partial f}{\partial q}\frac{\partial q}{\partial y}&amp;lt;/tex&amp;gt;. Подсчёт производных по графу вычислений производим от значения функции к значениям независимых переменных-входов&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial f} = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial q} = z_0 = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial z} = q_0 = 3&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial x} = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial y} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial y} = -4&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Зная производные, можно искать параметры &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; с помощью градиентного спуска сдвигаемся&lt;br /&gt;
в сторону градиента (при максимизации) или обратную ему&lt;br /&gt;
(при минимизации) &amp;lt;tex&amp;gt;w:=w-\eta\nabla_w f&amp;lt;/tex&amp;gt;, или его модификаций [http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%81%D0%BF%D1%83%D1%81%D0%BA%D0%B0].&lt;br /&gt;
&lt;br /&gt;
== Способы настройки параметров ==&lt;br /&gt;
&lt;br /&gt;
Ниже представлены различные вариации градиентного спуска, более подробное сравнение, применительно к данной задаче [https://habr.com/post/318970/].&lt;br /&gt;
&lt;br /&gt;
* Стохастический градиентный спуск [http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D1%81%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%B0]: &amp;lt;tex&amp;gt;w^{(0)}&amp;lt;/tex&amp;gt; - начальные весы сети, &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu\frac{\partial L(w^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* Momentum  [https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum]: &amp;lt;tex&amp;gt; \Delta w:=\alpha \Delta w-\eta \nabla Q_{i}(w)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; w:=w+\Delta w&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; w:=w-\eta \nabla Q_{i}(w)+\alpha \Delta w&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* NAG (Nesterov accelerated gradient)[https://jlmelville.github.io/mize/nesterov.html#nag]: &amp;lt;tex&amp;gt; w^{(k+1)} = w^{(k)}-v^{(k)}; v^{(k+1)}=\gamma v^{(k)}+\mu\frac{\partial L(w^{(k)}-v^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Adagrad [http://akyrillidis.github.io/notes/AdaGrad]: &amp;lt;tex&amp;gt;g_{i,(k)}=\frac{\partial L(w_i^{(k)})}{\partial w_i}, w_i^{(k+1)}=w_i^{(k)}-\frac{\mu}{\sqrt{G^{(k)}_i,i+\epsilon}}g_{i,(k)}&amp;lt;/tex&amp;gt;, где G - диагональная матрица, элементы которой, суммы квадратов координат градиента к k-ой итерации алгоритма;&lt;br /&gt;
&lt;br /&gt;
*RMSProp[https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b]: &amp;lt;tex&amp;gt;E^{(k)}[g_i^2] = \gamma E^{(k-1)}[g_i^2]+(1-\gamma)g^2_{i, (k)}, w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{E^{(k)}[g_i^2]+\epsilon}}g_{i, (k)}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adadelta[https://arxiv.org/abs/1212.5701]:&amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu(Q''(w^{(k)})^{-1}Q'(w^{(k)}&amp;lt;/tex&amp;gt;, вычисление матрицы Q вторых производных довольно сложная задача, поэтому вместо неё можно брать приближение: &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\frac{RMS^{(k-1)}[\delta w_i}{RMS^{(k)}[g_i]}g_i^{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;RMS^{(k)}[x_i]=\sqrt{E^{(k)}[x^2_i]+\epsilon}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*Adam[https://arxiv.org/pdf/1412.6980.pdf]: &amp;lt;tex&amp;gt; w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{\hat{b}^2_{(k)}+\epsilon}}\hat{m}_{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\hat{m}_{(k)}=\frac{\gamma_1 E^{(k-1)}[g_i]+(1-\gamma_1)g_{i,(k)}}{1-\gamma_1^k}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\hat{b}^2_{(k)}= \frac{\gamma_2 E^{(k-1)}[g^2_i]+(1-\gamma_2)g:2_{i,(k)}}{1-\gamma_2^k}&amp;lt;/tex&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==См.также==&lt;br /&gt;
* [[Глубокое обучение]]&lt;br /&gt;
* [[Стохастический градиентный спуск]]&amp;lt;sup&amp;gt;[на 21.01.19 не создан]&amp;lt;/sup&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Примечания==&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;br /&gt;
==Источники информации==&lt;br /&gt;
# https://habr.com/company/wunderfund/blog/315476/&lt;br /&gt;
# http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf&lt;br /&gt;
# https://arxiv.org/pdf/1502.01852.pdf&lt;br /&gt;
# https://habr.com/post/318970/&lt;br /&gt;
# http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D1%81%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%B0&lt;br /&gt;
# https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum&lt;br /&gt;
# https://jlmelville.github.io/mize/nesterov.html#nag&lt;br /&gt;
# http://akyrillidis.github.io/notes/AdaGrad&lt;br /&gt;
# https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b&lt;br /&gt;
# https://arxiv.org/abs/1212.5701&lt;br /&gt;
# https://arxiv.org/pdf/1412.6980.pdf&lt;br /&gt;
&lt;br /&gt;
[[Категория: Машинное обучение]]&lt;br /&gt;
[[Категория: Глубокое обучение]]&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=68293</id>
		<title>Настройка глубокой сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=68293"/>
				<updated>2019-01-11T06:12:11Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: /* Способы настройки параметров */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Как и многие алгоритмы машинного обучения, [http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5 глубокие сети] имеют множество гиперпараметров, которые должны быть заданы до начала обучения.&lt;br /&gt;
&lt;br /&gt;
== Инициализация сети ==&lt;br /&gt;
&lt;br /&gt;
Принцип выбора начальных значений весов для слоев, составляющих модель очень важен: установка всех весов в 0 будет серьезным препятствием для обучения, так как ни один из весов изначально не будет активен. Присваивать весам значения из интервала ±1 — тоже обычно не лучший вариант — на самом деле, иногда (в зависимости от задачи и сложности модели) от правильной инициализации модели может зависеть, достигнет она высочайшей производительности или вообще не будет сходиться. Даже если задача не предполагает такой крайности, удачно выбранный способ инициализации весов может значительно влиять на способность модели к обучению, так как он предустанавливает параметры модели с учетом функции потерь.[https://habr.com/company/wunderfund/blog/315476/]&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Завьера (Xavier) (иногда — метод Glorot’а)[http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf]. Основная идея этого метода — упростить прохождение сигнала через слой во время как прямого, так и обратного распространения ошибки для линейной функции активации (этот метод также хорошо работает для сигмоидной функции, так как участок, где она ненасыщена, также имеет линейный характер). При вычислении весов этот метод опирается на вероятностное распределение (равномерное или нормальное) с дисперсией, равной &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in} + n_{out}}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n_{in}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n_{out}&amp;lt;/tex&amp;gt; — количества нейронов в предыдущем и последующем слоях соответственно.&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Ге (He) — это вариация метода Завьера, больше подходящая функции активации ReLU, компенсирующая тот факт, что эта функция возвращает нуль для половины области определения. А именно, в этом случае &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in}}}&amp;lt;/tex&amp;gt;[https://arxiv.org/pdf/1502.01852.pdf].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Граф вычислений ==&lt;br /&gt;
Глубокие сети являются особенной формой графа вычиcлений.&lt;br /&gt;
[[Файл: Graph_comp.png|800px|thumb|Рис.1. Граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Граф вычислений - это ориентированный граф, узлы которого соответствуют операциям или переменным. Переменные могут передавать свое значение в операции, а операции могут передавать свои результаты в другие операции. Таким образом, каждый узел в графе определяет функцию переменных.&lt;br /&gt;
&lt;br /&gt;
Значения, которые вводятся в узлы и выходят из узлов, называются тензорами (т.е. многомерными массивами). Forward pass - то есть мы последовательно передаем информацию от входных нейронов к выходным. После чего мы вычисляем ошибку и основываясь на ней делаем обратную передачу, которая заключается в том, чтобы последовательно менять веса нейронной сети, начиная с весов выходного нейрона. Значение весов будут меняться в ту сторону, которая даст нам наилучший результат.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Graph_compilation.jpg|500px|thumb|Рис.2. Граф вычислений для функции &amp;lt;tex&amp;gt;f(x,y,z)=(x+y)*z&amp;lt;/tex&amp;gt;. Зелёные цифры - значения вычислений по ходу выполнения операций графа, красные - значения производной выходной функции по текущей переменной в точке &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
&lt;br /&gt;
Преимуществом такого представления функции является простота вычисления производных. Используя следующие правила вычисления частных производных: &amp;lt;tex&amp;gt;q=x+y:\frac{\partial q}{\partial x}=1, \frac{\partial q}{\partial y}=1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;q=xy:\frac{\partial q}{\partial x}=y, \frac{\partial q}{\partial y}=x;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x}=\frac{\partial f}{\partial q}\frac{\partial q}{\partial y}&amp;lt;/tex&amp;gt;. Подсчёт производных по графу вычислений производим от значения функции к значениям независимых переменных-входов&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial f} = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial q} = z_0 = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial z} = q_0 = 3&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial x} = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial y} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial y} = -4&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Зная производные, можно искать параметры &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; с помощью градиентного спуска сдвигаемся&lt;br /&gt;
в сторону градиента (при максимизации) или обратную ему&lt;br /&gt;
(при минимизации) &amp;lt;tex&amp;gt;w:=w-\eta\nabla_w f&amp;lt;/tex&amp;gt;, или его модификаций [http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%81%D0%BF%D1%83%D1%81%D0%BA%D0%B0].&lt;br /&gt;
&lt;br /&gt;
== Способы настройки параметров ==&lt;br /&gt;
&lt;br /&gt;
Ниже представлены различные вариации градиентного спуска, более подробное сравнение, применительно к данной задаче [https://habr.com/post/318970/].&lt;br /&gt;
&lt;br /&gt;
* Стохастический градиентный спуск [http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D1%81%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%B0]: &amp;lt;tex&amp;gt;w^{(0)}&amp;lt;/tex&amp;gt; - начальные весы сети, &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu\frac{\partial L(w^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* Momentum  [https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum]: &amp;lt;tex&amp;gt; \Delta w:=\alpha \Delta w-\eta \nabla Q_{i}(w)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; w:=w+\Delta w&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; w:=w-\eta \nabla Q_{i}(w)+\alpha \Delta w&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* NAG (Nesterov accelerated gradient)[https://jlmelville.github.io/mize/nesterov.html#nag]: &amp;lt;tex&amp;gt; w^{(k+1)} = w^{(k)}-v^{(k)}; v^{(k+1)}=\gamma v^{(k)}+\mu\frac{\partial L(w^{(k)}-v^{(k)})}{\partial w}&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Adagrad [http://akyrillidis.github.io/notes/AdaGrad]: &amp;lt;tex&amp;gt;g_{i,(k)}=\frac{\partial L(w_i^{(k)})}{\partial w_i}, w_i^{(k+1)}=w_i^{(k)}-\frac{\mu}{\sqrt{G^{(k)}_i,i+\epsilon}}g_{i,(k)}&amp;lt;/tex&amp;gt;, где G - диагональная матрица, элементы которой, суммы квадратов координат градиента к k-ой итерации алгоритма;&lt;br /&gt;
&lt;br /&gt;
*RMSProp[https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b]: &amp;lt;tex&amp;gt;E^{(k)}[g_i^2] = \gamma E^{(k-1)}[g_i^2]+(1-\gamma)g^2_{i, (k)}, w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{E^{(k)}[g_i^2]+\epsilon}}g_{i, (k)}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Adadelta[https://arxiv.org/abs/1212.5701]:&amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu(Q''(w^{(k)})^{-1}Q'(w^{(k)}&amp;lt;/tex&amp;gt;, вычисление матрицы Q вторых производных довольно сложная задача, поэтому вместо неё можно брать приближение: &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\frac{RMS^{(k-1)}[\delta w_i}{RMS^{(k)}[g_i]}g_i^{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;RMS^{(k)}[x_i]=\sqrt{E^{(k)}[x^2_i]+\epsilon}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
*Adam[https://arxiv.org/pdf/1412.6980.pdf]: &amp;lt;tex&amp;gt; w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{\hat{b}^2_{(k)}+\epsilon}}\hat{m}_{(k)}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;\hat{m}_{(k)}=\frac{\gamma_1 E^{(k-1)}[g_i]+(1-\gamma_1)g_{i,(k)}}{1-\gamma_1^k}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;\hat{b}^2_{(k)}= \frac{\gamma_2 E^{(k-1)}[g^2_i]+(1-\gamma_2)g:2_{i,(k)}}{1-\gamma_2^k}&amp;lt;/tex&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=68291</id>
		<title>Настройка глубокой сети</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%B3%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B9_%D1%81%D0%B5%D1%82%D0%B8&amp;diff=68291"/>
				<updated>2019-01-10T17:54:43Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: Новая страница: «Как и многие алгоритмы машинного обучения, [http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Как и многие алгоритмы машинного обучения, [http://neerc.ifmo.ru/wiki/index.php?title=%D0%93%D0%BB%D1%83%D0%B1%D0%BE%D0%BA%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5 глубокие сети] имеют множество гиперпараметров, которые должны быть заданы до начала обучения.&lt;br /&gt;
&lt;br /&gt;
== Инициализация сети ==&lt;br /&gt;
&lt;br /&gt;
Принцип выбора начальных значений весов для слоев, составляющих модель очень важен: установка всех весов в 0 будет серьезным препятствием для обучения, так как ни один из весов изначально не будет активен. Присваивать весам значения из интервала ±1 — тоже обычно не лучший вариант — на самом деле, иногда (в зависимости от задачи и сложности модели) от правильной инициализации модели может зависеть, достигнет она высочайшей производительности или вообще не будет сходиться. Даже если задача не предполагает такой крайности, удачно выбранный способ инициализации весов может значительно влиять на способность модели к обучению, так как он предустанавливает параметры модели с учетом функции потерь.[https://habr.com/company/wunderfund/blog/315476/]&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Завьера (Xavier) (иногда — метод Glorot’а)[http://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf]. Основная идея этого метода — упростить прохождение сигнала через слой во время как прямого, так и обратного распространения ошибки для линейной функции активации (этот метод также хорошо работает для сигмоидной функции, так как участок, где она ненасыщена, также имеет линейный характер). При вычислении весов этот метод опирается на вероятностное распределение (равномерное или нормальное) с дисперсией, равной &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in} + n_{out}}}&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n_{in}&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;n_{out}&amp;lt;/tex&amp;gt; — количества нейронов в предыдущем и последующем слоях соответственно.&lt;br /&gt;
&lt;br /&gt;
Метод инициализации Ге (He) — это вариация метода Завьера, больше подходящая функции активации ReLU, компенсирующая тот факт, что эта функция возвращает нуль для половины области определения. А именно, в этом случае &amp;lt;tex&amp;gt;\mathrm{Var}(W) = {2 \over{n_{in}}}&amp;lt;/tex&amp;gt;[https://arxiv.org/pdf/1502.01852.pdf].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Граф вычислений ==&lt;br /&gt;
Глубокие сети являются особенной формой графа вычиcлений.&lt;br /&gt;
[[Файл: Graph_comp.png|800px|thumb|Рис.1. Граф вычислений для функции &amp;lt;tex&amp;gt;f(a,b)=(a+b)*(b+1)&amp;lt;/tex&amp;gt;]]&lt;br /&gt;
Граф вычислений - это ориентированный граф, узлы которого соответствуют операциям или переменным. Переменные могут передавать свое значение в операции, а операции могут передавать свои результаты в другие операции. Таким образом, каждый узел в графе определяет функцию переменных.&lt;br /&gt;
&lt;br /&gt;
Значения, которые вводятся в узлы и выходят из узлов, называются тензорами (т.е. многомерными массивами). Forward pass - то есть мы последовательно передаем информацию от входных нейронов к выходным. После чего мы вычисляем ошибку и основываясь на ней делаем обратную передачу, которая заключается в том, чтобы последовательно менять веса нейронной сети, начиная с весов выходного нейрона. Значение весов будут меняться в ту сторону, которая даст нам наилучший результат.&lt;br /&gt;
&lt;br /&gt;
[[Файл: Graph_compilation.jpg|500px|thumb|Рис.2. Граф вычислений для функции &amp;lt;tex&amp;gt;f(x,y,z)=(x+y)*z&amp;lt;/tex&amp;gt;. Зелёные цифры - значения вычислений по ходу выполнения операций графа, красные - значения производной выходной функции по текущей переменной в точке &amp;lt;tex&amp;gt;(x_0=-2, y_0=5, z_0=-4)&amp;lt;/tex&amp;gt;]] &lt;br /&gt;
&lt;br /&gt;
Преимуществом такого представления функции является простота вычисления производных. Используя следующие правила вычисления частных производных: &amp;lt;tex&amp;gt;q=x+y:\frac{\partial q}{\partial x}=1, \frac{\partial q}{\partial y}=1;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;q=xy:\frac{\partial q}{\partial x}=y, \frac{\partial q}{\partial y}=x;&amp;lt;/tex&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x}=\frac{\partial f}{\partial q}\frac{\partial q}{\partial y}&amp;lt;/tex&amp;gt;. Подсчёт производных по графу вычислений производим от значения функции к значениям независимых переменных-входов&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial f} = 1&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial q} = z_0 = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial z} = q_0 = 3&amp;lt;/tex&amp;gt;&lt;br /&gt;
#&amp;lt;tex&amp;gt;\frac{\partial f}{\partial x} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial x} = -4&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt;\frac{\partial f}{\partial y} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial y} = -4&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Зная производные, можно искать параметры &amp;lt;tex&amp;gt;w&amp;lt;/tex&amp;gt; с помощью градиентного спуска сдвигаемся&lt;br /&gt;
в сторону градиента (при максимизации) или обратную ему&lt;br /&gt;
(при минимизации) &amp;lt;tex&amp;gt;w:=w-\eta\nabla_w f&amp;lt;/tex&amp;gt;, или его модификаций [http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%81%D0%BF%D1%83%D1%81%D0%BA%D0%B0].&lt;br /&gt;
&lt;br /&gt;
== Способы настройки параметров ==&lt;br /&gt;
&lt;br /&gt;
Ниже представлены различные вариации градиентного спуска, более подробное сравнение, применительно к данной задаче [https://habr.com/post/318970/].&lt;br /&gt;
&lt;br /&gt;
* Стохастический градиентный спуск [http://www.machinelearning.ru/wiki/index.php?title=%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D1%81%D1%82%D0%BE%D1%85%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B3%D0%BE_%D0%B3%D1%80%D0%B0%D0%B4%D0%B8%D0%B5%D0%BD%D1%82%D0%B0]: &amp;lt;tex&amp;gt;w^{(0)}&amp;lt;/tex&amp;gt; - начальные весы сети, &amp;lt;tex&amp;gt;w^{(k+1)}=w^{(k)}-\mu\frac{\partial L(w^{(k)}}{\partial w}&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* Momentum  [https://en.wikipedia.org/wiki/Stochastic_gradient_descent#Momentum]&lt;br /&gt;
&amp;lt;tex&amp;gt; \Delta w:=\alpha \Delta w-\eta \nabla Q_{i}(w)&amp;lt;/tex&amp;gt;, &amp;lt;tex&amp;gt; w:=w+\Delta w&amp;lt;/tex&amp;gt; или &amp;lt;tex&amp;gt; w:=w-\eta \nabla Q_{i}(w)+\alpha \Delta w&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
* NAG (Nesterov accelerated gradient)[https://jlmelville.github.io/mize/nesterov.html#nag], Adagrad [http://akyrillidis.github.io/notes/AdaGrad], RMSProp[https://towardsdatascience.com/a-look-at-gradient-descent-and-rmsprop-optimizers-f77d483ef08b], Adadelta[https://arxiv.org/abs/1212.5701], Adam[https://arxiv.org/pdf/1412.6980.pdf]...&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Graph_compilation.jpg&amp;diff=68268</id>
		<title>Файл:Graph compilation.jpg</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Graph_compilation.jpg&amp;diff=68268"/>
				<updated>2019-01-10T11:11:21Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Graph_comp.png&amp;diff=68238</id>
		<title>Файл:Graph comp.png</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Graph_comp.png&amp;diff=68238"/>
				<updated>2019-01-10T07:57:07Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: Граф вычислений&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Граф вычислений&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=68232</id>
		<title>Машинное обучение</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%9C%D0%B0%D1%88%D0%B8%D0%BD%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5&amp;diff=68232"/>
				<updated>2019-01-10T06:19:48Z</updated>
		
		<summary type="html">&lt;p&gt;Ventosa: /* В разработке */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Машинное обучение]]&lt;br /&gt;
&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;tex&amp;gt;^\star&amp;lt;/tex&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;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Neural Style Transfer]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[LSTM]]&lt;br /&gt;
*[[Generative Adversarial Nets (GAN)]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Метрический классификатор и метод ближайших соседей]]&lt;br /&gt;
*[[Метод опорных векторов (SVM)]]&lt;br /&gt;
*[[Дерево решений и случайный лес]]&lt;br /&gt;
*[[Байесовская классификация]]&lt;br /&gt;
*[[Кластеризация]]&lt;br /&gt;
*[[Иерархическая кластеризация]]&lt;br /&gt;
*[[k-средних]]&lt;br /&gt;
*[[EM-алгоритм]]&lt;br /&gt;
*[[Бустинг, AdaBoost]]&lt;br /&gt;
*[[Ранжирование]]&lt;br /&gt;
*[[Рекомендательные системы]]&lt;br /&gt;
*[[Настройка гиперпараметров]]&lt;br /&gt;
*[[Уменьшение размерности]]&lt;br /&gt;
*[[Обучение с подкреплением]]&lt;br /&gt;
*[[Обучение с подкреплением]]&amp;lt;tex&amp;gt;^\star&amp;lt;/tex&amp;gt;&lt;br /&gt;
*[[Активное обучение]]&lt;br /&gt;
*[[Примеры кода на R]]&lt;br /&gt;
*[[Примеры кода на Java]]&lt;br /&gt;
*[[Обзор библиотек для машинного обучения на Python]]&lt;br /&gt;
*[[Выброс]]&lt;br /&gt;
*[[CatBoost]]&lt;br /&gt;
*[[Глубокое обучение]]&lt;br /&gt;
*[[Настройка глубокой сети]]&lt;br /&gt;
*[[Batch-normalization]]&lt;br /&gt;
*[[Практики реализации нейронных сетей]]&lt;/div&gt;</summary>
		<author><name>Ventosa</name></author>	</entry>

	</feed>