Pull to refresh

Comments 43

Пока собирался сесть за напсиание практического курса по Deep Learning, кто-то уже сел и начал писать)

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

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

Причём тут название статьи "искусственные нейронные сети для новичков" и рассказ про МНК и линейную регрессию? Конечно, понимаю, что это "часть 1", но заголовок вводит в заблуждение.

Пусть у нас есть однослойная нейронная сеть с функцией активации вида Identity. Тогда такую сеть можно записать в виде w * x + b = y, где w, b — обучаемые параметры. Чем это не линейная регрессия?

Ну это «за уши» притянуто. Просто после приведения подобных и т. д. все будет выражено через один нейрон с линейной функцией активации. Сети с линейными нейронами сколь угодной глубины и сложности вырождаются именно в это. Приводить надо обязательно, дабы оптимизировать емкость вычислений. А один нейрон — это не сеть.

Я лишь хочу сказать, что формально это нейронная сеть. Также, как и, например, SVM — частный случай нейронных сетей. Тот же Хайкин в своем "Нейронные Сети. Полный Курс" также использует термин нейронная сеть применительно к таким моделям.

Все эти модели приведут в конечном итоге к нейронным сетям в их обычном понимании — со слоями, нейронами и т.д. Первые части всего лишь введение и в следующих частях они плавно перетекут в ИНС. Я хотел начать абсолютно с самого-самого начала, а не рвать с места в карьер, начиная со слоев и синапсов. Даже если умозрительно концепция понятна, модель НС совсем не самая тривиальная. Начав с азов, я закончу какими-нибудь сверточными сетями или изобрету какую-нибудь новую схему и хочу, чтобы объяснение было понятно максимальному числу читателей. А заголовок как раз явно обозначает, что описанные модели используются в НС или похожи на них (например, линейная во многом похожа на логистическую и так далее). Такой длинный путь к НС выдуман не мной — как пример подойдет CS229. А еще многие модели удобней модифицировать, взяв «чистую» реализацию, а не в составе НС. Например, модифицированный градиентный спуск, о котором будет следующая часть, намного легче воспринять отдельно в контексте линейной регрессии, чем в многослойной ИНС.
Что-то мне кажется, что НС всё-таки ближе линейный классификатор, а не регрессия.
Так что от печки лучше было бы идти от линейных классификаторов.
А почему? Вроде НС вполне можно использовать для регрессии.
А для обучения (в смысле обучения людей) линейный классификатор чуть хуже, т.к. чуть больше формул и чуть менее наглядные примеры
Потому что модель нейрона при подаче сигналов возбуждения на его входы по линейной функции активации (сумма взвешенных сигналов на входе) выдаёт или не выдаёт сигнал на выходе.
А это и есть простейший линейный классификатор.
А кто нам мешает использовать модель нейрона, который возвращает пришедший сигнал как он есть? Получим вполне себе линейный регрессор.
Для новичков линейная модель будет явно проще. А потом сверху можно и пороговую ф-ию накрутить, или чего-нить еще.
Ничего не мешает.
Но если идти от печки, то нужно смотреть в сторону перцептрона

Там написано явно «Так же как и A-элементы, R-элемент подсчитывает сумму значений входных сигналов, помноженных на веса (линейную форму). R-элемент, а вместе с ним и элементарный перцептрон, выдаёт «1», если линейная форма превышает порог θ, иначе на выходе будет «−1».»

А это и есть чистой воды классификатор.
Сколько планируется частей?
Интересная статься. Только надо наверно более явно обозначить, что цикл про НН, а конкретно данная статья всё-таки про линейную регрессию.
Давате все-таки не называть вещи своими именами, это ведь математика, тут так нельзя.
Линейная означает, что мы предполагаем, что переменные выражаются через уравнение вида...

linear regression definition
Для начала просто «раскроем» вектора в соответствии с их определением

После этих слов нарисованы неправильные матрицы:


  • матрица Х имеет размерность N на (p+1)
  • а матрица Θ имеет размерность p на 1

Их не получится перемножить. Вы забыли θ0.

Надеюсь хоть этот цикл про НН закончат. Прошлые на хабре были неполные
Закончу, половина уже на бумаге. Основная сложность — это привнести что-то новое, упорядочить свои знания, с индексами не накосячить…
Насчет
Опять-таки, никто не запретит попробовать минимизировать просто сумму длин.
А разве метод наименьших модулей вообще можно использовать на практике? Там не получится трюк с приравниванием первой производной нулю.
Насколько я помню, там используются немного другие трюки, вроде Soft thresholding https://en.wikipedia.org/wiki/Proximal_gradient_methods_for_learning
Еще можно притвориться что оптимизируешь сумму модулей при помощи взвешивания и МНК (IRLS) https://en.wikipedia.org/wiki/Iteratively_reweighted_least_squares
Еще (могу ошибиться, на самом деле) вроде стохастический градиентный спуск нормально работает с негладкими ф-иями потерь.
Можно, конечно. И метод этот, естественно, статистически корректен, при определенных допущениях в распределении ошибок. А минимум находят численными методами.
Статья выглядит примерно так:
А сейчас, друзья, я расскажу вам про нейронные сети. Будем использовать такие-то картинки.
<вакуум>
Линейная регрессия — это…
Метод наименьших квадратов — это..
Откуда взялись эти понятия? Зачем они нужны? Куда успели исчезнуть нейросети? Причем еще до своего появления.

Вообще тема интересная и про методы неплохо написано, но коли уж это гайд, то неплохо было бы мотивировать возникновение данных понятий. Иначе у читателей никуда не денется
чувство недосказанности, недопонимания.
Линейная регрессия — это подвид обобщенной линейной модели с указанием, что ошибки распределены по нормальному закону. Начинать статью для новичков с GLM? Это уже будут далеко не новички. Новичкам (особенно со слабой математической базой) требуются простые, интуитивные примеры, море картинок, анимаций, идеализированные одномерные примеры. Я как-то встречал объяснение градиентного спуска будто бы это альпинист с горы шагает. Тогда меня это покоробило, теперь же я думаю, что любые методы хороши, если работают. А до GLM и максимального правдоподобия я также доберусь, но не стоит спешить. И слова «нейронные сети» еще не будет 3 или 4 части. Зато подойдя к этой модели вплотную, читающий будет во всеоружии.
Начинать статью для новичков с GLM?

Нет, но стоит объяснить читателю, зачем вы даете этот материал и как он вообще связан с нейросетями. Поймите, даже в книжках по чистой математике обычно дается мотивировка перед вводом нового понятия. А у вас не книжка по математике, а хабр, где по умолчанию собрались люди с более прикладным подходом. Если слов «нейронные сети» не будет еще 3-4 части, то c таким обилием формул вы рискуете растерять больше 90% читателей.
Ну и в конце концов, называйте тогда статью не «ИНС для новичков», а «Математическая теория, необходимая для ИНС»(theoretical prerequisites).
Линейная регрессия — это подвид обобщенной линейной модели с указанием, что ошибки распределены по нормальному закону

И опять неверно. Линейная регрессии не требует нормальности ошибок.

"… для новичков, которые могут смотреть спокойно на формулы"
От них никуда не денешься. ИНС, в конце концов, математическая теория, как бы ее не натягивали на гипотетические модели мозга и нейронов. Я попытался объяснить все преобразования и раскрыть все, что обычно опускается в литературе, но мог и упустить что-нибудь. Что конкретно неясно и где сломалось «понимание»?
Не стоит отвлекаться на мой комментарий. Просто знайте, что для многих людей формулы — это как инопланетные иероглифы.
На самом деле стоит — я ведь не для профессоров или роботов пишу. Правда, некая база все же должна быть — я ее обозначил как базовый вузовский уровень, держа в уме технические вузы — линейная алгебра, мат. анализ, теория вероятности.

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

Соглашусь с комментарием. Если бы я не знал хорошо МНК, не выводил его формулы сам, не объяснял вывод сыну — ничего бы не понял из нагромождения формул и непонятного описания. Все это можно подать на порядок проще и понятнее. Если дальше про те вещи, которые я не знаю, будет в таком же духе — боюсь, понять это будет тяжело. Причем, самое обидное — не по причине собственной сложности моделей и концепций.
Если у вас есть ссылки на более доступное объяснение, я был бы признателен, если вы их предоставите. Перед публикацией следующей части я вместе с правкой опечаток добавил бы больше информации. Jupyter не планирую. На Хабр нельзя будет вставить тетрадь, а форматирование съедает достаточно времени.

Из того, что я слушал, понятней всего было в курсе "Эконометрика" на курсере — ВШЭ, Борис Демешев. И Andrew Ng, само собой.
А вот пример объяснения градиентного спуска. Хоть и на английском, но все очень наглядно.

Если честно — каша полная. И это еще на относительно простых методах. Что будет происходить, когда дело дойдет до EM алгоритмов страшно подумать.

Так уж у нас повелось, что в Российской литературе любят кашу и в университетах старые преподаватели тоже любят. Не задумывались опубликовать это? Там бы это смотрелось лучше. Что касается новичков и статьи на хабре — вопрос, но скорее нет, чем да.
Автор, спасибо! Как говорится, «пиши исчо».
Буду рад увидеть реализацию нейросетей/алгоритмов на простом колхозном JS
Вот: https://chrisc36.github.io/deep-go/
Для тех, кто понимает по английски сильно рекомендую курс лекций: https://www.youtube.com/watch?v=PlhFWT7vAEw
От азов линейной регрессии до особо хитрых архитектур, причем четко и структурировано.
Вопрос, а вот функций prediction — зачем она вставлена в код generate_linear — тем более она работать не будет так как x в функцию не передается
Sign up to leave a comment.

Articles