Курс о Deep Learning на пальцах

    Я все еще не до конца понял, как так получилось, но в прошлом году я слово за слово подписался прочитать курс по Deep Learning и вот, на удивление, прочитал. Обещал — выкладываю!

    Курс не претендует на полноту, скорее это способ поиграться руками с основными областями, где deep learning устоялся как практический инструмент, и получить достаточную базу, чтобы свободно читать и понимать современные статьи.

    Материалы курса были опробованы на студентах кафедры АФТИ Новосибирского Государственного Университета, поэтому есть шанс, что по ним действительно можно чему-то научиться.



    Курс требует:

    — Знания математики на уровне первого-второго курса университета: надо знать немного теории вероятностей, линейную алгебру, основы матанализа и анализ функций многих переменных. Если все это прошло мимо вас, вот все нужные курсы от MIT и Harvard. В них типично достаточно пройти первые две секции.
    — Умения программировать на питоне.

    В хорошем курсе должны быть доступны и лекции, и упражнения, и место, где можно задать по ним вопросы и обсудить. Здесь они собраны с миру по нитке:

    — Лекции существуют как записи на Youtube.
    — В качестве упражнений можно использовать задания великолепных Стенфордских курсов по DeepLearning (CS231n и CS224n), я ниже напишу какие конкретно.
    — Обсуждать и спрашивать можно на ClosedCircles и ODS.ai.

    Лекции и упражнения


    Лекция 1: Введение
    Лекция 2: Линейный классификатор
    Лекция 2.1: Softmax

    Упражнение: секции «k-Nearest Neighbor» и «Softmax classifier» отсюда
    По специфике задания могут помочь вот эти lecture notes.

    Лекция 3: Нейронные сети. Backpropagation
    Лекция 4: Нейронные сети в деталях

    Упражнение: секции «Two-Layer Neural Network» отсюда и «Fully-connected Neural Network» отсюда

    Лекция 5: Сверточные нейронные сети (CNN)
    Лекция 6: Библиотеки для глубокого обучения

    Упражнение: секции «Convolutional Networks» и «PyTorch on CIFAR-10» отсюда

    Лекция 7: Другие задачи компьютерного зрения
    Лекция 8: Введение в NLP. word2vec

    Упражнение: секция «word2vec» отсюда

    Лекция 9: Рекуррентные нейронные сети (RNN)
    Лекция 10: Машинный перевод, Seq2Seq, Attention

    Здесь хорошего готового задания я не нашел, но можно реализовать на PyTorch Char-RNN из знаменитого поста Andrej Karpathy и натравить на Шекспира.

    Лекция 11: Введение в обучение с подкреплением(RL), базовые алгоритмы
    Лекция 12: Примеры использования RL. Alpha(Go)Zero.
    Лекция 13: Нейросети в 2018.

    Где обсуждать и задавать вопросы


    Все вопросы по курсу можно задавать мне лично или обсуждать в кружочке #data на ClosedCircles.com (вот инвайт).
    Кроме этого, задания можно обсуждать в канале #class_cs231n на ODS.ai, там помогут. Для этого придется получить туда инвайт самому, отправляйте заявки.

    Ну и вообще, звоните-пишите, всегда рад.

    Самая приятная секция — благодарности!


    Прежде всего, огромное спасибо buriy, с которым мы готовили курс. Спасибо родной кафедре, которая дала вообще такую возможность.

    Всем в тусовках на ODS.ai и ClosedCircles, кто помогал в подготовке, отвечал на вопросы, присылал фидбек, напоминал что надо все выложить, итд итп.

    Наконец, всем кто следил за стримами на канале, задавал вопросы в реалтайме и вообще создавал ощущение, что я не со стеной разговариваю.

    От души.
    Поделиться публикацией
    Комментарии 27
      +2
      Спасибо. отличные лекции и стримы, теперь все в одном месте!
        0
        А можно лекции выпустить как записи в текстовом варианте. А то видеоуроки не очень располагают к изучению.
          +2
          Мне казалось, это как раз современный формат обучения, буквы уже никто не читает!
          Если серьезно, то если кто-то осилит на основе этого собрать методичку текстом — было бы просто замечательно. Я не осилю :(
            +2
            Видео формат удобен для введения в материал. Чтобы на примерах и ассоциациях разобраться с определениями, а вот уже глубины — для меня, более удобно в текстовом формате, потому что удобно когда весь текст перед глазами и можно прыгать от одного места к другому, делать сопоставления и анализ.
            А так, огромное спасибо за материал, давно в планах углубиться в эту тему, однозначно в закладки!
            Посмотрим, может придет время, когда у меня дойдут руки и голова, для оформления подобных тем в текстовом формате?!..
              +2
              Мне казалось, это как раз современный формат обучения, буквы уже никто не читает!

              По видео нельзя сделать CTRL+F :-)

              Спасибо за проделанную работу!
                +1
                Кстати, есть герои, которые просматривают видео и делают тайм-коды (спасибо им!) — так что до определенной степени можно будет.
            0
            Хорошая подача, спасибо автору)) На русском языке подобное тяжело найти
              +2
              Самый лучший курс!
                –20
                поздравляю вас за этот милый женский бред! Вы сначала курсы по питону в MITx пройдите, девачки. У вас получилось выбить на тех курсах хотя бы 80 их 100?? Чтобы потом тут показывать народу курсы с ютюба? Я прошел их, но ни 1 из Раши там не видел. У меня и сертификат есть
                  +1
                  Про питон бы так не сказал, но вот математическую подготовку проходить на англоязычных!!! курсах это борщ. Сразу отсечет больше половины желающих изучить тему.
                    0
                    К тому же на русском есть хорошие курсы. Тот же степик — 2 курса от института биоинформатики. Достаточно, чтобы понимать код и уметь писать простые программы.
                      0
                      К тому же на русском есть хорошие курсы.
                      Это хорошо. А ссылки можно?
                        +1
                        Базовый курс. Самые основы — stepik.org/course/67

                        Уже конкретная работа и применение — stepik.org/course/512

                        В принципе под мои задачи этого хватает почти полностью.
                          0
                          Спасибо!
                            0
                            Хм вообще я имел ввиду курсы по математической подготовке. На степике кстати они тоже есть.
                              0
                              Тогда та же просьба — ссылки, пожалуйста.
                                +1
                                Я бы тоже рад упомянть курсы на русском, я написал эти только потому что я про них знаю, что они хорошие.
                                Нужны:
                                — Линейная алгебра
                                — Начальная теория вероятности и статистика
                                — Матан, в том числе функции многих переменных

                                Посоветуйте хорошие русскоязычные курсы, я добавлю в пост.
                                  +2

                                  Вот рекомендации по Python и математике для прохождения открытого курса по машинному обучению (копипаста из нашей группы):


                                  Пока курс не начался, можно повторить математику и Python. Зачем дата саентисту нужна математика – неплохо поясняет Andrej Karpathy. А Python – уже стандарт в области машинного обучения.


                                  Математика


                                  1. Если быстро, то можно пройтись по конспектам из специализации Яндекса и МФТИ на Coursera https://yadi.sk/d/yEXkABC_353Zmh (делимся с разрешения).
                                  2. Если основательно подходить к вопросу, хватит вообще одной ссылки на MIT Open Courseware https://ocw.mit.edu/courses/mathematics/. На русском классный источник – Wiki-страница курсов ФКН ВШЭ http://wiki.cs.hse.ru/. Но я бы взял программу МФТИ 2 курса и прошелся по основным задачникам, там минимум теории и много практики.
                                  3. И конечно, ничто не заменит хороших книг (тут можно и программу ШАДа упомянуть):
                                    – Математический анализ – Кудрявцев
                                    – Линейная алгебра – Кострикин
                                    – Оптимизация – Boyd (англ.)
                                    • Теория вероятностей и матстатистика – Кибзун

                                  Python


                                  1. Быстрый вариант – браузерные тьюториалы а-ля CodeAcademy, Datacamp и Dataquest, тут же могу указать свой репозиторий https://github.com/Yorko/python_intro.
                                  2. Основательней – например, мэйловский курс на Coursera https://habrahabr.ru/company/mailru/blog/336880/ или MIT-шный https://www.edx.org/course/introduction-computer-science-mitx-6-00-1x-11
                                  3. Продвинутый уровень – курс питерского Computer Science Center https://compscicenter.ru/courses/python/2015-autumn/
                                    0
                                    – Оптимизация – Boyd (англ.)

                                    Convex optimizations, или что-то другое? В первом случае Nocedal «Numerical optimizations» будет лучше (имхо), т.к. покрывает несколько больше тем, и чуть ближе к практике.
                                      0

                                      yorko а чего khanacademy не был упомянут? Там, как мне показалось, достаточное количество разноплановой математики.

                                        0

                                        Вот теперь упомянут. Тобой :)

                          –1
                          хммм, даже и что сказать не найдусь)) мне Python был чужд, ибо я Java разработчик. Но я дрочу англ, и не пренебрегаю возможностью учиться в амер универах. Пошел про питон послушать на MIT, и сдал экзамен, вобщем, не собираясь даже этого делать… Против желания пошел, но НЕ пожалел ни разу! И сейчас буду долбить 2 курс и дальше. И кстати, мне немного помогли лекции оч хорошего человека из МФТИ некоего Тимофея Хирьянова, а это серьезный спец по Питону в Раше. Не сказать, чтоб он мне мозг взорвал, как преподы в MIT типа профессора Гуттага, но приятно было услышать грамотное, простое, и уверенное изложение материала. И даже опять пожалел, что пренебрег много лет назад предложением поступить в МФТИ. И в очередной раз оч разочарован уровнем полемики на хабре.
                          0
                          Надо будет глянуть. Я курс по нейросетям на Степике прослушал, но там очень кратко изложено, и больше упирают на математику процесса, нежели на практику.
                            0

                            Насчет текстовой версии: YouTube делает автоматом субтитры, я слышал, что народ их довольно быстро расшифровывает и приводит в человеческий вид.

                              +1
                              привет от АФТИ 91-97
                                0
                                С непривычки трудно разобраться со структурами данных.

                                Раньше думал, что объект класса NeuralNet на шаге forward должен получать один обучающий пример и по нему дальше делать шаг градиентного спуска.

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

                                #кусок из MNIST https://goo.gl/XTMVDF
                                class NeuralNet(nn.Module):
                                    def __init__(self, input_size, hidden_size, num_classes):
                                        super(NeuralNet, self).__init__()
                                        self.fc1 = nn.Linear(input_size, hidden_size) 
                                        self.relu = nn.ReLU()
                                        self.fc2 = nn.Linear(hidden_size, num_classes)  
                                    
                                    def forward(self, x):
                                        out = self.fc1(x)     #<<< len(x)=100  len(x[0])=728  <<<<<<<<!!!
                                        out = self.relu(out)
                                        out = self.fc2(out)
                                        return out
                                
                                

                                  0
                                  точно так же — по одному.
                                  ошибка считается для каждого, потом вектор ошибок идет обратно.
                                  вес каждого меняется на среднее dL/dW от всех.

                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                Самое читаемое