Нейросети vs алгоритмы

МЕНЮ


Главная страница
Поиск
Регистрация на сайте
Помощь проекту
Архив новостей

ТЕМЫ


Новости ИИРазработка ИИВнедрение ИИРабота разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика

Авторизация



RSS


RSS новости


2023-06-29 12:30

Трезво про ИИ

(многобукв, немного матана, абстрактные рассуждения за футуризм, в общем, на любителя)

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

Как это работает

Сначала немного скушной теории. Если отбросить пиаровскую шелуху, то современный «искусственный интеллект» – это коммерческое название нейронных сетей. А если отбросить ещё один слой, то нейронная сеть – это просто операция тензорного умножения.

Тензор (да простят меня сейчас господа математики за такое упрощение) – это трёхмерная матрица. Обычная матрица – табличка из цифр с вертикальными и горизонтальными рядами, а тензор – пачка из таких табличек, то есть, добавилось ещё одно измерение. В каждой клеточке записаны т.н. «веса матрицы» – просто коэффициенты, нужные для расчёта.

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

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

Но самая-то главная задача – это как её обучить, откуда взять нужные коэффициенты, чтобы на выходе было что-то полезное, а не бессмысленный набор цифр? И вот тут всё решает один-единственный алгоритм, который называется «метод обратного распространения ошибки». Принцип такой: сравнивают то, что должно быть на выходе и то, что получилось фактически, и эту ошибку шаг за шагом прогоняют через все слои тензора, каждый раз немного меняя веса. И так итерация за итерацией до тех пор, пока финальное расхождение не станет приемлемым. Поэтому для обучения сети нужна обучающая выборка (чем больше, тем лучше), и огромные вычислительные мощности – способ, к сожалению, чудовищно ресурсоёмкий.

Именно на этом методе и работают все современные нейронки. Впервые весь нужный для работы матаппарат описал в 1974 году профессор МФТИ Александр Галушкин, а в 1986 году метод усовершенствовали Барцев и Охонин (Красноярская группа). Так что да, искусственный интеллект, как и почти всё в этом мире, тоже придумали русские :)

(Как уже наверняка догадался уважаемый читатель, открытия советских учёных никак не были ни защищены, ни запатентованы и во всех западных книжках и словарях приводятся в основном имена американских специалистов, которые открыли то же самое чутка позже, но, конечно же, «совершенно независимо». Впрочем, речь сейчас не о том).

Нейронный молоток

Вся нужная математика была разработана ещё в 80е – 90е, однако, расцвет нейронок начался только с 2010х годов. Причин две – во-первых, благодаря интернету были накоплены гигантские объёмы исходных данных, которые нужны для обучения (та самая Биг Дата и методы её обработки). Во-вторых, прокачались вычислительные мощности, появились специализированные графические процессоры, которые способны проводить операции над тензорами с огромными скоростями. В итоге стало возможным обучать по-настоящему сложные сети и добиваться впечатляющих результатов.

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

Дальше пошло по известном принципу – человек с молотком в руке на любую проблему смотрит как на гвоздь. Нейронки стали прикручивать ко всему, что только можно, от финтеха до управления спутниками.

Так чем же, собственно, это плохо? А вот чем.

Путь в «нетуда»

Вторая половина XX века была периодом взрывного расцвета алгоритмического мышления. Этот период подарил человечеству такие фундаментальные труды, как «Теорию игр и экономическое поведение» фон Неймана, «Кибернетику» Винера, трёхтомное «Искусство программирования» Кнута. Ну и огромную массу научной фантастики с полезными и вредными киберами и покорением планет.

Были освоены и развиты сложные алгоритмы, каждый из которых дал целое направление в науке и технике, радикально поменял общество и нашу жизнь. Например, алгоритм быстрого преобразования Фурье – это вся радиотехника, телеметрия, радары, волновая оптика, физическое моделирование. Алгоритм Дейкстры – это поиск кратчайших путей в сетях сложной топологии – интернет, мобильная связь, военная и гражданская логистика. Алгоритмы полиномиального хеширования – это криптография, защита информации, мгновенные банковские платежи. Алгоритм весового анализа ссылок – это все поисковые сервисы и социальные сети. И так далее.

Создание алгоритмов – это деятельность, ставящая человека на один уровень с Демиургом. Для этого нужно разложить реальность на ключевые элементы, понять что главное, что второстепенное, выделить ключевые закономерность, досконально продумать, какие процессы там происходят и как они работают, предусмотреть все ошибки и критические ситуации. И потом самому всё это смоделировать. Короче говоря, для этого требуется глубокое понимание мироздания и его устройства. А заодно и не менее глубокое понимание технологий, на которых это всё предстоит реализовать.

А вот с нейронными сетями всё совершенно по-другому. Обучать нейронку – это всё равно что решать задачу, ничего не зная о предмете, получая ответ методом тупого подбора. Обычный алгоритм – это знание о мире, записанное в математическую форму. Нейронка «не знает» что она делает. Она просто перемножает несколько миллиардов кое-как подогнанных коэффициентов. Обучающий тоже не знает, что там внутри, он просто гоняет выборку, добиваясь похожего результата и меняя архитектуру сети. То есть мы, конечно, можем посмотреть веса в тензоре, но это ничего не скажет нам о закономерностях, которые она реализует. Там нет ни сознания, ни интеллекта, ни понимания предмета. Есть просто умножение двух тензоров с подогнанными весами.

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

Двойной тупик

Итак, полагаясь на нейронки мы, во-первых, разучаемся познавать мир. Алгоритмы и алгоритмическое мышление больше не нужны. Зачем? Достаточно засунуть побольше исходных данных и включить компьютер помощнее. Мы теряем понимание мира.

Это тупик интеллектуальный, мировоззренческий. От познания мироздания и разгадки его тайн мы, словно ученик-двоечник перешли к примитивной подгонке ответа. А это путь в никуда. В придаток к мёртвым машинам.

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

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

Но это всё глобальные общественные процессы, которые будут развиваться по своей запутанной логике, вне зависимости от нашего к ним отношения. А чего делать отдельному сверчку на его отдельно взятом шестке? Не бежать за толпой. Развивать понимание мира, прокачивать экспертность, изучать алгоритмы. Людей, которые могут бездумно тыкать мышкой и таскать кирпичи всегда много, а вот тех, кто способе понимать работу сложных систем, умеет их конструировать и настраивать – не важно, социальные это системы, экономические или технологические – таких специалистов всегда очень мало. И никакие нейронные сети их не заменят.


Источник: vk.com

Комментарии: