Pull to refresh
-1
0
Андрей Гриненко @AGrin

Data Scientist

Send message
Казалось бы — для побочного хобби-проекта — вполне неплохо. Я когда-то квадратичные/кубические функции нейросетями аппроксимировал. Вполне расширяющий сознание опыт, особенно если на промежуточные результаты (по эпохам) глазами смотреть.
Да, и чем более сложное и критичное к ошибкам ПО — тем в большей степени маппится. Однозначно.
Какой кошмар (без шуток). Но устно все равно все именно так и говорят. В общем я поправлю, спасибо.
Но все же говорят «фичеселект» по факту. Но в «условно литературном» тексте, конечно, «выбор признаков» лучше.

Слово «sample» указывает на один массив чисел, описывающий объект, а «выборка» — на их совокупность. Так что в этой части согласиться не могу.
Ох, ну давайте пытаться вести дискуссию с претензией на обоснованность.

1. Да, я сознательно по возможности использую самописные функции и метрики. Делаю это со следующими целями:
— Больший контроль разработчика над кодом. Очень обидно потратить существенное время на отладку для того, чтобы понять, что та или иная функция работает немного не так, как предполагалось.
— Большая гибкость. Намного проще модифицировать ту или иную процедуру в связи с изменяющимися целями.
— Лучше для чтения, в частности — для изучения. По крайней мере первый раз лучше прочитать реально исполняющийся код, чем строку и ее математическое описание.

Есть и минусы у такого подхода. В первую очередь — в самом деле низкая скорость обработки данных. Однако в рассматриваемой задаче объем данных не так уж велик, так что это не составляет проблемы. Второй минус — работа с менее стандартными случаями. Типичный пример — строковые значения полей в csv (включающие в себя запятые). В этих случаях, разумеется, приходится [для меня — скрипя сердце] переходить на стандартные сторонние решения.

2. Я бы хотел видеть ссылку на аналогичный интерфейс Scikit-Learn. Название функции predict заменено на process сознательно. Я использую имя функции process в тех случаях, когда предполагается возможность наличия скрытых внутренних состояний и функция может давать разные результаты в зависимости от этих состояний. Как правило я, разумеется, стараюсь следовать интерфейсам Scikit-Learn, ставшим де-факто стандартными.

3. Автор идет по пути наименьшего сопротивления, улучшая целевую метрику наиболее простыми способами. Разбор всех «странных эффектов» откладывается до момента, когда он будет действительно необходим. Код есть в спойлере выше. Я не сомневаюсь, что при определенных настройках нейросети она даст более или менее приемлемый результат, однако на обсуждаемых данных как правило модели основанные на комитетах решающих деревьев работают лучше.

4. По пунктам.
— Автор не просто перебирает все возможные значения параметра. А упомянутые grid/random search как раз занимают занимают значительно больше времени и являются прямым путем к переобучению.
— Я пока не видел ни одного случая, когда был необходим тюнинг двух параметров одновременно. «One change in a time is still our holy grail».
— Обычно ошибка зависит от величины численного параметра монотонно и ее немонотонность указывает на неадекватность валидационной процедуры.

Критерий качества в машинном обучении (по крайней мере, в узком смысле этого термина) — качество предсказания. А оно (пока?) растет. Не гарантирую итоговый уровень топ 10 kaggle (по крайней мере без прочтения готовых решений), но уж более чем приличное качество предсказания я выжать смогу.
Вот физики сейчас удивились, что их любимые МНК и градиентный спуск — это оказывается методы машинного обучения, а не методы оптимизации.

В чем отличие от «методов машинного обучения» на уровне математического определения? И там и там надо определенным способом определить функцию специального вида на некотором множестве (почти всегда — в R^n), по набору пар соответствующих точек в областях определения и значений, оптимизирующую некоторый функционал качества. Я могу спуститься на уровень совсем-совсем строгих и математичных определений, так или иначе сейчас для меня все выглядит так, что МНК — это (простой) метод машинного обучения из той эпохи, когда еще не было термина «машинное обучение» и современных алгоритмов, составляющих его сущность.

А меня вот учили, что аппроксимация — это научный метод для построения мат. моделей. И целый раздел мат. анализа. Про полиномы Лагранжа и Ньютона и вот это все.

Опять же, сошлюсь на википедию. Вот здесь утверждается, что «Аппроксима́ция (от лат. proxima — ближайшая) или приближе́ние — научный метод, состоящий в замене одних объектов другими, в каком-то смысле близкими к исходным, но более простыми.» — объектами (в разумном смысле этого слова) произвольной природы, в частности помимо анализа в статье упоминается теория чисел, а люди, разбирающиеся в математике на более энциклопедичном уровне, чем я, наверняка приведут еще массу примеров не менее далеких от упомянутых полиномов специального вида, чем диофантовы уравнения. Таким образом обсуждаемый термин — это именно профессиональный жаргон, не имеющий строгого смысла даже в пределах одной научной дисциплины.
Безумно прекрасный, завораживающий минимализм. А почему именно 64k? По причинам исторического ".com" характера?
Ну я бы не смешивал понятия «логистическая регрессия» и «классификатор». Несмотря на то, логистическую регрессию МОЖНО использовать для построения классификатора, это все же совсем разные вещи.

Я бы тоже не смешивал. И не смешиваю, а коллеги не соглашаются.

Ну вот, если быть точным, то регрессия — это полученная модель, а аппроксимация — один из методов ее построения (но не единственный).

Вот тут бы я хотел чуть точнее договориться по поводу терминологии. Итоговая модель в случае задачи регрессии в узком смысле (когда у нас уже есть зафиксированное отображение из пространства объектов в R^n) — это просто функция из R^n в R, вообще говоря, — произвольной природы. Метод построения такой функции — это алгоритм машинного обучения, берущий на вход размеченную выборку и дающий ее на выходе. Аппроксимация в данном контексте — это просто математический жаргон, не имеющий строгого определния и означающий приближение одних объектов другими.
Вы же не будете называть «логистической регрессией», например, нейронную сеть с сигмоидой на выходном слое, правда? Ведь если вы так будете делать, вас никто не поймет.

Казалось бы буду. Только не с сигмоидой, а с софтмаксом. Ссылки тут, там и сям подтверждают, что общепринято логистической регрессией называть скорее постановку задачи, а не конкретный алгоритм, ее реализующий.
4) Да, разумеется, но постановка задачи другая, метрики другие. Мне кажется — вполне достаточно для того, чтобы выделить в отдельную логическую единицу в классификации задач машинного обучения по формулировкам.
Я бы хотел сказать, что в настоящее время в ML происходит некоторая неразбериха в терминологии, если не сказать сильнее. В статье (и в будущих) мне бы хотелось ввести некоторую бОльшую упорядоченность в хаос терминов. Теперь по пунктам.

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

2) Я употребляю термин «feature selection» в смысле «feature engineering» — в целом процесс выбора «хорошей» функции, задающей отображение из пространства объектов (instances) в пространство примеров (фичевекторов, samples). На практике существует большая неопределенность в терминах — и в этом конкретном тоже. Говорят «тут надо немного поселектить фичи» — именно в смысле подбора новых значений, при добавлении которых метрика качества на валидационной выборке растет.

Ссылку на более или менее общепринятые классификации поищу, но по факту сейчас с этим трудно. Грубо говоря перечисленные понятия (object detection, image segmentation, machine translation) относятся скорее к тематике, а не к форме постановки задачи. И уже в свою очередь сводятся к хорошо исследованным заготовкам прикладным исследователем.
Это каноничная логистическая регрессия. Прямо по определению — en.wikipedia.org/wiki/Logistic_regression

Так и я в основном тексте говорю, что это «логистическая регрессия». А мой комментатор утверждает, что это не «логистическая регрессия» а «просто регрессия», а «логистическая регрессия» как постановка задачи — это «классификация». И кто прав?

А это не регрессия, это аппроксимация.

Ну не совсем. Допустим мы предсказываем, скажем, цену на товары и уже выбрали функцию, отображающую входящие данные в фичевектор. Тогда (несколько упрощая) у нас есть некая неизвестная функция из R^n в R и набор точек (соответствующий размеченной выборке) на которых известные ее значение. После этого построение модели, сопоставляющей любой точке в R^n значение в R — это и есть построение новой функции специального вида, приближающей исходную, т. е. аппроксимация.
Различаются, и тем не менее обе они относятся к задачам классификации (более того, первая из них сводима ко второй с отсечением по порогу).

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

Ой, да ладно. Нам дают свершившиеся события (наличие или отсутствие перехода по рекламной ссылке, 0 или 1) и просят предсказать вероятность этого события (действительное число от 0 до 1) и это регрессия (задача, в которой по набору значений некоторой действительнозначной функции надо аппроксимировать эту функцию). Ну-ну.

Кстати, вот например в википедии — и в русскоязычной, и в англоязычной логистическая регрессия находится в секции, относящейся к регрессии. Еще один аргумент для выделения задач с такой постановкой в отдельный класс для снятия неопределенности.
Различаются, и тем не менее обе они относятся к задачам классификации (более того, первая из них сводима ко второй с отсечением по порогу).

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

Ой, да ладно. Нам дают свершившиеся события (наличие или отсутствие перехода по рекламной ссылке, 0 или 1) и просят предсказать вероятность этого события (действительное число от 0 до 1) и это регрессия (задача, в которой по набору значений некоторой действительнозначной функции надо аппроксимировать эту функцию). Ну-ну.
Ну казалось бы постановки задач «дали классы, хотят классы» и «дали классы, хотят вероятности» различаются, не правда ли? А по первой ссылке как раз таки указан не «конкретный алгоритм», а _постановка_задачи_ (… is a regression model where the dependent variable (DV) is categorical).

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

К сожалению я не могу продолжать дискуссию здесь в связи с очевидными последствиями для моей хаброкармы — я бы хотел иметь возможность продолжать публиковать статьи на ресурсе. Мы можем переместиться в личку.


Основной мой поинт в том, что реальные законы природы и ключевые методы (такие, как конструкция нейросетей, не говоря уже о алгоритмах типа KNN и линейной регрессии в машинном обучении, или, скажем, законы гравитации в физике) носят относительно тривиальный и исключительно эмпирический характер. Действительно сложные конструкции (к примеру, VC-размерность или ОТО) носят сугубо теоретический характер и почти либо целиком оторваны от реальности, не говоря уже о фактических применениях — как сейчас, так и в гипотетическом будущем. Сложные конструкции основанные на фундаментальных носят инженерный характер и дают отдачу в кратко- или среднесрочной перспективе. Конструкции, изложенные в статье, находятся на разумной грани, к ним претензий нет.


По сабжу последнее, что хотел бы заметить — это то, что в свое время я собирался заниматься академической наукой — и имел все предпосылки для этого, однако был шокирован реальными практиками академического сообщества и забил. Касательно конкретно машинного обучения я могу сослаться на Макса Милованова (Nvidia, результаты на каггле), утверждавшего что зачастую академические ресерчеры делают грубейшие ошибки при валидации своих алгоритмов и на упоминавшегося Хинтона, где-то жаловавшегося на невозможность публиковать определенные статьи ввиду необоснованного отказа со стороны сообщества. Фактический масштаб бедствия значительно больший и я мало где наблюдал такой уровень неприкрытого цинизма как в неформальных обсуждениях в академической среде.


============


1) В статье — вроде ничего. С концепцией черезмерного теоретизирования на тему уже подобранных эвристик при этом совершенно не согласен.
2) Тут я, пожалуй, погорячился. Всё-таки похоже на то, что основываясь на размышлениях о локальных максимумах функций в R^n можно придумать что-то разумное на тему последующих эвристик.

Эх, хаброкарма моя хаброкарма.

1) Да, и так сойдёт. Критерий применимости — эксперимент, а не псевдотеоретические обоснования.

2) Цитата выдернута из контекста. "… не нужны высокие размышления о свойствах поверхностей в R^n", а не «не нужны размышления вообще». Размышления очень нужны — но совсем другого характера и формулировки.

PS) У меня накопилась масса вопросов к самым разным людям. Но военных и служителей культа среди них (пока что?) нет. А вот к социальной страте людей, профессионально симулирующих труд на пользу общества, с учётом того, что я в самом деле человек, который «явно что-то понимает в математике и программировании» и, заодно ещё в том, что находится под капотом у самых разных академических организаций, у меня претензии есть — и весьма серьезные.
Да ладно, принудительное обнуление значительной части связей в 1-2-3 первых слоях нейронной сети (=сверточный слой) — сложная математика? Замораживание фиксированного количества случайных весов в слое на протяжении батча или эпохи (=дропаут) — сложная математика? Ну знаете ли, от этого уровня математической сложности до описанного в статье, мягко говоря, довольно неблизко. Меня расстраивает не алгоритмическая формулировка — с ней как раз все в порядке, а разводимый вокруг не слишком научный по содержанию, но крайне научный по форме, шум.

P. S. Я думаю, что многообразия и и кольцами вычетов смутить меня довольно трудно — до этой степени я в свое время основы высшей математики изучить успел. Что же касается многообразий над кольцами вычетов (и вообще над теми или иными алгебраическими структурами не являющимися полями, еще и, наверное, алгебраическими замкнутыми), то либо (скорее всего) это то самое сознательное разведение безосновательного наукоподобия, которое по неведомым причинам меня так раздражает, либо автор действительно с непонятными мне целями открывает книги по относительно продвинутой теоретической математике о которой лично я не имею почти никакого понятия.
Меня чуть выше уже заминусовали, но все-же, все-же, все-же. Неужели не очевидно, что для того, чтобы сделать переход от полносвязной нейросети к сверточной не нужны высокие размышления о свойствах поверхностей в R^n, а достаточно замечания о том, что многие свойства анализируемого изображения локальны и поэтому имеет смысл не полениться и попробовать принудительно занулить все веса кроме соответствующих близким пикселям (=нейронам входного слоя) в первом слое-двух? Неужели это не очевидно всякому, владеющему матаппаратом на уровне второкурсника мат факультета и имеющему минимальный опыт применения машинного обучения на практике или в соревнованиях? Ну как так?
1

Information

Rating
Does not participate
Location
Минск, Минская обл., Беларусь
Date of birth
Registered
Activity