Я читал статью о нормализации партии [1], и в ней был один раздел, где приводится пример, в котором я пытался показать, почему нормализацию следует выполнять осторожно. Я, честно говоря, не могу понять, как работает пример, и мне очень любопытно понять, что они пишут столько, сколько я могу. Сначала позвольте мне процитировать это здесь:
Например, рассмотрим слой со входом u, который добавляет изученное смещение b и нормализует результат, вычитая среднее значение активации, вычисленное по обучающим данным: где - это набор значений для обучающего набора, а . Если шаг градиентного спуска игнорирует зависимость от , то он обновит , где . Тогда . Таким образом, сочетание обновления для у+(б+Δб)-Е[U+(б+Δб)]=у+б-E[U+Ь]б и последующее изменение нормализации не привело ни к изменению выхода слоя, ни, как следствие, к потере.
Я думаю, что понимаю сообщение, что если кто-то не выполняет нормализацию должным образом, это может быть плохо. Я просто не знаю, как пример, который они используют, изображает это.
Я знаю, что трудно кому-то помочь, если он не будет более конкретным в том, что его смущает, поэтому я расскажу в следующем разделе, что меня смущает в их объяснении.
Я думаю, что большинство моих заблуждений могут быть нотационными, поэтому я поясню.
Во-первых, я думаю, что одна из вещей, которые меня смущают, это то, что для авторов означает наличие устройства в сети и что такое активация. Обычно я думаю об активации как:
где - исходные векторы объектов из первого входного слоя.
Кроме того, я думаю, что первое, что меня смущает (по предыдущей причине), это то, что сценарий, который они пытаются объяснить, на самом деле. Это говорит:
нормализует результат, вычитая среднее значение активации, вычисленное по тренировочным данным: гдех=у+б
Я думаю, что они пытаются сказать, что вместо использования активаций вычисленных путем прямого прохода, выполняется некая «нормализация» путем вычитания средней активации :
и затем передает это алгоритму обратного распространения. Или, по крайней мере, это то, что имеет смысл для меня.
Относительно этого, я думаю , что они называют , может быть ? Это то, что я бы догадался, потому что они называют это «входом» и имеют уравнение (я думаю, они используют единицу идентичности / линейной активации для своей нейронной сети? Возможно).x ( l ) x = u + b
Чтобы еще больше сбить меня с толку, они определяют как нечто пропорциональное частной производной, но частная производная вычисляется по отношению к , что мне кажется действительно странным. Обычно частные производные при использовании градиентного спуска находятся по отношению к параметрам сети. В случае смещения я бы подумал:х
имеет больше смысла, чем брать производную по нормализованным активациям. Я пытался понять, почему они взяли производную по отношению к и я подумал, что, возможно, они ссылались на дельты, когда писали так как обычно это единственная часть алгоритма обратной поддержки, которая имеет производную по отношению к предварительным активациям, поскольку уравнение дельта имеет вид: ∂л
Еще одна вещь, которая смущает меня:
Тогда .
они на самом деле не говорят, что они пытаются вычислить в приведенном выше уравнении, но я бы сделал вывод, что они пытаются вычислить обновленную нормированную активацию (для первого слоя?) после того, как обновлено до ? Не уверен, что я куплю их точку зрения, потому что думаю, что правильное уравнение должно было быть:b + Δ b
который не отменяет изменение параметра . Тем не менее, я не знаю, что они делают, поэтому я просто догадываюсь. Что это за уравнение, которое они написали?б
Я не уверен, что это правильное понимание, но я немного подумал над их примером. Кажется, что их пример не имеет нелинейной единицы активации (использует тождество), и они говорят только о первом входном слое? Так как они упустили много деталей, и запись не очень ясна, я не могу точно определить, о чем они говорят. Кто-нибудь знает, как выразить этот пример с помощью нотации, которая выражает то, что происходит на каждом слое? Кто-то понимает, что на самом деле происходит с этим примером, и хочет поделиться со мной своей мудростью?
[1]: Иоффе С. и Сегеди С. (2015 г.),
«Нормализация партии: ускорение глубокого сетевого обучения за счет уменьшения внутреннего смещения ковариат»,
Материалы 32-й Международной конференции по машинному обучению , Лилль, Франция, 2015 г.
Журнал машинного обучения Исследование: W & CP том 37
источник
Ответы:
Я думаю, что весь смысл этого параграфа состоит в том, чтоbЕ[ х ] б , если шаг градиентного спуска игнорирует зависимость от , обновление члена смещения b не приведет к изменению выходных данных , как утверждается в предложении перед ним,
Поэтому они сделали шаг градиентного спуска осведомленным о нормализации в их методе.
По поводу ваших вопросов
Как утверждается в их первом предложении, является входом слоя. То, что самом деле, не имеет значения, поскольку они иллюстрируют только эффект в примере.U ЬU U б
Мы знаем , так как мы игнорируем зависимость от , мы имеем так .Икс^= х - Е[ x ] = u + b - E[ х ] Е[ х ] б
Это вычисление после обновляется до , чтобы показать , что если шаг градиентного спуска игнорирует зависимость на , обновляя термин смещения б не приведет к изменению в выход.Икс^ б b + Δ b Е[ х ] б
Возможно, было бы полезно взглянуть на некоторые реализации пакетной нормализации с открытым исходным кодом, например в Lasagne и Keras .
Есть еще один вопрос, который может показаться связанным: зачем брать градиент моментов (среднее значение и дисперсию) при использовании нормализации партии в нейронной сети?
источник