Файл: Мы живем в эпоху алгоритмов. Всего лишь одно или два поколения назад упоминание слова алгоритм вызвало бы недовольство у большинства людей. Сегодня алгоритмы есть во всех уголках цивилизации.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 12.12.2023

Просмотров: 15

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

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

Алгоритм - это последовательность инструкций, указывающих компьютеру, что делать. Компьютеры состоят из миллиардов крошечных переключателей, называемых транзисторами, и алгоритмы включают и выключают эти переключатели миллиарды раз в секунду. Самый простой алгоритм: нажмите выключатель. Состояние одного транзистора - это один бит информации: один, если транзистор включен, и ноль, если он выключен. Один бит где-то в компьютерах вашего банка сообщает, перерасход средств на вашем счету или нет. Еще кое-что где-то в компьютерах Управления социального обеспечения сообщает, жив ты или мертв. Второй простейший алгоритм: объединить два бита. Клод Шеннон, более известный как отец теории информации, был первым, кто понял, что то, что делают транзисторы, когда они включаются и выключаются в ответ на другие транзисторы, является рассуждением. (Это была его магистерская диссертация в Массачусетском технологическом институте - самая важная магистерская диссертация всех времен.) Если транзистор A включается только тогда, когда транзисторы B и C включены, это приводит к небольшому логическому рассуждению. Если A включается при включении B или C, это еще одна крошечная логическая операция. И если A включается, когда B выключен, и наоборот, это третья операция. Вы не поверите, но любой алгоритм, каким бы сложным он ни был, можно свести только к этим трем операциям: И, ИЛИ и НЕ. Простые алгоритмы могут быть представлены в виде диаграмм с использованием различных символов для операций И, ИЛИ и НЕ. Например, если лихорадка может быть вызвана гриппом или малярией, и вам следует принимать Тайленол от лихорадки и головной боли, Его можно выразить следующим образом.


Комбинируя множество таких операций, мы можем проводить очень сложные цепочки логических рассуждений. Люди часто думают, что все в компьютерах - это числа, но это не так. Все компьютеры связаны с логикой. Числа и арифметика состоят из логики, как и все остальное в компьютере. Хотите сложить два числа? Для этого есть комбинация транзисторов. Хотите победить человеческую опасность! чемпион? Для этого тоже есть комбинация транзисторов (естественно, намного больше).

Однако это было бы непомерно дорого, если бы нам пришлось построить новый компьютер для разных вещей, которые мы хотим делать. Скорее, современный компьютер представляет собой огромную сборку транзисторов, которые могут делать много разных вещей в зависимости от того, какие транзисторы активированы. Микеланджело сказал, что все, что он сделал, это увидел статую внутри мраморного блока и вырезал лишний камень, пока статуя не была обнаружена. Точно так же алгоритм удаляет лишние транзисторы в компьютере до тех пор, пока не будет обнаружена предполагаемая функция, будь то автопилот авиалайнера или новый фильм Pixar.

Алгоритм - это не просто набор инструкций: они должны быть достаточно точными и однозначными, чтобы их мог выполнить компьютер. Например, рецепт приготовления не является алгоритмом, потому что он точно не указывает, в каком порядке делать что-либо или что именно представляет собой каждый шаг. Сколько сахара в ложке? Как знают все, кто хоть раз пробовал новый рецепт, следование ему может привести к чему-то вкусному или беспорядку. Напротив, алгоритм всегда дает один и тот же результат. Даже если в рецепте указано ровно пол-унции сахара, мы все равно не выбрались из леса, потому что компьютер не знает, что такое сахар или унция. Если бы мы хотели запрограммировать кухонного робота на приготовление торта, нам пришлось бы рассказать ему, как распознавать сахар по видео, как брать ложку и так далее. (Мы все еще работаем над этим.) Компьютер должен знать, как выполнять алгоритм, вплоть до включения и выключения определенных транзисторов. Так что рецепт приготовления очень далек от алгоритма.

С другой стороны, следующий алгоритм игры в крестики-нолики:

Если у вас или у вашего оппонента две карты подряд , играйте на оставшейся площади.



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

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

В противном случае, если ваш противник играл в углу, играйте в противоположном углу.

В противном случае, если есть пустой угол, играйте там.

В противном случае играйте на любом пустом квадрате.

У этого алгоритма есть замечательное свойство, которое он никогда не теряет! Конечно, по-прежнему не хватает многих деталей, например, как доска представлена ​​в памяти компьютера и как это представление изменяется при движении. Например, у нас может быть два бита для каждого квадрата, со значением 00, если квадрат пуст, которое изменяется на 01, если оно имеет ноль, и на 10, если оно имеет крест. Но он достаточно точный и недвусмысленный, чтобы любой грамотный программист мог восполнить пробелы. Также помогает то, что нам действительно не нужно самостоятельно определять алгоритм вплоть до отдельных транзисторов; мы можем использовать уже существующие алгоритмы в качестве строительных блоков, и их огромное количество на выбор.

Алгоритмы - это строгий стандарт. Часто говорят, что вы действительно чего-то не понимаете, пока не сможете выразить это в виде алгоритма. (Как сказал Ричард Фейнман: «То, что я не могу создать, я не понимаю».) Уравнения, хлеб с маслом для физиков и инженеров, на самом деле представляют собой особый вид алгоритма. Например, второй закон Ньютона, возможно, самое важное уравнение всех времен, говорит вам вычислить чистую силу, действующую на объект, умножив его массу на его ускорение. Он также неявно сообщает вам, что ускорение - это сила, деленная на массу, но явное определение этого само по себе является алгоритмическим шагом. В любой области науки, если теория не может быть выражена в виде алгоритма, это не совсем строго. (Не говоря уже о том, что вы не можете использовать компьютер для решения этой проблемы, что действительно ограничивает то, что вы можете с ним делать.) Ученые создают теории, а инженеры создают устройства. Ученые-информатики создают алгоритмы, которые являются одновременно теориями и устройствами.

Разработать алгоритм непросто. Подводных камней предостаточно, и ничего нельзя принимать как должное. Некоторые из ваших интуиций окажутся ошибочными, и вам придется найти другой способ. Помимо разработки алгоритма, вы должны записать его на языке, понятном компьютерам , например, Java или Python (в этот момент он называется программой). Затем вам нужно отладить его: найти каждую ошибку и исправить ее, пока компьютер не запустит вашу программу без сбоев. Но если у вас есть программа, которая делает то, что вы хотите, вы действительно можете поехать в город. Компьютеры без жалоб выполнят ваши приказы миллионы раз на сверхвысокой скорости. Каждый в мире может использовать ваше творение. Стоимость может быть нулевой, если вы так решите, или достаточной, чтобы сделать вас миллиардером, если проблема, которую вы решили, достаточно важна. Программист - тот, кто создает алгоритмы и кодирует их - это второстепенный бог, создающий вселенные по своему желанию. Можно даже сказать, что сам Бог Бытия - программист: язык, а не манипуляции, является его инструментом творчества. Слова становятся мирами. Сегодня, сидя на диване со своим ноутбуком, вы тоже можете быть богом. Представьте себе вселенную и воплотите ее в реальность. Th е законы физики не являются обязательными.


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

Однако в этом Эдеме неизбежно появляется змей. Это называется монстром сложности. Подобно Гидре, сложный монстр имеет множество голов. Одна из них - пространственная сложность: количество битов информации, которое алгоритм должен хранить в памяти компьютера. Если алгоритму требуется больше памяти, чем может предоставить компьютер, он бесполезен и должен быть отброшен. Затем есть злая сестра, временная сложность: сколько времени требуется для выполнения алгоритма, то есть сколько шагов по использованию и повторному использованию транзисторов он должен пройти, прежде чем он даст желаемые результаты. Если это дольше, чем мы можем ждать, алгоритм снова бесполезен. Но самое страшное лицо сложного монстра - это человеческая сложность. Когда алгоритмы становятся слишком сложными для понимания нашим бедным человеческим мозгом, когда взаимодействия между различными частями алгоритма становятся слишком многочисленными и слишком сложными, появляются ошибки, мы не можем их найти и исправить, а алгоритм не работает. что мы хотим. Даже если мы каким-то образом заставим его работать, он окажется излишне сложным для людей, использующих его, и не будет хорошо работать с другими алгоритмами, откладывая проблемы на потом.

Каждый компьютерный ученый каждый день сражается с монстром сложности. Когда компьютерные ученые проигрывают битву, сложность проникает в нашу жизнь. Вы, наверное, заметили, что многие битвы проиграны. Тем не менее, мы продолжаем строить нашу башню алгоритмов с все большей и большей трудностью. Каждое новое поколение алгоритмов должно быть построено на основе предыдущих и должно иметь дело с их сложностями в дополнение к своей собственной. Башня становится все выше и выше и покрывает весь мир, но при этом становится все более хрупкой, как карточный домик, ожидающий своего обрушения. Одна крошечная ошибка в алгоритме - и взорвется ракета на миллиард долларов, или миллионы отключатся. Алгоритмы взаимодействуют неожиданным образом, и фондовый рынок рушится.


Если программисты - второстепенные боги, то монстром сложности является сам дьявол. Мало б у мало, он выигрывает войну.

Там должен быть лучший путь.

У каждого алгоритма есть вход и выход: данные поступают в компьютер, алгоритм делает с ними то, что он будет делать, и выдает результат. Машинное обучение меняет ситуацию: вводятся данные и желаемый результат, а на выходе получается алгоритм, который превращает одно в другое. Алгоритмы обучения, также известные как обучающиеся, - это алгоритмы, которые создают другие алгоритмы. Благодаря машинному обучению компьютеры пишут свои собственные программы, поэтому нам не нужно.

Компьютеры пишут свои собственные программы. Это мощная идея, может быть, даже немного пугающая. Если компьютеры начнут программировать себя, как мы будем их контролировать? Оказывается, мы можем довольно хорошо их контролировать, как мы увидим. Более непосредственное возражение состоит в том, что, возможно, это звучит слишком хорошо, чтобы быть правдой. Несомненно, написание алгоритмов требует интеллекта, творчества, навыков решения проблем - вещей, которых у компьютеров просто нет? Чем машинное обучение отличается от магии? Действительно, на сегодняшний день люди могут писать множество программ, которым компьютеры не могут научиться. Но что еще более удивительно, компьютеры могут изучать программы, которые люди не могут написать. Мы умеем водить машины и расшифровывать почерк, но эти навыки подсознательны; мы не можем объяснить компьютеру, как это сделать. Однако, если мы дадим учащемуся достаточное количество примеров каждого из них, он с радостью поймет, как делать их самостоятельно, и в этот момент мы сможем избавиться от него. Вот так почтовое отделение считывает почтовые индексы, и поэтому уже едут малолитражные машины.

Сила машинного обучения, возможно, лучше всего объясняется аналогией с низкими технологиями: сельским хозяйством. В индустриальном обществе товары производятся на заводах, а это означает, что инженеры должны точно выяснить, как собирать их из частей, как изготавливать эти части и так далее - вплоть до сырья. Работы много. Компьютеры - это самые сложные товары, когда-либо изобретенные, и проектирование их, фабрик, которые их производят, и программ, которые на них работают, - это огромная работа. Но есть другой, гораздо более старый способ, которым мы можем получить кое-что из того, что нам нужно: позволить природе создавать их. В сельском хозяйстве мы сажаем семена, следим за тем, чтобы в них было достаточно воды и питательных веществ, и собираем урожай. Почему технологии не могут быть более похожими на это? Может, и это обещание машинного обучения. Алгоритмы обучения - это семена, данные - это почва, а изученные программы - это выращенные растения. Эксперт по машинному обучению похож на фермера, который сеет семена, орошает и удобряет почву и следит за состоянием урожая, но в противном случае не мешает.