Изменения

Перейти к: навигация, поиск

Настройка глубокой сети

4159 байт добавлено, 20:45, 29 января 2020
Сравнение способов настройки параметров
*<tex>q=x+y:\frac{\partial q}{\partial x}=1, \frac{\partial q}{\partial y}=1;</tex>;
*<tex>q=xy:\frac{\partial q}{\partial x}=y, \frac{\partial q}{\partial y}=x;</tex>;
*<tex>\frac{\partial f}{\partial xy}=\frac{\partial f}{\partial q}\frac{\partial q}{\partial y}</tex>.
Рассмотрим граф вычислений на рисунке 2 с поданными на вход значениями <tex>(x_0=-2, y_0=5, z_0=-4)</tex>. Подсчёт производных по графу вычислений производим от значения функции к значениям независимых переменных-входов.
*Adam<ref>[https://arxiv.org/pdf/1412.6980.pdf Adam]</ref> сочетает в себе преимущества NAG и Adadelta над обычным градиентным спуском: <tex> w^{(k+1)}_i = w_i^{(k)}-\frac{\mu}{\sqrt{\hat{b}^2_{(k)}+\epsilon}}\hat{m}_{(k)}</tex>, где <tex>\hat{m}_{(k)}=\frac{\gamma_1 E^{(k-1)}[g_i]+(1-\gamma_1)g_{i,(k)}}{1-\gamma_1^k}</tex> и <tex>\hat{b}^2_{(k)}= \frac{\gamma_2 E^{(k-1)}[g^2_i]+(1-\gamma_2)g:2_{i,(k)}}{1-\gamma_2^k}</tex>.
 
== Сравнение способов настройки параметров ==
[[Файл:Gradient_optimization.gif|Сравнение разных методов на седловой функции]]
 
Рассмотрим график седловой функции с "седлом" в точке <tex>(0, 0, 0)</tex>. Предположим, что в качестве начальной точки выбрана точка <tex>(0, y, z)</tex>, где <tex>y > 0, z > 0</tex>. На рисунке координата <tex>x</tex> варьируется в пределах от <tex>-1.5</tex> до <tex>1</tex>, координата <tex>y \in [-0.5; 1]</tex>, а координата <tex>z \in [-4; 4]</tex>. Рассмотрим работу описанных выше методов, примененных к данной оптимизируемой функции с данной начальной точкой:
 
* SGD (Стандартный градиентный спуск без оптимизаций) никак не учитывает тот факт, что по координате <tex>x</tex> производная в данной точке пренебрежимо мала по сравнению с производной по <tex>y</tex>. Поэтому через малое число итераций алгоритм сойдется в окрестности седловой точки <tex>(0, 0, 0)</tex> и остановится, потому что производная в данной точке нулевая.
 
* Momentum. Так как добавится инерция, то спуск в сторону седловой точки будет значительно быстрее, чем в случае со стандартным градиентным спуском. Однако, оптимизируемая переменная будет еще долго колебаться в плоскости <tex>x = 0</tex>, накапливая градиенты. При этом колебания будут затухать из-за того, что параметр <tex>\alpha < 1</tex>, но т.к. оптимизируемая переменная несколько раз отдалится от точки <tex>(0, 0, 0)</tex> на достаточное расстояние, успеет накопиться значение производной по координате <tex>x</tex>, достаточное для того чтобы выйти из локального минимума. Однако для этого потребуется большое число итераций, необходимое для того, чтобы производная по <tex>y</tex> перестала преобладать над производной по <tex>x</tex>.
 
* NAG. Эффект будет схожим с алгоритмом Momentum, однако спуск в плоскости <tex>y = 0</tex> будет происходить быстрее благодаря заглядыванию вперед.
 
* Adagrad. Изначально спуск будет происходить медленнее, чем при использовании SGD из-за нормирования градиента по всем координатам, однако метод сойдется в глобальном минимуме выбранной области графика.
 
* RMSProp. Изначально процесс оптимизации почти совпадает с Adagrad, но в области, где функция начинает сильно убывать, благодаря использованию скользящей суммы градиентов (то есть благодаря тому, что мы забываем старые изменения и больше учитываем новые) алгоритм RMSProp оптимизирует переменную быстрее, чем Adagrad.
 
* Adadelta. Использует все преимущества RMSProp, но при этом в данном случае сходится быстрее в <tex>RMS[\delta w_i]</tex> раз.
==См.также==
* [[Глубокое обучение]]
* [[Стохастический градиентный спуск]]
* [[Обратное распространение ошибки]]<sup>[на 28.01.19 страница не создана]</sup>
==Примечания==
186
правок

Навигация