Сегодня все всегда заняты. Столько всего происходит и в личной жизни, и в профессиональной среде. А тем временем такие темы, как искусственный интеллект, круто набирают обороты, а вас же начинают посещать неприятные мысли о том, что в ближайшие два года ваши навыки безнадежно устареют.
После того как я похоронил свой стартап Zeading, я почувствовал это особенно остро. Словно я упускаю из вида что-то очень важное.
То, что я full stack разработчик — это уже не круто. Full stack уже не «full» без компетенций в ИИ.
Настала пора действовать. Поэтому я решил привести свои навыки в области разработки, маркетинга и предпринимательства в соответствие с современными требованиями, решил полностью открыться новому.
Коротко рассказываем о гибкой методологии разработки программного обеспечения (Agile), которую мы используем на проектах в EDISON Software Development Centre.
Спирос Маргарис (Spiros Margaris), известный венчурный капиталист и лидер в области ИИ и финансовых технологий, очень образно выразил мне свое видение ситуации:
«когда стартапы и компании станут повсеместно полагаться на новейшие алгоритмы в области ИИ и машинного обучения, этого сразу станет недостаточно. ИИ перестанет быть конкурентным преимуществом и станет нормой. Вряд ли ты слышал, чтобы кто-то хвалился использованием электричества».
Создавая свою первую нейронную сеть
Мне часто советовали подписаться на курс Эндрю Ына (Andrew Ng) на площадке Coursera. Это отличное место, чтобы с чего-то начать, но я обнаружил, что мне трудно длительное время концентрироваться на предмете. Не то чтобы курс был плохим или что-то в этом роде, просто мне в принципе всегда сложно было оставаться внимательным на лекциях. Мой личный метод обучения всегда основывался на практике, и я подумал: «Черт, а почему нет, почему бы не сделать свою собственную нейронную сеть?».
Я не бросился сразу к попыткам создания нейронной сети, а решил сначала все же подучиться. Я постарался ознакомиться с главными понятиями в данной области, чтобы овладеть терминологией.
Будучи погруженным до этого в Javascript и Nodejs, я все еще держался за них. Поэтому я нашел простенький модуль нейронной сети с названием «nn» и использовал его для реализации вентиля AND с примитивными входными данными. Воодушевившись примером, я поставил задачу: для любых трех вводных X,Y и Z — вывод X AND Y.
var nn = require('nn')
var opts = {
layers: [ 4 ],
iterations: 300000,
errorThresh: 0.0000005,
activation: 'logistic',
learningRate: 0.4,
momentum: 0.5,
log: 100
}
var net = nn(opts)
net.train([
{ input: [ 0,0,1 ], output: [ 0 ] },
{ input: [ 0,1,1 ], output: [ 0 ] },
{ input: [ 1,0,1 ], output: [ 0 ] },
{ input: [ 0,1,0 ], output: [ 0 ] },
{ input: [ 1,0,0 ], output: [ 0 ] },
{ input: [ 1,1,1 ], output: [ 1 ] },
{ input: [ 0,0,0 ], output: [ 0 ] }
])
// send it a new input to see its trained output
var output = net.send([ 1,1,0])
console.log(output); //0.9971279763719718
Счастье-то какое!
По-моему, это больше всего повлияло на мою уверенность в успехе. Когда на выходе оказалось значение 0.9971, я понял, что сеть обучилась операции AND и самостоятельно игнорировать дополнительные вводные данные.
В этом состоит суть машинного обучения. Вы задаете компьютерной программе данные, и она подгоняет их к внутренним параметрам таким образом, чтобы иметь возможность выдавать ответ по новым данным, уменьшая вероятность ошибки по сравнению с исходными данными.
Этот метод, как я позже выяснил, называется градиентным спуском.
Мысленно настраиваясь на ИИ
Уверовав в свои силы после создания моей первой программы ИИ, я загорелся желанием выяснить, что еще я могу сделать с машинным обучением как разработчик.
- Я решил пару задач на «обучение с учителем», например, по регрессии и классификации.
- Я использовал ограниченный набор данных при попытке предсказать, какая команда выиграет матч IPL, используя многовариантную линейную регрессию (предсказания никуда не годились, но было забавно).
- Я поиграл с демо на ресурсе Google Machine Learning cloud (https://cloud.google.com/products/machine-learning/) для ознакомления в целом возможностями ИИ на сегодняшний день (здорово, что «Google» применяет там модель SaaS).
- Я наткнулся на AI Playbook, который является отличным ресурсом, организованным уважаемым венчурным фондом «Andreessen-Horowitz». На самом деле один из наиболее полезных ресурсов для разработчиков и предпринимателей.
- Я подписался на замечательный Youtube-канал Сираджа Равала (Siraj Rawal), который посвящен глубинному и машинному обучению.
- Я прочитал отменный пост на Hacker Noon о том, как продюсеры «Кремниевой долины» создали то самое приложение — «Not Hotdog». По-моему, это очень яркий пример того, на что способно глубинного обучение.
- Я также читал блог Андрея Карпаты (Andrej Karpathy), который является директором отдела ИИ в «Tesla». И хотя я толком там ничего и не понял, оттуда я вынес помимо головной боли идею о том, что концепции при должном старании начинают обретать практический смысл.
- Набравшись смелости, я начал использовать некоторые учебные материалы по глубинному обучению, стараясь настроить модель и выполнить код на моем компьютере. В большинстве случаев ничего не получалось из-за большого количества времени, которое требуется моделям для обучения, и к тому же у меня не было GPU.
Постепенно, я перешел от использования Javascript к Python’у и установил Tensorflow на своем компьютере с Windows.
В целом вся эта деятельность заключалась в пассивном потреблении материала для выстраивания в уме общей схемы, к которой я смог бы позже вернуться, когда придет время решать конкретные задачи.
Как сказал Стив Джобс: «вы сможете соединить точки, только оглядываясь назад».
Успеть заскочить на поезд чат-ботов
Являясь большим поклонником фильма «Она» («Her»), я всегда хотел заниматься созданием чат-ботов. Попробовав, я смог создать один, используя Tensorflow, менее чем за пару часов. Я описал этот опыт и его коммерческие перспективы в одной из своих статей несколько дней назад.
Так удачно сложилось, что статья «выстрелила» и была отмечена в TechInAsia, CodeMentor и KDNuggets. Лично для меня это было торжественным событием, т.к. я только начал вести блог на технические темы. Думаю, та статья стала для меня ориентиром на пути к ИИ.
Я подружился со многими людьми в Твиттере и Линкедине, с которыми можно обсудить развитие ИИ «и в ширь, и в глубь», и которые смогут мне помочь, если я на чем-нибудь застряну. Мне сделали несколько предложений поучаствовать в консультационных проектах, и, что приятней всего, молодые разработчики и новички в области ИИ стали обращаться ко мне с вопросом, с чего я начал свое поиски в этом направлении. Именно это и послужило поводом написания этой статьи — желание подсказать интересующимся данным вопросом с чего можно начать и мотивировать их на дальнейшее самостоятельное изучение данной темы.
Начать двигаться — это важнейшая (сложнейшая) часть путешествия.
Соль и перец
Для меня это было не просто. Когда я начал застревать с Javascript’ом, я с головой погрузился в Python и практически за ночь разобрался, как разбирать эти задачи на нем. Меня раздражало, когда мои модели не запускались на моей i7-машине или когда после многих часов обучения они выдавали невнятные результаты вроде 50% вероятности победы команды в матче по крикету. Изучение ИИ не похоже на изучение веб-фреймворка.
Этот навык требует внимательности к происходящему на микроскопическом уровне вычислений и определения степени ответственности за результат как вашего кода, так и ваших данных.
К тому же ИИ не является однобоким явлением. Это широкое понятие, используемое от решений простых задач по регрессии до создания роботов-убийц, которые когда-нибудь нас прикончат. Как и в любой другой области, в исследование которой вы углубляетесь, вы можете выбрать наиболее приглянувшиеся вам аспекты ИИ и специализироваться в них, будь то машинное зрение или обработка естественного языка или, не дай Бог, мировое господство.
Гаурав Шарма (Gaurav Sharma), заслуженный лидер в области ИИ, финансовых технологий и шифрования, поделился со мной своими мыслями на эту тему:
«в эру искусственного интеллекта «быть умным» будет означать совсем другое. Нам необходимо, чтобы люди могли мыслить критически, творчески и выполнять работу, которая требует сильного морального вовлечения».
Вы должны быть впечатлены тем, что компьютеры вдруг могут учиться делать вещи сами по себе. Терпение и восхищение — вот два основных принципа, которых вам нужно придерживаться.
Это долгий-долгий путь. Очень изнуряющий, очень раздражающий и поглощающий бездну времени.
Но обнадеживает то, что любое путешествие уже началось, если был сделан первый шаг.