Машинное обучение с чего начать изучение самостоятельно с нуля
Как изучать Machine Learning 5 дней в неделю 9 месяцев подряд
Я изучал машинное обучение каждый день на протяжении девяти месяцев, а потом получил работу.
Я уволился из Apple. Запустил веб-стартап, но из этого ничего не вышло. Душа к этому не лежала.
Я хотел изучать машинное обучение. Это то, что меня воодушевляло. Я собирался изучить все до малейшей детали. Мне не нужно было программировать все эти правила, все сделают за меня. Но у меня не было работы.
А воодушевление не оплачивает мои счета.
По выходным я начал подрабатывать в Uber, чтобы платить за учебу.
Я обожал общаться с новыми людьми, но ненавидел постоянно быть за рулем. Пробки, тормоз, газ, постоянные мысли о бензине и заправке, воздух, кондиционер, переключение передач, куда можно и куда нельзя ехать, все эти мысли.
Я изучал машинное обучение. Днями напролет, пять дней в неделю. Было сложно. Да и сейчас не легче.
Через девять месяцев после получения своей личной степени по ИИ, я нашёл работу. И это была лучшая работа в моей жизни.
Как у меня получалось заниматься каждый день?
А вот как.
1. Уменьшите пространство поиска
Машинное обучение – это обширная область. Там и код, и математика, вероятность, статистика, данные и алгоритмы.
В учебных ресурсах нет недостатка. А изобилие вариантов равняется их отсутствию.
Если вы серьезно относитесь к обучению, то создайте для себя учебный план. Вместо того, чтобы тратить недели с мыслями о том, следует ли вам учить Python или R, начните курс на Coursera или edX, начините с математики или изучения кода, потратьте одну неделю разрабатывая приблизительный план, а затем придерживайтесь его.
Именно так я пришел к своей собственной степени магистра в области ИИ. Я решил, что сначала изучу код и в качестве языка программирования выбрал Python. Я повсюду искал разные курсы и книги и отобрал те, которые заинтересовали меня больше всего. Всем ли подойдет такой способ? Скорее всего, нет. Но он был моим, поэтому и сработал.
Как только у меня появился учебный план, путь, по которому я мог двигаться, я больше не мог терять времени на размышления. Я мог подняться с кровати, сесть за стол и выучить то, что было нужно (и что хотелось) выучить.
Я не был к себе строг. Если я находил что-то интересное, то сворачивал со своего пути и учил новые вещи.
Вам стоит создать свой собственный путь, если вы учитесь онлайн, а не в университете.
2. Измените свою окружающую обстановку
Первая апельсиновая ферма вашего дедушки потерпела неудачу.
Почва была хорошая. Он посадил семена. Да и оборудование не могло подвести.
Что же случилось?
Было слишком холодно. Апельсины растут при высоких температурах. Ваш дедушка знал как вырастить апельсины, но холодный климат не оставил им ни шанса.
Он переехал в более теплый город и снова попробовал открыть ещё одну ферму.
Через двенадцать месяцев апельсиновый сок вашего дедушки стал лучшим в городе.
Учиться – все равно что выращивать апельсины.
Без мотивации к обучению вам не поможет ни ноутбук, ни интернет, ни лучшие книги.
Почему?
Проблема в том, что вас окружает.
В вашей комнате куча вещей, на которые так легко отвлечься.
Вы пытаетесь заниматься с друзьями, но они не так преданы делу как вы.
Сообщения в Whatsapp приходят каждые семь минут.
Я превратил свою комнату в убежище для занятий. Вымыл её. Отключил все оповещения и положил телефон в комод в другой комнате.
Я предупредил своего друга, что поговорю с ним после 16:00, когда включу телефон. Он согласился.
Я обожаю проводить время с друзьями, но учебное время – только для учебы. Не можете весь день продержаться без телефона? Начните с одного часа. Подойдет любой ящичек, который вы не видите. «Не беспокоить» должно стоять по умолчанию.
Измените окружающую вас обстановку и знания будут течь к вам рекой.
3. Настройте систему так, чтобы вы всегда оставались победителем
Проблема №13 поставила меня в тупик. Я застрял.
Я хотел разобраться с ней ещё вчера, но не смог.
Сейчас мне нужно заниматься, но я так усердно работал вчера и ничего не вышло.
Я откладываю. Знаю, что должен учиться. Но не сегодня.
Черт возьми. Я уже был в подобной ситуации. Однако, ничего не изменилось.
Стопка книг уставилась на меня. Проблема №13. Я завожу таймер. 25 минут. Знаю, что может и не решу проблему, но я могу сесть и попытаться.
Прошло четыре минуты, ощущаю себя как в аду. Просто ужасно, но я не останавливаюсь. Через двадцать четыре минуты я не хочу останавливаться.
Таймер выключается, я завожу новый. И ещё один. Спустя три подхода я решаю проблему. Я говорю себе, что я лучший инженер в мире. Конечно, это неправда, но это не имеет значения.
Даже маленькое достижение – это достижение.
Вы не всегда можете контролировать свои успехи в учебе. Но вы можете контролировать время, уделенное каким-либо вещам.
Можете контролировать: четыре подхода по 25 минут в день.
Не можете контролировать: завершение каждой новой задачи в тот же день.
Настройте систему так, чтобы бы всегда выигрывали.
4. Иногда ничего не делайте
Я пришел вот к какому выводу. Обучение – это самый главный навык. Если я смогу научиться лучше обучаться, то смогу сделать что угодно лучше. Я смогу выучить машинное обучение, смогу стать хорошим программистом, смогу лучше писать. Я решил, что должен усовершенствовать свои способы обучения. И сразу же начал.
Я прошел курс на Coursera «Учимся учиться». Одной из тем было сфокусированное и рассеянное мышление.
Сфокусированное мышление происходит при выполнении одной-единственной задачи.
Рассеянное мышление происходит, когда вы ни о чем не думаете.
На пересечении этих двух способов мышления располагается момент для лучшего обучения. Поэтому именно в душе к нам приходят лучшие идеи и мысли. Потому что там больше ничего не происходит.
Рассеянное мышление позволяет вашему мозгу связать воедино все то, что он поглощал во время сфокусированного мышления.
Загвоздка в том, что для того, чтобы оно правильно работало, нужно задействовать оба способа мышления.
Если вы делаете четыре подхода сфокусированного мышления по 25 минут, то потом отправляйтесь на прогулку. Вздремните. Сядьте и подумайте о том, что вы выучили.
Как только вы чаще начнете ничего не делать, то увидите ценность многих вещей из-за освободившегося пространства. Комната – это четыре стены вокруг пространства, в шине нет ничего, кроме воздуха, а корабль плывет из-за пустого пространства.
В вашей учебной рутине должно быть больше ничегонеделания.
5. Отстой, с которым нужно смириться
Сегодня вы выучите то, что забудете уже завтра.
Потом ещё, и снова забудете.
Вы проводите все выходные за учебой, идете на работу в понедельник и все повторяется.
Кто-то спросил меня как я надолго запоминаю то, что прочитал в книгах. Я ответил, что никак. Если повезет, я запомню 1% от всего содержания. Однако, когда этот 1% пересекается с 1% чего-то ещё, происходит волшебство. В такие моменты я чувствую себя экспертом по соединениям точек.
Ты понимаешь как много еще предстоит выучить, когда уже учишь что-то на протяжении года.
Когда это закончится?
Никогда. Вы всегда находитесь в самом начале пути.
6. Принцип трехлетки
На днях я был в парке.
Там был маленький мальчик – он бегал по всему парку, отлично проводя время. Забирался на горку и скатывался с неё, бежал за дерево и выбегал из-за него, в грязь, вверх и вниз по склону.
Он смеялся, прыгал и снова смеялся.
«Пойдем, Чарли, нам нужно идти».
Она уводила его, а он продолжал смеяться, размахивая своей синей пластиковой лопаткой.
Что же его так увлекло?
Он играл. Он веселился. Весь мир был в новинку. В нашей культуре есть четкая граница между работой и игрой. Обучение – это работа.
Вы должны учиться, чтобы получить работу. Вы должны работать, чтобы зарабатывать деньги. За деньги можно купить свободное время. И только в это свободное время вы можете быть как Чарли – носиться и смеяться.
Если вы воспринимаете учебу как работу, будет казаться, что вы в аду. Потому что всегда можно выучить больше. А вы знаете правило – только работа, никаких игр.
А теперь предположим, что учеба – это процесс прохождения от одной темы к следующей.
Как будто вы в игре соединяете разные предметы.
И тогда у вас, как и у Чарли, съезжающего с горки, появится такое же чувство.
Вы учите что-то одно, используете это, чтобы выучить что-то другое, застреваете, преодолеваете это и учитесь чему-то ещё. Превращаете весь процесс в танец.
Я узнал, что если у вас есть структурированные данные в виде таблиц, колонок или датафреймы, то такие ансамблевые алгоритмы как CatBoost, XGBoost и LightGBM подходят лучше всего. А для неструктурированных данных вроде картинок, видео, естественного языка или аудио, вашим выбором должны стать глубокое обучение и/или перенос обучения.
Я соединил точки. Сказал себе, что эксперт в этом. Танцевал от точки к точке.
Занимайтесь именно так, и к концу занятия у вас будет больше энергии, чем в его начале.
Это – принцип трехлетки. Воспринимать все как игру.
Ну, достаточно.
Мне пора спать.
Это бонус.
7. Сон
Если вы плохо спите, вы будете плохо учиться.
Наверное, и вы не спите достаточно.
Я точно не спал. Вечера пятницы и субботы были самыми прибыльными в Uber. Люди ходили в рестораны, на вечеринки, в ночные клубы. Я – нет, я водил. Я работал до 2-3 утра, возвращался домой и спал до рассвета в 7-8 утра. Два дня были сплошным кошмаром. Наступал понедельник, а я будто бы жил в другом часовом поясе. Во вторник было чуть лучше, к среде все вставало на свои места. Но наступала пятница и все повторялось.
Такой нарушенный режим сна был просто недопустим. Я же хотел усовершенствовать свое обучение. Сон очищает мозг, позволяя образовываться новым связям. Я заканчивал работать в 10-11 вечера, возвращался домой и спал по 7-9 часов. Меньше денег, больше знаний.
Не меняйте сон на время для обучения. Делайте наоборот.
Машинное обучение – это обширная область.
И чтобы хорошо изучить не только её, но и что угодно, вы должны помнить:
Узнайте подробности, как получить востребованную профессию с нуля или Level Up по навыкам и зарплате, пройдя платные онлайн-курсы SkillFactory:
Краткое введение в Машинное обучение
Пару лет назад я рассказывал жене сказки, что когда я буду старым маразматиком, мое ближайшее окружение не будет страдать от этого, ведь за мной будут ухаживать роботы. Новости о прогрессе искусственного интеллекта впечатляли меня (нейросетки то, нейросетки сё), свет в конце тоннеля манил, как и зарплаты специалистов в этой области. Разумеется, я не смог пройти мимо и решил погрузиться в Machine Learning.
Для старта хотелось почитать что-то совсем базовое, но поиск по строкам «машинное обучение для чайников» вменяемых результатов не дал. Все статьи начинались с тривиальных рассуждений, а потом перепрыгивали на загадочные формулы без особых пояснений. Я не сдавался и добыл несколько книг с хорошими отзывами, но получил то же самое, только уже на 600 страниц. Спустя полгода поисков могу сообщить вам следующее: при текущих темпах развития AI я не увижу роботов в старости, для работы с Machine Learning на самом деле не нужна математика, и как минимум одна статья «машинное обучение для чайников» существует, вы ее сейчас читаете.
Итак, ознакомившись с этой статьей вы поймете, что вообще представляет собой группа технологий ML. Имея эту базу вам будет проще двигаться дальше, и даже формулы в книгах станут понятнее. Раз уж зашел разговор о книгах, то сразу порекомендую ту, с которой у меня начался реальный прогресс: Andrew Glassner, «DEEP LEARNING: From Basics to Practice». В русском варианте она называется «Глубокое обучение без математики»: автор разжевывает алгоритмы не прибегая к формулам. После томов, полных математического пафоса, это был просто глоток свежего воздуха. Еще один важный момент: постарайтесь читать англоязычную литературу, т.к. перевод терминов на русский язык местами сильно страдает. Человеку, который ввел фразу «Обучение с учителем» должно быть очень стыдно.
Создадим модель и обучим ее
Начнем с классики жанра: у нас есть база данных недвижимости с десятком атрибутов (стоимость, площадь, количество комнат и т.д.), на ее основе надо научиться предсказывать стоимость других домов. Тут вы скажете: «Стопэ! Нам надо нейросетку, которая убирает купальники с фотографий, а ты пихаешь нам примитивную задачу о расчете усредненной стоимости!». Я поначалу тоже был в шоке, что эти задачи являются существенной частью ML. И я пришел в ужас от того, что в ML распознавание объектов на фотографии работает по такому же принципу, что и наше предсказание стоимости. Тут ключевое слово «Работает», так что давайте продолжим, сейчас все станет понятно.
Задача сводится к двум шагам: выбрать модель (подобрать подходящую формулу расчета) и затем найти ее коэффициенты. Модель для нашего примера возьмем упрощенную:
Теперь мы будем перебирать значения коэффициентов A до тех пор, пока уровень ошибки не станет приемлемым, это и называется Обучением модели.
Ошибку каждый раз вычисляем, конечно же, по нашей базе данных (Обучающей выборке, Training Set), алгоритм очень простой: для каждого дома находим разницу между расчетной и фактической стоимостью, возводим разницу в квадрат (чтобы избавиться от отрицательных чисел) и находим среднее значение всех этих отклонений. Формула для вычисления ошибки называется Функцией потерь (Loss Function), описанный алгоритм расчета популярный, но не единственный.
Если ошибку не удается снизить до вменяемых значений, значит мы неудачно выбрали модель: возможно, надо количество комнат брать в квадрат, или Удаленность от центра не плюсовать, а делить. Вариантов много, математики не могут ответить на вопрос «Как выбрать модель», поэтому просто сидим и пробуем разные, пока не получится (тут становятся понятны некоторые шутки про Data Scientist-ов).
А что насчет распознавания объектов на фотографиях? Идея простая: если сделать огромную формулу, которая на вход принимает миллион значений (пиксели фотографии) и внутри имеет сотню тысяч коэффициентов, то после удачного «обучения» она начнет на выходе выдавать «Вероятность наличия собаки на фото» (значение от 0.0 до 1.0). И это прокатило, такие формулы действительно работают, это называют Глубоким обучением (Deep Learning). Есть две сложности: формулу такого размера руками не написать, а ее коэффициенты даже на супер-компьютере методом простого перебора не вычислить. Приступаем к оптимизации.
Перцептрон и Нейронная сеть
В книгах вы прочитаете, что идея создания Перцептрона была навеяна структурой нашего мозга (нейронами), но сходство там очень отдаленное. Перцептрон работает гораздо проще, это всего лишь графическое представление обычного линейного уравнения:
Всего одной строкой мы рассчитали стоимости всех домов в нашей базе: в одномерный массив W закидываем все веса перцептрона, в двумерный массив X помещаем всю базу недвижимости (кроме стоимости), а в выходном одномерном массиве Y получаем все рассчитанные стоимости. Но краткостью записи все достоинства матриц и заканчиваются. С вычислительной точки зрения здесь нет никакого ускорения (если вы конечно пишите не на Python), а сама операция сведется к трем вложенным циклам с расчетом все того же линейного уравнения. Отказ от матриц, напротив, дает больше пространства для маневра и оптимизаций, но это повод для отдельной статьи.
На практике вам не придется работать с матрицами, готовые библиотеки избавят вас от этой мороки, так что кроме как в книгах вы эти матричные формулы больше нигде не увидите (ну еще в статьях на Хабре).
На одном линейном уравнении далеко не уедешь, пока что наша модель не сможет корректно предсказать стоимость, не говоря уже о собаке на фото:
Для большей гибкости перцептроны объединяют в нейронные сети (на таких рисунках не показывают Веса, но свой набор есть у каждого перцептрона в сети):
Тут нас ждет сюрприз: какие бы сложные комбинации связей мы ни рисовали, в итоге получим наше исходное линейное уравнение. Ни одно из входных значений x не будет возведено в степень, т.к. перцептроны соединяются между собой через операцию Сложения. Чтобы как-то исправить ситуацию на выходе каждого перцептрона добавили Функцию активации (Activation function):
Эта функция Ψ обязательно нелинейная, конечно же есть популярные варианты, которые вы найдете в любой книге (рисунки с Wikipedia):
Какую функцию использовать в вашей модели? Математики также не могут ответить на этот вопрос, пробуйте разные и смотрите что лучше работает в вашем случае. Сигмоид относительно требователен к вычислительным ресурсам, поэтому его чаще ставят только на выходе нейросети, чтобы получить красивое значение от 0.0 до 1.0 (именно для красоты, на выходе он не влияет на работу сети). Говорят, что и обычный Косинус работает неплохо (если таки углубиться в математику и взглянуть на Ряд Фурье, то возникает ощущение, что именно им и надо пользоваться, но я сам пока не пробовал). Для полного понимания работы функций активации давайте взглянем, во что превратилось уравнение нашего перцептрона в случае Сигмоида:
Наша модель выглядит сложнее, а если попытаться нарисовать формулу для всей нейронной сети, то будет вообще мясо, даже в матричном виде ее уже не пытаются изобразить. Благодаря функциям активации гибкость достигнута.
Как разработчику, вам не потребуется прописывать все эти формулы, готовые библиотеки избавят вас и от этой мороки. Есть теорема, которая доказывает, что с помощью линейных уравнений с функциями активации можно смоделировать любой процесс. Теорема правда не говорит, сколько весов должно быть в модели и как долго вы ее будете обучать.
Обучение модели
Простой перебор весов займет очень длительное время, т.к. после любой их корректировки надо прогонять через нейронную сеть всю обучающую выборку, чтобы посмотреть, как изменилась ошибка. Здесь нам помогут два метода: Градиентный спуск (Gradient Descent) и в дополнение к нему Обратное распространение (Backpropagation). Детальное вменяемое описание работы этой пары вы найдете все в той же книге «DEEP LEARNING: From Basics to Practice», а я приведу только самую суть.
Шаг 1: после создания нейронной сети проставляем начальные значения всем весам (обычно, маленькие случайные числа), прогоняем через нее обучающую выборку и вычисляем ошибку (Loss function). Если ошибка равна нулю, то Бог есть и он сегодня с вами. Все остальные пройдемте к шагу два.
Шаг 2: теперь нам надо поправить веса так, чтобы ошибка стала меньше. Взглянем, например, на вес W508, в какую сторону будем его двигать?
Для этого нам требуется производная от Функции потерь, что уже требует знаний математики (кажется 11 класс школы), но вас это не должно беспокоить, все производные для стандартных Функций потерь уже найдены и заботливо упакованы в библиотеки. Вам требуется только общее понимание, как это работает, чтобы суметь разобраться в причинах сбоев при обучении.
По градиенту мы видим не только в какую сторону менять вес, но и как сильно это делать (по крутизне наклона). По этой методике поочередно находим градиент для каждого веса и меняем их значения, это и есть Метод градиентного спуска.
Шаг 3: опять прогоняем обучающую выборку через сеть, вычисляем ошибку, вычисляем новые градиенты для весов:
И видим прогресс: ошибка действительно изменилась в меньшую сторону, а новый Градиент имеет меньший угол наклона, значит мы близки к минимальному значению ошибки на графике. Повторяем процесс до посинения тех пор, пока модель не перестанет обучаться, в этом случае градиенты станут почти горизонтальными линиями.
Какие есть подводные камни? А давайте все-таки построим полный график для Веса W508
Оказывается, мы шли не в том направлении, потому что начальное значение веса (случайное число) упало не в ту часть графика. Мы достигли, так называемого, локального минимума, и на графике их может быть очень много. Как с этим бороться? Запускаем обучение заново и надеемся, что в этот раз исходное случайное значение веса упадет в нужную область. Метод проб и ошибок все еще наш лучший друг.
А что там с Backpropagation? Вроде все посчитали, все работает, он нам зачем? Вычисление градиента для каждого из весов, описанное выше, относительно затратная процедура. Метод обратного распространения сильно упрощает этот процесс: зная градиент для правой части нейронной сети мы легко вычисляем градиенты для весов, находящихся левее. Двигаясь по сети все левее и левее мы постепенно обновляем все веса. Из-за этого движения справа налево метод и назвали «Обратным».
Таким образом, Backpropagation занимается только вычислением градиентов, а обновление весов по найденным градиентам выполняется с помощью Метода градиентного спуска. В реальной жизни часто упоминают только Backpropagation, опуская вторую составляющую, но вы должны понимать, что они идут в паре.
Виды нейронных сетей
Выше уже был показан вариант Полносвязной нейронной сети (Fully connected neural network), но они бывают еще и такими:
Кстати о картинках: в Полносвязную сеть пиксели изображения подаются построчно:
Это не очень-то логично, гораздо лучше близлежащие пиксели отправлять в нейросеть также рядышком:
Так и появились Сверточные нейронные сети (Convolutional neural network), или просто CNN. Это все еще набор перцептронов с функциями активации внутри, но набор связей между ними специфический, уже не все со всеми. Обучаются они все тем же методом Backpropagation.
Выделенную на рисунке цветом область называют «Фильтр». Обычно это квадрат со стороной 3-5 пикселей. Фильтр накладывают на изображение: значения x умножаем на веса и суммируем их, т.е. пропускаем значения через перцептрон. Результат сохраняем в новый двумерный массив. Далее снова накладываем этот же фильтр на изображение, но уже сдвинув его вправо на один пиксель (иногда используют большее смещение), и так пробегаем по всему изображению. Все это повторяем с другими фильтрами (еще несколько перцептронов с другими значениями весов), сохраняя результаты в отдельные массивы. Отфильтрованные изображения прогоняем еще через несколько фильтров, подвергаем дополнительным обработкам, и результат можно, например, подать на полносвязную сеть.
В литературе их часто называют нейросетями с памятью, но так можно сказать с очень большой натяжкой. Также в учебниках вы часто увидите попытку объяснить работу RNN через графы, но можно не забивать себе этим голову. Работают они очень просто:
В перцептрон добавилось Состояние (массив S): это переменные, в которых мы сохраняем результат вычисления всего перцептрона (домножив на веса), чтобы использовать их при следующем вызове перцептрона. При первом запуске Состояние заполняется нулями. Если вы уже распознали какой-то блок текста (например, e-mail) и готовы перейти к следующему независимому блоку данных, то Состояние принудительно обнуляется.
Если вы пытаетесь предсказать температуру на завтра, то такая нейросеть будет оперировать не только текущими показаниями (облачность, сила и направление ветра), но и предыдущим значением температуры, что очень логично.
Для Состояния есть несколько усложнений, которые повышают качество работы RNN. Если мы хотим учитывать не только последнее выходное значение, но и несколько предыдущих, то формула вычисления Состояния немного меняется (исходный код, не математическая формула):
Таким образом мы не полностью перезаписываем значение, а добавляем некоторое изменение, в зависимости от выходного значения.
Решаемые задачи
Алгоритмы машинного обучения подразделяют на «Обучение с учителем» (Supervised Learning, привет переводчику) и «Обучение без учителя» (Unsupervised Learning). Года два назад я был уверен, что речь идет о самообучаемых алгоритмах и о тех, за которыми надо присматривать. На самом деле здесь идет речь о двух группах:
Рассмотрим сами алгоритмы, начнем с Классификации, выше уже был пример: что находится на фото (кошка, собака и т.д.)? Другие классические примеры: является ли письмо спамом (бинарная классификация, т.к. ответ да/нет), распознавание букв и цифр на изображениях.
Генерация контента, можно выполнить с помощью Автокодировщика. Для этого используется специфическая нейронная сеть с «бутылочным горлышком»:
При обучении такую сеть заставляют на выходе генерировать точно такие же данные, что поступили на вход, например, в обучающую выборку включают разные фото травы. После завершения обучения сеть разрывают:
Теперь, подавая на вход пару чисел, на выходе мы можем получить совершенно новые изображения травы (либо белеберду, как повезет). Внутри Автокодировщика можно использовать полносвязные сети, CNN и RNN, а также любые их комбинации, важно только создать бутылочное горлышко.
За что же платят так много денег?
Как мы увидели выше, ничего особо сложного в Машинном обучении нет. Вся математика скрыта в недрах библиотек, количество алгоритмов ограничено, вариантов оптимизации не слишком много, сиди да подбирай коэффициенты случайным образом. Почему же зарплаты Data Scientist так высоки? Чтобы быть успешным в этом деле надо все-таки включать голову.
Успех складывается из двух вещей:
у вас есть очень много данных в обучающей выборке и очень мощные серверы для их обработки (тогда достаточно взять готовую GPT-3 и обучить ее русскому языку);
вы отлично знаете предметную область, в которой пытаетесь применить машинное обучение.
Меняя количество перцептронов в нейронной сети вы можете немного повысить качество ее работы, но настоящий прорыв возможен, если вы усовершенствуете алгоритм в целом. Например, декомпозируете задачу: с помощью первой нейронной сети преобразуем фотографию в простейшие фигуры (треугольник, круг, волнистые линии), а второй нейронкой определяем, что же там нарисовано.
Заключение
В этой статье я привел лишь самые базовые вещи. Есть еще огромное количество нюансов, которые вы почерпнете из книг и статей, но у вас теперь есть основной вектор движения.