Разное

Искусственный интеллект программирование: Создание искусственного интеллекта / Хабр

Содержание

Создание искусственного интеллекта / Хабр

Пока программисты могут зарабатывать программированием, то существующие ИИ это не ИИ, какой бы фантик на них не был бы навешен. Предлагаемый мной вариант может решить этот вопрос.

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

Что такое ИИ, об этом уже много было написано. Я ставлю вопрос по другому, не «что такое ИИ», а «зачем нужен ИИ». Мне он нужен, что бы заработать много денег, затем что бы компьютер выполнял за меня все, что я сам не хочу делать, после построить космический корабль и улететь к звездам.

Вот и буду здесь описывать, как заставить компьютер выполнять наши желания. Если вы ожидаете здесь увидеть описание или упоминание, как работает сознание, что такое самосознание, что значит думать или рассуждать — то это не сюда. Думать — это не про компьютеры. Компьютеры рассчитывают, вычисляют и выполняют программы. Вот и подумаем, как сделать программу, способную рассчитать необходимую последовательность действий для реализации наших желаний.

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


Утверждать, что для того, что бы создаваемый ИИ мог распознавать изображения и звук, в него изначально должны быть включены такие алгоритмы, это все равно что утверждать, что всякий человек, который таковые создал, от рождения знали как работают такие программы.

Сформулируем аксиомы:

1. Все в мире можно посчитать по каким-нибудь правилам. (про погрешности позже)

2. Расчет по правилу, это однозначная зависимость результата от исходных данных.

3. Любые однозначные зависимости можно находить статистически.

А теперь утверждения:

4. Существует функция преобразования текстовых описаний в правила — что бы не нужно было искать уже давно найденные знания.

5. Существует функция преобразования задач в решения (это исполнялка наших желаний).

6. Правило прогнозирования произвольных данных включает в себя все остальные правила и функции.

Переведем это на язык программиста:

1. Все в мире можно посчитать по каким-нибудь алгоритмам.

2. Алгоритм всегда при повторении исходных данных дает одинаковый результат.

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

4. Существует алгоритмы конвертации текстовых описаний в алгоритмы (или любых других информационных данных) — чтобы не искать потребные алгоритмы статистически, если их уже кто-то когда-то нашел и описал.

5. Можно создать программу, которая будет исполнять наши желания, будь они в текстовом или голосовом виде, при условии, что эти желания реализуемы физически и в потребные рамки времени.

6. Если умудриться создать программу, которая умеет прогнозировать и учиться прогнозированию по мере поступления новых данных, то по истечении бесконечного времени такая программа будет включать все возможные в нашем мире алгоритмы. Ну а при не бесконечном времени для практической пользы и с некоторой погрешностью ее можно заставить выполнять алгоритмы программы п.5 или любые другие.

И еще, ИМХО:

7. Другого способа полностью самостоятельного и независимого от человека обучения, кроме как поиска перебором правил и статистической проверки их на прогнозировании, не существует. И нужно только научиться использовать это свойство. Это свойство является частью работы мозга.

Что нужно прогнозировать. В человеческий мозг от рождения начинает поступать поток информации — от глаз, ушей, тактильные и пр. И все решения принимаются им на основании ранее поступивших данных. По аналогии, делаем программу, у которой есть вход новой информации по одному байту — входной побайтовый поток. Все что поступило ранее, представляется в виде одного сплошного списка. От 0 до 255 будет поступать внешняя информация, и свыше 255 будем использовать как специальные управляющие маркеры. Т.е. вход позволяет записать скажем до 0xFFFF размерность числа. И именно этот поток, а точнее очередное добавляемое число информации и нужно научиться прогнозировать, на основании поступавших до этого данных. Т.е. программа должна пытаться угадать, какое будет добавлено следующее число.

Конечно возможны и другие варианты представления данных, но для целей, когда на вход поступают самые различные форматы, попросту туда по началу запихиваем различные html с описаниями, этот наиболее оптимальный. Хотя маркеры можно заменить на эскейп последовательности в целях оптимизации, но объяснять с ними менее удобно. (А так же, представим, что все в ASCII, а не UTF).

Итак, сначала как и при рождении, пихаем туда все подряд интернет-страницы с описаниями и разделяем их маркером нового текста — <NewPage> — что бы этот черный ящик учился всему подряд. Маркеры я буду обозначать тегами, но подразумевается, что они просто какое-то уникальное число. По прошествии некоторого объема данных, начинаем манипулировать входящей информацией с помощью управляющих маркеров.

Под прогнозированием я понимаю такой алгоритм, который знает не только какие закономерности уже были, но и ищет постоянно новые. И потому если на вход такой программе послать последовательность
<BEG>небо<ANS>синие<END>

<BEG>трава<ANS>зеленная<END>

<BEG>потолок<ANS>…
, то он должен сообразить, что за маркером <ANS> следует цвет от указанного ранее объекта, и на месте многоточия спрогнозирует наиболее вероятный цвет потолка.

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

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

Другой пример, можно после первого маркера указывать вопрос, а во втором ответ, и тогда будь этот алгоритм супер-мега-крутым, он должен начать давать ответы даже на самые сложные вопросы. Опять же, в пределах уже изученных фактов.

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

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

Однозначное отображение исходных данных на результат по алгоритму, это соответствует математическому определению слова функция, за исключением того, что к определению алгоритма не налагается определенность в количестве и размещении входных и выходных данных. Так же пример, пусть будет маленькая табличка: объект-цвет, в нее занесем множество строк: небо-синее, трава-зеленная, потолок-белый. Это получилась маленькая локальная функция однозначного отображения. И не важно, что в действительности не редко цвета не такие — там будут другие свои таблицы. И любая база данных, содержащая запомненные свойства чего-либо, является множеством функций, и отображает идентификаторы объектов на их свойства.

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

И описание буду давать примерное, т.к. в реальности реализовать все это я пока… Но оно все логично. А так же следует учитывать, что все расчеты ведутся коэффициентами, а не истина или ложь. (возможно даже если явно указано что истина и ложь).

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

struct t_node {
	int type; // 0 - условие, 1 - результат
	union {
		struct { // оператор условия
			t_node* source_get;
			t_value* compare_value;
			t_node* next_if_then;
			t_node* next_if_else;
		};
		struct { // оператор результата
			t_node* dest_set;
			t_value* result_value;
		};
	}
};

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

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

Кроме условия на применимость, есть еще дистанции. Между исходными данными, и результатными, и эта дистанция бывает различной, при одной и той же функции, применяемой в зависимости от условия. (И от условия до исходной или прогнозируемой то же есть дистанция, ее будем подразумевать, но опускать при объяснениях. И дистанции бывают динамическими).

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

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

Это идет поиск одиночных фактов корреляции. Накопив кучу таких одиночных, пытаемся объединить их в группы. Смотрим, из которых можно выделить общее условие и общую дистанцию от исходного значения к результату. А так же, проверяем, что при таких условиях и дистанциях, в других случаях, где идет повторение исходного значения, не идет широкое распределение результатного. Т.е. в известных частых употреблениях, оно высокотождественно.

Коэффициент тождественности. (Здесь двунаправленная тождественность. Но чаще она однонаправленная. Позже переобдумаю формулу.)

Количество каждой пары XY в квадрат и суммируем.

Делим на: сумма количеств в квадрате каждого значения X плюс сумма количеств в квадрате Y минус делимое.

Т.е. SUM(XY^2) / (SUM(X^2) + SUM(Y^2) — SUM(XY^2)).

Этот коэффициент от 0 до 1.

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

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

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

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

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

Получается, что каждый новый параметр у многопараметрических находится с той же линейностью, что и образование из единичных фактов в однопараметрические (ну или почти с той же). Т.е. нахождение N-параметрической пропорционально N. Что в стремлении к очень много параметрам становится почти нейронной сеткой. (Кто захочет, тот поймет.)

Конвертационные функции.

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

Вот мы взяли нашли одну какую-то функцию, и путь между данными. Вторую и третью. Теперь смотрим, можем ли среди них, у каких-либо найти у путей общую часть. Попытаться найти структуры X-P1-(P2)-P3-Y. А потом, найти еще другие подобные структуры, с подобными X-P1 и P3-Y, но различающимися P2. И тогда мы можем заключить, что имеем дело со сложной структурой, между которыми существуют зависимости. А множество найденных правил, за вычетом серединной части, объединим в групп и назовем конвертационной функцией. Таким образом образуются функции перевода, компиляции, и прочие сложные сущности.

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

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

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

Функции о которых я говорил, на самом деле не просто находимый единый кусок алгоритма, а могут состоять из последовательности других функций. Что в свою очередь не вызов процедуры, а последовательность преобразований, типа как в linux работа с pipe. Для примера, я грубо описывал прогнозирование сразу слов и фраз. Но что бы получить прогноз только символа, к этой фразе нужно применить функцию взятия этого одного символа. Или функция научилась понимать задачи на английском, а ТЗ на русском. Тогда РусскоеТЗ->ПеревестиНаАнглийский->ВыполнитьТЗнаАнглийском->Результат.

Функции могут быть не фиксированными в определении, и доопределяться или переопределяться по мере поступления дополнительной информации или при вообще изменении условий — функция перевода не конечная, и к тому же может меняться со временем.

Так же на оценку вероятностей влияет повторяемость одного множества в разных функциях — образует или подтверждает типы.

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

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

Еще нюансы. Прогнозирование состоит из двух уровней. Уровень найденных правил и уровень поиска новых правил. Но поиск новых правил по сути то же программа со своими критериями. И допускаю (хотя пока не продумывал), что может быть все проще. Что нужен нулевой уровень, который будет искать возможные алгоритмы поиска во всем их многообразии, которые уже в свою очередь будут создавать конечные правила. А может быть это вообще многоуровневая рекурсия или фрактал.

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

Есть другой способ определения функции в этом механизме — выдать функцию через определение. Например:
<QUERY>Перевести на английский<PARAM>стол<RES>table<END>

<QUERY>Ответить на вопрос<PARAM>цвет неба<RES>синий<END>

<QUERY>Создать программу по ТЗ<PARAM>хочу искусственный интеллект<RES>…

Использование этой системы для решения наших задач состоит в следующем алгоритме. Делаем описание определения специального идентификатора для описания задач. Потом, создаем описание задачи и присваиваем ей новый идентификатор. Делаем описание допустимых действий. К примеру (хоть и не практично) непосредственно команды процессора — описания из интернета, а к компьютеру подключены манипуляторы, которыми через порты можно управлять. И после, мы у системы можем спрашивать, какое нужно выполнить следующее действие, для приближения задачи к решению, ссылаясь на задачу по идентификатору. А так же через раз спрашивать, не нужно ли какой дополнительно информации необходимой для дальнейшего расчета действий — информации по общим знаниям или по текущему состоянию решения задачи. И зацикливаем запросы действий и запросы информации в какой-нибудь внешний цикл. Вся эта схема строится на текстовых определениях, и потому может быть запущена посредством функций получаемых по определению. А выход — только лишь команды — отпадает вопрос многовероятности текстов. Вопрос масштабов необходимого прогнозирования сейчас не обсуждается — если будет необходимый и достаточный функционал прогнозирования — по логике оно должно работать.

Если кто в ИИ видит не способ решения задач, а какие-либо характеристики человека, то можно сказать, что человеческое поведение и качества так же являются расчетными и прогнозируемыми. И в литературе есть достаточно описаний того или иного свойства. И потому, если в системе мы опишем, которое из свойств хотим, то она в меру знаний будет его эмулировать. И будет воспроизводить либо абстрактное усредненное поведение, либо со ссылкой на конкретную личность. Ну или если хотите, можно попробовать запустить сверхразум — если дадите этому определение.

Прогнозировать можно что-то, что происходит по истечению какого-то времени. Объекты движутся со скоростями и ускорениями, и всякие другие возможные изменения чего-либо со временем. Прогнозировать можно и пространство. Для примера, вы заходите в незнакомую комнату, в которой стоит стол, у которого один из углов накрыт листом бумаги. Вы это угол не видите, но мыслено можете спрогнозировать, что он вероятней всего такой же прямоугольный, как и другие углы (а не закругленный), и цвет этого угла такой же как и у других углов. Конечно, прогнозирование пространства происходит с погрешностями — вдруг тот угол стола обгрызенный, и на нем пятно краски. Но и прогнозирование временных процессов тоже всегда с погрешностями. Ускорение свободного падения на земле не всегда 9.81, а зависит от высоты над уровнем моря, и от рядом стоящих гор. И измерительные приборы вы никогда не сможете сделать абсолютно точными. Т.е. прогнозирование пространства и процессов во времени всегда происходит с погрешностями, и у различных прогнозируемых сущностей различные погрешности. Но суть одинакова — алгоритмы, находимые статистически.

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

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

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

Будет ли он искать исследования целенаправленно без постановки такой задачи? Нет, потому что у него нету собственных желаний, а только поставленные задачи. То, что у нас отвечает за реализацию собственных желаний и интересов, это у нас называется личность. Можно и у компьютера запрограммировать личность. И будет ли она подобна человеческой, или какой-то компьютерный аналог — но это все равно останется всего лишь поставленной задачей.

А наша творческая деятельность в искусстве, это те же исследования, только ищутся сущности, затрагивающие наши эмоции, чувства и разум.

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

Альтернативным направлением реализации прогнозирования является использование рекуррентных нейронных сетей (скажем сеть Элмана). В этом направлении не нужно задумываться о природе прогнозирования, но там множество своих трудностей и нюансов. Но если это направление реализовать, то остальное использование остается прежним.

Выводы по статье:

1. Прогнозирование является способом находить все возможные алгоритмы.

2. С помощью манипуляции входом прогнозирования можно эти алгоритмы от туда вытаскивать.

3. Это свойство можно использовать, что бы разговаривать с компьютером.

4. Это свойство можно использовать, что бы решать любые задачи.

5. ИИ будет тем, как вы его определите, и после определения его можно решить как задачу.

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

Другие начнут утверждать, что в мозге биллионы клеток нацеленных на распараллеливание. Тогда вопрос, каким образом задействуются эти биллионы при попытке без учебника на примерах изучить иностранный язык? Человек будет долго сидеть над распечатками и выписывать коррелирующие слова. В то же время, один компьютер это будет пачками делать за доли секунды.

И анализ изображений — двинте десяток бильярдных шаров и посчитайте сколько будет столкновений. (закрывшись от звука). А два десятка или три… И причем здесь биллионы клеток?

В общем, быстродействие мозга и его многопараллельность — это очень спорный вопрос.

Когда вы думаете о создании думающего компьютера, вы копируете в него то, чему человек научился в течении жизни, и не пытаетесь понять, а каковы механизмы, позволяющие это накопить от стартовой программы — пожрать и поспать. И эти механизмы основываются отнюдь не на аксиомах формальной логики. Но на математике и статистике.

PS: проголосуйте в голосовалке. Задумайтесь, перечитайте и проголосуйте. Не будьте воздержавшимися. Если нужны более детальные ответы — обращайтесь.

PPS: мое мнение, что научного определения термина «Искусственный интеллект» не существует. Существует только научно-фантастическое. А если нужна реальность, то см. п.5 в выводах по статье.

PPPS: Я много разных интерпретаций понял гораздо позже уже после написания статьи. Скажем, что поиск зависимости вопрос-ответ является аппроксимацией. Или каковы более точные научные определения вытаскивания нужной функции из многообразия найденных в процессе поиска функций прогнозирования. На каждый маленький момент понимания нельзя написать отдельную статью, а на все в общем нельзя, потому что не объединить в один заголовок. И все эти понимания, дают ответ, как получать от компьютерных вычислительных мощностей ответы на задаваемые вопросы, ответы на которые не всегда можно прочитать в существующих описаниях, как скажем для проекта Watson. Как создать программу, которая по одному упоминанию, или движению пальца, пытается понять и сделать то, что от нее хотят.

Когда нибудь такая программа будет сделана. И назовут ее очередным гаджетом. А не ИИ.

****

Исходники по этой теме, а так же дальнейшее развитие представления можете найти на сайте http://www.create-ai.org

Как создают искусственный интеллект: от кода до робота

Наверх

  • Рейтинги
  • Обзоры

    • Смартфоны и планшеты
    • Компьютеры и ноутбуки
    • Комплектующие
    • Периферия
    • Фото и видео
    • Аксессуары
    • ТВ и аудио
    • Техника для дома
    • Программы и приложения
  • Новости
  • Советы

    • Покупка
    • Эксплуатация
    • Ремонт
  • Подборки

Нейросеть DeepCoder учится программировать, заимствуя код у других программ / Хабр

Условная матрица неточностей для нейросети и тестового набора из 500 программ длиной в 3 строчки. Каждая ячейка содержит среднюю вероятность ложно-положительного результата (крупным шрифтом) и количество тестовых программ, из которых это значение выведено (меньшим шрифтом, в скобках). Насыщенность цвета коррелирует с вероятностью ложно-положительного результата

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


В итоге вся работа станет гораздо более продуктивной: «Люди смогут создавать системы, которые было невозможно создать раньше», — считает независимый эксперт Армандо Солар-Лезама (Armando Solar-Lezama) из Массачусетского технологического института, в комментарии для New Scientist.

Исследователи из Microsoft и Кембриджского университета разработали систему под названием DeepCoder, которая уже сейчас правильно решает простые задачи со школьных конкурсов по программированию. DeepCoder использует технику под названием «программный синтез» (Inductive Program Synthesis), которая известна многим разработчикам. Она заимствует строчки кода из других программ — и составляет свою собственную уникальную программу. Важно иметь в виду, что DeepCoder как и другие системы программного синтеза использует предметно-ориентированный язык (DSL), специализированный для конкретной области применения. Его можно назвать «мини-язык» или «урезанный язык программирования». Он содержит только девять функций первого порядка:

HEAD, LAST, TAKE, DROP, ACCESS, MINIMUM, MAXIMUM, REVERSE, SORT, SUM

и пять функций высшего порядка:

MAP, FILTER, COUNT, ZIPWITH, SCANL1

Сфера применения предметно-ориентированный языка ограничена относительно языков программирования общего назначения.

Выбор строчек для составления программы осуществляется после анализа входных и выходных значений каждого фрагмента кода. В научной работе можно изучить девять примеров 5-строчных программ, которые написала нейросеть DeepCoder. Например, вот решение задачки про конфеты (слева) с текстовым описанием (справа) и входящими значениями (по центру):

В поиске подходящих строчек кода DeepCoder превосходит человека: он способен проиндексировать и проанализировать гораздо больше исходников, чем способен человек. Система машинного обучения учится понимать, как использовать эти образцы — и заранее составляет базу. Кроме того, нейросеть соединит найденные строчки таким способом, каким никогда не придёт в голову соединить их живому человеку. Методом проб и ошибок нейросеть постепенно учится добиваться поставленной цели. Данная реализация программного синтеза в системе DeepCoder получила название Learning Inductive Program Synthesis (LIPS).

Схематическое представление кодера с прямой связью и декодера DeepCoder

На иллюстрации ниже показано, как нейросеть DeepCoder предсказывает вероятность появления каждой функции в исходном коде.

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

Программы из пяти строчек кода генерируются на порядок медленнее. На графике справа показана зависимость скорости от длины программы.

По мере обучения система понимает, какие комбинации кода работают, а какие нет. Она совершенствуется в программировании с каждой новой задачей.

Технологию потенциально можно использовать для рефакторинга и поиска багов в программах. Она найдёт некорректные строчки и заменит их на правильные строчки из других программ. Авторы считают, что с её помощью легко создавать рутинные программы в стиле знаменитой IFTTT — автоматизировать базовые взаимодействия между разными веб-сервисами. Даже непрограммист может составить простые инструкции вроде выбора фотографий с Facebook и сортировки по заданным критериям. Такие простые программы можно будет создавать за минуты без знания программирования.

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

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

По крайней мере, в ближайшие несколько лет большинству программистов не грозит потеря работы из-за автоматизации кодинга. Но методы машинного обучения очень быстро совершенствуются. Поразительно, как много сделано в этой области в последнее время.

Все публикации в потоке Разработка / Хабр

Certified Network Defender (CND) следующий уровень после Certified Encryption Specialist (ECES). Курс и сертификация намного более популярные, сложные, интересные и уже требуют определенный опыт работы с сетью. Для меня это была вторая сертификация в EC-Council, а мои коллеги пошли сразу на CEH.
Как и в прошлый раз статья не ограничится только экзаменом, а будет дополнительная информация охватывающая некоторые организационные моменты.

О сертификации и о курсе

Полная информация доступна на официальном сайте.
CND это около 1500 страниц учебника, официальный курс на 40 академических часов, экзамен на 4 часа, 100 вопросов и проходной балл от 60% до 85% в зависимости от пула вопросов (проходной балл будет указан непосредственно перед экзаменом, у меня он был 70%).
Курс состоит из 14 модулей:

  • Основы компьютерных сетей и подходы к их защите;
  • Угрозы сетевой безопасности, уязвимости и атаки;
  • Управление сетевой безопасностью, протоколы и устройства;
  • Проектирование и внедрение политики сетевой безопасности;
  • Физическая безопасность;
  • Безопасность хостов;
  • Проектирование и конфигурирование межсетевых экранов;
  • IDS. Проектирование и конфигурирование систем обнаружения вторжений;
  • VPN. Проектирование и конфигурирование виртуальных частных сетей;
  • Wi-Fi. Защита беспроводных сетей;
  • Мониторинг и анализ сетевого трафика;
  • Риски и управление уязвимостями;
  • Резервное копирование и восстановление данных;
  • Управление реагированием на инциденты.

Я не заметил чтобы CND в материалах или в вопросах на экзамене как-то пересекался с ECES, но вот с CEH имеется очень крепкая связь, который практически является CND + хакерские техники и инструменты.
Учебным центром выдается ключ для личного кабинета Aspen, учебные материалы и ваучер на экзамен действительны 1 год.

С чего начать изучение искусственного интеллекта?

Машинное обучение и искусственный интеллект уже давно и прочно вошли в повседневную жизнь. Однако специалистов в этой области до сих пор очень мало. С чего же начать изучение сферы ИИ? На этот вопрос ответили пользователи сайта Quora.

 

Шриканс Варма Чекури, преподаватель и исследователь в сфере машинного обучения

Я работаю преподавателем онлайн-курса по изучение искусственного интеллекта и машинного обучения. Этот курс создан для новичков, у которых нет никаких знаний в данной сфере, которые, однако, готовы на протяжении 5-6 месяцев тратить 5-10 часов в неделю на изучение машинного обучения. По окончании данного курса многие наши студенты действительно решают существующие задачи при помощи ИИ\МО.

Работа курса построена следующим образом:

Мы начинаем с базовых знаний об Python, включая изучение крупных библиотек данных, таких как NumPy, SciPy, MatPlotlib, Seaborn и др. Среди множества языков программирования мы выбираем Python (а не Java или, к примеру, R), потому что этот язык достаточно легко изучить. Кроме того, для него существует огромное количество отличных библиотек для ИИ\МО.

Как только усвоен базовый уровень программирования, участники курса учатся работать с данными, используя Python в качестве инструмента программирования. Данный этап носит название «Исследовательский анализ данных» и включает в себя использование инструментов для построения диаграмм, что облегчает работу с данными. На этом этапе изучаются базовые понятия, такие как гистограмма, PDF, CDF, точечная и прямоугольная диаграммы и другие. Анализу подвергаются реально существующие массивы данных. Благодаря использованию диаграмм для осуществления анализа данных, уже на начальных этапах обучения студенты могут увидеть результат проделанных ими исследований, что, несомненно, мотивирует их на дальнейшую работу.

После мы переходим к изучению статистики и теории вероятности. Данный блок информации воспринимается участниками курса легче, учитывая то, что на предыдущем этапе велась работа с данными. Участники курса знакомятся с такими понятиями, как распределение вероятностей, тестирование гипотезы, корреляция, доверительные интервалы и многое другое. При помощи простых примеров, разбавляющих «сухую» теорию, данная тема воспринимается намного лучше.

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

Теперь можно перейти непосредственно к основам машинного обучения. Мы используем Метод главных компонент (PCA) и алгоритм t-SNE для визуализации многомерных переменных. Однако в качестве базиса для извлечения математических деталей используется геометрия.

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

По моему опыту, изучение каждой отдельной техники необходимо сочетать с параллельной работой над действительно существующей задачей той же направленности. В нашем курсе изучается более 25 техник машинного обучения и 5 техник глубокого обучения.

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

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

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

 


Ражж Раж, разработчик ПО в компании Facebook

Искусственный интеллект – это область науки, которая предоставляет колоссальные возможности. Разве вам не хочется понять, как работают инструменты и системы, с которыми вы имеете дело каждый день? Однако разобраться в этом сможет далеко не каждый. Прежде чем углубиться в то, как компания Google стремится создать квантовый компьютер, вам необходимо разобраться с основами, а именно, с программированием. Для начала изучите хотя бы один язык программирования. К наиболее классным языкам я бы отнес Java , Python, C++, JavaScript и Ruby on Rails. Вот несколько отличных ресурсов, которые помогут вам начать:

Codecademy.com – полностью бесплатный вебсайт с интерактивными курсами, посвященными самым разным языками программирования. Присоединяйтесь к более чем 25-ти миллионам пользователей со всего мира и осваивайте новые знания. 

Codeavengers.com – научитесь создавать приложения, игры и вебсайты с помощью Code Avengers | Code Avengers. На этом сайте представлены онлайн-курсы и учебные пособия для множества языков программирования, включая Python, HTML & CSS, JavaScript. Кроме того, здесь можно найти руководство для новичков по освоению программирования.

Udacity – это ресурс со множеством инновационных курсов по программированию. Некоторые обучающие программы бесплатны, поэтому данный сайт отлично подойдет начинающим разработчикам.

«Чистый код» Роберт Мартин («Clean Code», by Robert C. Martin) – для тех, кому больше нравится читать. В данной книге можно найти огромное количество примеров с использование Java, однако они применимы также и к другим языкам программирования. Данное пособие обращает особое внимание на правильную организацию кода, поэтому оно может стать вашим пошаговым руководством в изучении возможностей, которые вам предоставляет программирование.

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

Xpath – отличный ресурс, который помогает вам создавать ботов и исследовать HTML.

Regex – онлайн-инструмент, который обучает обработке информации, полученной при помощи ботов.

Requests – упрощенный HTTP; отличная HTTP-библиотека для веб-разработчиков, которые хорошо знакомы с языком программирования Python.

Чат-боты: подробное руководство для начинающих («The Complete Beginner’s Guide to Chatbots») – содержит всю необходимую информацию о чатботах, о том, что это такое и как их создавать.

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

«Программируем коллективный разум» Тоби Сегаран («Programming Collective Intelligence» by Toby Segaran) – хоть эта книга и была написана задолго до того, как машинное обучение достигло нынешнего уровня популярности, однако в ней эта технология представлена в легко воспринимаемой форме. Ключевые темы: функции поисковой системы, методы совместного фильтрования, метод опорных векторов и байесовская фильтрация. Для описания машинного обучения используется Python.

«Машинное обучение» Том Митчелл ([PDF] «Machine Learning», by Tom Mitchell) – отличное вводное пособие, содержащее подробный обзор алгоритмов машинного обучения. В книге представлены несколько тематических исследований, сопровождаемых простыми примерам, которые облегчают читателю понимание алгоритмов.

«Машинное обучение. Новый искусственный интеллект» Этем Алпайдин («Machine Learning: The New AI», by Ethem Alpaydi) – это книга о том, как с развитием цифровых технологий от базовых мейнфреймов до смарт-девайсов машинное обучение стало одной из передовых технологий в области компьютерных наук. Кроме того, из данного пособия можно узнать базовую информацию о машинном обучении, а также то, каким образом данную технологию можно применять в отношении приложений.

Подводя итог, вот список тех областей, в которых у вас должно быть достаточно знаний, чтобы разобраться с искусственным интеллектом:

  • Высшая математика (например, алгоритм расчета коэффициента корреляции) и Статистика
  • Язык программирования
  • Машинное обучение
  • Терпение. Прежде всего вам необходимо просто море терпения.

Для изучения ИИ существует огромное количество курсов как в реальном, так и в онлайн-формате. Udacity.com, mit.edu, edX.org и saylor.org предлагают действительно крутые онлайн-курсы по этой теме:

«Введение в искусственный интеллект» на udacity.com («Intro to Artificial Intelligence») – этот состоящий из 10 уроков онлайн-курс позволяет новичкам окунуться в мир ИИ. Вы познакомитесь с такими понятиями, как компьютерное зрение, машинное обучение, обработка естественного языка, робототехника и теория игр. Чтобы освоить этот курс, необходимо обладать базовыми знаниями по линейной алгебре и теории вероятности.

«Искусственный интеллект» на edX.org («Artificial Intelligence») – для изучения базовых концептов ИИ можно использовать курс, представленный на сайте edX. Данный курс уделяет особое внимание статистической модели и модели теории принятия решений. Необходимы достаточные знания в математике, а также начальные знания и базовый опыт в программировании. В качестве основного языка используется Python. В рамках данного курса студенты научатся создавать автономных интеллектуальных агентов, которые запрограммированы на принятие рандомных решений, а также изучат приложения машинного обучения.

«Искусственный интеллект» от MIT OpenCourseWare («Artificial Intelligence»)– данный курс предоставит своим студентам исчерпывающие знания по методам обучения ИИ. По завершении данного курса вы будете знать основные способы сборки решений. Кроме того, вы взглянете на человеческий интеллект с точки зрения высоких технологий.

«Искусственный интеллект» от Saylor Academy («Artificial Intelligence Course») – в рамках данного курса студенты получат углубленные знания в области ИИ. Особое внимание уделяется таким темам, как машинное обучение, программирование искусственного интеллекта, робототехника, а также понимание естественного языка.  

«Искусственный интеллект: Принципы и методы» (Stanford University: «Artificial Intelligence: Principles & Techniques») – прекрасный учебный курс для тех, кто хочет узнать больше об искусственном интеллекте. Данный курс базируется на основополагающих принципах ИИ и включает в себя такие темы, как машинное обучение, Марковский процесс принятия решений, удовлетворение ограничений, а также графические модели. Главная цель курса – позволить студентам освоить различные инструменты, с помощью которых они смогут внедрить ИИ в повседневную практическую деятельность, тем самым решив ряд существующих проблем.

Помимо посвященных ИИ курсов, специалисты в сфере IT, а также изучающие компьютерные науки студенты могут расширить свои знания в данной теме при помощи соответствующей учебной литературы. Область искусственного интеллекта обладает огромным количеством интересных, а иногда и несколько запутанных вопросов и тем для изучения. Вот лишь некоторые из пособий, которые помогут вам разобраться в данной теме:

«Искусственный интеллект: современный подход», Стюарт Рассел и Питер Норвиг ([PDF] «Artificial Intelligence: A Modern Approach», by Stuart J. Russell and Peter Norvig) – в  первой части книги рассматриваются интеллектуальные агенты, далее можно найти информацию о теории принятия решений, а также раскрытие таких понятий, как «восприятие» и «рассуждение». В конце книги авторы оценивают общий потенциал данной технологии и дают прогноз на будущее.

«Революция Искусственного интеллекта – путь к Супер-интеллекту», Тим Урбан («The AI Revolution: Road to Superintelligence») – крайне детализированная и взвешенная статья, в которой автор пытается развеять некоторые из наиболее распространенных заблуждений, которые касаются сферы искусственного интеллекта.

«Искусственный интеллект на практике: программирование на Java», Марк Уотсон ([PDF] Practical Artificial Intelligence: Programming in Java , by Mark Watson) – будучи нацеленной как на любителей, так и на профессиональных программистов, данная книга учит читателя тому, как применять ИИ на практике. Каждая глава содержит технику обучения, немного теоретической информации об этой технике и пример на Java, который демонстрирует, как именно эта техника может быть использована.

«На пути к искусственному интеллекту», Нильс Нильсон ([PDF] The Quest for Artificial Intelligence, by Nils J. Nilsson) – в этой книге содержится все, что вам нужно знать об искусственном интеллекте с самого начала существования технологии (когда ИИ существовал еще только в форме концепта) и до наших дней.

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

Илон Маск об Искусственном Интеллекте (Elon Musk talks about Artificial Intelligence at MIT) – это дискуссия длительностью более часа, записанная в 2014 году на праздновании 100-летия со дня основания Кафедры аэронавтики и астронавтики Массачусетского технологического института. Обсуждение охватывает множество тем: от исследования Марса и роли НАСА в этом до предупреждений о существующей опасности со стороны ИИ, а также об электромобилях компании Tesla.

Обсуждение статуса и места искусственного интеллекта в нынешнем мире (Davos 2016, The State of Artificial Intelligence) – обстоятельное обсуждение, главной целью которого было найти ответ на крайне важные вопросы: «Насколько близко передовые технологии подошли к тому, чтобы навсегда изменить человеческий разум?» и «Какое влияние оказывает ИИ на развитие нынешней промышленности?».

Документальный фильм «Искусственный интеллект и робототехника» ([Documentary] Artificial Intelligence and Robotics) – «Внешность может быть обманчива» — и данный документальный фильм расскажет вам, почему этой пословице стоит верить. На протяжении многих десятилетий научная фантастика показывала нам роботов, готовых преданно служить человеку. Однако ИИ и роботы уже давно перестали быть всего лишь темой для научно-фантастических фильмов. Роботы борются за свое место в этом мире, диком и не прощающем ошибок. Современные технологии, такие как машинное обучение, программирование и глубокое обучение, дают нам надежду на то, что в скором времени роботы из лабораторий станут нашими полноправными соседями в реальном мире.

Илон Маск рассказывает об искусственном интеллекте в Стэнфордском университете (Elon Musk talks about artificial intelligence at Stanford University (2015)) – речь посвящена разным вопросам, обсуждение непосредственно ИИ начинается на 27 минуте. Илон Маск рассуждает о передовых технологиях, их месте в будущем, а также делает прогноз, что будет представлять собой искусственный интеллект через 25 лет.

Билл Гейтс и Илон Маск рассуждают о безопасности ИИ (Bill Gates and Elon Musk talk about AI safety) – оба оратора говорят об суперинтеллекте, ИИ, а также о том, что технологии делают для людей. Главная цель обсуждения – это обратить особое внимание на то, что необходимо сделать искусственный интеллект максимально безопасным. Маск уточняет, что создать и выпустить ИИ – это не так уж и сложно. Обеспечить его безопасность в дальнейшем – вот в действительности непростая задача. 

Искусственный интеллект давно перестал быть всего лишь плодом нашего воображения. На сегодняшний день данная технология более чем реальна. Мы высоко ценим таких виртуальных помощников, как Cortana, Siri и Google Now, за их вклад в нашу жизнь. Игровая индустрия использует искусственный интеллект для создания впечатляющих онлайн-продуктов, а автопромышленность на сегодняшний день стремится усовершенствовать самоуправляемые машины.

имитация интеллекта, обман и реальные достижения / Блог компании Mail.ru Group / Хабр

С каких пор программы научились выдавать себя за людей? Каким образом понять, искусная ли перед нами обманка или по-настоящему сильный ИИ? Когда программа справится с машинным переводом или напишет свой первый роман? Сергей oulenspiegel Марков, автор материала «Играть на уровне бога: как ИИ научился побеждать человека», возвращается к теме умных машин в нашей новой нейронной статье.

В конце 30-х годов прошлого века, когда еще не были созданы первые электронные вычислительные машины, вопросами «разумности» машин стали задаваться специалисты по computer science. Если нечто выглядит как кошка, мяукает как кошка, ведет себя как кошка, в любом эксперименте проявляет себя как кошка, то, наверное, это кошка. Эту идею сформулировал Альфред Айер — английский философ-неопозитивист, представитель аналитической философии.

Всеми нами любимый Алан Тьюринг был более социализирован, чем Айер. Тьюринг любил ходить на вечеринки, а в то время среди интеллектуальной публики была распространена интересная забава — «Игра в имитацию». Заключалась игра в том, что девушку и парня запирали в две разные комнаты, оставляя под дверью широкую щель, в которую участники игры могли просовывать записки с вопросами. Человек, который находился в комнате, писал на вопросы какие-то ответы. Задачей игры было угадать, в какой комнате находится парень, а в какой — девушка. Тьюринг предположил следующее: «А давайте мы будем похожую процедуру использовать для того, чтобы понять, создали ли мы тот самый универсальный ИИ».

Первая программа, которая могла общаться с человеком путем определенной переписки — это ELIZA, созданная в 1966 году. Программа пыталась выдать себя в эксперименте не просто за человека, а за психиатра. Ее стиль общения носит пародийный характер. То есть она говорит на специфическом психиатрическом жаргоне, задает соответствующие типовые вопросы. В принципе, эта программа представляет собой большой набор правил, по которому она находила определенные паттерны в речи человека. В ответ на наличие соответствующего паттерна входной информации, ELIZA определенным образом трансформировала его и выдавала информацию на выход.

Программа могла в некоторых ситуациях людей одурачить. Был проведен эксперимент «AOLiza», когда программа общалась через сеть America Online со случайно выбранными пользователями, и многие из них не догадывались, что в данном случае с ними общалась машина. Понятно, что этот эксперимент нельзя считать хоть каким-то серьезным приближением к прохождению теста Тьюринга.

Cамо название программы ELIZA произошло от имени героини Бернарда Шоу из пьесы «Пигмалион», повествующей о том, как лондонский профессор фонетики Генри Хиггинс пытается из девушки, представительницы общественных низов, сделать настоящую леди, обучая ее правилам поведения и языку высшего общества.

Интересно, что вторая программа такого рода (чат-бот), созданная в 1972 году Кеннетом Колбаем из Стэнфордского университета, была в своем роде шуточной дискуссией с авторами программы ELIZA. Она называлась PARRY. Если ELIZA пыталась выдать себя за врача, то программа PARRY пыталась выдать себя за пациента. PARRY считала себя параноидальным шизофреником.

Интересно, что программа хорошо обманывала профессиональных психиатров. В экспериментах оказалось, что 48% психиатров не в состоянии понять, имеют ли они дело с человеком или с программой. Но здесь, опять же, никакой чистоты эксперимента не было. Если у человека существуют определенные дисфункции, то его поведение может в некоторых ситуациях быть достаточно автоматическим.

Интересная разработка тех времен, которая произвела очень большое впечатление – это программа SHRDLU. Название SHRDLU образовано от ETAOIN SHRDLU — так расположены алфавитные клавиши на линотипах (в соответствии с убыванием частоты появления букв в английском языке). Как, к примеру, сейчас ЙЦУКЕН и ФЫВАПРОЛДЖ.

У SHRDLU был небольшой мир, в котором было представлено ограниченное количество объектов. Это были пирамидки, различные кубики, коробка. И SHRDLU умела общаться на естественном языке с человеком, обсуждая то, что происходит в этом мире, и умела выполнять команды, которые отдавал на естественном языке человек. При этом лексика никак не была ограничена, то есть человек говорить что угодно, а программа могла достаточно свободно отвечать. Вот пример работы SHRDLU:

Человек: Что лежит в коробке?
Компьютер: Синяя пирамидка и синий блок.
Человек: На чем лежит пирамидка?
Компьютер: На коробке.
Человек: Как много блоков находится не в коробке?
Компьютер: Четыре.
Человек: Хотя бы один из них более тонкий, чем тот, про который я тебе говорил? На чем-то он стоит?
Компьютер: Да, стоит на столе.
Человек: Может ли стол собирать блоки?
Компьютер: Нет.
Человек: Может ли пирамидка стоять на блоке?
Компьютер: Да.
Человек: Может ли пирамидка стоять на пирамидке?
Компьютер: Не знаю.
Человек: Хорошо. Поставь пирамидку одну на другую.
Компьютер: Не получается.
Человек: Поставь, пожалуйста, два красных блока друг на друга. Либо зеленый куб, либо пирамидку. Сможешь?» И SHRDLU берет эти блоки, начинает ими оперировать.

Даже сейчас такого рода демонстрация выглядит впечатляющей. Интересно, что исходники SHRDLU можно скачать, программа написана на LISP, есть даже какой-то современный визуализатор под Windows. Если вы откроете ее исходники, то вы увидите, что программа состоит из огромного количества хитроумных правил.

Когда читаешь эти правила, то понимаешь, насколько изощренная логика заложена в программу. Терри Виноград, по всей видимости, проводил много экспериментов, давая возможность разным людям общаться с этой системой. Мирок SHRDLU очень маленький: он может быть описан примерно 50 разными словами. И в рамках такого маленького пространства можно создать впечатление интеллектуального поведения у системы.

Однажды Тьюринга приперли к стене и прямо спросили: «Когда программы пройдут тесты?». Тьюринг предположил, что в 2000 году появятся машины, использующие 109 бит памяти, способные обманывать человека в 30% случаев.

Интересно проверить, сбылся ли прогноз Тьюринга в 2016 году. Программа «Eugene Goostman» изображает из себя мальчика из Одессы. В первом тесте, состоявшемся в 2012 году, программа смогла обмануть судей в 20,2% случаев. В 2014 году в тесте эта же программа, уже модернизированная, в тестах, организованных Университетом Рединга, смогла обмануть судей в 33% случаев. Грубо говоря, с ошибкой плюс-минус 10 лет Тьюринг примерно попал в прогноз.

Потом появилась программа «Соня Гусева», и она в 2015 году смогла обмануть судей в 47% случаев. Стоит отметить, что процедура тестирования предполагает ограничение времени общения экспертов с программой (обычно около 5 минут), и в свете данного ограничения результаты уже не выглядят столь однозначными. Однако для решения многих практических задач, скажем, в области автоматизации SMM, этого более чем достаточно. Отличить продвинутого рекламного бота от человека на практике, скорее всего, не сможет большинство пользователей социальных сетей.

Наверное, самым известным и серьезным возражением на эти успехи является ответ философа Джона Сёрля, который предложил умственный эксперимент, названный «Китайская комната». Представим себе, что есть закрытая комната, в ней сидит человек. Мы знаем, что человек не понимает китайского языка, не сможет прочитать то, что написано китайскими иероглифами на бумаге. Но у нашего подопытного есть книга с правилами, в которой записано следующее: «Если у тебя на входе такие-то иероглифы, то ты должен взять вот такие иероглифы, и составить их в таком порядке». Он открывает эту книгу, она написана на английском, смотрит, что ему подали на вход, а дальше в соответствии с этими правилами формирует ответ, и скидывает его на выход. В определенной ситуации может показаться, что внутри комнаты находится человек, на самом деле понимающай китайский язык. Но ведь индивид внутри комнаты не знает китайского языка по постановке задачи. Получается, что когда эксперимент поставлен по канонам Тьюринга, он, на самом деле, не свидетельствует о том, что внутри сидит некто, понимающий китайский язык. Вокруг этого аргумента развернулась большая полемика. На него есть типовые возражения. Например, аргумент, что если сам Джон не понимает китайский язык, то вся система в целом, составленная из Джона и набора правил, уже обладает этим самым пониманием. До сих пор пишутся статьи в научной прессе на эту тему. Однако бо́льшая часть специалистов по computer science считают, что эксперимент Тьюринга достаточен для того, чтобы сделать определенные выводы.

От машин, которые лишь притворяются ИИ, перейдем к программам, реально превосходящим возможности человека. Одна из задач, напрямую связанная с созданием ИИ — это задача автоматизированного перевода. В принципе, автоматизированный перевод появился задолго до появления первых электронных машин. Уже в 1920-е годы были построены первые механические машины, основанные на фототехнике и причудливой электромеханике, которые были предназначены для ускорения поиска слов в словарях.

Мысль использовать ЭВМ для перевода была высказана в 1946 году, сразу после появления первых подобных машин. Первая публичная демонстрация машинного перевода (так называемый Джорджтаунский эксперимент) состоялась в 1954 году. Первый серьезный заход с серьезными деньгами под решение этой задачи был осуществлен в начале 1960-х годов, когда в США были созданы системы, предназначенные для перевода с русского языка на английский. Это были программы MARK и GAT. И в 1966 году был опубликован интересный документ, посвященный оценке существующих технологий машинного перевода и перспектив. Содержание этого документа можно свести к следующему: всё очень-очень-очень плохо. Но, тем не менее, бросать не надо, надо продолжать гранит грызть.

В Советском Союзе тоже были такие исследования, например группа «Статистика речи», возглавляемая Раймундом Пиотровским. Сотрудниками его лаборатории была основана известная фирма ПРОМТ, разработавшая первую отечественную коммерческую программу машинного перевода, базирующуюся в том числе на идеях Пиотровского. Еще где-то к 1989 году была выведена оценка, что система автоматизированного перевода позволяет примерно в 8 раз ускорить работу переводчика. Сейчас эти показатели, наверное, еще немножко улучшились. Конечно, сравниться с переводчиком ни одна система не может, но многократно ускорить его работу в состоянии. И с каждым годом показатель влияния на работу переводчиков растет.

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

Сорок лет назад лингвисты имели дело с достаточно маленькими языковыми корпусами. Лингвисты могли либо вручную обрабатывать данные — взять и посчитать количество таких-то слов в «Войне и мире», составить частотные таблицы, проделать первичный статистический анализ, но трудозатраты на выполнение таких операций были колоссальны. И здесь ситуация кардинально изменилась ровно тогда, когда появился Интернет, потому что вместе с Интернетом появилось огромное количество корпусов на естественных языках. Возник вопрос, как бы так сделать систему, которая в идеале не будет знать про язык ничего или почти ничего, но при этом будет на вход получать гигантские корпуса? Анализируя эти корпуса, система автоматически будет достаточно хорошо переводить тексты с одного языка на другой. Этот подход реализован, например, в Google Translate, то есть это система, за работой которой стоит очень мало работы лингвистов. Пока что качество перевода у систем предыдущего поколения — LEC, Babylon, PROMT — выше, чем у Google Translate.

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

Вспомним историю «сосиски в тесте» (sausage in the father-in-law). То есть существует сосиска в тесте, но «в тесте» означает не тесто, а тестя. ИИ должен понимать целый ряд человеческих культурных особенностей. Он должен понимать, что, скорее всего, в этом контексте предполагается практика обволакивания тестом при приготовлении сосисок, а не практика помещения сосисок в тестя. Это не значит, что вторая практика не существует. Может быть, в каком-то контексте адекватным переводом будет как раз вставить сосиску в тестя. И здесь только пониманием этих самых cultural references, которые присутствуют в естественном языке на каждом шаге, можно добиться успешного перевода. Либо, может быть, это какая-то статистика, связанная с тем, что на основе статистического анализа корпусов мы просто видим, что в текстах такой тематики чаще всего используется перевод про «сосиску, помещенную в тесто».

Другой пример связан с котом, который родил трех котят: двух белых, одного афроамериканца. Опять же, какой огромный культурный пласт выплывает здесь под переводом. На самом деле, то, что сюда попал афроамериканец — это некий заход в сторону понимания культурных особенностей современного общества. Пока эти проблемы решаются разными костылями типа задания тематики текста. То есть мы можем сказать, что переводим текст по алгебре. И тогда программа должна понимать, что «Lie algebra» — это «Алгебра Ли», а не «алгебра Лжи». Так или иначе, это может работать, но в универсальном плане нам пока очень далеко до системы, которая будет действительно сравнима по качеству с человеком-переводчиком.

В последние годы в сферу машинного перевода активно приходят нейросетевые технологии. Специфическая топология рекуррентных нейронных сетей — так называемая долгосрочно-краковременная архитектура (LSTM — Long short-term memory), применяемая для анализа высказываний, оказалась хорошо применимой для решения задач перевода. Современные тесты показывают, что применение LSTM-сетей позволяет с небольшими трудозатратами достичь качества перевода сопоставимого с уровнем качества конвенциональных технологий.

Еще одна забавная задачка — это сочинение стихов. Если посмотреть на чисто техническую сторону вопроса, как зарифмовать слова и положить их в определенный стихотворный размер, то эта задача была очень простой еще в 1970-е годы, когда Пиотровский начинал ею заниматься. У нас есть словарь слов с ударениями, есть ритмические карты стихотворных размеров — взяли и положили слова в этот размер. Но тут хотелось бы писать что-то осмысленное. В качестве первой мушки-дрозофилы была взята поэзия скальдов, поскольку в ней существует очень простой и четко формулируемый канон.

Гудрун из мести

Гор деве вместе

Хар был умелый

Хамдир был смелый

Сынов убила.

С Ньердом не мило.

Конесмиритель.

Копьегубитель.


— Торд сын Сьярека, перевод С.В. Петрова

Стихотворение скальдов состоит из так называемых кеннингов, и каждый кеннинг — это просто сочетание нескольких слов, имеющее абсолютно четкую эмоционально-смысловую окраску. Все стихотворение составляется из последовательности кеннингов. Задача для программы, сочиняющей стихи, может быть сформулирована таким образом: напиши ругательное стихотворение о вороне. Соответственно, программа по этим критериям из своей библиотеки кеннингов выбирает подходящие, а затем складывает из них стихотворение. Этот эксперимент похож на эксперимент Терри Винограда с SHRDLU, потому что здесь тоже очень простое модельное пространство, и в нем примитивные подходы могут работать, помогая получать неплохие результаты.

Это машинный корчеватель. Сейчас мы объясним, зачем он тут нужен. Программа SCIgen генерирует наукоподобный бред. Вообще, она это делает на английском языке, но тут можно сделать комбо — взять программу-переводчик и наукоподобный бред с правильными словарями перевести на русский язык. Получится уже бред второго порядка.

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

Известный биоинформатик Михаил Гельфанд при помощи SCIgen сгенерировал наукоподобный бред, перевел его с помощью программы на русский язык, и разослал в целый ряд ваковских изданий статью, которая называлась «Корчеватель: алгоритм типичной унификации точек доступа и избыточности». Людям, которые занимаются алгоритмами или корчевателями, более-менее понятно, что это нечто очень странное, но оказалось, что в России нашелся как минимум один ВАКовский журнал, который принял эту статью к публикации.

В 2013 году Дариус Казими запустил проект «Национальный месяц создания романов», в рамках которого программа генерировала текст. Было использовано некоторое количество чат-ботов, которые были помещены в некое условное модельное пространство, где они взаимодействовали. В 2016 году разработчики из японского университета Хакодате написали программу, которая написала роман «День, когда компьютер пишет роман». Работа вышла в финал японского литературного конкурса и обогнала 1450 других произведений, написанных людьми. Совсем недавно стартовал проект, в рамках которого программа прочтет 2865 романов на английском языке и затем попробует написать свой собственный роман. По идее, к концу 2016 года у нас будет какая-то обратная связь про этот проект. Или не будет, если всё закончится ничем.

Есть и другие задачи. Например, достаточно рутинная задача, связанная с написанием информационных текстов для коммерческого сектора. Грубо говоря, для какого-нибудь сайта компании вы пишете рассказ о том, какая это компания, чем занимается. Или вы пишете новости путем рерайта. И есть инструменты, помогающие человеку провести анализ того, что он написал (например сайт Главред.ру, осуществляющий поиск недостатков в текстах, написанных в информационном стиле).

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

А вот приложение Summly, которое позволяет любую длинную статью ужать до нескольких предложений. Summly читает за вас новости, отжимает из них воду, делает из них такое summary, содержащее максимум 400 слов, и вы читаете уже «выжимку». Это нужно тем, кто хочет читать много новостей, но не хочет читать «воду». Интересно, что эту систему разработал простой английский школьник, который затем продал её за 30 млн долларов Yahoo.

Большой сегмент научной деятельности называется Civil Science, то есть это гражданская наука, когда не ученых, а обычных людей привлекают к решению различных научных задач. В этом сегменте большой проект сделал Массачусетский технологический институт.

Жил-был мышонок Гарольд. Его, как водится у ученых, убили, мозг заморозили, нарезали тонкими микронными слоями, засунули эти срезы в сканирующий электронный микроскоп, и получили кучу сканов этих срезов. Сканов этих было так много, что всему научному коллективу, который работает над этим проектом, чтобы расшифровать структуру одной только зрительной коры мышонка, нужно было бы потратить примерно 200 лет. Поэтому ученые из Массачусетского технологического придумали следующий коварный план. Они сделали онлайн-игру, в которой раздают пользователям случайным образом эти самые срезы, и дают задание пользователям срезы по определенным правилам раскрашивать. У вас есть цветные маркеры, и вы с их помощью раскрашиваете свой срез. Если вы сделали это правильно, то вам дают много очков, а если вы сделали неправильно, то очков мало. Вы можете мериться количеством очков с другими участниками этой игры. Почти также увлекательно, как ловить покемонов, но гораздо полезнее.

Ученые из Массачусетского технологического — не простые ребята. На самом деле, у них есть нейронная сеть, в которую дальше пихают все обработанные игроками картинки, там делается свертка, нейронная сеть обучается, и дальше получается нейронная сеть, которая сама, используя срезы, восстанавливает трехмерную структуру синоптических связей.

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

Знаменитый футуролог Рэй Курцвейл раньше говорил, что универсальный искусственный интеллект будет создан в 2045 году, а сейчас он сбросил оценку до 2029 года.

В начале этого года случилась маленькая сенсация. Нейробиологи нашли вторичный контур связи между нейронами через астроциты глиальной ткани. Даже команда проекта компьютерного моделирования неокортекса человека Blue Brain заявила, что в новой модели, которую они собираются презентовать, уже включен этот контур. У них по таймлайну к 2022 году нужно показать модель мозга человека. Они считают, что мозг человека — это примерный эквивалент 1000 мозгов крыс. Возможно, в этом году нас ожидает ещё одно важное открытие в этой области — группа исследователей из Университета Калгари и Университета Алберты (Канада) предположили, что в мозге могут существовать и фотонные связи. Оптические сигналы могут распространяться через миелиновые оболочки. Соответствующее исследование опубликовано на биологическом сервере препринтов BioRXiv.

Везде, где мы используем нейронные сети, мы сталкиваемся с ограниченным числом вычислительных ядер в машине. Если бы число вычислительных ядер было примерно равно числу синапсов, мы бы достигли максимальной производительности за счет распараллеливания. Но ядер маловато. Поэтому сейчас в разных задачах, связанных с нейропроцессингом, где мы пытаемся скопировать то решение, которое предложила природа, идет поиск в направлении создания либо специализированного железа (нейроморфические процессоры), либо использования каких-то устройств, которые лучше подходят для эмуляции нейронных сетей. Например, Microsoft в прошлом году опубликовала статью, посвящённую использованию FPGA как раз для моделирования нейронной сети. Существующие нейросетевые фреймворки, например CNTK, TensorFlow, Caffe, способы использовать для нейросетевых вычислений процессоры видеокарт.

Другой известный проект TrueNorth, создаваемый IBM в рамках государственной программы DARPA SyNapse, остается пока единичным процессором для военных и стоит несколько миллионов долларов. При этом IBM создала целый институт, который разработал специальный язык программирования для этой железки. В открытом доступе результаты этой работы мы, скорее всего, увидим только через N лет. Именно поэтому про TrueNorth в научных новостях говорят, а какого-то движения в community вокруг него нет.

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

В связи с успехами в области искусственного интеллекта, возникает вопрос: что же будет дальше, куда мы идем как вид и как технологическая цивилизация? С этим связана одна интересная история, уходящая в истоки человеческой эволюции: наш интеллект это не более чем продукт эволюционного компромисса. Неограниченное увеличение объёма мозга и его сложности невозможно. Во-первых, мозг потребляет очень много энергии, около 20% от общего потребления, хотя его собственная масса около 2% от массы тела. Кроме того, чем больше голова, тем сложнее роды у обезьян. Смертность, травмы при родах сильно возрастают с увеличением головы. Сейчас же, если мы создаем искусственную копию мозга, то мы в известной мере свободны от этих ограничений. Мы можем заведомо обеспечить такой мозг бо́льшим количеством энергии, можем построить бо́льшую нейронную сеть. Такая система по уровню своего интеллектуального развития будет обходить человека по всем направлениям. Мы уже затрагивали тему, к чему в итоге может привести развитие ИИ, но стоит коснуться еще одного варианта развития событий. Вариант на самом деле очень старый и в фантастических произведениях не раз уже появлялся.

В романе Герберта Франке «Клетка для орхидей» земляне используют систему типа «аватар» и с ее помощью исследуют далекую звездную систему. Они оказываются на планете, где находят руины древней цивилизации. На окраинах давно покинутого города они видят, грубо говоря, уровень технологий а-ля наш XX век. Дальше они продвигаются к центру, периметр города сокращается, все более высокие технологии попадаются им. Они приближаются к самому ядру города, и встречаются наконец-то с машинами, которые говорят: «Слушайте, ребята, дальше всё, нельзя пройти. Наши создатели там живут, им хорошо, вы их можете потревожить. Идите отсюда». Люди всё же как-то пробиваются, где-то уговорами, где-то силой. И что они видят? Они видят гигантские чаны, в которых плавают дальние-дальние потомки создателей этих машин, у которых к тому моменту мозг атрофировался, остались одни центры удовольствия, в которые внедрены электроды, по которым ритмически проходят электрические импульсы. Потомки некогда великой цивилизации живут в абсолютном счастье, расслабленности, гармонии с собой и с природой.

Вместо заключения коснемся темы отставания от Запада в направлении исследований ИИ. На самом деле наука сейчас носит во многом интернациональный характер. Просто наши хорошие исследователи, нейрофизиологи, специалисты по computer science публикуются в международной прессе и мало публикуются в прессе российской. Вообще говоря, зачастую публикация в российском журнале с точки зрения научной репутации зачисляется не в «плюс», а в «минус» учёному, потому что обычно это означает, что результаты работы «не дотянули» до уровня стандартов международных научных изданий. Но это не значит, что никаких интересных проектов у нас нет. Например, в России было проведено значимое исследование с reverse engineering нервной системы червя. Плюс есть комьюнити, которое абсолютно интернационально, в него входят энтузиасты, которые обсуждают алгоритмы, делают opensource-проекты. А о некоторых крупных проектах еще только предстоит рассказать. До встречи в следующем посте!

Машинное обучение – Основа искусственного интеллекта / Хабр

14 мая, когда Трамп готовился спустить всех собак на Huawei, я мирно сидел в Шеньжене на Huawei STW 2019 — большой конференции на 1000 участников — в программе которой были доклады Филипа Вонга, вице-президента по исследованиям TSMC по перспективам не-фон-неймановских вычислительных архитектур, и Хенга Ляо, Huawei Fellow, Chief Scientist Huawei 2012 Lab, на тему разработки новой архитектуры тензорных процессоров и нейропроцессоров. TSMC, если знаете, делает нейроускорители для Apple и Huawei по технологии 7 nm (которой мало кто владеет), а Huawei по нейропроцессорам готова составить серьезную конкуренцию Google и NVIDIA.

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

Только в прошлом году в тему было вложено больше 3 миллиардов долларов. Google уже давно объявил нейросети стратегическим направлением, активно строит их аппаратную и программную поддержку. NVIDIA, почувствовав, что трон зашатался, вкладывает фантастические усилия в библиотеки ускорения нейросетей и новое железо. Intel в 2016 году потратил 0,8 миллиарда на покупку двух компаний, занимающихся аппаратным ускорением нейросетей. И это при том, что основные покупки еще не начались, а количество игроков перевалило за полсотни и быстро растет.

TPU, VPU, IPU, DPU, NPU, RPU, NNP — что все это означает и кто победит? Попробуем разобраться. Кому интересно — велкам под кат!

Практика программирования с использованием искусственного интеллекта

Обновлено 14.08.2018

Программирование с использованием искусственного интеллекта, вероятно, является одним из самых захватывающих аспектов программирования, хотя эта область все еще остается относительно конфиденциальной. Если вы хотите попрактиковаться в программировании ИИ, сложно найти подходящие онлайн-фреймворки. CodinGame решает проблему, предоставляя простую в использовании и адаптированную среду разработки, в которой есть все, что полезно для открытия и улучшения ваших навыков программирования на основе ИИ.

Программирование искусственного интеллекта

Простое определение искусственного интеллекта, данное Scholkoff, R.J. (1990):

«Область исследования, которая стремится объяснить и подражать интеллектуальному поведению в терминах вычислительных процессов»

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

Агенты

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

Простое представление того, как работает агент

Среды

Каждая среда имеет свои особенности. Наиболее распространенными являются:

Известный vs Неизвестный : знаете ли вы что-нибудь о реакции среды.Пример: новорожденный ребенок развивается в неизвестной среде, он должен ее обнаружить, прежде чем сможет на нее отреагировать (поэтому он проверяет абсолютно все).

Доступно vs Недоступно : агенты имеют доступ ко всем переменным среды, которые могут использоваться для принятия решения, или нет. Пример: когда вы играете в покер, вы не знаете карт других игроков, если только вы не читер или человек дождя. Это недоступная среда.

Детерминированный vs Недетерминированный : поведение среды определяется логически и статистически.Когда вы играете в шахматы, вы уверены, что действие будет иметь определенные последствия (детерминированные). Для движущегося робота вы не совсем уверены в поведении двигателей (недетерминированное).

Статический vs Динамический : меняется ли среда, пока агент принимает решение. Для беспилотного автомобиля кто-то может появиться на дороге, пока машина думает, что делать дальше. Это динамичная среда.

Дискретный против Непрерывный : конечное против бесконечного числа возможных действий для агента.

При разработке агента очень важно знать, с какой средой вы имеете дело. Он направит вас и поможет избежать типичных ошибок. Прежде чем писать хоть одну строчку кода, убедитесь, что вы понимаете свою среду на 100%.

CodinGame & A.I.

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

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

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

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

Мы разработали систему, которая позволяет разработчикам сосредоточиться на интеллектуальной части агента.Основная цель — упростить процесс перехода от обучения к практике.

Агент CodinGame

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

Вот код Python по умолчанию для агента в CodinGame:

 import sys, math

  # читать глобальную информацию об окружающей среде по датчикам 

LX, LY, TX, TY = [int (i) для i в raw_input ().Трещина()]

while 1:  # бесконечный цикл смысла / действие 

E = int (raw_input ())  # Прочитать новую информацию об окружающей среде по датчикам перед принятием решения 

 # Интеллектуальная (или тупая) обработка 

print "SE"  # Действуйте в среде с актерами (здесь двигайтесь на юго-восток)  

Мы попытались устранить языковые барьеры программирования, предложив на платформе более 20 языков программирования.

Среда CodinGame

Мы создали абстрактную систему, которая способна обрабатывать все возможные виды среды.С его помощью мы создаем для вас среду и управляем ее поведением. У вас есть доступ к полному описанию реакции среды. Мы также занимаемся всеми коммуникациями между средой и агентами.

Чтобы сравнить производительность вашего агента, мы создали многопользовательские игры со списками лидеров, которые позволяют вам сравнивать производительность вашего ИИ и автоматически получать рейтинг в соответствии с показателями ИИ других игроков. Чтобы визуализировать среду, мы разработали графическое представление для каждой среды.Наша цель — упростить отладку и сделать код по-настоящему увлекательным!

Примеры игр

На CodinGame.com у нас есть 2 основные категории игр:

  • Одиночные игры: 1 агент в заданной среде
  • Многопользовательские игры: 1 или более агентов (мультиагентов) и других игроков для beat

Solo Games

Тор достигает Света

Лучше безопасно посадить эту ракету!

Помогите Инди покинуть лабиринт

Многопользовательские игры

  • The Great Escape: известный, доступный, детерминированный, статический, дискретный с одним агентом

Найдите кратчайший путь на другую сторону

  • Platinum Rift: известный, доступный, детерминированный, статический, дискретный с несколькими агентами

Завоюйте планету Земля

  • Platinum Rift 2: известный, недоступный, детерминированный, статический, дискретный с несколькими агентами

Platinum Rift перезагружен!

  • Poker Chip Race: известный, доступный, детерминированный, динамический, непрерывный, несколько агентов

Блеф запрещен

  • Игры дронов: известные, доступные, детерминированные, статические, непрерывные, с несколькими агентами

Контроль Крисала зоны для победы!

  • Битва за Трон: известная, доступная, детерминированная, статическая, дискретная с одним агентом

Пройдите свой световой цикл до конца света

Будущее искусственного интеллекта в CodinGame

Мы хотели бы создать больше таких игры, охватывающие все виды сред (недетерминированные, неизвестные,…), поэтому мы открыты для любых новых идей: пожалуйста, помогите нам вдохновиться!

Мы также думаем об учебной платформе, где вы могли бы изучать и практиковать ИИ в одном месте.Хотели бы вы лично изучать ИИ таким образом?

Чтобы узнать больше об искусственном интеллекте и о том, как создать отличного агента:

.

Python AI Tutorial | Программирование искусственного интеллекта Python

1. Учебное пособие по Python AI

Сегодня в этом руководстве Python AI Tutorial мы рассмотрим введение в искусственный интеллект . Кроме того, в этом программировании искусственного интеллекта мы увидим проблемы ИИ, инструменты в ИИ и подходы с искусственным интеллектом.

Итак, приступим к руководству Python AI Tutorial.

Python AI Tutorial | Программирование искусственного интеллекта Python

2.Что такое искусственный интеллект?

Искусственный интеллект , часто называемый ИИ, — это интеллект, который демонстрирует машина. С помощью машинного интеллекта можно дать устройству возможность распознавать окружающую среду и действовать так, чтобы максимизировать свои шансы на успех в достижении поставленных целей. Другими словами, ИИ — это когда машина может имитировать когнитивные функции, такие как обучение и решение проблем.
«AI — это то, чего еще не было сделано».

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

Знаете ли вы об алгоритмах AI

Одно отличие от людей состоит в том, что ИИ не обладает чертами человеческого здравого смысла и народной психологии. Из-за этого он в конечном итоге совершает ошибки, отличные от человеческих.

3. Учебное пособие по Python AI — Проблемы AI

При моделировании или создании ИИ мы можем столкнуться со следующими чертами:

Python AI Tutorial — Проблемы AI

а.Рассуждения и решение проблем

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

г. Представление знаний

Некоторые экспертные системы аккумулируют эзотерические знания от экспертов. Исчерпывающая база знаний, основанная на здравом смысле, содержит множество вещей, включая объекты, свойства, категории, отношения между объектами, ситуациями, событиями, состояниями, временем, причинами, последствиями, знаниями о знаниях и другими областями.Когда мы говорим об онтологии, мы говорим о том, что существует. Под представлением знаний мы наблюдаем следующие области:
Посмотрите на Робототехнику и искусственный интеллект

  • Рассуждения по умолчанию; Квалификационная задача
  • Широта здравого смысла
  • Подсимволическая форма некоторого здравого смысла

г. Планировка

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

г. Обучение

AI каким-то образом связан с машинным обучением. Мы часто говорили о неконтролируемом обучении — способности принимать поток входных данных и находить в нем закономерности.Это включает классификацию и числовую регрессию. Мы классифицируем вещи по категориям и создаем функцию, которая описывает, как входы и выходы связаны и меняют друг друга. Эти аппроксиматоры функций.

e. Обработка естественного языка

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

ф. Восприятие

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

г. Движение и манипуляции

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

ч. Социальный интеллект

«Сири, мне лучше лечь спать?» — спрашиваю я, возвращаясь домой после напряженного дня. «Я думаю, тебе стоит поспать на нем», — шутит Сири. Термин «аффективные вычисления» охватывает системы, которые могут распознавать, интерпретировать, обрабатывать или моделировать человеческие аффекты / эмоции. В этой области мы наблюдали анализ тональности текста и анализ мультимодальных аффектов. Цель состоит в том, чтобы позволить ИИ понимать мотивы и эмоциональные состояния других, чтобы предсказывать их действия.Он может имитировать человеческие эмоции и выражения, чтобы казаться чувствительными и взаимодействовать с людьми. Робот с элементарными социальными навыками — это Kismet, разработанный в Массачусетском технологическом институте доктором Синтией Бризил.

Знаете ли вы экспертные системы в области искусственного интеллекта для решения проблем

я. Общая разведка

В последнее время многие исследователи ИИ начали работать над управляемыми узкими приложениями ИИ, такими как медицинский диагноз. В будущем могут быть машины с общим искусственным интеллектом (AGI), сочетающим такие узкие навыки.Примером этого будет DeepMind от Google.

4. Учебное пособие по Python AI — подходы

Мы наблюдаем четыре разных подхода к AI-

Python AI Tutorial — подходы к

а. Кибернетика и моделирование мозга

Существуют машины, использующие электронные сети для демонстрации элементарного интеллекта.

г. Символический

Этот подход рассматривает сокращение человеческого интеллекта до символических манипуляций. Сюда входят когнитивное моделирование, логические, анти-логические или неряшливые подходы и подходы, основанные на знаниях.

г. Субсимвольный

Для процессов человеческого познания, таких как восприятие, робототехника, обучение и распознавание образов, появились субсимвольные подходы. Сюда входят такие подходы, как воплощенный интеллект, вычислительный интеллект и мягкие вычисления.
Давайте обсудим Data Science vs AI vs Machine Learning

г. Статистическое обучение

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

5. Учебное пособие по Python AI — Инструменты искусственного интеллекта

В этом разделе руководства Python AI Tutorial мы изучим различные инструменты, используемые в искусственном интеллекте:

Python AI Tutorial — Инструменты искусственного интеллекта

а. Поиск и оптимизация

Интеллектуальный поиск возможных решений и использование для этого аргументов — это инструмент ИИ.Для реальных проблем редко бывает достаточно простого исчерпывающего поиска. Это потому, что у них действительно большие пространства для поиска. Это ведет к медленному поиску или к поиску, который никогда не заканчивается. Чтобы обойти это, мы можем использовать эвристику.

г. Логика

Исследования ИИ используют различные формы логики. Логика высказываний использует функции истинности, такие как «или» и «не». Теория нечетких множеств содержит определенную степень истинности (значения от 0 до 1) в расплывчатых утверждениях. Логика первого порядка добавляет кванторы и предикаты. Нечеткая логика помогает системам управления вносить нечеткие правила.

г. Вероятностные методы для неопределенных рассуждений

Мы часто используем такие инструменты, как байесовские сети, для рассуждений, обучения, планирования и восприятия. Мы также можем использовать вероятностные алгоритмы для фильтрации, прогнозирования, сглаживания и объяснения потоков данных.

г. Классификаторы и статистические методы обучения

Классификаторы и контроллеры работают вместе. Рассмотрим объект. Если он блестящий, классификатор знает, что это бриллиант.Если он блестящий, контроллер поднимает его. Но прежде чем вывести действие, контроллер классифицирует условия. Как функция, классификатор сопоставляет образцы, чтобы найти наиболее близкое соответствие. Обучение с учителем помещает каждый шаблон в заранее определенный класс.

e. Искусственные нейронные сети

ИНС представляют собой совокупность взаимосвязанных узлов, вдохновленных огромной сетью нейронов в человеческом мозгу.

Python AI Tutorial — Искусственные нейронные сети

Под ними у нас есть такие категории, как нейронные сети с прямой связью и рекуррентные нейронные сети.Мы рассмотрим ИНС в качестве отдельной темы в другом руководстве.

ф. Оценка прогресса

Поскольку ИИ является универсальным, невозможно определить, в каких областях он преуспевает. Игры — хороший эталон для оценки прогресса. Некоторые из них включают AlphaGo и StarCraft.

6. Учебное пособие по Python AI — Применение искусственного интеллекта

Как мы уже говорили, ИИ довольно универсален. Вот несколько доменов, в которых он находит применение —

  • Автомобильная промышленность
  • Здравоохранение
  • Видеоигры
  • Военный
  • Финансы и экономика
  • Арт
  • Аудит
  • Реклама

Перейдите по ссылке, чтобы узнать больше о приложениях AI

Итак, все это было в Python AI Tutorial.Надеюсь, вам понравится наше объяснение.

7. Заключение

Таким образом, в этом руководстве Python AI Tutorial мы узнали об искусственном интеллекте. Мы говорили о его проблемах, подходах, инструментах и ​​приложениях. Это все на сегодня; мы вернемся с другими. Расскажите нам о своем опыте использования Python AI Tutorial в комментариях.
Номер ссылки

.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *