На просторах интернета часто доводилось видеть мнения, что де "нейросеть — панацея от всего и вся", т.е. например "натравите нейросеть — и все, профит" или еще брутальней "скоро создадут ИИ на базе нейронной сети, которая сможет заменить даже программистов / администраторов / аналитиков и т.д.".
Как правило когда пытаешься затем выяснить глубину познания дзэн оппонента в этой области, выясняется что он чуть не полный дилетант (ну или после пары бестолковых "аргументов" с пеной у рта, он сливается, прерывая тем самым попытку выяснить его уровень).
Я не понаслышке знаком с нейронными сетями, участвовал в некоторых проектах, "конструировал", обучил и настроил уже более десятка различных flow с использованием последних в разных областях применения (при этом перепробовав множество различных движков и типов сетей от простейших перцептронов до самоорганизующихся монстров). Кроме того, я лично знаком с некоторым количеством людей, активно проектирующих и использующих нейросети в повседневности, и пока что ни от одного из них не слышал про сногсшибательный прорыв в использовании нейросетей (что касается интеллекта последних). Т.е. я думаю, что в состоянии озвучить удаленность от реалий вышеприведенных высказываний.
Написать статью (и опрос) хотел уже довольно давно, но все как-то руки не доходили. А после очередного вопроса-предложения по е-майлу "натравите же нейронную сеть" на проблему из моей прошлой статьи "Мониторинг лог-журналов: Такой уязвимый лог...", все-таки понял — нет — надо писать.
В итоге целью этой статьи я ставлю во первых высказать свое скромное мнение, а во вторых выяснить что думают профессионалы с хабра по этому же поводу. Т.е. чтобы можно было ткнуть носом в статью очередного такого "все-лучше-всех-знающего" от интернета...
Хотя вдруг это я таки нещадно отстал от жизни...
Итак, для начала озвучим про или скорее контра использования нейронных сетей, что касается ее "интеллекта":
нейросеть "программируют", чтобы решать узконаправленные задачи, т.е. сеть распутывает только строго-определенные, семантически значимые для нее признаки;
способность нейросети распутывать признаки входных данных напрямую зависит от качества входных данных (например насколько те самые семантически значимые признаки вписываются в картину "создателя" сети); к примеру она не отличит огурец от банана, если в нее изначально не заложена функция оценки цветовой составляющей или целого ряда других характерных признаков (типа она будет находить банан только в руках у обезьяны, т.к. последняя вряд-ли найдет где-то огурец) или они просто отсутствуют во входных данных, а дополнительные "знания" не были заложены создателем сети
данные из обучающей выборки, на которых собственно сеть обучается, должны быть:
- репрезентативны (должны иллюстрировать истинное положение вещей в предметной области);
- непротиворечивы (противоречивые данные приведут к плохому качеству обучения сети);
- преобразованы к виду который можно отправить входным нейронам (т.е. должны быть как минимум первично обработаны другими алгоритмами)
результаты решения после и вовремя обучения должны быть обязательно проверены на правильность решения (кто это будет делать, когда нас всех отправят на пенсию...)
- сложные нейросети в массе своей очень и очень небыстрые создания, потребляющие кроме того кучу ресурсов и памяти (например для хранения той-же ассоциативной информации), хотя и решающие какие-либо узконаправленные заранее поставленные задачи нередко быстрее человека (ну так и калькулятор может например возвести в степень в миллионы раз быстрее человека, от этого он вряд-ли стал умнее последнего и может похвастаться большим интеллектом).
Грубо говоря большинство классических нейросетей, существующих в настоящий момент, — есть классифицирующие функции или группы функций, более-менее эффективно аппроксимирующих до нужных пределов входные данные и выделяющих в итоге строго "запрограммированные" признаки.
Т.е. не какие-то абстрактно думающие "железки", а суть специализированные алгоритмы, строго- или узко-заточенные на определенные действия, с возможностью "самообучаться" (на самом деле самостоятельно улучшать или уточнять параметры "алгоритма" в процессе обучения, а сети обучаемые без учителя, при постоянно включенном режиме обучения, еще и в процессе работы).
Т.е. что касается интеллекта, принципиальная разница чем нейронная сеть отличается от какого либо алгоритма (и это же одно из главных преимуществ ее) — она в состоянии улучшать результат на основании прошлого опыта (я утрирую, но речь здесь об интеллекте, не будем здесь собственно про коннективизм, нейроны, сигналы, веса и т.п.).
Кроме того, нередко результат работы такого "алгоритма" есть вероятностная оценка (или группа их). Что я хочу этим сказать. Ну возьмем к примеру лог-строчку из вышеупомянутого поста:
Aug 18 08:04:51 srv sshd[2131]: Failed password for invalid user test from 1.2.3.4 port 46589 ssh2 from 4.3.2.1 port 58946 ssh2
Ну оценит она это как "неавторизованная попытка с хоста 1.2.3.4 с вероятностью 99%", если она обучалась на миллионах строк, где после первого " from "
всегда стоит плохой адрес (и страшно ошибется). Или в лучшем случае — пропустит ее как "мусорную" строку или найдет там оба адреса (что как минимум должно быть предусмотрено в самом flow ее создателем).
На самом деле есть системы ИИ, называемые "системами обнаружения вторжений" (IDS), специально заточенные на выявление атак и (о чем нам говорит название) вторжений, однако я не знаю ни одной (а я много их повидал), которая здесь конкретно бы не споткнулась, чуть не полностью. В лучшем случае здесь был бы сигнал админу о множественных попытках "прорваться".
Как заставить ее "думать" как человек (т.е. начать как минимум сомневаться в том что видим) и главное принять в итоге правильное решение — это как раз очень сложная задача, которую пока решает разработчик (и нередко алгоритмически, вне или в обвязке нейросети) в каждом конкретном случае.
И это, как мне думается, еще очень и очень надолго.
Я не готов оценивать время, когда например те-же ИИ-помощники типа siri и компания, действительно получат хотя бы зачатки "интеллекта", в нашем его понимании, т.е. будут уже принципиально отличатся от того-же программируемого калькулятора (что касается действительно интеллектуальной составляющей). Но думаю, что это будет еще очень и очень не скоро.
По поводу же "заменить разработчика" — думается мне, что эта профессия будет последней в списке тех, кого в далеком будущем теоретически сможет заменить ИИ.
Если же вы считаете, что создали уже что-то такое мега-умное, у меня для вас есть новости:
- вы уже безработный
- это вам уже не страшно, ибо вы еще и мультимиллиардер, т.е. уже сейчас можете смело брать кредит, идти покупать новую Теслу, уютный домик на Бора-Бора и т.п.
- вас ненавидит лучшая часть человечества (другими словами вы выбрали себе врагами миллионы умнейших и образованнейших людей планеты)
- скайнет уже близко (и скоро нас всех поработит)
- за вами вероятно уже выехали (поэтому продумайте таки вариант с Бора-Бора)
Теперь собственно к опросам.
Чтобы исключить "шум" в опросах, они поделены на три группы (две для тех кто знает, и одна — для предположений), по два опроса для каждой целевой аудитории:
для профессионалов в разработке ИИ, машинного обучения и нейронных сетях в частности (например самостоятельно разработал/обучил/настроил несколько ИИ или нейросетей).
для теоретиков, т.е. людей, разбирающихся в теории, как это работает (но ни разу не использовавших это в бою)
- предположения: для всех остальных (ну дайте уже кликнуть где-нибудь).
Огромнейшая просьба, не отсвечивать в опросах другой целевой аудитории (жмем "Воздержаться" после того как ответили в опросах у себя)...
Итак, поехали!