Изменения
→Оригинальный алгоритм обучения GAN
<font color=green>// num_iteration {{---}} число итераций обучения </font>
'''function''' GAN: '''for''' i = 1..num_iteration '''do''' '''for''' j = 1..k '''do''' Сэмплируем $z$ = getBatchFromNoisePrior($p_z$) <font color=green>//Получаем мини-батч $\{z_1, . . . , z_m\}$ из распределения $p_z$.</font> Сэмплируем $x$ = getBatchFromDataGeneratingDistibution($p_{data}$) <font color=green>//Получаем мини-батч $\{x_1, . . . , x_m\}$ из распределения $p_{data}$. Обновляем дискриминатор в сторону возрастания его градиента:</font> <tex>d_w \leftarrow \mathop{\nabla}_{\gamma} { \frac{1}{m} \sum_{t = 1}^m \limits} [logD(x_t)] + [log(1-D(G(z_t))] </tex> <font color=green>//Обновляем дискриминатор в сторону возрастания его градиента </font> '''end''' '''for''' Сэмплируем $z$ = getBatchFromNoisePrior($p_z$) <font color=green>//Получаем мини-батч $\{z_1, . . . , z_m\}$ из распределения $p_z$. </font> Обновляем генератор в сторону убывания его градиента: <tex>g_w \leftarrow \mathop{\nabla}_{\theta} { \frac{1}{m} \sum_{t = 1}^m \limits} [log(1-D(G(z_t))] </tex> <font color=green>//Обновляем генератор в сторону убывания его градиента </font> '''end''' '''for'''
Обновления на основе градиента могут быть сделаны любым стандартным способом, например, в оригинальной статье использовался [[:Cтохастический градиентный спуск|стохастический градиентный спуск]]<sup>[на 14.11.18 не создан]</sup> с импульсом.