NNFL — один из самых популярных факультативов для студентов CS/EEE/ENI в BITS-Pilani. В 2016 году я учусь на факультете физики и информатики по двум направлениям и прошел этот курс в первом семестре 2019–2020 учебного года. Есть разница между впечатлением от курса до его прохождения и тем, что человек узнает после его прохождения — особенно в случае факультативов. Имея это в виду, я хотел написать о своем опыте прохождения курса.

Есть причина, по которой я был вынужден написать этот обзор. Мне посчастливилось пройти Stanford 229 и Стэнфордское машинное обучение на Coursera, прежде чем поступить в NNFL. В обоих этих курсах использовался восходящий подход к обучению как статистическим моделям, так и элементарным приложениям ML. Мне понравился опыт этих двух курсов, и я чувствовал, что их основной вывод был прочной основой предмета. Учитывая популярность NNFL, я ожидал такого же результата, принимая его в кампусе. Я ожидал от курса определенного стиля иллюстраций, логической последовательности тем и подачи материала. Когда я сидел на занятиях, я обнаружил, что многие важные компоненты отсутствуют, а мои ожидания не оправдались. Однако не это меня беспокоило. Что действительно беспокоило, так это то, что студенты, не имевшие того же опыта, что и я, заканчивали курс с концептуальными пробелами и отсутствием полного понимания.

Отсутствие фундамента -

Будучи первокурсником, я был удивлен, как линейная регрессия по одной переменной не преподавалась в курсе «Вероятность и статистика». Это должно быть отправной точкой курса машинного обучения. Можно возразить, что курс называется «Нейронные сети» и начинать с нуля необязательно. Однако линейная регрессия является основной темой, из которой возникают концепции весов и предвзятости. Какую роль играет предвзятость и почему без нее нельзя? Вместо этого эти фундаментальные аспекты рассматривались в беспорядочном порядке в середине курса. Следовательно, знания, которые можно было получить в результате надлежащего последовательного лечения, были потеряны.

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

Следующий. В ходе курса были непосредственно представлены такие темы, как активация, softmax и потеря перекрестной энтропии без необходимой подготовки. Это абстрактные темы, основанные на более мелких понятиях. Человек останется в неведении относительно того, как возникают эти термины и каково их правильное использование без последовательного построения и логического течения. На мой взгляд, идеальный порядок был бы...

  1. Объяснение математической модели бинарной классификации.
  2. Как и почему эта модель требует функций активации
  3. Вывод 2-классовой функции логистических потерь
  4. Абстрагирование от многоклассовой классификации и необходимость функции активации softmax.
  5. Основываясь на пунктах 3 и 4, вывод функции кросс-энтропийных потерь

Что мне показалось проблематичным в этом подходе, так это то, что softmax рассматривался как просто еще одна функция активации, а кросс-энтропийная потеря рассматривалась как простоеще одна функция потерь. Я не думаю, что это вообще правильный подход.

Ненужная потребность быть исчерпывающей -

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

Слишком далеко заходить за иллюстративными примерами -

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

На мой взгляд, иллюстративные примеры следует использовать с осторожностью. Хотя их педагогическая ценность высока и они обеспечивают более глубокое понимание контекста, они не отражают реальный мир. На одном занятии инструктор приступил к моделированию всехлогических вентилей с помощью нейронных сетей (и, или, nand, nor, xor, xnor) и даже триггеров. Есть две проблемы с этим -

  1. Студенты отвлекаются от основного вывода примера.
  2. Студенты теряют из виду реальное приложение.

Было довольно легко представить, как новичок, изучающий NNFL, закончит курс, веря в то, что я могу создавать ворота с помощью нейронных сетей. С воротами я могу строить более сложные вещи…НЕТ! Это не то, что должно быть. Нейронные сети не предназначены для замены булевой логики. Этому моменту в курсе вообще не уделялось внимания.

Экзамен в середине семестра содержал вопрос на 10 баллов о сложной нейронной сети, и нас попросили выяснить, какую булеву логическую функцию она реализует. Я помню, как подумал про себя: Записался ли я на курс цифрового дизайна? Хотя это было десять легких оценок, решение этого вопроса тяготило мою студенческую совесть.

Фактические ошибки и неэффективность -

  1. Термины ошибки и градиенты использовались взаимозаменяемо в контексте нейронных сетей, что вызывало путаницу.
  2. Размерности данных в наборах данных MNIST и CIFAR преподавались в классе неправильно. Также неверно указано количество классов в наборе данных ImageNet. Можно сказать, что это просто цифры и, следовательно, тривиальные. Однако это наборы данных, которые использует все сообщество ML/AI, и точная информация имеет первостепенное значение.
  3. Правило обновления для backpropс импульсом также содержало ошибку в слайдах, которая впоследствии не была исправлена.

Обратное распространение -

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

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

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

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

Было довольно удручающе видеть, что CNN (сверточная нейронная сеть) также столкнулись с таким же обращением. Большая часть времени, отведенного на занятия по этой теме, была связана с решением числовых примеров на матрицах изображений, фильтрах и свертках. Чисто математические примеры, даже не иллюстративные. И это были вопросы, которые появились в compre. Хотя общий эффект сверток и объединения был хорошо изучен, фактическое построение фильтров или причины выбора определенных фильтров не изучались.

Слишком большая широта -

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

  1. Хеббианское обучение
  2. Автоассоциативные сети
  3. Сеть Хопфилда
  4. RNN
  5. LSTM
  6. SOM
  7. РБФН
  8. Обучение с подкреплением

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

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

  1. Темы 1, 2, 3, 7 вряд ли имеют какое-либо значение в современном машинном обучении. Я бы предпочел, чтобы эти темы просто упоминались и не более того.
  2. Тема 7 все еще имеет некоторую актуальность. Его математическая подоплека могла бы быть объяснена. Численный пример, показанный в классе, тоже был разбавлен.
  3. Темы 4, 5 и 8 имеют решающее значение в нынешнем состоянии ML/AI — на подробное рассмотрение этих тем можно было бы потратить больше времени. Опять же, численный пример был сильно разбавлен и не репрезентативен для реальных приложений.

Но это уже слишком глубоко. Что теперь подводит меня ко второй половине названия этого курса — Fuzzy Logic.

Нечеткая логика -

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

Оптимизация –

Привет! Это скрытая часть курса, которая вообще не упоминается в названии. Он имеет дело с нетрадиционными алгоритмами оптимизации, такими как -

  1. Оптимизация роя частиц (и ее варианты)
  2. Генетический алгоритм (два варианта)

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

Точно так же вопрос в compre требовал от нас моделирования одного временного шага Particle-swarm, однако правильный ответ также зависел от точной математической формулировки проблемы. Это действительно проверяет понимание. Я признаю, что я бомбил вопрос, но мне понравилось пытаться.

ПИД-регулятор —

Это тема из раздела Системы управления, которую изучают студенты EEE. К этому моменту учебная программа стала слишком широкой. Одной из тем была оптимизация ПИД-регулятора с помощью генетического алгоритма.

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

Задания по кодированию -

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

Оценка была полностью автоматизирована, справедлива и на 100 % прозрачна. Он учил использованию определенных стандартов/условий в реальных приложениях нейронных сетей, таких как строгое сохранение размеров одномерного массива из n элементов в виде двумерного массива размерностей n*1.

Второе задание также имело ту же структуру, что и первое. Это было приложение генетического алгоритма к ПИД-регулятору. Первой частью задания был GA, а второй половиной — PID, который, исходя из моего предыдущего аргумента, не имеет отношения к курсу. Другая серьезная проблема заключается в том, что задание не синхронизировалось с обычными лекционными занятиями. Генетический алгоритм с PID был рассмотрен через месяц после задания. Студенты были концептуально потеряны во время выполнения задания.

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

Вопросы ГК -

В оцениваемых компонентах курса часто встречались такие вопросы — Кто изобрел X-алгоритм? Или Кто был первым роботом-гражданином? Кто изобрел вложения слов? В каком году ученый сделал то-то и то-то….?

У меня нет слов для этой тенденции вопросов. Вероятно, будет справедливо спросить, кто такие Джеффри Хинтон или Янн ЛекАн, но, на мой взгляд, не более того.

Срок проекта -

Для прохождения курса требуется представить курсовой проект на 60 баллов. Весь класс был разделен примерно на 70 групп, и каждой было предложено реализовать современную исследовательскую работу. Согласно раздаточному материалу, это нужно делать с нуля, так как это стоит много баллов.

На самом деле вряд ли кто-то делает это с нуля. Группы выбирают свои проекты в зависимости от того, код какой исследовательской работы уже доступен в открытом доступе. Для меня это жалкая ситуация, но она реальна.

Как можно ожидать, что 3-месячные начинающие изучать нейронные сети будут реализовывать передовую исследовательскую работу? Авторами статьи, которую мне поручили, лично руководил Джеффри Хинтон, крестный отец ИИ.

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

Я спросил одного из ТА, имя которого не буду называть, почему дается такое невыполнимое задание. Его ответ был -

  1. Ранее были опробованы и другие типы заданий. Зрители плохо это переварили.
  2. Ранее в рамках курса студентам предлагалось написать обзорные статьи по пограничным документам. Это тоже не сработало.
  3. Таким образом, команда преподавателей решила, что лучше всего будет попросить студентов внедрить современные технологии в надежде, что они научатся читать исследовательскую работу и узнают об наличие различных модулей Python. Я был весьма обескуражен, узнав, что это было истинным намерением, стоящим за 60 баллами. Это все равно, что надеяться напрасно.

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

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

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

  1. Сбор данных
  2. Очистка и обработка данных (на удивление, исходя из моего скудного опыта работы с ML, это занимает большую часть времени)
  3. Построение модели с помощью известного фреймворка Python ML
  4. Обучение модели
  5. Повышение точности путем настройки модели в соответствии со своим интеллектом или с заданными рекомендациями (это отличная возможность для обучения)
  6. Эффективное сообщение о точности (Красивое представление результатов требует умения)

Выводы -

Таковы недостатки курса, суммированные.

  1. Слишком большая широта в нейронных сетях. Количество времени, отведенное темам, не соответствовало их сегодняшней актуальности.
  2. Недостаток глубины по основным основополагающим темам.
  3. Отсутствие синхронизации между заданием и лекцией.
  4. Нереальный срок проекта.
  5. Мидсем был прост. вопросы ГК.
  6. Выходящие за рамки темы.
  7. Огромный объем программы.

Положительные стороны курса -

  1. Нечеткой логике и оптимизации обучали исключительно хорошо. Эти два модуля казались завершенными.
  2. Несмотря на несогласие с широтой программы, она способствует развитию общей картины нейронных сетей.
  3. Базовое знакомство с модулями Python благодаря заданиям и курсовому проекту.

Если этот курс все еще предлагается в BITS на момент просмотра читателем этой статьи, вот что я должен сказать:

  1. Если вы ищете наилучшие результаты обучения, этот курс не для вас.
  2. Если вы планируете сделать карьеру в области ML/AI и хотели бы, чтобы это было в вашей стенограмме, то вам следует пройти курс. Университетские курсы имеют большую ценность, чем МООК, и это сослужит вам хорошую службу.
  3. Если вы ищете облегченный курс, у меня неоднозначное мнение о нем. Если у вас есть друг, который ходит на все занятия, то вы можете выжить, делая его конспекты и зубря перед экзаменом. Курс неизменно может похвастаться большим количеством студентов, и вы найдете надежного товарища по группе, который будет готов дать вам свои заметки. Тем не менее, сам объем огромен, и легко потерять мотивацию к учебе (учитывая, насколько она сухая), забыть что-то и сделать ошибки на экзаменах.

Как пройти курс -

  1. В первой половине пройдите по всем классам и запишите каждый числовой пример. Запишите каждый факт ГК. Возможно, вам придется записать и другие вещи, но научитесь отличать то, что относится к экзамену, от того, что не имеет значения. Вы найдете слайды на DC, но они содержат ненужные детали. Слайды будут пролистываться очень быстро, поэтому вы можете себе представить, сколько страниц будет содержать один ppt (один ppt включает 1000 страниц). В качестве примечания я бы назвал обычных посетителей занятий марафонцами по ведению заметок. Так что приготовьтесь к боли в пальцах и суставах после 50 минут непрерывного письма. И это будет примерно за 30 занятий.
  2. Во второй половине больше сосредоточьтесь на слушании и понимании в классе. Большая часть материала находится в одном из справочников, но обязательно обратите внимание на уроке, так как не все есть в книге. Лично мне было удручающе отметить, что вторые иннинги лекций столкнулись с падением посещаемости исключительно потому, что -
  3. Не беспокойтесь о заданиях по кодированию. Вся партия будет делать это, и у вас будет большая поддержка. Не копируйте все задание полностью, там строгая проверка на плагиат, и я помню, что один из моих друзей потерял 80% оценок из-за плагиата.
  4. Пожалуйста, выберите проект, код которого легко доступен. Это слишком амбициозно, а времени меньше.

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

Западные университеты не придают такого большого значения экзаменам с ручкой. На самом деле, некоторые университеты просто избавляются от них. Почему BITS не экспериментирует с курсами, ориентированными на проекты и приложения? Такой курс, как NNFL, был бы идеальным кандидатом для такого эксперимента.

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

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