← Образование по машинному обучению
Обсуждение
Читать и комментировать в ЖЖ ↗
Насчет переучивать программиста дольше - смотря какого программиста :).
Вообще, линалгебра, теорвер и прочий матан входят в программу нормальных ВУЗов.
Т.е. если у программера есть нормальное высшее образование, то кагбэ это не есть проблема.
Понятия не имею насколько плохо нонче с образованием в РФ, но вроде еще где-то чему-то учат.
Вообще, как сказал кто-то, машин лёрнинг проекты - это ИТ проекты на 90%, ну и я с ним примерно согласен :).
Там конечно есть разница в плане applied/research, но в обычном ИТ она тоже есть: есть ведь software engineering и computer science
Комментарий
R - "маргинально"? Ну, ну...
Комментарий
Ну, изнутри shallow learning этой маргинальности не видно, конечно )))
Комментарий
А Юля из какого места "майнстримом" выглядит? )))
Комментарий
Из scientific computing, она ж под зонтик NumFocus не случайно взята. Она на эту роль очередного мейнстримного языка по линии fortran-matlab-python как раз и воспитывается. Это ж не для одной какой-то науки язык (статистика или мультифизика), а для численных методов в целом. С этим языком сейчас много интересного происходит по этой линии поддержки вычислений. Хотя инерция в распространении языков, конечно, большая и Julia вот прямо на сейчас (версия 0.4) пока только "хорошо известна в узких кругах".
Комментарий
Тут большая логическая лакуна в рассуждении. Есть "языки программирования общего назначения", и есть языки "предметной области".
Язык предметной области несет в себе массу "синтаксического сахара" + "архитектурных решений" (типа принципиального наличия того же REPL) делающего написание кода для решения конкретных (не абстрактных) задач в данной предметной области, "легким, эффективным и приятным".
fortran и matlab вполне себе "языки предметной области"
Питон это просто "язык общего назначения" (вдобавок имеющий существенные ограничения, как та же рекурсия например и фактически "отсутствие" REPL https://www.quora.com/Does-Python-really-have-a-REPL?share=1 ) и "уши языка общего назначения" будут торчать из любой программы, просто отвлекая от работы собственно в предметной области. Да и невозможность интерактивной работы (сразу надо тянуть кнутовское "литературное программирование" для того что бы "перестать программировать и начать работать") может обрадовать только какого то "переучившегося из программистов" исследователя.
Юлия плохо спроектированный, эклектичный язык с весьма неприличной компанией по его продвижению (чего только стоят синтетические тесты, причем "синтезированные" зачастую из лучших примеров гибкости и эффективности "языков конкурентов").
Кроме того никакого базиса для "революции" просто нет. Вся матричная алгебра давно "живет" в библиотеках, которые используют все языки. Делать для этих библиотек какой то специальный язык крайне сомнительно, поскольку все они по своей реализации практически "живут на голом железе" и язык скорее должен позволять учесть малейшие особенности устройства железа на котором будет запущен расчет, чем удобство разработки алгоритма.
Так что используя пакеты имеющие в зависимости https://cran.r-project.org/web/packages/Matrix/index.html + установив BLAS использующий gpu мы в том же "маргинальном" R имеем все преимущества технического прогресса.
Комментарий
Давайте вернёмся к разговору лет через десять. С языками это как раз правильные сроки (тот же Питон -- это 1989г., например. R -- 1993г.).
Комментарий
Успех имеет не революция, а эволюция
1) Например копирайт на "An Introduction to R" --- Copyright © 1990 W. N. Venables , что весьма символично.
2) R is ‘GNU S’ и по факту имеет эволюцию с 1976 дополнительно впитав в себя лучшее из C, APL, PPL, Fortran (а в момент "рождения" собственно R ещё дополнительно и Scheme). Если говорить о особенностях архитектуры, то "New S" это 1988 год.
Хорошо, что "убийца R" (как усиленно форсили первые годы) уже не состоялся.
Состоится ли "язык для численных расчетов"? Согласен, посмотрим, хотя я больше верю в развитие того же J (именно в силу его (теперешней) открытости и происхождения).
Комментарий
Джулия более маргинальна нежели R.
Более того, для R огромная куча пакетов для обучения всеразличных моделей.
R в этом смысле самый богатый язык.
Матлаб тоже не был, а вполне себе есть. Уж не меньше Julia всяко :)
Комментарий
Кстати, Матлаб/Октав пожалуй наиболее удобные для исследований в машин лёрнинг, в том смысле, что там самая компактная запись для работы с матрицами и векторами.
Т.е. какая-нить длинная формула выглядит достаточно компактно, возьмем к примеру Woodbury matrix identity https://en.wikipedia.org/api/rest_v1/media/math/render/svg/3ffa2c14bb438728d93f2cdf7ea6657338ab8fb7
В Матлабе/Октаве выражение справа будет inv(A)-inv(A)*U*inv(inv(C)+V*inv(A)*U)*V*inv(A)
На R solve(A)-solve(A)%*%U%*%solve(solve(C)+V%*%solve(A)%*%U)%*%V%*%solve(A)
Ну т.е. в Матлабе/Октаве можно вполне как-то работать со сложными матричными выражениями. На R уже тяжко. Про С++/Питон/Жабу я помолчу.
Плюс в Матлаб/Октав есть встроенный 'autodiff', он не такой крутой как отдельные пакеты, но для исследований покатит.
Под встроенным autodiff'ом я имею в виду операции с комплексными числами ну типа (f(v+e*eps*1i)-f(v))/eps/1i
Вобщем, Andrew Ng рекомендует лёрнерам работать именно в Матлаб/Октав и на то есть основания :)
Имеется в виду конечно работа не над продакшен версией, а типа исследования. Продакшен версию понятно пишут на том языке, что требуется.
Комментарий
В Julia сознательно унаследовали многие синтаксические штучки из Matlab, и с autodiff там тоже всё ОК -- http://www.juliadiff.org/
В Julia пакетов, конечно, не слишком много -- едва за тысячу перевалило: http://pkg.julialang.org/. И с IDE немного напряжно пока, но потихоньку исправляется, ведь даже http://jupyter.org/ как раз от julia+python назван. И с Atom уже интеграция есть. Потихоньку (или не очень потихоньку) всё будет, и всё на численные методы нацелено. Чтобы эксперименты и production делались на одном языке, это ведь главная дизайн-цель.
Комментарий
Джулия интересна, конечно. Более того, она видимо развивается интенсивнее Октава, и будет поинтереснее Окатава пожалуй, на данный момент. По совокупности :).
А Матлаб кагбэ платный и не у всех есть.
Комментарий
Есть еще один момент, не упомянутый в презентации - математическая оптимизация.
Т.е. конкретно для лёрнеров я бы выкинул численные методы (хотя у нас в СПбГУ они входят в программу обучения программистов :), ну или входили раньше, когда я учился).
И заменил их математической оптимизацией (линейная, выпуклая, стохастическа, (не)ограниченная, гладкая/негладкая, по крайней мере, вводную в эти темы).
Ну и вместо байесовской статистики лучше просто написать теорвер и просто статистика :). Прежде чем в байеса лезть, надо базу знать. Ну и может для начинающих/средних лёрнеров, байес не так важен.
Комментарий
Я думал над оптимизацией, но почему-то не вписал. А байесовская -- так я несколько раз встречал критику курсов с "обычной" статистикой со стороны профи deep learning.
Вообще, составление учебных программ дело сложное. У меня там просто была мысль, что трёхдневными курсами переподготовки программиста в инженера машинного обучения для всех желающих бизнесов этим организаторам образования отделаться будет нельзя, ибо учиться нужно тяжёлой математике, а не трём вызовам подпрограмм из расхожей опенсорсной библиотеки.
Комментарий
Мне лично, в плане освоения лёрнинга, весьма полезно оказалось знакомство с методами нелинейной оптимизации.
Нейросеточникам, конечно, по большому счету по барабану, ибо они юзают SGD той или иной вариации. Но вот чтобы асилить статьи по HF или K-FAC, необходимо иметь неплохую базу в нелинейной оптимизации, которая с потолка не берется.
Ну а тем кто не только нейросетками занимается, нелинейную оптимизацию тем более знать нужно. Уж по крайней мере, Newton-Raphson, Gauss-Newton, Levenberg-Marquardt, BFGS/L-BFGS, может Conjugate Gradient.
Ну т.е. на практике обычно юзается L-BFGS или LM, но Newton/Gauss-Newton для них базовые.
Как кто-то писал, основные идеи немалого кол-ва научные статей можно описать как AutoDiff+L-BFGS :). Ну т.е. преобразование задачи в проблему оптимизации, ну и решение ее достаточно стандартными методами. В некоторых областях стандартным является Levenberg-Marquardt, так что его тоже знать полезно.
А в хорошей научной статье, задача оптимизации ставится два-три раза :).
Комментарий
Хо, там со всякой дифференциацией даже какая-то конкуренция и наезды друг на друга есть )))
Вот свеженькое: https://groups.google.com/forum/#!topic/julia-users/QMjL1EaKnpQ
И ещё там друзья Баеза (который теоркатегорный) в этом треде отметились, с замечанием о том, что discrete stochastic calculus (DSC) would have a completely natural implementation in Julia using concepts similar to automatic differentiation to give you things like Ito formula for free.
Там очень живое место. И это с учётом того, что ровно сейчас они перепахивают практически с нуля всю реализацию массивов (и это в вычислительном языке!) -- это цель версии 0.5, над которой сейчас трудятся.
Комментарий
ОК, mea culpa. Вставил мат.оптимизацию (включая нелинейную) в список дисциплин. И добавил оговорку про R, что это про shallow learning.
И перезалил слайды )))
Комментарий
Вообще, на мой взгляд, байес крайне важен для современного лёрнинга, но не обязательно на первых порах.
Как показывает курсеровский курс Эндрю Энджи, даже вероятностная трактовка лёрнинга не обязательна поначалу.
По сути наиболее критичным является минимальный матан (функции, производные), линалгебра - без матриц и векторов записи больно громоздкие.
Ну и какое-то прогарммирование (знание софтверного инжиниринга не требуется :)).
Но, разумеется, если смотреть чуть дальше азов, то там уже нужен теор вер, и начальная статистика (всякие там средние, дисперсии и проч. Ну т.е. нужно понимаеть что такое случайная величина, выборка, инференс в общем и целом. Что такое bias/variance of estimator.
Ну а потом конечно уже можно и к байесу переходить, тем более многое из самого интересного и в нейросетках и вообще в лёрнинге, требует байеса, тот же variational inference.
Но в целом я бы сказал, что баейс не для начинающих, и часто воспринимается как хардкор, хотя, вообще говоря, там не так уж и сложно, если знать базу (вообще, все не так уж сложно, если знать необходимую базу :)).
Мне кажется интересным направление учить программеров вероятностному программированию, и через него раскрывать базовые концепции теорвера, байеса и проч. Но пока не довелось поэкспериментировать на эту тему :)
Комментарий
Я тут читал, что "вероятностное программирование может стать для сторонников байеса тем же, чем backpropagation стало для сторонников глубоких нейросетей". Это нужно, конечно, глубоко думать.
И вот некоторый новый текст про связь deep learning и вариационщиков: http://mlg.eng.cam.ac.uk/yarin/blog_3d801aa532c1ce.html
Комментарий
Список книг, видео и курсов по машинному обучению и математике, всё на русском языке. Большая, качественная подборка. Почти все pdf'ки книг гуглятся.
https://ru.stackoverflow.com/a/683632/1084