Ну, я думаю, я просто тупой. Когда я понимаю абстрактную / математическую идею, я должен действительно воплотить ее в образы, я должен увидеть и потрогать ее в своей голове. Мне нужна геометрия, объект, интуиция, лежащая в основе идеи, а еще лучше - яркие метафоры в реальной жизни.

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

При выполнении задачи машинного обучения на небольшом наборе данных часто возникает проблема чрезмерной подгонки, когда модель точно запоминает все данные обучения, включая шум и несвязанные функции. Такая модель часто плохо работает с новыми тестовыми или реальными данными, которые ранее не использовались. Поскольку модель слишком серьезно относится к обучающим данным, она не смогла извлечь из них какой-либо значимый шаблон, а просто запомнила все, что видела.

Теперь одно решение этой проблемы называется регуляризацией. Идея состоит в том, чтобы применить норму L1 к вектору решения вашей проблемы машинного обучения (в случае глубокого обучения это веса нейронной сети) и попытаться сделать его как можно меньше. Итак, если ваша первоначальная цель - найти лучший вектор x, чтобы минимизировать функцию потерь f (x), ваша новая задача должна включить норму L1 x в формулу, найдя минимум (f (x) + L1norm (x)). Они часто заявляют о следующем: x с малой нормой L1 обычно является разреженным решением. Редкость означает, что большинство компонентов (весов) x равны нулю, и лишь некоторые из них не равны нулю. А редкое решение могло избежать переоборудования.

Вот так, вот как это объясняют в большинстве статей, учебников, материалов. Высказывать идею без объяснения - это все равно что проткнуть мне затылок копьем.

Не уверен насчет вас, ребята, но причина использования нормы L1 для обеспечения разреженности и, следовательно, предотвращения чрезмерной подгонки, была для меня не столь очевидна. Мне потребовалось время, чтобы понять, почему. По сути, у меня были следующие вопросы:

  1. почему малая норма L1 дает разреженное решение?
  2. почему разреженное решение позволяет избежать переобучения?
  3. что на самом деле делает регуляризация?

Мое первоначальное замешательство возникло из-за того, что я смотрел только на норму L1 и думал только о том, что означает, что норма L1 мала. Однако на самом деле мне следует подумать о функции потерь и штрафе за норму L1 в целом.

Позвольте мне объяснить это с самого начала, проблему чрезмерной подгонки. Я хочу привести конкретный пример. Предположим, вы купили робота и хотите научить его классифицировать китайские иероглифы, рассмотрев следующий пример:

Первые 5 символов относятся к первой категории, последние 5 - ко второй категории. И эти 10 символов - единственные тренировочные данные, которые у вас есть.

Теперь, к сожалению, робот слишком умен для этой задачи. У него достаточно большой памяти, чтобы запомнить 5 символов. Увидев все 10 символов, робот научился классифицировать их: он точно запоминает все первые 5 символов. Пока персонаж не входит в число этих 5, робот помещает персонажа во вторую категорию.

Конечно, этот метод будет очень хорошо работать на 10 обучающих персонажах, так как робот может достичь 100% точности. Однако вы предоставляете нового персонажа:

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

Нам, людям, должно быть совершенно очевидно, что здесь можно увидеть закономерность. Все персонажи, относящиеся к первой категории, имеют общую часть. Робот не справился с задачей, потому что он слишком умен, а данных для обучения слишком мало.

Это проблема переоборудования. Но что такое регуляризация и почему разреженность позволяет избежать переобучения?

А теперь представьте, что вы разозлились на своего робота. Вы ударили робота молотком по голове и при этом стряхнули с его головы некоторые из его микросхем памяти. По сути, вы сделали робота тупее. Теперь, вместо того, чтобы запоминать 5 символов, робот может запоминать только часть персонажа.

Вы позволяете роботу снова тренироваться, глядя на всех 10 персонажей, и при этом заставляете его достигать той же точности. Поскольку на этот раз он не может вспомнить все 5 символов, вы, по сути, заставляете его искать более простой образец. Теперь он обнаруживает общую часть всех персонажей категории А!

Именно это и делает регуляризация нормы L1. Он стучит по вашей машине (модели), чтобы сделать ее «тупее». Поэтому вместо того, чтобы просто запоминать материал, он должен искать в данных более простые закономерности. В случае с роботом, когда он мог запомнить 5 символов, его «мозг» имел вектор размера 5: [把, 打, 扒, 捕, 拉]. Теперь после регуляризации (грохота) 4 слота его памяти пришли в негодность. Следовательно, недавно изученный вектор: [扌, 0, 0, 0, 0], и очевидно, что это разреженный вектор.

Более формально, когда вы решаете большой вектор x с меньшим количеством обучающих данных. Решений для x может быть много.

Здесь A - матрица, содержащая все данные обучения. x - вектор решения, который вы ищете. b - вектор метки.

Когда данных недостаточно и размер параметра вашей модели велик, ваша матрица A не будет достаточно «высокой», а ваш x будет очень длинным. Таким образом, приведенное выше уравнение будет выглядеть так:

Для такой системы решения x могут быть бесконечными. Чтобы найти хорошее из этих решений, вы должны убедиться, что каждый компонент выбранного решения x отражает полезную функцию ваших данных. Посредством регуляризации L1 вы по существу делаете вектор x меньше (разреженным), поскольку большинство его компонентов бесполезны (нули), и в то же время оставшиеся ненулевые компоненты очень «полезны».

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

Еще один способ регуляризации глубокого обучения - это отсев. Идея проста: удалить некоторые случайные нейронные связи из нейронной сети во время обучения и добавить их через некоторое время. По сути, это все еще пытается сделать вашу модель «глупее», уменьшив размер нейронной сети и возложив больше ответственности и давления на оставшиеся веса, чтобы научиться чему-то полезному. После того, как эти веса изучили хорошие функции, затем добавляем другие связи, чтобы охватить новые данные. Я хотел бы думать об этом добавлении обратной связи как о «введении иммигрантов в ваше королевство, когда у вас мало рук» в вышеприведенной метафоре.

Основываясь на этой идее «сделать модель глупее», я думаю, мы можем придумать другие аналогичные способы избежать чрезмерной подгонки, например, начать с небольшой сети и постепенно добавлять новые нейроны и подключения к сети, когда доступно больше данных. Или выполните обрезку во время тренировки, чтобы избавиться от близких к нулю связей.

До сих пор мы продемонстрировали, почему разреженность позволяет избежать чрезмерной подгонки. Но почему добавление нормы L1 к функции потерь и принуждение к уменьшению нормы L1 решения может привести к разреженности?

Вчера, когда я впервые подумал об этом, я использовал два примера вектора [0,1, 0,1] и [1000, 0]. Первый вектор явно не разреженный, но имеет меньшую норму L1. Вот почему я был сбит с толку, потому что рассмотрение одной только нормы L1 не сделает эту идею понятной. Я должен рассматривать всю функцию потерь в целом.

Вернемся к проблеме Ax = b на простом и конкретном примере. Предположим, мы хотим найти линию, которая соответствует набору точек в 2D-пространстве. Все мы знаем, что вам нужно как минимум 2 точки, чтобы зафиксировать линию. Но что, если в обучающих данных есть только одна точка? Тогда у вас будет бесконечное количество решений: каждая линия, проходящая через точку, является решением. Предположим, что точка находится в [10, 5], а линия определена как функция y = a * x + b. Тогда проблема состоит в том, чтобы найти решение этого уравнения:

Поскольку b = 5-10 * a, все точки на следующей строке b = 5-10 * a должны быть решением:

Но как найти разреженный с нормой L1?

Норма L1 определяется как сумма абсолютных значений всех компонентов вектора. Например, если вектор равен [x, y], его норма L1 равна | x | + | у |.

Теперь, если мы нарисуем все точки, у которых норма L1 равна константе c, эти точки должны образовать что-то (выделенное красным) следующим образом:

Эта форма выглядит как наклонный квадрат. В пространстве большой размерности это будет октаэдр. Обратите внимание, что на этой красной фигуре не все точки редкие. Только на кончиках точки редкие. То есть компонент x или y точки равен нулю. Теперь способ найти разреженное решение - увеличить эту красную фигуру от начала координат, задав постоянно растущую букву c, чтобы «коснуться» синей линии решения. Интуиция подсказывает, что точка касания, скорее всего, находится на кончике формы. Поскольку кончик является разреженной точкой, решение, определяемое точкой касания, также является разреженным решением.

Например, на этом графике красная фигура увеличивается в 3 раза, пока не коснется синей линии b = 5–10 * a. Точка касания, как вы можете видеть, находится на кончике красной формы. Точка касания [0,5, 0] - разреженный вектор. Поэтому мы говорим, что, найдя точку решения с наименьшей нормой L1 (0,5) из всех возможных решений (точки на синей линии), мы находим разреженное решение [0,5, 0] нашей проблемы. В точке касания константа c является наименьшей нормой L1, которую вы можете найти среди всех возможных решений.

Интуиция использования нормы L1 заключается в том, что форма, образованная всеми точками, норма L1 которых равна константе c, имеет множество вершин (выступов), которые оказываются разреженными (лежат на одной из осей системы координат). Теперь мы увеличиваем эту форму, чтобы прикоснуться к решениям, которые мы находим для нашей проблемы (обычно поверхность или поперечное сечение в большом размере). Вероятность того, что точка касания двух фигур находится на одной из «вершин» или «шипов» стандартной формы L1, очень высока. Вот почему вы хотите поместить норму L1 в формулу функции потерь, чтобы вы могли продолжать искать решение с меньшим c (на «разреженной» вершине нормы L1). (Таким образом, в случае реальной функции потерь вы, по сути, сжимаете красную фигуру, чтобы найти точку касания, а не увеличивать ее от начала координат.)

Всегда ли L1 norm касается решения кончиком и находит нам разреженное решение? Не обязательно. Предположим, мы все еще хотим найти линию из 2D-точек, но на этот раз единственными обучающими данными является точка [1, 1000]. В этом случае линия решения b = 1000 -a параллельна одному из краев формы нормы L1:

В конце концов, они касаются края, а не кончика. Мало того, что на этот раз у вас не может быть уникального решения, большинство ваших регуляризованных решений все еще не являются редкими (кроме двух подсказок).

Но опять же, вероятность прикоснуться к наконечнику очень высока. Думаю, это еще более верно для реальных проблем большого размера. Как и в случае, когда ваша система координат имеет больше осей, ваша нормальная форма L1 должна иметь больше выступов или вершин. Он должен быть похож на кактус или на ёжика! Я не могу себе представить.

Если подтолкнуть человека к кактусу, вероятность того, что он уколется иголками, довольно высока. Вот почему они изобрели это оружие извращенцев, и вот почему они хотят использовать норму L1.

Но является ли норма L1 лучшей нормой для поиска разреженного решения? Что ж, оказывается, что норма Lp при 0 ‹= p‹ 1 дает лучший результат. Это можно объяснить, посмотрев на формы различных норм:

Как видите, при p

В заключение, чрезмерная подгонка - это проблема, которую вы видите, когда ваша модель машинного обучения слишком велика (имеет слишком много параметров) по сравнению с вашими доступными данными обучения. В этом случае модель имеет тенденцию запоминать все обучающие случаи, включая шумные, для достижения лучшего результата обучения. Чтобы избежать этого, к модели применяется регуляризация, чтобы (существенно) уменьшить ее размер. Один из способов регуляризации - убедиться, что обученная модель разрежена, чтобы большинство ее компонентов были нулями. Эти нули по сути бесполезны, и размер вашей модели фактически уменьшен.

Причина использования нормы L1 для поиска разреженного решения связана с его особой формой. У него есть шипы, которые случаются в редких местах. Прикосновение им к поверхности раствора с большой вероятностью приведет к обнаружению точки касания на кончике иглы и, следовательно, к разреженному раствору.

Подумайте об этом:

Когда происходит вспышка зомби, какое оружие выбрать?