Искусственные нейронные сети

Зачем нам нужны скрытые слои?

Любит | Нелюбов | Ответы | Вид | 5887


Ян Малиновский магистр наук Оксфордского университета (2022)   
@ | Обновлено Right Now


Я прочитал статью «Нормализация партии: ускорение обучения в глубокой сети за счет сокращения
внутреннего смещения по ковариату» http: //arxiv.org/pdf/1502.03167v ...

Я понял, что есть разница, когда нормализация партии (BN) вычисляет среднее значение и дисперсию в поезде и в тесте.

На тренинге: Расчет среднего и дисперсионной базы по мини-партии. Вы можете увидеть ниже картинку.

В тесте: среднее значение и дисперсия были рассчитаны с использованием статистики, а не популяции.

Реальные орудия имеют небольшую разницу с оригинальным документом. Для подробной информации о реализации, вот учебник, реализующий пакетную нормализацию в Tensorflow из R2RT .

На этапе обучения:

Шаг 1, модель рассчитает базу batch_mean и batch_var для входной партии

  1. batch_mean , batch_var = tf . пп . моменты ( х , [ 0 ])

Шаг 2, pop_mean и pop_var будут обновлены на основе batch_mean, batch_var с затуханием. В этом уроке распад будет 0,999

  1. распад = 0,999
  2. global_mean = tf . назначить ( pop_mean ,
  3. pop_mean * decay + batch_mean * ( 1 - decay ))
  4. global_var = tf . назначить ( pop_var ,
  5. pop_var * decay + batch_var * ( 1 - decay ))

Шаг 3, мы можем нормализовать входные данные, используя global_mean и global_var:

  1. # Применить исходное преобразование нормализации партии
  2. z1_hat = ( x - global_mean ) / tf . sqrt ( global_var + epsilon )

Шаг 4, применить масштаб и сдвиг на

  1. BN1 = scale1 * z1_hat + beta1

На этапе тестирования:

Модель не обновляет pop_mean и pop_var, пропустите шаг 1 и шаг 2 на этапе обучения. Модель просто использует pop_mean и pop_var напрямую:

  1. z1_hat = ( x - pop_mean ) / tf . sqrt ( pop_var + epsilon )
  2. BN1 = scale1 * z1_hat + beta1

| |