Читать книгу: «ИИ за вечер»
Глава 1. ИИ — это что вообще такое?
Если спросить человека, что такое искусственный интеллект, можно получить самые разные ответы. Кто-то скажет:
— Это ChatGPT.
Другой:
— Это нейросети.
Третий уверенно заявит:
— Это когда компьютер начинает думать.
А кто-нибудь обязательно добавит:
— Скоро роботы захватят мир.
Последнее, конечно, звучит особенно убедительно. Особенно если человек только что посмотрел фантастический фильм. Но давайте пока оставим восстание машин на потом. Начнём с гораздо более простого вопроса: что вообще такое искусственный интеллект?
Компьютер и раньше был довольно умным
Представьте обычный калькулятор. Вы вводите:
237 × 481
Он через долю секунды выдаёт ответ. Выглядит впечатляюще. Особенно если попросить посчитать это в уме у человека, который сегодня не выспался. Но калькулятор не является искусственным интеллектом. Почему?
Потому что он не учился умножать. Он не посмотрел на миллион примеров:
2 × 3 = 6
7 × 8 = 56
12 × 15 = 180
и не сделал вывод: «Кажется, я начинаю понимать эту штуку».
Нет.
В него заранее заложили правила, по которым он должен выполнять вычисления. Вы дали числа. Он применил известный алгоритм. Получил ответ. В этом смысле обычная программа очень похожа на хорошего, но чрезвычайно буквального сотрудника.
Вы говорите ей: Если произошло А — сделай Б.
Если произошло В — сделай Г.
Если температура выше 100 градусов — включи вентилятор. И программа послушно выполняет инструкции. Проблема начинается тогда, когда мы хотим дать компьютеру задачу, для которой нам самим трудно сформулировать правила.
Попробуем объяснить компьютеру, что такое кошка
Представим, что мы хотим написать программу, которая будет смотреть на фотографии и определять: кошка перед нами или собака? На первый взгляд задача кажется простой. Человек обычно справляется с ней без особых проблем. Покажите ему:
кошка Он скажет: Кошка. Покажите: собака Собака. Ну и прекрасно. Теперь попробуем объяснить компьютеру, по каким правилам мы это определили. У кошки есть четыре лапы?
У собаки тоже. Есть хвост? Тоже. Есть шерсть? В большинстве случаев — да.
Два глаза? Как правило. Уши? У обеих имеются. Тогда можно сказать:
Если четыре лапы + хвост + шерсть + два глаза = кошка.
Получается кошка. Правда, где-то рядом уже стоит собака и возмущённо смотрит на эту классификацию. Попробуем добавить размер. Кошка обычно меньше собаки. Но есть маленькие собаки.
И большие кошки. Добавим форму ушей. У кошки обычно треугольные уши. Отлично. Только вот есть собаки с очень похожими ушами.
Тогда добавим форму морды. Цвет шерсти. Длину хвоста. Положение глаз. Положение тела.
И ещё несколько сотен признаков. Через некоторое время наша программа превратится в огромную инструкцию примерно такого вида: Если у объекта четыре лапы, шерсть определённого типа, нос такой формы, уши такие, глаза находятся на таком расстоянии, хвост изгибается вот так, а голова имеет вот такую геометрию — скорее всего, это кошка. Звучит разумно.
Но тут мы показываем программе сфотографированного сфинкса. И она впадает в экзистенциальный кризис. Где шерсть?!
А что, если не объяснять правила? Вот здесь начинается самое интересное. Можно попробовать поступить совершенно иначе. Не говорить компьютеру: «Вот тебе правила, по которым нужно узнавать кошку». А показать ему много примеров.
Вот кошка. Вот ещё кошка. Вот эта кошка. Вот эта тоже. А вот собака.
И ещё собака. И ещё. И ещё. Компьютер делает попытку. Ошибается.
Мы говорим: Нет. Это была кошка. Он немного меняет свои внутренние настройки. Получает следующую картинку. Снова ошибается.
Опять корректирует настройки. И так снова, снова и снова. Через огромное количество примеров система начинает находить закономерности. Причём мы не обязаны заранее говорить ей: «Обрати внимание на форму ушей». Она сама может обнаружить, что определённые особенности изображения помогают отличать один объект от другого.
Вот это уже совсем другой подход. Именно здесь появляется машинное обучение.
Искусственный интеллект, машинное обучение и нейросети
Теперь нам понадобятся три термина. Искусственный интеллект (ИИ) — самое широкое понятие. Это название для методов, которые позволяют компьютерам выполнять задачи, обычно связанные с человеческими интеллектуальными способностями: распознавать объекты, понимать текст, принимать решения, находить закономерности, создавать содержимое и так далее.
Машинное обучение — один из способов создать такой интеллект. Вместо того чтобы вручную прописывать все правила, мы даём системе данные и способ учиться на них. Нейронная сеть — один из наиболее мощных инструментов машинного обучения.
Именно нейронные сети лежат в основе огромного количества современных систем ИИ. Можно представить это как матрёшку:
Искусственный интеллект — Машинное обучение — Нейронные сети
Не каждый ИИ — нейронная сеть. Не каждое машинное обучение — нейронная сеть. Но современный бум ИИ во многом связан именно с развитием нейросетей.
Почему именно сейчас все заговорили об ИИ? Ведь искусственный интеллект придумали не вчера. Первые серьёзные исследования в этой области начались ещё в XX веке. Учёные десятилетиями пытались научить машины решать задачи, распознавать изображения, играть в игры и работать с языком.
И периодически случались впечатляющие успехи. А потом наступал очередной период разочарования. Компьютер оказывался не таким уж умным. Почему? Потому что для хорошего обучения нужны как минимум три вещи: данные, вычислительные мощности и хорошие алгоритмы.
Долгое время чего-то из этого не хватало. Представьте, что вы хотите научить ребёнка распознавать собак. Можно показать ему десять фотографий. Он, возможно, что-нибудь поймёт. Покажите сто тысяч — уже лучше.
А теперь представьте, что вместо ста тысяч фотографий у вас огромное количество разнообразных данных, а вместо одного компьютера — вычислительная инфраструктура, способная обрабатывать всё это с колоссальной скоростью. Современный ИИ получил доступ сразу ко всем этим преимуществам. И тут началось веселье.
Нейросети научились гораздо лучше распознавать изображения, работать с речью, переводить языки, писать тексты, создавать изображения и выполнять множество других задач. А потом появились большие языковые модели. И однажды мы обнаружили, что с компьютером можно просто поговорить.
Но разве ChatGPT — это и есть ИИ?
Нет.
Точнее, ChatGPT — это один из примеров применения искусственного интеллекта. Так же как автомобиль — не вся механика, а самолёт — не вся аэродинамика. Когда вы разговариваете с ChatGPT, вы взаимодействуете с системой, построенной на больших нейронных сетях, обученных работать с языком.
Но ИИ вокруг нас гораздо больше. Например: Ваш телефон узнаёт ваше лицо. Камера автоматически улучшает фотографию. Почта определяет, что письмо похоже на спам. Музыкальный сервис предлагает песню, которую вы, возможно, захотите послушать.
Навигатор выбирает маршрут. Сайт пытается угадать, какой товар вас заинтересует. Банк анализирует подозрительные операции. Переводчик переводит текст. Автомобиль помогает удерживаться в полосе.
И всё это может использовать методы искусственного интеллекта. То есть ИИ — это не обязательно человекоподобный робот, который ходит по квартире и спрашивает:
«Сергей, где мой кофе?»
ИИ может выглядеть гораздо скучнее. Например, как строчка кода в огромной серверной системе.
А теперь самое важное
До сих пор мы говорили об ИИ почти как о чём-то разумном. Мы говорили: компьютер учится; компьютер узнаёт кошку; компьютер понимает текст. Это удобные слова. Но здесь легко попасть в ловушку. Компьютер не учится так, как учится человек.
Когда вы изучаете новый предмет, вы можете понять идею, связать её с прошлым опытом, задать вопрос, почувствовать сомнение, изменить мнение. У нейросети всё происходит совершенно иначе. В основе лежит математика. Очень много математики.
Нейросеть получает числа. Выполняет огромное количество операций. Сравнивает результат с тем, который должен был получиться. Меняет свои параметры. И повторяет процесс.
Снова. И снова. И снова. И когда мы говорим: «Нейросеть научилась распознавать кошек», внутри не появляется маленькая цифровая кошка, которая внезапно осознала свою кошачью природу. Меняются числовые параметры системы.
И этих параметров может быть очень много. Очень. Очень. Настолько много, что если попытаться представить их все в виде ручек на пульте управления, у вас закончится место раньше, чем вы доберётесь до первого миллиарда.
И тут возникает странный вопрос
Если внутри всего лишь числа и математические операции... как из этого вообще получается что-то похожее на интеллект? Как система, которая работает с числами, может: узнать кошку; перевести текст; написать рассказ; решить задачу; описать фотографию; создать изображение; написать программу; поддерживать разговор?
И особенно интересно: как она может работать с языком? Ведь для нас слово — это не просто набор символов. Когда вы читаете слово «яблоко», у вас в голове возникает целый набор ассоциаций: красное, зелёное, круглое, сладкое, дерево, сад, яблочный пирог, Ньютон, и, возможно, воспоминание о том, как вы в детстве пытались сорвать яблоко с соседского дерева и совершенно случайно познакомились с владельцем сада.
Для компьютера никакого яблока в голове нет. Есть числа. И каким-то образом эти числа должны превратиться в структуру, с которой можно работать. А потом возникает ещё более удивительная вещь. Нужно научить машину не просто распознавать отдельные слова, а выстраивать между ними связи.
Почему в предложении:
«Маша положила яблоко на стол, потому что оно было тяжёлым»
слово «оно» относится к яблоку? Почему:
«Я зашёл в банк»
может означать совершенно разные вещи в зависимости от контекста? Почему:
«Он забил гол»
и
«Он забил гвоздь»
— это разные действия, хотя используется одно и то же слово?
И наконец: как из всего этого получается ChatGPT? Вот теперь мы подошли к настоящему началу нашей истории.
От калькулятора к искусственному интеллекту
Если очень сильно упростить весь путь, получится примерно такая цепочка: числа — математические операции — искусственные нейроны — нейронные сети — обучение на данных — огромное количество параметров — работа с текстом, изображениями, звуком и другими данными — современные модели ИИ На следующем этапе мы разберём первый настоящий кирпичик этой конструкции. Искусственный нейрон. И не пугайтесь названия.
На самом деле он гораздо проще, чем кажется. Можно даже представить его как очень примитивного охранника, который получает несколько сигналов, взвешивает их и решает:
«Пропускать или нет?»
Правда, охранник этот состоит из математики. А потом мы поставим рядом второго. Потом третьего. Потом тысячу. Потом миллион.
И посмотрим, как из толпы довольно тупых математических охранников постепенно получается система, способная делать вещи, которые снаружи выглядят почти разумными.
Глава 2. Компьютер, который учится на ошибках
В первой главе мы выяснили довольно странную вещь. Искусственный интеллект — это не маленький электронный человечек, который сидит внутри компьютера и размышляет о смысле жизни. В основе всего — математика, данные и огромное количество вычислений.
Но тогда возникает главный вопрос: как именно компьютер учится? Потому что человеку это понятно. Ребёнку показывают собаку:
— Это собака.
Показывают кошку:
— Это кошка.
Показывают снова собаку:
— Собака.
Через некоторое время ребёнок начинает узнавать их самостоятельно. Правда, иногда он может назвать овчарку «лошадью», но это уже отдельная история. А как объяснить компьютеру, что именно он сделал неправильно?
Представим очень глупую машину
Допустим, у нас есть компьютер, который должен отличать кошек от собак. Но пока он ничего не умеет. Показываем ему фотографию: кошка Компьютер смотрит на неё своими электронными глазами и выдаёт: Собака. Мы:
Нет.
Компьютер: Хорошо. Следующая фотография: собака Компьютер: Кошка. Мы: Опять нет. Компьютер: Понятно. Следующая: кошка Компьютер: Собака.
Мы: ТЫ СЕРЬЁЗНО? Компьютер: Я стараюсь. В этом месте человеку очень хочется сказать:
«Да ты просто посмотри внимательнее!»
Но компьютер не знает, как именно посмотреть внимательнее. Ему нужен механизм, который позволит исправлять свои ошибки. И вот здесь начинается обучение.
Ошибка — это не проблема. Это информация
Представьте, что вы стреляете в мишень. Первый выстрел: мимо. Второй: ещё дальше. Третий: почти попали. Что вы делаете?
Меняете прицел. Если выстрел ушёл вправо — немного двигаете прицел влево. Если ушёл вверх — корректируете вниз. И снова стреляете. Через некоторое количество попыток вы начинаете попадать.
Обучение нейросети устроено похожим образом. Она делает предположение. Получает правильный ответ. Сравнивает своё предположение с правильным ответом. Видит ошибку.
И немного меняет свои внутренние параметры. Потом пробует снова.
Но что именно она меняет? Вот здесь появляются веса. Помните нашего искусственного нейрона? Он получает несколько входных сигналов. Например: размер объекта; форма ушей; цвет; форма морды.
Но каждый сигнал для него важен по-разному. Форма ушей может быть очень полезной. Цвет — гораздо менее полезным. Поэтому каждому входу можно назначить определённый вес. Условно:
Уши × 0,8
Форма морды × 0,9
Цвет × 0,1
Размер × 0,4
Это не настоящие значения — просто пример. Вес показывает, насколько сильно данный сигнал влияет на результат. И вот обучение заключается в том, что нейросеть постепенно подбирает эти веса.
Представьте пульт с миллионами ручек
Это, пожалуй, одна из самых полезных картинок для понимания нейросетей. Представьте огромный пульт управления. На нём миллионы ручек. Одна отвечает за один параметр. Другая — за другой.
Третья — за что-то настолько мелкое, что мы даже не знаем, как это назвать. Вы показываете нейросети фотографию. Она выдаёт: 87% — собака. А правильный ответ: кошка. Значит, что-то настроено неправильно.
И система пытается понять, какие ручки и в какую сторону нужно немного повернуть, чтобы в следующий раз результат был лучше. Повернули. Показали следующую фотографию. Снова ошибка. Повернули ещё немного.
Снова проверили. И так огромное количество раз. Причём не один раз в секунду. А миллионы и миллиарды вычислительных операций. Вот это и называется обучением.
Но откуда компьютер знает, насколько он ошибся? Очень хороший вопрос. Представим, что нейросеть должна определить число от 0 до 1. Например:
0 = собака
1 = кошка
Показываем кошку. Правильный ответ:
1
А нейросеть сказала:
0,2
Она сильно промахнулась. Теперь показываем другую кошку. Нейросеть сказала:
0,8
Уже гораздо лучше. Ещё одна:
0,99
Прекрасно. То есть можно ввести специальную математическую величину, которая показывает: насколько результат отличается от правильного. Эту величину называют функцией потерь, или loss function. Название немного драматичное.
Будто нейросеть переживает личную трагедию. На самом деле это просто число, которое говорит:
«Насколько плохо ты сейчас справилась с задачей?»
Чем меньше это число — тем лучше.
Теперь начинается самое интересное
Допустим, нейросеть ошиблась. Мы знаем: результат должен быть другим. Но нужно понять: какие именно веса виноваты в ошибке? В большой нейросети их может быть миллионы, миллиарды и больше. Это всё равно что сказать: «Машина приехала не туда. Найдите, какая из нескольких миллиардов настроек маршрута привела к ошибке».
Вручную это сделать невозможно. Поэтому здесь в игру вступает математика. Система вычисляет, как изменение каждого параметра повлияет на ошибку. И затем немного корректирует параметры. Этот процесс связан с тем, что называют обратным распространением ошибки, или backpropagation.
Звучит так, будто сейчас будет очень сложно. Но идея на самом деле довольно простая. Ошибка появилась на выходе. Мы идём назад по сети и выясняем, какой вклад в неё внесли предыдущие элементы. После этого немного исправляем их.
Представим склон
Есть ещё одна замечательная аналогия. Вы стоите на огромной горе. Вокруг темно. Вам нужно попасть в самую низкую точку долины. Но карту вам никто не дал.
Что делать? Можно сделать маленький шаг. Проверить: Здесь стало ниже или выше? Если ниже — продолжить в этом направлении. Если выше — попробовать другое.
И постепенно спускаться вниз. Именно поэтому один из важнейших методов обучения нейросетей называется градиентным спуском. Мы ищем направление, в котором ошибка уменьшается. Не прыгаем сразу в идеальное решение. Делаем маленькие шаги.
Снова проверяем. И снова.
Почему нельзя просто исправить всё сразу? Потому что нейросеть — это огромная система взаимосвязанных параметров. Представьте оркестр. Если скрипка играет слишком громко, можно просто сделать её тише. Но если вы одновременно меняете громкость всех инструментов, задерживаете барабанщика на полсекунды и заставляете трубача играть в два раза быстрее, музыка может стать... интересной.
Но не обязательно хорошей. В нейросети похожая ситуация. Изменение одного параметра может повлиять на множество последующих вычислений. Поэтому обучение обычно идёт постепенно. Чуть-чуть изменили.
Проверили. Ещё чуть-чуть. Проверили. И снова.
А теперь представим настоящее обучение
Допустим, мы хотим обучить нейросеть распознавать кошек. У нас есть: 10 миллионов фотографий. На каждой фотографии заранее известно, что изображено. Кошка. Собака.
Лошадь. Машина. Человек. Нейросеть получает фотографию. Делает прогноз.
Сравнивает его с правильным ответом. Вычисляет ошибку. Корректирует параметры. Берёт следующую фотографию. И повторяет процесс.
Снова. И снова. И снова. После обработки огромного количества примеров параметры сети постепенно меняются. И результат становится лучше.
В какой-то момент мы показываем ей новую фотографию, которую она никогда раньше не видела. И она говорит: Кошка — 97%. Вот здесь и появляется настоящее ощущение магии. Но никакой магии нет. Она просто обнаружила закономерности, которые оказались полезными для решения задачи.
Самое интересное: мы не говорили ей, что искать
Вот это принципиальный момент. Мы не обязаны программировать: «Кошка имеет два глаза». «Кошка имеет уши». «У кошки есть нос». «Если уши треугольные — это кошка».
Мы просто даём ей примеры. А система сама подбирает внутренние параметры, которые позволяют хорошо разделять категории. И здесь есть один очень важный нюанс. Мы сами не всегда можем сказать, что именно она выучила. Может оказаться, что нейросеть нашла какую-нибудь закономерность, которую человек вообще не заметил.
Например, на фотографиях кошек почему-то чаще оказывается определённый фон. И нейросеть решает: «О! Фон очень полезен». А потом ей показывают кошку на белой стене. И она: «Не уверен. Это, наверное, табуретка».
Вот почему данные для обучения так важны. Но об этом мы поговорим чуть позже.
А можно ли обучить нейросеть чему угодно?
Нет.
И это важно понимать. Нейросеть не волшебный мозг, который можно посадить перед компьютером и сказать: «Ну-ка, разберись во всём». Она зависит от: данных, архитектуры, задачи, качества обучения и вычислительных ресурсов.
Если дать ей плохие данные, она может научиться плохим закономерностям. Если дать мало данных, ей может не хватить информации. Если задача слишком сложная, простой модели может оказаться недостаточно. И ещё одна проблема:
нейросеть может научиться запоминать вместо того, чтобы действительно обобщать.
Когда отличник просто выучил ответы
Представьте школьника. Вы дали ему тысячу задач и правильные ответы. Он заучил все тысячу. На экзамене ему попадаются ровно те же задачи. Он получает: 100 баллов.
Вы говорите: «Вот это умный человек». А потом даёте ему задачу, сформулированную немного иначе. Он смотрит. Молчит. Смотрит ещё минуту.
И наконец: «А этого вопроса в списке не было». С нейросетями может происходить нечто похожее. Если модель просто запомнила обучающие примеры, это ещё не означает, что она научилась хорошо решать задачу. Нам нужно, чтобы она обобщала.
То есть могла применить найденные закономерности к новым данным. Именно поэтому после обучения модель проверяют на примерах, которых она раньше не видела.
А теперь увеличим всё это до безумных масштабов
До сих пор мы говорили о небольшой нейросети. Но современные модели могут быть огромными. Вместо нескольких нейронов — огромное количество вычислительных элементов. Вместо тысячи примеров — гигантские объёмы данных. Вместо нескольких параметров — миллиарды параметров и больше.
И вместо одной задачи «кошка или собака» мы можем поставить гораздо более сложную цель. Например: предсказывать, какой текст должен идти дальше. Вот здесь наша история начинает постепенно приближаться к ChatGPT. Но прежде чем компьютер научится работать с человеческим языком, ему нужно каким-то образом этот язык увидеть.
Для нас текст — это слова и предложения. Для компьютера — числа. Каждое слово, каждый кусочек слова, каждая последовательность превращается в математическое представление. И тогда возникает совершенно удивительная картина.
Мы можем взять огромный объём человеческого текста и превратить его в данные, на которых будет учиться нейросеть. Она будет снова и снова пытаться предсказать правильное продолжение. Ошибка. Корректировка. Следующий пример.
Ошибка. Корректировка. Ещё пример. И так — невероятное количество раз. Постепенно система начинает улавливать закономерности языка.
Не потому, что ей объяснили школьную грамматику. Не потому, что внутри сидит преподаватель русского языка. А потому, что язык сам по себе содержит огромное количество закономерностей.
Но пока мы слишком рано забежали вперёд
Мы уже знаем несколько важных вещей. Первое. Нейросеть не получает готовый интеллект. Она начинает с параметрами, которые сами по себе ничего особенно полезного не делают. Второе.
Мы показываем ей данные и правильные ответы. Третье. Она делает прогноз. Четвёртое. Мы измеряем ошибку.
Пятое. Параметры немного корректируются. Шестое. Процесс повторяется огромное количество раз. Всё.
Вот из таких довольно простых шагов и складывается обучение. Конечно, настоящие системы намного сложнее. Но фундаментальная идея именно такая.
И вот тут появляется маленькая проблема
Мы сказали: «Нейросеть получает данные». Хорошо. Но что такое данные для нейросети? Человек видит фотографию кота. Компьютер не видит кота.
Он видит набор чисел. Человек читает: «Сегодня прекрасная погода». Компьютер не слышит в голове голос автора. Для него это последовательность числовых представлений. А значит, прежде чем мы разберёмся, как ChatGPT работает с текстом, нам придётся ответить на очень странный вопрос:
как превратить смысл, изображение или слово в числа? И вот здесь начинается следующая часть нашего путешествия. Но сначала нам нужно познакомиться с тем самым маленьким математическим кирпичиком, из которого строится вся эта огромная конструкция.
С искусственным нейроном. И обещаю: он окажется гораздо менее страшным, чем звучит его название.
Бесплатный фрагмент закончился.
