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

Я записался на Стэнфордский курс машинного обучения на Coursera, и это самый сложный курс, который я когда-либо проходил.

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

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

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

Но я продолжу!

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

Все сложные вещи — это набор простых вещей.

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

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

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

Поэтому, когда я сталкиваюсь с чем-то вроде…

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

Если бы это были, скажем, функции Python, все было бы ограничено областью действия, пространством имен, четко определено и четко передано в качестве аргументов. «Волшебные числа» будут явно импортированы из библиотеки. Идея одной большой среды чисел, где может появиться новый символ, а я понятия не имею, что он означает и откуда взялся, разочаровывала тех, кто привык думать так же, как я.

Чтобы было ясно, я не утверждаю, что «вина» лежит в математике или подобных представлениях, я просто привожу пример того, как мне приходится напрягать свой мозг по-новому.

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

Это мое приложение «Все сложные вещи…» для этого класса.

Не представляю, как бы я без него обходилась.