Конспект лекций FAU по глубокому обучению

Сети прямого распространения — часть 4

Абстракция слоя

Это конспект лекций FAU YouTube Lecture Deep Learning. Это полная стенограмма видео лекции и соответствующие слайды. Мы надеемся, вам понравится это так же, как видео. Конечно, эта стенограмма была создана с использованием методов глубокого обучения в основном автоматически, и вручную были внесены лишь незначительные изменения. Если вы заметили ошибки, сообщите нам об этом!

Навигация

Предыдущая лекция / Посмотреть это видео / Высший уровень / Следующая лекция

Добро пожаловать в наше следующее видео о глубоком обучении! Итак, сегодня мы снова хотим поговорить о сетях прямого распространения. В четвертой части основное внимание будет уделено абстракции слоев. Конечно, мы говорили об этих нейронах и отдельных узлах, но это становится очень сложным для больших сетей. Поэтому мы хотим ввести эту концепцию слоев также и в наши вычисления градиентов. Это действительно полезно, потому что тогда мы можем напрямую говорить о градиентах на целых слоях, и нам не нужно переходить ко всем различным узлам.

Итак, как мы это выразим? Давайте вспомним, что делает наш единственный нейрон. Один нейрон вычисляет, по сути, внутренний продукт своих весов. Кстати, мы пропускаем это обозначение смещения. Итак, мы расширяем этот вектор на один дополнительный элемент. Это позволяет нам также описать смещение и внутренний продукт, как показано на слайде здесь. Это действительно хорошо, потому что тогда вы можете видеть, что выходная шляпа y — это просто внутренний продукт.

Теперь подумайте о случае, когда у нас есть M нейронов, что означает, что мы получаем некоторый y индекс шляпы m. Все они являются внутренними продуктами. Итак, если вы переведете это в векторную запись, вы увидите, что вектор y не что иное, как матричное умножение x на эту матрицу W. Вы видите, что полносвязный слой есть не что иное, как умножение матриц. Таким образом, мы можем по существу представлять произвольные соединения и топологии, используя этот полносвязный слой. Затем мы также применяем точечную нелинейность, чтобы получить нелинейный эффект. Прелесть матричных обозначений, конечно, в том, что теперь мы можем описать производные всего слоя, используя матричное исчисление.

Таким образом, наш полносвязный слой получит следующую конфигурацию: три элемента на вход, а затем веса для каждого нейрона. Допустим, у вас есть два нейрона, тогда мы получим эти весовые векторы. Мы умножаем два на x. На прямом проходе мы определили эту шляпу y для всего модуля с помощью матрицы. Если вы хотите вычислить градиенты, то нам нужны ровно две частные производные. Это то же самое, о чем мы уже упоминали: нам нужна производная по весам. Это будет частная производная по W и частные производные по x для обратного распространения, чтобы передать ее следующему модулю.

Итак, как мы это вычисляем? Ну, у нас есть слой, который y равен W x. Итак, в прямом проходе происходит матричное умножение. Затем нам нужна производная по весам. Теперь вы можете видеть, что нам, по сути, нужно сделать здесь производную матрицы. Производная от y по отношению к W будет просто xᵀ. Итак, если у нас есть потери, которые входят в наш модуль, обновление наших весов будет вектором потерь, умноженным на xᵀ. Итак, у нас есть некоторый вектор потерь и xᵀ, что по сути означает, что у вас есть внешний продукт. Один из них — вектор-столбец, а другой — вектор-строка из-за транспонирования. Итак, если вы умножите два, вы получите матрицу. Приведенная выше частная производная по W всегда приводит к матрице. Затем, если вы посмотрите на нижнюю строку, вам понадобится частная производная от y по отношению к x. Кстати, кое-что можно найти и в матричной кулинарной книге. Это очень очень полезно. Здесь вы найдете всевозможные матричные производные. Итак, если вы сделаете это, вы увидите, что в приведенном выше уравнении частичное значение по отношению к x будет равно Wᵀ. Теперь вы снова умножили Wᵀ на некоторый вектор потерь. Этот вектор потерь, умноженный на матрицу, снова станет вектором. Это вектор, который вы передадите в процессе обратного распространения к следующему более высокому слою.

Хорошо, давайте рассмотрим пример. Сначала у нас есть простой пример, а затем многослойный пример. Итак, простым примером будет та же сеть, что и у нас. Итак, это была сеть без какой-либо нелинейности W x. Теперь нам нужна функция потерь. Здесь мы не берем кросс-энтропию, а берем потери L2, которые являются общей векторной нормой. Что он делает, так это просто берет вывод сети, вычитает желаемый результат и вычисляет норму L2. Это означает, что мы поэлементно возводим в квадрат различные значения векторов и суммируем их все. В конце концов нам пришлось бы извлекать квадратный корень, но мы хотим этого не делать. Итак, возьмем его в степени двойки. Когда мы теперь вычисляем производные этой L2-нормы в степени двойки, мы, конечно же, получаем множитель два. Это будет отменено этим коэффициентом 1 на 2 в начале. Кстати, это регрессионный проигрыш и тоже имеет статистическую зависимость. Мы поговорим об этом, когда будем более подробно говорить о функциях потерь. Хорошая вещь с потерей L2 заключается в том, что вы также находите ее матричные производные матричной поваренной книгой. Теперь мы вычисляем частную производную L по y шляпе. Это даст нам затем Wxy, и мы можем продолжить и вычислить обновление для наших весов. Таким образом, обновление весов — это то, что мы вычисляем, используя производную функции потерь. Производная функции потерь по входным данным была Wxy умножить на xᵀ. Это даст нам обновление для веса матрицы. Другая производная, которую мы хотим вычислить, — это частная производная потерь по x. Итак, как мы видели на предыдущем слайде, это будет Wᵀ, умноженное на вектор, полученный из функции потерь: Wxy , как мы определили в третьей строке слайда.

Итак, давайте добавим несколько слоев и превратим нашу оценку в три вложенные функции. Здесь у нас есть несколько линейных матриц. Итак, это академический пример: вы могли видеть, что, умножая W₁, W₂ и W₃ друг на друга, они будут просто свернуть в единую матрицу. Тем не менее, я нахожу этот пример полезным, потому что он показывает, что на самом деле происходит при вычислении процесса обратного распространения и почему эти конкретные шаги действительно полезны. Итак, снова возьмем функцию потерь L2. Здесь у нас есть три матрицы внутри.

Далее нам нужно продолжить и вычислить производные. Что касается производных, мы начнем со слоя 3, самого внешнего слоя. Итак, вы видите, что теперь мы вычисляем частную производную функции потерь по W₃. Во-первых, правило цепи. Затем мы должны вычислить частную производную функции потерь по f₃(x) по отношению к W₃. Частная производная функции потерь снова является просто внутренней частью нормы L2. Так же и это W₃ WWxy. Частная производная сети будет (WWx), как мы видно на предыдущем слайде. Обратите внимание, что я указываю сродство матричного оператора с помощью точки. Для матриц имеет значение, умножаете ли вы их слева или справа. Оба направления умножения различны. Следовательно, я указываю, что вы должны вычислить этот продукт с правой стороны. Теперь давайте сделаем это, и мы получим окончательное обновление для W₃, которое просто вычисляется из этих двух выражений.

Теперь частная производная относительно W₂ немного сложнее, потому что нам нужно применить цепное правило дважды. Итак, нам снова нужно вычислить частную производную функции потерь по шляпе f₃(x). Затем нам нужна частная производная f₃(x) от W₂, что означает, что мы должны снова применить цепное правило. Таким образом, мы должны разложить частную производную f₃(x) по отношению к f₂(x), а затем частную производную от f₂(x). strong>) шляпа по отношению к W₂. Это мало что меняет. Термин Loss такой же, как мы использовали ранее. Теперь, если мы вычислим частную производную f₃(x) по отношению к f₂(x) — вспомним, что f₂(x) = WWx — это будет W, и у нас есть чтобы умножить его с левой стороны. Затем мы идем дальше и вычисляем частную производную от f₂(x) по отношению к W₂. Вы остаетесь с (Wx). Таким образом, окончательная производная матрицы будет произведением трех членов. Мы можем повторить это для последнего слоя, но теперь нам нужно снова применить цепное правило. Мы видим уже две части, которые мы предварительно вычислили, но мы должны применить их снова. Итак, здесь мы получаем частную производную от f₂(x) по отношению к f₁(x) и частную производную от f₁(x) >) шляпа по отношению к W₁, что дает два термина, которые мы использовали ранее. Частная производная f₂(x) по отношению к f₁(x), равная Wx , будет W. Затем нам все еще нужно вычислить частную производную f₁(x) по W₁. Это будет xᵀ. Таким образом, мы получаем произведение четырех членов этой частной производной.

Теперь вы можете видеть, что если мы выполним алгоритм обратного распространения, мы получим очень похожий способ обработки. Итак, сначала мы вычисляем прямой путь через всю нашу сеть и оцениваем функцию потерь. Затем мы можем посмотреть на различные частные производные, и в зависимости от того, куда я хочу пойти, я должен вычислить соответствующие частные производные. Для обновления последнего слоя мне нужно вычислить частную производную функции потерь и умножить ее на частную производную последнего слоя по весам. Теперь, если я перехожу к предпоследнему слою, мне нужно вычислить частную производную по функции потерь, частную производную последнего слоя по входным данным и частную производную предпоследнего слоя по отношению к веса, чтобы получить обновление. Если я хочу перейти к первому слою, мне нужно вычислить все соответствующие шаги обратного распространения для всех слоев, пока я не получу соответствующее обновление на самом первом слое. Вы можете видеть, что мы можем предварительно вычислить многие из этих значений и повторно использовать их, что позволяет нам очень эффективно реализовать обратное распространение.

Давайте подытожим то, что мы видели до сих пор. Мы видели, что мы можем комбинировать функцию активации softmax с потерей кросс-энтропии. Тогда мы можем естественным образом работать с многоклассовыми задачами. Мы использовали градиентный спуск в качестве выбора по умолчанию для обучающей сети, и мы можем достичь локальных минимумов, используя эту стратегию. Конечно, мы можем вычислять градиенты только численно по конечным разностям, и это очень полезно для проверки ваших реализаций. Это то, что вам обязательно понадобится в упражнениях! Затем мы использовали алгоритм обратного распространения для очень эффективного вычисления градиентов. Чтобы иметь возможность обновлять веса полностью связанных слоев, мы видели, что их можно абстрагировать как полный слой. Следовательно, мы также можем вычислять послойные производные. Таким образом, не обязательно вычислять все на уровне узла, но вы действительно можете перейти к абстракции уровня. Вы также видели, что матричное исчисление оказывается очень полезным.

Что произойдет в следующий раз в глубоком обучении? Что ж, мы увидим, что прямо сейчас у нас есть только ограниченное количество функций потерь. Итак, мы увидим адаптированные к проблеме функции потерь для регрессии и классификации. Очень простая оптимизация, о которой мы говорили прямо сейчас, с одним η, вероятно, не является правильным путем. Итак, есть гораздо лучшие программы оптимизации. Они могут быть адаптированы к потребностям каждого отдельного параметра. Затем мы также увидим аргумент, почему нейронные сети не должны работать так хорошо, и некоторые недавние идеи, почему они действительно работают достаточно хорошо.

У меня тоже есть пара комплексных вопросов. Таким образом, вы определенно должны быть в состоянии назвать различные функции потерь для многоклассовой классификации. Горячее кодирование — это то, что нужно знать каждому, если вы хотите сдать устный экзамен со мной. Вы должны быть в состоянии описать это. Затем, конечно, то, что я, вероятно, не буду спрашивать на экзамене, но что будет очень полезно для вашей повседневной жизни, так это то, что вы работаете с конечными разностями и используете их для проверки реализации. Вы должны быть в состоянии описать алгоритм обратного распространения, и, честно говоря, я думаю, что это — хотя это и академично — но этот многоуровневый абстракционный способ описания алгоритма обратного распространения действительно полезен. Это также очень удобно, если вы хотите объяснить обратное распространение ошибки в экзаменационной ситуации. Что еще вы должны уметь описывать? Проблема взрывающихся и исчезающих градиентов: что произойдет, если вы выберете слишком высокое или слишком низкое значение η? Что такое потерянная кривая и как она меняется на итерациях? Взгляните на эти графики. Они действительно актуальны, а также помогают понять, что идет не так в вашем тренировочном процессе. Поэтому вам нужно знать об этом, а также вам уже должно быть ясно, почему функция знака является плохим выбором для функции активации. У нас есть много ссылок под этим постом. Итак, я надеюсь, что вы все еще весело провели время с этими видео. Пожалуйста, продолжайте смотреть и увидимся в следующем видео!

Если вам понравился этот пост, вы можете найти больше эссе здесь, больше учебных материалов по машинному обучению здесь или посмотреть нашу Глубокое обучение Лекцию. Я также был бы признателен за аплодисменты или подписку на YouTube, Twitter, Facebook или LinkedIn, если вы хотите получать информацию о новых эссе, видео и исследованиях в будущем. Эта статья выпущена на условиях Creative Commons 4.0 Attribution License и может быть перепечатана и изменена при ссылке.

использованная литература

[1] Р. О. Дуда, П. Э. Харт и Д. Г. Сторк. Классификация узоров. John Wiley and Sons, Inc., 2000.
[2] Кристофер М. Бишоп. Распознавание образов и машинное обучение (информатика и статистика). Секокус, Нью-Джерси, США: Springer-Verlag New York, Inc., 2006.
[3] Ф. Розенблатт. «Персептрон: вероятностная модель хранения и организации информации в мозгу». В: Psychological Review 65.6 (1958), стр. 386–408.
[4] WS. Маккалок и У. Питтс. «Логическое исчисление идей, имманентных нервной деятельности». В: Бюллетень математической биофизики 5 (1943), стр. 99–115.
[5] Д. Э. Румельхарт, Г. Э. Хинтон и Р. Дж. Уильямс. «Изучение представлений путем обратного распространения ошибок». В: Nature 323 (1986), стр. 533–536.
[6] Ксавье Глорот, Антуан Бордес и Йошуа Бенжио. «Глубокие разреженные нейронные сети выпрямителя». В: Труды четырнадцатой Международной конференции по искусственному интеллекту Vol. 15. 2011, стр. 315–323.
[7] William H. Press, Saul A. Teukolsky, William T. Vetterling, et al. Числовые рецепты 3-е издание: Искусство научных вычислений. 3-е изд. Нью-Йорк, штат Нью-Йорк, США: Издательство Кембриджского университета, 2007.