Як написати штучний інтелект. Штучний інтелект. Суперечності та проблеми створення. Чому штучний інтелект перемагає людину

Штучний інтелект створив нейромережу December 15th, 2017

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


Інженери з підрозділу Google Brain навесні цього року продемонстрували AutoML. Цей штучний інтелект вміє без участі людини виробляти власні найунікальніші ІІ. Як з'ясувалося нещодавно, AutoML зміг вперше створити NASNet, систему комп'ютерного зору. Ця технологія серйозно перевершує всі створені раніше людьми аналоги. Ця заснована на штучному інтелекті система може стати чудовою помічницею у розвитку, скажімо, автономних автомобілів. Застосовується вона і в робототехніці – роботи зможуть вийти на абсолютно новий рівень.

Розвиток AutoML відбувається за унікальною навчальною системою з підкріпленням. Йдеться про нейромережі-управлінця, яка самостійно розробляє абсолютно нові нейромережі, призначені для тих чи інших конкретних завдань. У зазначеному нами випадку AutoML має на меті виробництво системи, що максимально точно розпізнає в реальному часі об'єкти у відеосюжеті.

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

При цьому AutoML оцінює роботу NASNеt та використовує цю інформацію для покращення дочірньої мережі; цей процес повторюється тисячі разів. Коли інженери протестували NASNet на наборах зображень ImageNet і COCO, вона перевершила всі системи комп'ютерного зору.

У Google офіційно заявили, що NASNet розпізнає з точністю 82,7%. Результат на 1.2% перевищує минулий рекорд, який на початку осені цього року встановили дослідники з фірми Momenta та спеціалісти Оксфорда. NASNet на 4% ефективніший за свої аналоги із середньою точністю в 43,1%.

Є і спрощений варіант NASNet, адаптований під мобільні платформи. Він перевершує аналоги трохи більше, ніж на три відсотки. Незабаром можна буде використовувати цю систему для виробництва автономних автомобілів, для яких важлива наявність комп'ютерного зору. AutoML продовжує виробляти нові спадкові нейромережі, прагнучи підкорення ще більших висот.

При цьому, звичайно, виникають етичні питання, пов'язані з побоюваннями з приводу ІІ: що, якщо AutoML створюватиме системи з такою швидкістю, що суспільство просто за ними не встигне? Втім, багато хто великі компаніїнамагаються враховувати проблеми безпеки ІІ. Наприклад, Amazon, Facebook, Apple та деякі інші корпорації є членами Партнерства з розвитку ІІ (Partnership on AI to Benefit People and Society). Інститут інженерів та електротехніки (IEE) запропонував етичні стандарти для ІІ, а DeepMind, наприклад, анонсував створення групи, яка займатиметься моральними та етичними питаннями, пов'язаними із застосуваннями штучного інтелекту.

Втім, багато великих компаній намагаються враховувати проблеми безпеки ІІ. При цьому, звичайно, виникають етичні питання, пов'язані з побоюваннями з приводу ІІ: що, якщо AutoML створюватиме системи з такою швидкістю, що суспільство просто за ними не встигне? Інститут інженерів та електротехніки (IEE) запропонував етичні стандарти для ІІ, а DeepMind, наприклад, анонсував створення групи, яка займатиметься моральними та етичними питаннями, пов'язаними із застосуваннями штучного інтелекту. Наприклад, Amazon, Facebook, Apple та деякі інші корпорації є членами Партнерства з розвитку ІІ (Partnership on AI to Benefit People and Society).

Що таке штучний інтелект?

Автором терміна «штучний інтелект» є Джон Маккарті, винахідник мови Лісп, основоположник функціонального програмування та лауреат премії Тьюринга за величезний внесок у галузі досліджень штучного інтелекту.
Штучний інтелект - це спосіб зробити комп'ютер, комп'ютер-контрольованого робота або програму здатну також розумно мислити як людина.

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

Що таке нейронна мережа?

Ідея нейромережі полягає в тому, щоби зібрати складну структуру з дуже простих елементів. Навряд чи можна вважати розумним один-єдиний ділянку мозку - а от люди зазвичай напрочуд непогано проходять тест на IQ. Проте досі ідею створення розуму «з нічого» зазвичай висміювали: жарту про тисячу мавп із друкарськими машинками вже сотня років, а за бажання критику нейромереж можна знайти навіть у Цицерона, який єхидно пропонував до посиніння підкидати в повітря жетони з літерами, щоб рано чи пізно вийшов осмислений текст. Однак у XXI столітті виявилося, що класики єхидничали даремно: саме армія мавп із жетонами може за належної завзятості захопити світ.
Насправді нейромережа можна зібрати навіть із сірникових коробок: це просто набір нехитрих правил, за якими обробляється інформація. «Штучним нейроном», або перцептроном, називається не якийсь особливий прилад, а лише кілька арифметичних дій.

Працює перцептрон простіше нікуди: він отримує кілька вихідних чисел, множить кожне на «цінність» цього числа (про неї трохи нижче), складає та в залежності від результату видає 1 або -1. Наприклад, ми фотографуємо чисте поле і показуємо нашому нейрону якусь точку на цій картинці - тобто посилаємо йому як два сигнали випадкові координати. А потім питаємо: «Дорогий нейрон, тут небо чи земля?» — «Мінус один, — відповідає бовдур, безтурботно розглядаючи купову хмару. — Зрозуміло, що земля».

"Тикати пальцем у небо" - це і є основне заняття перцептрону. Жодної точності від нього чекати не доводиться: з тим самим успіхом можна підкинути монетку. Магія починається на наступній стадії, яка називається машинним навчанням. Адже ми знаємо правильну відповідь — отже, можемо записати її у свою програму. Ось і виходить, що за кожну невірну здогад перцептрон у буквальному сенсі отримує штраф, а за вірну — премію: цінність вхідних сигналів зростає або зменшується. Після цього програма проганяється вже по новій формулі. Рано чи пізно нейрон неминуче «зрозуміє», що земля на фотографії знизу, а небо зверху, тобто просто почне ігнорувати сигнал від того каналу, яким йому передають x-координати. Якщо такому навченому досвідом роботу підсунути іншу фотографію, то лінію горизонту він, може, і не знайде, але верх з низом вже точно не переплутає.

У реальній роботі формули трохи складніше, але принцип залишається тим самим. Перцептрон вміє виконувати лише одне завдання: брати числа та розкладати по двох стопках. Найцікавіше починається тоді, коли таких елементів кілька, адже вхідні числа можуть бути сигналами від інших «цеглинок»! Скажімо, один нейрон намагатиметься відрізнити сині пікселі від зелених, другий продовжить возитися з координатами, а третій спробує розсудити, у кого з цих двох результати ближчі один до істини. Якщо ж нацькувати на сині пікселі відразу кілька нейронів і підсумовувати їх результати, то вийде вже цілий шар, у якому «найкращі учні» отримуватимуть додаткові премії. Таким чином, досить розлога мережа може перелопатити цілу гору даних і врахувати при цьому всі свої помилки.

Нейронну мережу можна зробити за допомогою сірникових коробок – тоді у вас в арсеналі з'явиться фокус, яким можна розважати гостей на вечірках. Редакція МирФ вже спробувала - і смиренно визнає перевагу штучного інтелекту. Давайте навчимо нерозумну матерію грати у гру «11 паличок». Правила прості: на столі лежить 11 сірників, і кожен хід можна взяти або одну, або дві. Перемагає той, хто взяв останню. Як же грати в це проти комп'ютера?

Дуже просто.

Беремо 10 коробок чи стаканчиків. На кожному пишемо номер від 2 до 11.

Кладемо в кожну коробку два камінчики — чорний і білий. Можна використовувати будь-які предмети - аби вони відрізнялися один від одного. Все – у нас є мережа з десяти нейронів!

Нейросітка завжди ходить першою. Для початку подивіться, скільки залишилося сірників, і візьміть коробку з таким номером. На першому ході це буде коробка №11. Візьміть із потрібної коробки будь-який камінчик. Можна заплющити очі чи кинути монетку, головне — діяти навмання.
Якщо камінь білий – нейромережа вирішує взяти два сірники. Якщо чорний – одну. Покладіть камінчик поруч із коробкою, щоб не забути, який саме «нейрон» приймав рішення. Після цього ходить людина — і так доти, доки сірники не закінчаться.

Ну, а тепер починається найцікавіше: навчання. Якщо мережа виграла партію, то її треба нагородити: кинути в ті «нейрони», які брали участь у цій партії, за одним додатковим камінчиком того ж кольору, що випав під час гри. Якщо ж мережа програла - візьміть останню використану коробку і вийміть звідти камінь, що невдало зіграв. Може виявитися, що коробка вже порожня, — тоді «останньою» вважається попередній схожий нейрон. Під час наступної партії, потрапивши на порожню коробку, нейромережа автоматично здасться.

От і все! Зіграйте кілька партій. Спершу ви не помітите нічого підозрілого, але після кожного виграшу мережа робитиме все більш і більш вдалі ходи — і десь через десяток партій ви зрозумієте, що створили монстра, якого не в змозі обіграти.

Джерела:

У серії статей ми розповімо про нові підходи в ІІ, моделювання особистості та обробку BIG Data, які недоступні для більшості фахівців з ІІ та громадськості. Цінність цієї інформації в тому, що вона вся перевірена на практиці і більшість теоретичних напрацювань реалізовано у прикладних проектах.

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

Так, багато компаній за допомогою наведених вище технологій вирішують завдання своїх клієнтів з обробки інформації. Деякі з цих компаній пишуть, що створюють чи створили рішення у галузі штучного інтелекту. Але чи це інтелект?

Перше, що ми з вами зробимо, це визначимо, що таке інтелект.

Уявіть, що комп'ютер з інтелектом існує. І ви маєте можливість спілкуватися з ним голосом або за допомогою текстових повідомлень.
Запитання:
  • Чи обов'язково вбудовувати в програму інтелекту комп'ютера особливості мови (описувати семантику, граматику, морфологію) чи він міг би вивчити мови самостійно через взаємодію Космосу з людиною?
  • Якби вам поставили завдання навчити комп'ютер мові, то що б ви робили?
  • Якби у навчанні брали участь тільки ви, то на кого він був би схожий?
А тепер, дайте відповідь на ці питання ще раз, з тією лише різницею, що навчати довелося б:
  • Породистого папуги, теоретично здатного до спілкування.
  • Новонародженої дитини.
Ми з вами щойно зробили інтелектуальну роботу, і я сподіваюся, що багато хто з вас отримав нові знання. І ось чому:
  • По-перше, я попросив вас уявити (уявити), «що буде якщо…». Ви діяли в умовах, що змінилися. Можливо, вам не вистачало інформації та знань, вам було важко.
  • По-друге, ви виявилися здатними до навчання, пізнання, ви знайшли знайому вам аналогію самі або зустріли її в тексті, а можливо, ви скористалися інтернетом або запитали пораду друга.
Існує безліч підходів до визначення інтелекту. Ми визначимо головні його ознаки.

В першу чергу інтелект – це здатність навчатися та уявляти.

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

Повернімося до нашого прикладу з дитиною для того, щоб описати процес навчання більш детально.
Які принципи працюють, коли дитина вчиться розуміти мову і говорити нею?

  1. Чим частіше він чує слово у різних контекстах, тим швидше він його запам'ятає. Слово, яке він скаже першим, швидше за все, буде «мама».
    "Мама тебе любить"
    «Мамочка тобі ручки помиє»
    "Мама тебе цілує"
    "А де мама?"
    Навчання відбувається за рахунок надмірності даних.
  2. Чим більше каналів надходження інформації задіяно, тим ефективніше навчання:
    дитина чує: "Мама тебе любить".
    дитина бачить усмішку мами.
    дитина відчуває тепло, що походить від мами.
    дитина відчуває смак та запах маминого молока.
    дитина каже "Мама".
  3. Дитина не зможе відтворити слово відразу правильно. Він намагатиметься, пробуватиме. "М", "Ма", "Мам", "М"... "Мама". Навчання відбувається у дії, кожна наступна спроба коригується доки отримаємо результат. Метод спроб та помилок. Дуже важливим є отримання зворотного зв'язку з реальності.
  4. Не виховуйте своїх дітей, однак вони будуть схожі на вас. Дитина прагне бути схожою на оточуючих її людей. Він наслідує їх і навчається у них. Це один із механізмів моделювання особистості, про який ми поговоримо більш докладно у наступних статтях.

Яка ж роль уяви?

Уявіть собі, що ви їсте автомобілем по незнайомій трасі. Проїжджаєте знак обмеження швидкості 80 км/год. Їдьте далі, і бачите ще один знак обмеження швидкості, але він забризканий брудом і його практично не розібрати. Ви рухаєтеся зі швидкістю 95 км/год. Що будете робити? Поки ви ухвалювали рішення через кущі виглянув співробітник поліції, і ви побачили променисту усмішку на його обличчі. У голові у вас миттєво добудувався «образ знака», і ви зрозуміли, чому тут стоїть поліцейський, і що вам терміново потрібно натиснути гальмо. Ви скидаєте швидкість до 55 км/год, посмішка з лиця поліцейського миттєво зникає, і ви їсте далі.

І ще один цікавий прикладроботи уяви зі світу тварин – це спостереження сороками. Сорока на очах інших сорок закопала їжу на пустирі. Всі сороки полетіли, але наша сорока повернулася на пустир і переховала їжу. Що сталося? Вона уявила собі (уявила), що буде якщо прилетить інша сорока, яка бачила куди вона сховала їжу. Вона змоделювала ситуацію і знайшла рішення, як цього уникнути.

Уява - це моделювання ситуації на довільних умовах.

Як ви вже переконалися, інтелект – це не база знань, це не набір запрограмованих реакцій або дотримання заздалегідь визначених правил.

Інтелект – це здатність до навчання, пізнання та адаптації до змінних умов у процесі вирішення труднощів.

Вам не здається, що визначаючи інтелект ми випустили з уваги якісь важливі компонентичи забули про щось розповісти?

Так, ми згаяли сприйняття, і забули розповісти про пам'ять.

Уявіть собі, що ви дивитеся в вічко і бачите частину літери:

Що це за буква?

Можливо «К»?

Звичайно ні, це японський ієрогліф «вічність».

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

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

Образ – суб'єктивне бачення реального світу, сприйманого з допомогою органів чуття (каналів надходження інформації).

Сприйняття суб'єктивно, оскільки залежить від послідовності навчання, послідовності появи образів у житті і їхнього впливу.

Сприйняття починається з розпізнавання образів світло/темно. Розплющуємо очі – світло, закриваємо – темно. Далі людина вчиться розпізнавати дедалі складніші образи – «мама», «тато», м'яч, стіл, собака. Ми отримуємо опорні дані, а всі наступні образи – надбудова над попередніми.

З цього погляду навчання - це процес побудови нових взаємозв'язків між сприйманими образами та образами, які вже є в пам'яті.

Пам'ять служить для зберігання образів та їх взаємозв'язків.

А уява – це здатність добудовувати незавершений образ.

Для узагальнення наведемо ще один експеримент зі світу тварин:

Шимпанзе посадили в клітку, а всередині клітини підвісили гроно бананів досить високо від підлоги. Спочатку шимпанзе стрибала, але швидко втомилася, і, здавалося, втратила інтерес до бананів і сіла, ледве звертаючи на них увагу. Але через деякий час мавпа взяла палицю, залишену в клітці, і розгойдувала банани доти, доки вони не впали. Іншим разом, щоб дістати банани, шимпанзе вдалося з'єднати дві палиці, оскільки кожної палиці окремо не вистачало, щоб до них дістатись. Тварина впоралася і з складнішим завданням, несподівано поставивши під бананами коробку і використовуючи її як сходинку.

Шимпанзе показали знайомий їй образ «гроно бананів». Але образ для неї виявився незавершеним – їх не можна дістати та з'їсти. Але так як це було єдине джерело їжі з доступних, то незавершений образ нарощував внутрішню напругу і вимагав завершення.

Кошти на вирішення проблеми (завершення образу), завжди були в наявності, але виникнення рішення вимагало перетворення наявних образів (вимагалося навчитися з допомогою уяви). Шимпанзе необхідно було уявити собі (розумно перерахувати всі можливі варіанти): «що буде якщо я візьму палицю», «а що буде якщо…» і найбільш ймовірні припущення перевірити на практиці, спробувати та отримати зворотний зв'язок, знову уявити, спробувати, отримати зворотний зв'язок тощо доти, доки ми завершимо образ(научимся).

Якби розпізнання образу ієрогліфа «вічність» було б для вас питанням життя та смерті, то ви обов'язково знайшли спосіб це зробити.

З більш популярної мови перейдемо до технічної та сформулюємо основні поняття, які ми будемо використовувати далі:

  • Перетин надлишкової інформації з різних інформаційних каналів створює образ.
  • Навчання – це перетворення інформаційних потоківв інформаційному полі.
  • Інформаційне поле(пам'ять) – зберігання образів та його взаємозв'язків.
  • Уява - …
    – «Шановний читачу, добудуй образ уяви самостійно, використовуючи надмірну інформацію зі свого життєвого досвіду і цієї статті».
  • Інтелект – це здатність навчатися та уявляти.

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

У наступній статті ми розглянемо таке завдання, як інтелектуальний пошук інформації в інтернеті. Визначимо критерії інтелектуальності, розробимо практичні підходи та «помацаємо» реальну програму, в якій реалізовані принципи, описані в цій статті.

Стаття не претендує на істину, є частиною наших розробок та досліджень. Пишіть коментарі, доповнюйте матеріал своїми прикладами чи роздумами. Навчайтеся та уявляйте…

Що ховається за словосполученням «штучний інтелект» чи AI (Artificial Intelligence), знає далеко не кожен. Більшість людей, ймовірно, уявляють собі ІІ як комп'ютер, запрограмований на те, щоб «думати» самостійно, приймати розумні рішення і реагувати на подразники. Ця ідея не зовсім вірна. Ніякий комп'ютер і ніяка машина не можуть дійсно думати - тому що це вимагає наявності свідомості, якої немає у "бездушної машини". Комп'ютер може робити лише те, що скаже йому людина.

Коротко про програмування AI

Програмування штучного інтелекту полягає не в навчанні комп'ютера, як думати. Швидше він буде запрограмований так, щоб навчатися і самостійно вирішувати конкретні проблеми на основі свого досвіду. Але і тут йдеться не про власне мислення, а про наслідування. Це також стосується рішень, які приймає AI. може зважувати варіанти, а потім робити вибір. Однак його вибір завжди виходитиме з тих параметрів, які були запрограмовані раніше.

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

Використання штучного інтелекту

Штучний інтелект вже використовується в багатьох областях, наприклад у складних комп'ютерних іграхта пошукових системах. При програмуванні AI важливу роль відіграє комплекс дисциплін, а не лише інформатика чи математика. Велике значення мають філософія, психологія, неврологія та лінгвістика.

Штучний інтелект поділяється на нейронний та символічний (сильний та слабкий). Перший намагається імітувати структури та функції людського мозку. Останній орієнтується на відповідну проблему та результат.

У повсякденному житті, наприклад, штучний інтелект програмується та використовується у робототехніці. Він служить для управління виробничими процесами чи просто виконує побутові завдання. також використовується для візуалізації. Найпопулярніший приклад – розпізнавання облич або відбитків пальців.

Ще один крок у створенні штучного інтелекту – це системи, що базуються на знаннях. Тоді програму вводяться дані, пов'язані з програмуванням. Це дозволяє штучному інтелекту логічно та самостійно давати відповіді на задані питання. Проте й ці «самостійні відповіді» засновані лише з тих знаннях, якими спочатку наділений штучний інтелект.

У цій частині, ні багато ні мало, розказано про алгоритм, що лежить в основі інтелектуальної діяльності. Паралельно спробуємо відповісти питанням як схожі явища могли виникнути у природному інтелекті. Усіх секретів інтелекту ми, звичайно, не розкриємо, сутінків не створимо, але принципи, головний напрям куди далі копати, ми дізнаємося. Дізнаємося ми більше і про людський інтелект. Будуть і практичні нариси алгоритмів, які можна прямо зараз програмувати на комп'ютері.

Але спочатку коротко, до чого ми дійшли у попередніх частинах (). Я вже й сам забув, що там було, тож доведеться й собі нагадати, інакше навіть не зможу розповідати далі. :) Хто пам'ятає – пропускаємо цей розділ.

Що було у минулих частинах

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

Багато в чому Пенроуз прав щодо цієї іншої реальності, і навіть більше того, якось ми розповімо не менш цікаві і схожі ідеї щодо того, що лежить в основах світобудови. Але все-таки Пенроуз поспішив, перескочив, так би мовити, кілька сходинок. Переважна (якщо не все) більшість інтелектуальної діяльності можна пояснити більш прозовими та приземленими речами.

Безперечна заслуга Пенроуза в тому, що він переконливо пояснив, чому інтелектуальна діяльністьніяк не може бути заснована на формальній логіці (або іншими словами, на суворих алгоритмах). Точніше, Пенроуз показав, що абсолютно справжня логіка (вона ж у розумінні Пенроуза інтелектуальна діяльність) неможлива на відомих фізичних процесах. Але ми зрозуміли це по-своєму, а саме, що інтелектуальна діяльність не потребує абсолютно істинної логіки. Або, іншими словами, людський інтелект правдоподібний, він видає добрі наближення до істини, але ймовірність помилки все-таки є. А це кардинально змінює справу, а саме зовсім змінює підходи до того, як пояснити природний інтелект, і як побудувати штучний інтелект. І такий інтелект можна промоделювати на машині Тьюринга, запрограмувати на звичайному комп'ютері, щоправда, краще мати архітектуру більшої потужності та з властивим паралелізмом, наприклад, квантову чи оптичну.

Тепер нагадаємо, що за сир-бор навколо істиною та не істиною логіки. Математичні та комп'ютерні обчислення, людські роздуми, логічні побудови та умовиводи пов'язують із поняттям алгоритму чи формальної системи (фактично це одне й теж). Виконання алгоритму (воно застосування правил формальної системи) і є модель усіляких обчислень, роздумів та інших фізичних процесів (чи, як мінімум, досить хороше наближення). Алгоритм - це набір інструкцій, які послідовно кроками може виконати якийсь абстрактний комп'ютер (машина Тьюринга).

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

Але є й недетерміновані (нестрогі) алгоритми, у яких цих умов не дотримуються (вони ж неповні/суперечливі формальні системи). Для алгоритму недотримання умови кінцівки означає, що невідомо чи закінчить алгоритм своє обчислення, і як про це дізнатися заздалегідь. Недетермінований алгоритм може закінчити своє обчислення, а може й блукати вічно, але саме він зробить - це загадка, відгадувати яку можна вічно. Для формальних систем доказ істинності чи хибності вихідного твердження незрозуміло закінчиться колись чи триватиме вічно. Суперечливість означає, що всередині формальної системи можна підібрати різні ланцюжки правил, які для вихідного твердження видадуть і щира і хибна відповідь. Для алгоритму це означає, що на тих самих даних можуть бути отримані різні результати.

Багато, у тому числі Пенроуз, кажуть, що інтелектуальна діяльність ґрунтується на суворій формальній логіці. Але тут є світова засідка. Давно доведена теорема Ґеделя каже, що формальна система не може бути одночасно повною та несуперечливою. Повнота означає, що формальна система знає про свою сферу знань все. У тому числі така система може будувати висновки про істинність самої себе. Якщо формальну систему створить хтось ззовні, вона зможе працювати, видаючи правильні результати і анітрохи не переймаючись тим, чи правильно її створив цей хтось. Якщо ж формальна система спробує переконатися, що вона зроблено правильно, то нічого в неї не вийде. Тому що наша система несуперечлива, але не сповнена. Якщо ж система зможе судити про правильність самої себе (повна), то така система матиме внутрішні протиріччя, і результати її діяльності необов'язково правильні. Чому? Навіть тому, що питання самоперевірки (самопізнання, саморефлексування) належить до розряду вічних обчислень.

Що з цього випливає? Виходить (за Пенроузу), що людський інтелект - це повна і несуперечлива система, тому що може генерувати справжні висловлювання і водночас стежити за правильністю самої себе. Але за теоремою Геделя це неможливо. Ось і доводиться залучати для роботи інтелекту невідомі фізичні процеси, які в коротку мить можуть окинути вічність, знайти відповідь і повернути цю відповідь в мозок. Але як ми вже зауважили, інтелект зовсім не повинен бути повним і несуперечливим, хоча при цьому може дуже правдоподібно прикидатися істинним і непогрішимим.

Друга засідка – фізиці невідомі сутності, якими оперує формальна логіка. А саме, формальні міркування часто ґрунтуються на поняттях натуральних чисел, поняттях істинності та хибності. Натуральні числа це такі, у яких 1+1 = 2, 2+1 = 3 тощо. Істина = 1, брехня = 0, заперечення істини = брехня. Усі одиниці абсолютно рівні один одному, перестановка доданків суми не змінює, і таке інше. Та біда, немає в нашому світі таких частинок, таких речей або процесів, які можна було б однозначно зіставити натуральним числам, і при цьому, щоб правила арифметики виконувались для цих сутностей у будь-яких діапазонах. У деяких діапазонах арифметика є приблизно вірною, але за межами починаються глобальні збої. Тому формальна логіка, грубо кажучи, оперує сама не розуміючи чимось, сутностями, суть яких досить таки розпливчаста. Причому арифметика сама не відноситься до повних і несуперечливих систем, такий ось кумедний факт. Та й взагалі, схоже, таких понять, як абсолютна істина, натуральні числа, в принципі не може існувати. Як саме і чому, буде у наступних частинах.

Що з цього випливає? Всі процеси, всі обчислення, що відбуваються хоч у мозку, хоч у комп'ютерах, по суті своїй або неповні, або суперечливі, хоча при цьому дають хороше правдоподібне наближення до повних та несуперечливих обчислень.

Чому Пенроузу не подобаються суперечливі формальні системи, чому Пенроуз відмовляє в праві бути основою інтелектуальної діяльності? Як ми пам'ятаємо, в суперечливій формальній системі, для тих самих даних, можна вивести і справжнє і хибне твердження, аж до того, що 1 = 2 і так далі. На цій підставі Пенроуз натякає, що суперечливі системи будуть завжди(!)видавати суперечливі результати. Звідси ж у Пенроуза випливає дуже вузьке трактування хаотичних процесів, вважає, що це випадкові процеси, які у середньому можна промоделировать строгою формальною системою.

Насправді ж, суперечливі системи можуть у більшості випадків сходитися до справжнього результату, зовсім не обов'язково, що внутрішні суперечності відразу домінуватимуть і руйнуватимуть систему. Можуть бути такі системи, у яких суперечності мінімізуються. І навіть, будучи запущеними на абстрактному комп'ютері, вони залишаться недетермінованими, вони будуть неповні та суперечливі, але в більшості випадків вони видаватимуть правдоподібний результат. Чому Пенроуз вирішив, що суперечливі системи завжди руйнуватимуться своїми протиріччями? Про це Пенроуз мовчить.

Далі більше. Як ми бачили в попередніх частинах, процеси нашого світу, що у комп'ютерах, що у мізках, усі вони за своєю суттю розпливчасті та суперечливі. Але здебільшого вони видають правильний результат. Пов'язано це з тим, що ці процеси складаються або з багаторазового повторення схожих обчислень, або з великої кількості схожих елементів, таким чином, що поєднання цих повторень або елементів в більшості випадків видає стабільний і правильний результат. При цьому, звичайно, зберігається дуже маленький шанс, що невелика внутрішня суперечність розростеться і зруйнує всю систему. Але здебільшого система хіба що гармонізується, елементи, впливаючи друг на друга, мінімізують внутрішні протиріччя. Далеко не всі процеси в нашому світі високогармонізовані, але такі процеси є, і те, що відбувається в комп'ютерах і мозку, до них відноситься. Звідки відбувається така гармонізація у нашому світі - тема наступних частин. Залишається і крихітний шанс, що в наших світоглядах, у нашій інтелектуальній діяльності ми в чомусь глобально не маємо рації, що є невелика чревоточина в наших судженнях, яка може докорінно перевернути все наше уявлення про світобудову. Але й про це у наступних частинах.

Спочатку людське мислення ґрунтується саме на таких процесах. Немає довгих логічних ланцюжків, немає чітких правил. Натомість - короткі ланцюжки ситуація-відгук, без тривалих циклів переробки. Елементи цих ланцюжків мають велику кількість входів, і всередині елемента вхідні дані розпадаються на безліч паралельних, що дублюють один одного, нечітких шляхів, які на виході дають чітке рішення. Назвали ми такі елементи короткими та широкими правдоподібними правилами. Такі правила не займаються логічним висновком, вони вже пам'ятають готове рішенняна відомі їм ситуації. Механізм навчання таких правил теж далекий від чіткого логічного висновку та описаний у попередніх частинах.

Такі процеси хороші взаємодії з реальним світом, але формальна логіка їм дається важко. Проте, людський інтелект може працювати у режимі формальної логіки, може емулювати комп'ютерні обчислення. Може, але за рахунок набагато "важчих" процесів. Щоб прогнати в мозку обчислення простої логічної схеми, простої програми, залучаються міріади коротких нечітких правил, які у своєму поєднанні і дають результат, схожий на роботу суворої логіки. І оскільки правила ці призначені зовсім не для формальної логіки, то їх кількість, залучена для емуляції формальної логіки буде набагато більшою, ніж для взаємодії з реальним світом. І тому різні тварини не здатні до логічних роздумів, при цьому потрібен витончений людський мозок. Хоча побутові завдання, які різні тварини вирішують мимохідь, комп'ютеру не під силу.

Але є у таких "важких" процесів і перевага. Складається воно в тому, що мозок може виробляти на світ нові логічні побудови та комп'ютерні програми. високим ступенемправдоподібності, тоді як простий, але ефективний алгоритм, здатний лише безглуздо виконувати свою роботу. Складність похідних побудов на багато порядків менша, ніж ступінь задіяних у мозку процесів. Ось цей перепад складності і дозволяє протиріччя у тому, що суперечливі інтелектуальні процеси створюють справжні логічні побудови. Якщо цей перепад складності не брати до уваги, то не зрозуміти, звідки беруться ці справжні побудови.

Завдання, що вимагають складних логічних побудов, людина вирішує буквально методом "наукового тику". А саме, вигадати якийсь найпростіший варіант, прогнати в мозку його обчислення, побачити неправильні моменти, придумати наступний (необов'язково правильний варіант), знову проемулювати обчислення і таке інше. При хорошому тренуванні, такі побудови переходять до розряду швидких автоматичних дій, що не вимагають участі свідомості (і, тим не менш, все одно складність їх величезна), запам'ятовуються типові ситуації, і починає здаватися, що мозок працює як звичайний комп'ютер (відповідно до формальної логіки), хоча це зовсім не так.

Буває й таке, коли мозок довго "зводиться", "розганяється" на якесь завдання, йде закладка початкових даних, невдалих спроб, незрозумілих передчуттів та мук про те, що істина десь поруч. А потім бах, і спалах осяяння, все стає на свої місця і народжується нова істина. Може здатися, що ця істина народилася миттєво і прийшла з найвищих сфер. Але насправді ефект того ж, спалаху осяяння передувала довга і наполеглива робота, яка задіяла, змінювала і створювала міріади коротких і правдоподібних правил, намагалася їх якось поєднувати, гармонізувати, здебільшого невдало. І ось настає момент, коли всі ці правила вже гармонійно поєднуються один з одним, зливаються в єдиний гармонійний процес і всі разом видають назовні нову істину.

Штучний інтелект, наслідуючи такі принципи, цілком може бути запрограмований на звичайних комп'ютерах. Природно, ця програма спочатку буде націлена на недетермінованість і присутність внутрішніх протиріч. У той час як існуючі комп'ютерні програми, хоч і недетерменовані та суперечливі, але пишуться сучасні програмиприцілом на те, щоб у них було менше недетермінованості та протиріч. Звичайно, для штучного інтелекту краще задіяти ефективнішу архітектуру, яка допускає велика кількістьпаралельних та взаємодіючих процесів. Наприклад, квантову чи оптичну. Однопроцесорні електронні комп'ютери теж можна запрограмувати на інтелект, але потужності їм, ймовірно, бракуватиме.

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

Цеглини інтелекту

Почнемо з того, що коротко згадаємо, що в нас уже вигадали в цій галузі і чого не вистачає. Усе це докладно розписано попередніх частинах. Нагадуємо ми це, щоб зрозуміти чому саме так, а чи не інакше. Адже сам по собі алгоритм інтелекту не такий вже й складний, головне в ньому - принципи, треба зрозуміти, в якому напрямку рухатися і яких очікувати.

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

У предикатних мовах є набір незалежних правил, кожне з яких має свою сферу застосування. Виконавець у предикатних мовах перевіряє всі правила на відповідність поточній ситуації та застосовує потрібні правилаякі змінюють ситуацію (внутрішній стан), і таким чином може сам вибудовувати з правил довгі логічні ланцюжки. Звичайно, це складніше для виконавця, ніж виконання процедурної програми.

Процедурні мови хороші там, де алгоритм чітко відомий і вимагає швидкого ефективного виконання. Предикатні мови хороші там, де потрібно зберігати людські знання, логічні правила, а потім робити висновок на знаннях (наприклад, оцінювати різноманітні вхідні ситуації). Вони зручно додавати нові знання, без переписування всієї програми цілком. Є навіть модифікації, у яких після введення нових знань уся база знань приводиться у несуперечливий стан. Предикатні мови (на кшталт Прологу) до певної пори вважали майбутнім штучного інтелекту.

Але справа в тому, що процедурні та предикатні мови взаємовиражаються одна в одну і мають однакові проблеми, притаманні алгоритмам (формальним системам, див вище і далі).

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

По-друге, правила-предикати, що становлять логічні одиниці, надто "вузькі". У природному інтелекті логічні одиниці мають порядкибільше вхідних умов і ці входи обробляються за нечіткими критеріями. Причому за такого уявлення знання " розмазуються " , втрачають свою чіткість і формалізм.

Існуюча нечітка логіка (є такий розділ у науці) не годиться для застосування в предикатних мовах ось чому. Будь-яка нечіткість, коли зустрічається з іншою нечіткістю при логічному висновку, може породжувати безліч альтернативних варіантів, різних логічних ланцюжків. Причому ці варіанти можуть запросто наростати лавиноподібно. Існуюча нечітка логіка, наскільки мені відомо, не має ні з розпаралелювання ланцюжків, ні зі зворотним їх об'єднанням. Все що робить нечітка логіка - оперує тими ж логічними висловлюваннями, тільки замість логічних нуля та одиниці в ній застосовується речовий діапазон від нуля до одиниці, арифметичні операції для поєднання чисел з цього діапазону.

Є варіанти "комплексної" логіки, в яких при зверненні імплікації виникає невизначеність, яка виражається чимось на кшталт уявної одиниці, і яка бере участь у подальших обчисленнях, з можливостями розпаралелювання та злиття ланцюжків. Але поки що ця тема потребує подальшого розкриття.

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

Системи розпізнавання образів. Добре підходять на роль логічної одиниці нашого штучного інтелекту. Вміють добре класифікувати вхідну ситуацію та видавати рішення на вихід. Правда, тільки в тому випадку, якщо не потрібна тривала обробка, тому що внутрішньої пам'яті (стану) і перетворення цього стану такі системи не мають, являючи собою швидше за рефлекс "стимул-відгук". Зате з класифікацією розпізнавальні справляються чудово. Можуть навіть обробляти складні зображення (наприклад, розпізнавати людину зображення обличчя). Методи навчання систем розпізнавання образів ефективні та добре відомі. Навчена на наборі відомих прикладів, розпізнавання може вловлювати приховані закономірності і якісно узагальнювати досвід на невідомі приклади.

Принципи навчання. Коли відомий бажаний (еталонний) результат і реальний результат роботи інтелектуальної системи можна обчислити помилку цієї системи і підкоригувати систему, щоб вона працювала в правильному напрямку.

Методи корекції (навчання) бувають точні (їх називають локальними), і глобальні. Локальні методи вміють обчислювати помилку по всій системі, тому швидкі і ефективні. Глобальні методи такого робити не вміють, вони випадково змінюють параметри всієї системи, дивляться, наскільки успішно зміна вплинуло на роботу системи, і на цій підставі вирішують, чи зберігати цю зміну.

До локальних відноситься метод градієнтного спуску, коли для помилки можна обчислити її напрям, і поширити від входу в зворотному напрямку по всій системі. Такий метод, хоч він "лише" правдоподібний, дає хороші результати на практиці, наприклад, для навчання багатошарових персептронів (які часто називають нейронними мережами). Але застосуємо він (як і інші локальні методи) який завжди, оскільки структура помилки і її коригування може бути не відомий.

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

Принцип масштабу. Означає, що багаторазовим повторенням схожих процесів або поєднанням великої кількості схожих елементів, можна досягти високостабільного (або високоправдоподібного) результату. Схожий элемент/процесс - це не означає схожий в середньому, це означає, що елементи можуть суперечити і конкурувати один з одним, можуть бути нестабільні, але в результаті все-таки поєднуються (гармонізуються) у рішення з високим ступенем правдоподібності. Наприклад, у логічних ланцюгах комп'ютерів, усі елементарні частинки нестабільні, але термін їхнього напіврозпаду або дуже великий, або число частинок у логічному елементі дуже велике, так що розпад окремої частинки практично не дає збій логічних ланцюгів. Інший приклад, у штучних нейронних мережах окрема нейронний зв'язок слабко впливає рішення, самі зв'язку може бути суперечливі, але у результаті нейронна мережу видає переважно правильні рішення.

Підсумуємо. У нас є предикатні мови, які підходять для складних міркувань та переробки внутрішнього стану. Існують системи розпізнавання образів, які можна використовувати як логічні одиниці для предикатних мов. Є всеїдні методи навчання, якими ми сподіваємося автоматично створювати (навчати) нові алгоритми. Є принцип масштабу, який при втраті повноти та несуперечності дозволить нам підтримувати високу правдоподібність рішень нашого штучного інтелекту.

Алгоритм інтелекту

Нагадаю коротко суть генетичного алгоритму. Є такий метод – випадковий пошук. Генерується випадкове рішення, оцінюється, потім випадково змінюється. Якщо результат став кращим, рішення запам'ятовується. Після цього цикл повторюється. Використовується такий метод, коли незрозуміло як обчислювати рішення "науці". Виходить дуже довго. А якщо завести паралельно велику кількість різних рішень? Для тих, які прогресують в успіху (якість рішень хороша або підвищується з часом або в порівнянні з "сусідами"), створюємо екземпляри-копії, і змінюємо (випадково) ці екземпляри потихеньку. Ті з рішень, які на тлі інших виглядають погано, або не підвищують якість рішення з часом, ті екземпляри ми піддаємо все більшим випадковим змінам або зовсім видаляємо, а на їхнє місце ставимо знову згенеровані випадкові рішення. Звичайно, погані рішення мають меншу можливість бути розмноженими. Є ще одна операція (теж застосовується випадково), коли від двох різних рішень відкушується по шматочку, і ці два шматочки склеюються у нове рішення. Називається схрещування. Чим краще рішення, тим більша ймовірність, що воно піддасться схрещуванню. У результаті можна стрибком отримати рішення, яке має кращий результат, ніж обидва його батьки. Але може статися й навпаки. Якщо рішення вийшло краще, то воно надалі розмножується, якщо гірше - то таке рішення, великою ймовірністювидаляється. Найбільш ефективний такий пошук, коли ми знаємо структуру рішення, і застосовуємо операції випадкового зміни (мутації) і схрещування не кромса рішення з битикам, і з урахуванням цієї структури.

За рахунок того, що рішення не просто ведуться паралельно, а постійно порівнюються та обмінюються один з одним, такий пошук видає фантастичний стрибок продуктивності в порівнянні з випадковим пошуком і виявляється здатним перемелювати найважчі завдання. Здавалося б, типове випадкове рішення в середньому нічого цікавого не представляє, і ефективність його вкрай низька. Але варто лише безлічі рішень почати взаємодіяти між собою, як нетиповий результат (добре рішення) швидко з'являється та прогресує. Це про те, що Пенроуз радить вивчати хаотичні процеси в середньому, вивчати типові випадки, наголошуючи на тому, що крім типових випадків вони нічого не можуть породити, що, звичайно, несправедливо. Такий пошук являє собою ілюстрацію принципу масштабу, один із типових процесів, що гармонізуються.

Ось це і називається генетичний алгоритм, який може знаходити ефективні рішення в різних областях, коли навіть невідомо як шукати правильно рішення "по науці". Або "наукового" способу такого зовсім немає, як у випадку з автоматичним написанням програм. За ефективність генетичного алгоритму говорить насамперед те, що життя на Землі (а потім і розум) з'явилися саме за такими принципами. Чому такий гармонізаційний процес можливий – тема наступних частин.

Є такий напрямок у штучному інтелекті – генетичне програмування. Кожне рішення є не набір параметрів, а повністю програму, записану процедурною мовою програмування. З усіма її циклами, умовними переходами та внутрішнім станом у змінних. Відповідно результат рішення – це результат виконання цієї програми. Для того, щоб створити програму, застосовувався генетичний алгоритм, який з великої кількості випадково згенерованих програм, створював програму, найкращим чиномвирішальну цю задачу. У тій статті, що я бачив, завдання було – керування кермом машини. Тобто. результат рішення - це єдиний відгук на вхід, а процес, розтягнутий у часі. Генетичний алгоритм впорався успішно та створив програму, яка правильно керувала кермом. Завдання не дуже складне, схоже роблять і на нейронних мережах (хоча якийсь внутрішній стан там все одно є, і правила взаємодії стану з мережею розписані людиною). Але показовим є той факт, що автоматично було створено саме програму, що має внутрішній стан, різні цикли та розгалуження.

На жаль, далі стан справ на цю тему я не відстежував і більше нічого розповісти не можу. Бажаючі можуть пошукати словосполучення "genetic programming". Тому ж далі ми виходимо за межі вивченого і вступаємо в область припущень. Цілком можливо, щось із цих припущень уже відомо, і я займаюся винаходом велосипеда. Але все одно цікаво. :)

Подивимося, які властивості програм, отриманих за допомогою генетичного алгоритму. Такі програми можуть мати нескінченні (або дуже довгі) цикли, тому оцінка придатності повинна викидати програми, які працюють дуже довго, не видаючи видимого результату. Хід загалом правильний, але він, на жаль, викидає потенційно цікаві довгі логічні ланцюжки (як їх врахувати ще буде). Далі, при схрещуванні гілки програми бездумно шмагатимуться, породжуючи найчастіше безглуздий код. І якщо для простого завдання це не така вже проблема, то для завдань складніших, вийде або велика кількість непридатних рішень, тому що найменша зміна здатна геть-чисто зіпсувати працездатність програми, і ймовірно, в результаті користі буде мало. Або в програмі буде велика кількість надлишкових гілок, "мотлоху", який буде неймовірно поєднуватися один з одним у правильне рішення. Цей "мотлох" у процесі еволюції навчитися переживати внесені зміни, таким чином, щоб зміна не ламала фатальну програму. Але в будь-якому випадку, нам доведеться розпрощатися з ідеєю "тонких" логічних ланцюжків, які являли собою такі ж чіткі програми, які пише людина. Те, що вийде в результаті автоматичного написання програм, буде далеким від таких ланцюжків. Звичайно, з'являться алгоритми data mining, які зможуть цю суперечливу купу мінімізувати в ясний алгоритм, але цей ясний алгоритм, для подальшого вдосконалення в автоматичному режимі, треба буде повернути назад у "розмазаний" вигляд (або розмазування відбудеться саме, у процесі подальшого навчання). І є підозра, що витягнутий за допомогою data mining-а алгоритм матиме вужчий "кругозір" ніж його вихідний, "розмазаний" варіант. Подібне явище описувалося на попередніх частинах для розпізнавання образів.

Як ми пам'ятаємо, предикатні мови більш гнучкі до змін і пристосовані до запису людських знань, тому що складаються не з жорсткого каркасу програми, а з незалежних правил, які автоматично спрацьовують у разі настання відповідної ситуації (умов). Генетичний алгоритм працює ефективніше, якщо операції враховують структуру розв'язання. Запис у процедурному вигляді змушує генетичний алгоритм бездумно шматувати програму, породжуючи безліч непрацездатних варіантів. Тому запишемо програму у предикатному вигляді, і налаштуємо генетичний алгоритм, щоб він враховував таку структуру. А саме різні програми-рішення зможуть обмінюватися не шматками бітів, а цілком незалежними правилами. Випадкові зміни працюватимуть на рівні правил. Навіть більше, всередині однієї програми можна мати різну кількість правил неважливо в якому порядку. І правила ці можуть бути як дуже схожим другна друга, так і зовсім різними. Розмножувати і схрещувати можна як самі програми, а й правила всередині однієї програми. А все тому, що при виконанні програми, вони самі вишикуються у правильний ланцюжок, тому що виконавець не тупо йде по гілках програми (як у процедурній мові), а підбирає правила відповідно до поточної ситуації (кожне правило змінює ситуацію).

Але найцікавіше було б зробити банк правил загальним для всіх програм. Програма б у цьому випадку являла собою дані про те, які саме вона правила віддає перевагу із загального банку, і не виключено, інформацію про послідовність їх застосування. У цьому випадку критерії ефективності можна застосовувати не тільки до програм, але і до правил. Адже кожне правило робить вклад у кілька різних програм, і можна підрахувати, скільки з цих програм вдалі, а скільки - ні. І на цій підставі робити висновки про ефективність правил, і відповідно еволюціонувати не лише програми, а й правила (тобто розмножувати, схрещувати, випадково змінювати самі правила). Підвищення ефективності виходить від того, що схожі правила більше не дублюються у різних програмах, кожна програма має доступ до ширшого банку правил. Але найголовніше, правила оцінюються спільно, при перехресному використанні у різних програмах, що (імовірно) різко підвищує якість оцінки та еволюції правил.

Ось і вийшла найпростіша версія штучного інтелекту, цілком застосовна в різних іграх, в т.ч. комп'ютерних, в експертних системах та системах управління процесами. Підійде таке і для моделювання black-box процесів із внутрішньою пам'яттю, замість Марківських моделей (це такі процеси, у яких видно, що на вході та виході, але внутрішній стан та процеси незрозумілі, чорна скринька по-нашому).

Тут може виникнути закономірна пропозиція, щоб генетичний алгоритм міг виділяти шматки програми в незалежні підпрограми, та враховувати їхню структуру при зміні програми. Для процедурного запису це може підвищити ефективність, але все одно не позбавить властивих їй недоліків, адже все одно потрібна буде жорстка послідовність інструкцій, умовних операторів та циклів, яку може поламати випадкова зміна. У предикатній запису процедур як таких взагалі не існує. Проте є можливість розбиття глобальної ситуації на набір ієрархічних ситуацій і на послідовність ситуацій, таким чином, щоб з кожною підситуацією мав справу лише свій набір правил. У найближчій перспективі таке розбиття ніби має підвищити ефективність генетичного алгоритму. Але справа в тому, що в цьому інтелекті взаємодія правил носить більш складний характер, якому таке розбиття одночасно і властиво, і не властиво. Тому, нав'язавши таке розбиття ситуації, у найближчій перспективі ми можемо отримати зиск, але надалі це заважатиме. Докладніше про це буде далі.

Штучний інтелект, версія 2.0

У предикатних мовах (таких, як Пролог) немає послідовності кроків у програмі. Є лише набір правил, причому послідовність виконання цих правил спочатку не задана.

Виглядає це так:
правило n: результат якщо умова;
правило m: результат якщо умова;
і так далі.

Умова може бути досить складною, що включає як найпростіші вирази, так і інші правила, в тому числі і взаємно-рекурсивне застосування. Результат виконання правила - це теж складна умова, яка може позначати як кінцеву ситуацію, так і частину умови для перевірки застосування інших правил (і самого себе теж). Результати ці – точні та однозначні.

Якоїсь глобальної ситуації під час виконання предикатної програми немає. Є початкова умова, під яку інтерпретатор шукає перше правило, що трапилося, з відповідною умовою, результат цього правила додається до початкової умови. Пошук відповідного правила для нової умови повторюється. У результаті виходить ланцюжок висновку, який може вести до правила, що означає досягнення кінцевого результату. Якщо інтерпретатор вичерпає всі доступні ланцюжки, він почне відкочуватися назад, кожного циклу шукаючи наступне відповідне правиловибудовуючи нові ланцюжки.

Ще раз зверніть увагу, стан (ситуація) є початковою умовою плюс ланцюжок застосованих правил. При відкаті відповідно змінюється і ланцюжок застосованих правил.

При зчепленні правил в ланцюжку інтерпретатор може впасти в нескінченний пошук, хоча рішення може бути поруч. Тому, якщо інтерпретатор " розумний " він вміє чи розпізнавати місця потенційного зациклювання, чи може вести паралельно кілька ланцюжків рішень, вибираючи їх у результаті ту, що швидше призведе до кінцевої ситуації. З іншого боку, тому, хто пише набір правил, треба подбати, щоб мінімізувати ймовірність зациклювання.

Наприклад, завдання про місіонерів і людожерів, коли на одному човні треба перевезти натовп місіонерів і людожерів на інший берег. Човен вміщує лише двох людей. Якщо людожерів на березі залишиться більше, ніж місіонерів, то місіонерів з'їдять. При вирішенні завдання предикатною мовою, розписуються допустимі ситуації, щоб місіонерів не з'їли (в т.ч. рекурсивно) і допустимі переміщення човна (у човні має бути завжди одна або дві людини). Далі інтерпретатор сам будує дерево допустимих рішень, доки приходить до ситуації, коли весь натовп опиняється на іншому березі. Ланцюжок правил у разі несе у собі послідовність перевезень місіонерів і людожерів через річку.

Оскільки правила чітко зчіплюються один з одним у процесі пошуку рішення, у предикатних мовах вже на рівні правил задана ієрархія та послідовність їх застосування, щось схоже на угруповання процедури в процедурних мовах. Але як тільки ми робимо зчеплення між правилами менш точним, таке угрупування втрачається. І як саме вона виникне наново (або як допомогти їй утворитися) – це вже нове питання.

У предикатних мовах немає жодних циклів, немає умовних переходів, немає жорстко заданої послідовності дій. Виконавець завжди "знає", що йому робити, тому що наступний крок він підбирає під поточну ситуацію. Виконавець підбирає лише один крок, тому що на наступному кроці він здійснить оцінку зміненої ситуації та вибере новий крок, як би несподівано не змінилася ситуація. Це допоможе виконавцю виплутатися, якщо частина його програми дала збій чи прийняла неправильне рішення. Замість того, щоб катастрофічно падати в неправильному напрямку, виконавець ще раз оцінить ситуацію, і, можливо, наступний крок цю ситуацію все-таки покращить.

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

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

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

Для початку зробимо глобальний стан програми (простий масив чисел). Частина цього масиву – вхідні дані. Вони регулярно оновлюються ззовні. Чи дозволяти програмі їх змінювати - це не принципове питання, головне, щоб вони регулярно оновлювалися. Частина цього масиву – внутрішній стан програми. Частина, що залишилася, - вихідні дані. Внутрішні та вихідні осередки відрізняються тільки тим, що з вихідних осередків зчитується рішення. І входи, і виходи завжди використовуються для запису/читання одного й того самого параметра. Наприклад, вхід №1 – швидкість, вхід №2 – датчик палива, вихід №3 – зміна положення керма, вихід №4 – зміна швидкості. Призначаємо номери довільно, в процесі навчання програма сама повинна навчитися розуміти, де який вхід і вихід.

За основу правила візьмемо, наприклад, багатошаровий персептрон (який часто називають просто нейронною мережею). Зауважте, алгоритм навчання такої нейронної мережі всередині програми нам поки що невідомий. Таких нейронних мереж ми матимемо багато. Всі разом вони складатимуть набір правил програми. У кожну нейронну мережу на вхід надходить все глобальне стан програми (кількість входів дорівнює кількості осередків стану). Виходів нейронна мережа має небагато. Кожен вихід теж відповідає якомусь із осередків стану. На кожній ітерації те, що вийшло на виході кожної нейронної мережі, додається до глобального стану (значення на виході можуть бути і негативні). Всі мережі опитуються одночасно на основі поточного стану і своїм сумарним впливом створюють новий стан.

Кількість виходів та їх прив'язка кожної мережі спочатку вибирається випадково. Еволюційні зміни побудуємо таким чином, що вони в більшості випадків залишають незмінною комутацію між осередками глобального стану та входами/виходами нейронної мережі. І лише з невеликою ймовірністю зміни можуть переставити вхід або вихід мережі на іншу комірку. Потрібно це тому, що поки ми вважаємо, що кожен осередок - це певний параметр (нехай навіть і внутрішній), тому, якщо ми переключимо вхід/вихід мережі на інший параметр, до якого він не привчений, то результат буде скоріше невдалим. На жаль, таким маневром ми знову втрачаємо деякі цікаві властивостісправжнього інтелекту, зате отримуємо ефективність прямо зараз. До цих властивостей ми повернемося.

У процесі еволюції можна змінити і кількість осередків глобального стану. Тоді всі нейронні мережі коригуються відповідно. Якщо осередки клонуються, то клонуються відповідні входи та виходи нейронних мереж. Якщо осередки видаляються, то й відповідні входи/виходи видаляються з усіх мереж.

Є й еволюційні зміни, які можуть збільшувати чи зменшувати кількість виходів окремої нейронної мережі.

Як саме програма, що складається з набору таких нейронних мереж, буде видавати рішення? Точніше, як після чергової ітерації зрозуміти, що програма винесла своє рішення, і вважати це рішення із вхідних осередків? Це теж цікаве питання, яке потребує експериментів. Перші міркування такі. Вихідні значення стабілізуються. Або є спеціальні виходи, які сигналізують про те, що відповідь готова. Ці виходи самоналаштовуються в процесі еволюції.

Після зняття рішень програма має працювати далі і, швидше за все, відштовхуючись від свого внутрішнього стану. Як підштовхнути її до подальшої роботи, адже програма стабілізувалася у конкретному рішенні? По-перше, після зняття рішення буде проведено перезапис вхідних осередків актуальними даними (вважаємо, що поки мережа виносить рішення, вхідні дані практично не змінилися). По-друге, можна завести спеціальну вхідну комірку, в яку поміщати велике число при старті ітерації. Далі є чи сама навчитися змінювати це число, чи можна зменшувати його ззовні, даючи мережі зрозуміти, що час іде. Загалом ідей для експериментів вистачає.

Тепер пояснення чому саме так.

Насамперед ми відмовилися від вибудовування ланцюжків правил, і змусили кожне правило писати результат своєї роботи у глобальний стан. Цим самим ми унеможливили побудову довгих ланцюжків виведення та зворотні відкати, зате отримали швидший відгук і широку і нечітку оцінку ситуації. Зауважте, паралельна обробка кількох варіантів, де у кожному варіанті свій глобальний стан, нікуди не поділося. Але такого широкого розгалуження, як у оригінальному предикатному інтерпретаторі, у нас немає. Якби ми спробували робити розгалуження ланцюжків виведення на широких нечітких правилах, кількість варіантів катастрофічно зашкалило б ще ранніх стадіях побудови рішення.

У результаті в нас вийшло щось зовсім інше, хоча як і схоже на оригінальний висновок на предикатах. Це щось більше нездатне до побудови складних і чітких висновків, але здатне діяти в складній, швидко мінливій обстановці, та ще й має якісь зачатки правдоподібного логічного висновку, чого не може робити вихідний варіант. Висновок складних і чітких висновків до нас ще повернеться, правда несподіваним способом, А поки що вийшов інтелект буде без нього.

Проте щось, що вийшло, може вирішувати логічні завдання (на зразок гри в шахи) за своїм, схоже на те, як це робить людина. Таке мислення можна назвати ситуативним. Воно відштовхується не від побудови довгих логічних ланцюжків, а від оцінки того, якою є поточна ситуація, і як цю ситуацію змінити. Ситуація включає і зовнішні дані, і внутрішній стан, те, що система "надумала" до поточного моменту. Оцінка та ухвалення рішення куди рухати далі проводиться на кожномукроці, на відміну процедурних алгоритмів і логічного висновку, які можуть закопатися в довгі міркування, випавши з реальності. Тому ж, випадкові зміни такої програми не стануть фатальними для працездатності, на відміну від процедурного запису. Навіть потрапивши в незрозумілу ситуацію, або припустившись помилки, така програма не впаде в ступор, а намагатиметься щось зробити, адже в оцінці ситуації бере участь не невелика гілка алгоритму, а вся сукупність правил. І нехай навіть програма спочатку зробить хаотичні метання, вона рано чи пізно потрапить у знайому ситуацію і зможе її повернути у потрібний бік.

Ситуативне мислення ґрунтується на трьох речах. Перше, це узагальнення ситуації до знайомого випадку (як у системах розпізнавання образів). Наприклад, з різноманітного розташування фігур на шахівниці, мисляча система знаходить щось спільне, дає оцінку ситуації, чи є загроза своїм фігурам, чи є шанс зробити атаку без втрат, далі можуть бути більш конкретні ситуації-комбінації. Друге, це досвід (бібліотека коротких правдоподібних правил, які застосовуються для зміни ситуації на краще без довгого логічного висновку). На основі оцінки ситуації пропонуються альтернативи зміни цієї ситуації, наприклад, приблизні дані про те, як рухати фігури. Синтаксичний аналізатор переводить ці приблизні дані у правильні переміщення фігур на шахівниці (якщо правильні переміщення підібрати не можна, то береться наступна альтернатива). Подібні ситуації (і відповідно для них рішення) можуть зустрітися на будь-якому етапі партії, і ми відразу ж отримуємо для них рішення, без тривалого перебору варіантів різних ходів. Так, ці варіанти "всього-лише" правдоподібні, але вони включають величезний досвід реальних партій і цілком застосовні для нових партій. Причому ці ситуації включають деяке знання про те, як буде розвиватися партія на багато ходів вперед, але не на рівні переміщень фігур, а на рівні зміни тактичної ситуації (яка може включати в себе і нескінченні цикли, на кшталт підтримки рівноваги для досягнення нічиєї) . А якщо все-таки вони призведуть до програшу, то бібліотеку буде доповнено новими правилами, які спрацюють у своїй ситуації. Третє, це внутрішня перевірка ймовірного рішення на кілька кроків уперед (тобто щось придумати, а потім прикинути, наскільки добре це щось змінить ситуацію, ведення кількох альтернативних рішень, наша система цього поки що не вміє, вона дає лише один варіант, але про це ще буде).

До речі, ви, можливо, замислювалися при вивченні нейронних мереж щодо того, щоб змусити їх працювати не тільки на основі вхідних даних, але ще й навчити перетравлювати внутрішній стан і виконувати складні програми? Мені було цікаво. Правда, тоді давно, я так і не придумав нічого путнього, як таку мережу навчати. Зате тепер є відповідь трохи з іншого боку.

Чому ми зробили багато нейронних мереж, замість однієї великої, яка могла б апдейтувати весь стан? Справа в тому, що для ефективної роботи генетичного алгоритму бажано мати набір незалежних правил, кожне з яких відповідало б за якусь конкретну (нехай і приховану від нашого розуміння) дію. До того ж такі правила можна обмінювати між програмами, робити з них різні набори-програми, змінювати та клонувати окремі правила, і навіть формувати бібліотеку найбільш успішних (або навіть у майбутнє бібліотечних) правил. Зробити таке з однією великою нейронною мережею буде важко. До того ж, для звичайних нейронних мереж колектив мереж, як правило, справляється краще, ніж звичайна нейронна мережа.

Зі схожих міркувань кожна нейронна мережа має лише невелику кількість виходів. Тобто. кожне правило компетентне за винесення свого невеликого рішення. Але при цьому кожна мережа має входи від усього стану, з розрахунком на те, щоб мати глобальне бачення ситуації, але при цьому не реагувати на більшість випадків, що не стосуються області дії конкретного правила. Кожна мережа має навчитися цьому у процесі еволюції. Тому навіть при впливі на глобальний стан відпрацюють саме ті правила, які застосовуються в поточній ситуації. Цілком можливо, що слід обмежувати і кількість входів, щодо цього у мене міркувань немає, тут допоможе тільки експеримент.

У результаті, після навчання має вийти програма, що складається з набору нейронних мереж. Робота програми починається з початкового стану, в якому задані вхідні осередки, решта осередків може бути обнулена (або мати невеликі випадкові значення). На кожній ітерації на вхід всіх мереж подається глобальний стан, розраховується результат роботи всіх мереж, і до глобального стану одразу додається вихід усіх мереж. Настає така ітерація. Зрозуміти, що рішення готове, можна, наприклад, через те, що вихідні значення стабілізувалися, або надійшов сигнал на спеціальний вихід, що сигналізує про те, що рішення готове. Після чого зчитуються вихідні значення, завантажуються нові вхідні значення та програма продовжує роботу з оновленими даними.

Створюється ця програма автоматично за допомогою генетичного алгоритму. Головне, щоб у нас був хоч якийсь критерій оцінки ефективності отриманих програм (тобто краще одна програма ніж інша), і цього достатньо, щоб генетичний алгоритм запрацював. Для завдань реального світу такий критерій зазвичай є. Це можуть бути й набори прикладів роботи, які вважаються добрими та поганими, для різних ситуацій (системами розпізнавання образів теж навчаються на прикладах). Навчавшись на відомих прикладах, програма, як і системи розпізнавання образів, зможе узагальнювати свій досвід на невідомі приклади, у тому числі таке узагальнення може мати якісний характер, вловлювати приховані закономірності в наборі прикладів і робити несподівані (але правильні) висновки. Для завдань, які потребують точного логічного висновку та чіткого рішення, з цим складніше (але про це ще буде). Можуть бути й варіанти, щоб змусити програми боротися одна з одною, наприклад, грати в шахи, і визнавати ефективною ту, що грає краще, тоді зовнішня оцінка не потрібна.

Генетичний алгоритм випадково генерує набір правил (нейронних мереж) і набір програм. Усі правила розміщуються у загальному сховищі. Кожна з цих програм складається зі свого конкретного набору правил, взятих із загального сховища. Самі правила у сховищі, програма тільки посилається на них. Для оцінки ефективності всі програми запускаються паралельно (кожна має свій стан та набір входів-виходів). Найкращу оцінку отримують ті програми, які спрацюють швидше та ефективніше. Штрафуються ті програми, які довго думають, або зовсім не ухвалюють рішення.

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

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

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

Яким еволюційним змінам можна піддавати правила (нейронні мережі). Як уже говорилося, одна з таких змін, це зміна кількості осередків внутрішнього стану, яка торкається всіх правил. Потребу збільшення чи зменшення кількості осередків стану можна більш-менш оцінити по динаміці роботи програми, у тому, наскільки часто стану змінюються, наскільки вони корелюють друг з одним, наскільки впливають вихідні значення, і наскільки загалом ефективна населення програм. Наступні еволюційні зміни, це клонування правил, випадкове зміна правил (зокрема, "струшування ваг" нейронної мережі, як із відпалі, що нижча ефективність, то сильніше струшування). Клонування разом із наступним зміною правил може чіпляти у себе і клонування програм. Наприклад, у вихідній програмі залишається посилання вихідне правило, у клонованій програмі - посилання клоноване правило. Або у вихідній програмі з'являється посилання додатково на клон правила. Правила можуть схрещуватися, коли від двох нейронних мереж беруться по шматку та склеюються у третю мережу. У правилах (нейронних мережах) може випадково змінюватись кількість виходів, як описано вище, може змінюватися кількість та структура внутрішніх зв'язків.

Для кожного правила можна підрахувати його ефективність, на основі того, наскільки успішні програми, в які це правило входить. Причому можна врахувати і той факт, що правило може входити в програму, але бути неактивним, внаслідок чого не впливати на роботу програми. Грунтуючись на такій оцінці, ми можемо спрямовано еволюціонувати банк правил, а саме частіше розмножувати успішні правила і з більшою ймовірністю видаляти або змінювати неефективні правила. Можемо і створювати програми на основі найефективніших правил. Або в процесі змін з більшою ймовірністю включати до програм найкращі правила. Зауважте, у банку зберігаються правила з різними областями дії, проте вирішують загальне завдання.

Але найцікавіше, схоже, що для кожного правила можна розрахувати як ефективність, а й помилку! А саме, зрозуміти, як це правило мало б діяти правильно за заданих вхідних умов. Адже у нас є приклади спрацьовування правил (нейронних мереж) у хороших програмах(вважаємо, що це були правильні рішення складових програму правил) та приклади роботи в поганих програмах (вважаємо, що це були неправильні рішення складових програму правил). Відповідно, можна спробувати посилити хороші рішення, які видавала кожна нейронна мережа, і мінімізувати погані рішення. Значення входів і виходів можна відтворити без проблем, і на їх основі побудувати навчальну вибірку, яку віддати в алгоритм зворотного поширення помилки. Головна тут проблема – це розгорнути тимчасову послідовність того, що було на входах та виходах до навчальної вибірки, ось тут і можуть бути неоднозначності. Адже ми не можемо вважати, що всі рішення (пари вхід-вихід) у правильній мережі були ідеально правильними, а в неправильній – ідеально неправильними. Може це вина зовсім іншого правила, яке на самому фініші "затерло" правильне рішення? Вплутуватися в розгортання всієї послідовності рішень - безнадійна витівка. Тому доведеться подумати над формуванням вибірки на основі цих часових послідовностей. І навіть якщо при формуванні навчальної вибірки ми викинемо багато прикладів, залишивши лише однозначні, все одно це буде прогрес.

Подивимося тепер, що маємо. А маємо ми тепер засіб для автоматичного написання програм, які можуть орієнтуватися в задачах реального світу, гнучко діяти в широкому діапазоні ситуацій, відновлюватися після помилок, мати певну внутрішню логіку та прогнозування/моделювання ситуації. Чого вони не можуть, так це розвивати тонкі логічні ланцюжки, робити довгі висновки. Хоча для багатьох завдань такий інтелект зможе вдавати, що в нього відбувалися глибокі логічні процеси, хоча насправді він лише застосовував заготівлі, отримані під час навчання. Бракує такому інтелекту та самостійності, багато чого в ньому ще треба робити людині. Та й в апаратній частині те, що ми отримали, не зовсім схоже на те, що вигадала природа.

Штучний інтелект, версія 3.0

Тепер додамо штуку, що зветься емулятор зовнішнього середовища. Нам будуть потрібні два різновиди, один - для емуляції зовнішнього середовища, другий - для прогнозування. Буде ще третій різновид, але про нього трохи пізніше.

Емулятор у режимі прогнозування повинен вміти видати передбачувану поведінку зовнішнього середовища на невелику кількість кроків уперед, знаючи історію попередніх станів та поточний вплив на середовище з боку програми, що управляє. Тепер програма буде впливати не відразу на зовнішнє середовище, а спочатку на емулятор. А на емуляторі можна подивитися прогноз, чи в потрібний бік змінилося середовище від впливу програми. Тому можна завести кілька екземплярів програм, навчених подібним чином, але відрізняються один від одного. Для кожної з них у реальному часі завести свій емулятор середовища. І на кожному кроці у зовнішнє середовище видаватиме вплив тій із програм, яка отримає кращу оцінку на емуляторі. Інший варіант - приймати те рішення (необов'язково краще), яке прийме "більшістю голосів" колектив програм, тоді це рішення відрізнятиметься надійністю.

Емулятор у режимі емуляції схожий на прогнозування, але використовується в процесі навчання програм, коли справжнього зовнішнього середовища немає. У попередній версії ми брали готові приклади-нарізки, зняті із зовнішнього середовища. Так ось, замість цих прикладів можна створити емулятор, навчений відтворювати типові ситуаціїдовкілля. Адже прикладів може бути дуже багато і ефективніше замість цієї прорви використовувати компактний емулятор.

Емулятор в режимі навчання можна ставити на реальні сенсори і залишати його на тривалий час. Закономірне питання – а чому на сенсори не поставити для навчання одразу потрібну програму? Відповідей тут кілька. По-перше, ми можемо захотіти навчити наступну версію програми, і тоді нам знову доведеться ганяти реальні пристрої. По-друге, на реальних сенсорах неможливо поекспериментувати, чи правильно навчилася програма, чи такі експерименти можуть бути дорогими, а емулятор може працювати в режимі прогнозування.

Крім цього, емулятор можна налаштувати на те, щоб він міг, по-перше, видавати випадкові відхилення від поведінки середовища, і, по-друге, комбінувати різні часові послідовності з поведінки середовища. Оскільки емулятор навчений на зовнішньому середовищі, такі комбінації будуть "придумані" правдоподібно. Що розширює набір прикладів на навчання програм.

Звичайно, все, що відбувається в реальному часі може знову-таки бути записано і використано для автоматичного навчання програм.

Програми для емулятора можна виконувати за тією ж технологією, що описана вище.

Якщо зовнішнє середовище дуже складне (як при грі в шахи), то емулятор буде побудований за технологією, дуже близькою до керуючої програми. Аж до того, що під час навчання програми гратимуть один з одним, і виживатиме сильна програма. Емулятор для прогнозування може бути доналаштований так, щоб не просто шукати кращий хід, а й щоб підлаштовуватися до стилю гри супротивника. Таким чином, при грі з людиною, в "мозку" машини відбуватиметься ціла битва між багатьма програмами та їх противниками-емуляторами, перш ніж винести остаточне рішення.

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

Чи є в природному інтелекті таке розпаралелювання, з конкурентним прийняттям рішень та емулятором середовища? Здається так, але навряд чи в такому прямому вигляді. Те, що утворилося в ході природної еволюції, напевно, складніше і ефективніше. Але тут, для простоти та якнайшвидшого досягнення ефекту ми ввели конкуренцію та емулятор штучно.

Після введення емулятора довкілля та конкурентного колективного рішення, можна вводити нові властивості нашого штучного інтелекту.

Блукаючі фонові рішення. Необов'язково після ухвалення рішення змушувати всі програми перебудовуватися на осмислення наступного кроку. Можна залишити деякі (хороші за якимись критеріями) програми продовжувати довго думати про минулі ситуації. Цілком можливо, що вони все-таки щось надумають, і це щось виявиться корисно або в поточній (нехай навіть змінилася) ситуації, або корисно для подальшого навчання. Наприклад, програма, що відстала, може розгадати задум ворога або знайти цікаве тактичне рішення. Тоді можна буде спробувати розгорнути поточну ситуацію до цього рішення (штучний інтелект "передумав"), а якщо партія на той час уже закінчена (або пішла в іншому напрямку), то знайдене рішення можна буде використати у навчанні. Як саме здійснюються обидва ці варіанти – це теми окремих досліджень. Штучний інтелект при цьому весь час буде в "онлайні", і думатиме, самовдосконалюватиметься, вестиме діалоги сам із собою, майже як людина.

Вибух варіантів. Можна спробувати виявляти ситуації, коли окрема програма (або колектив програм) стоїть на роздоріжжі, коли виявляється неоднозначна ситуація, і цю ситуацію примусово розгалужувати в нові гілки рішень (програма + емулятор). Знову ж таки, як детектувати такі ситуації, як їх розгалужувати – тема окремих досліджень, неоране поле. Поки що це лише на рівні ідеї, ідеї про те, що при неоднозначностях інтелект має вміти робити розгалуження варіантів. Але розгалуження це зовсім не те, що перебір дерева рішень. Це як розмазування хвильової функції, як комплексна арифметика, коли операції з неоднозначністю (уявної одиницею) видають кілька варіантів, які надалі за правилами тієї ж арифметики взаємодіють між собою. Також і розгалужені рішення у штучному інтелекті повинні продовжувати спільне існування, продовжуючи зв'язок один з одним (як саме – теж питання), і в підходящий моментчасу гілки можуть сходитися на єдине рішення. Причому розгалуження наступати буде тупо, як із переборі варіантів, саме у ті моменти, де найцікавіше.

Як саме можна буде виявити точку потенційного розгалуження? Для звичайних нейронних мереж є алгоритми, що збільшують ємність нейронної мережі, якщо її не вистачає для обробки даних, і зменшують ємність мережі, якщо вона надмірна для прийняття рішень. Зміна ємності в нейронній мережі це додавання та видалення ваг-зв'язків між нейронами та самих нейронів (читай додавання/видалення рядків у нелінійній матриці та обнулення елементів, що не впливають на рішення). Існує цілий напрямок для нейронні дерева, які наростають при необхідності. Так і в колективі програм можна перевіряти, над чим "думають" різні програми, схожі ситуації мінімізувати і намагатися згенерувати нові напрямки "думки". В оцінці цього, в першу чергу нам допоможуть емулятори, треба дивитися наскільки вони видають бачення зовнішнього середовища.

Можна перевіряти окремі програми, наскільки вони однозначно видають рішення. Якщо програма блукає між кількома рішеннями, чи не сходиться до рішення, можна на цю ситуацію кинути додаткові програми, ініціалізовані цієї ж ситуацією, але з випадковими відхиленнями, щоб стимулювати " хід альтернативних думок " . Може розгалуження стати в нагоді і при навчанні, коли можна буде визначити, наскільки програма неоднозначна у вирішенні, і розділяти неоднозначні випадки на кілька однозначніших програм, щоб вони успішніше працювали спільно в колективі. Але знову ж таки, все це поки що лише гарні ідеї, ідеї для експериментів.

Вони бачитимуть сни

Добре, коли ми маємо приклади правильної поведінки, або можна проемулювати реакцію середовища. Для природного інтелекту (і майбутнього штучного) така розкіш не завжди доступна. Інтелект намагається щось зробити із середовищем, із цього щось виходить правильно, щось ні, щось залишається з незрозумілими наслідками. Як на основі цього навчатись?

Для цього введемо третій різновид емулятора зовнішнього середовища. Вона запам'ятовуватиме прояви зовнішнього середовища, те, що робив штучний інтелект у відповідь на ці прояви, і до чого це призвело. Це не виключає того, що в міру накопичення досвіду такий емулятор зможе поєднувати в собі два попередні різновиди - емуляцію і прогнозування середовища, і буде побудований на принципах, аналогічних нашому штучному інтелекту.

Як навчатися, коли немає точної інформації, які дії правильні, а які ні? Невеликий відступ. Мережі Хопфілда навчаються на прикладах шляхом "сумаризації" всіх прикладів, без критичної оцінки, без корекції помилок. Навчена мережа Хопфілда за частковим або зашумленим образом у процесі ітерації (сходження до енергетичного мінімуму цього образу) може відтворити вихідний образ. Так ось, після навчання в мережі іноді виходять хибні образи. Для того, щоб помилкові образи усунути, навчальні приклади запускають на вхід, і якщо мережа сходиться до хибного образу, такий затирається. У певному роді мережа " бачить сни " з урахуванням раніше отриманої інформації, й у сні хибна інформація заміщується правильної информацией. Мережі Хопфілда застосовуються для простих образівАле нам цікавий саме принцип.

Схожим шляхом ми можемо піти тут. Після накопичення інформації від зовнішнього середовища, інтелект від зовнішнього середовища відключається і працює тільки з емулятором. Емулятор відтворює ситуації, і якщо інтелект видав хороше рішення, це рішення посилюється, якщо погане, це рішення замінюється щось інше. На випадкове, наприклад. Головне, щоб нове рішення не було схожим на погане. При цьому будуємо зміни таким чином, щоб накопичені добрі рішення не втратилися, і нові погані рішення не з'явилися.

Як мінімум, така перебудова може здійснюватись за допомогою генетичного алгоритму. Не виключено, що можлива і перехресна оцінка кожного правила, що становить програму, так що можна буде точно обчислювати помилку та корекцію кожного правила. Адже деяка інформація про те, чи добре чи погано відпрацювала програма, у нас є. Важче тут у тому плані, що якщо рішення приймав колектив програм, то інформація про правильність рішення відома лише для програми, що перемогла. Зате ми маємо інформацію про поведінку програм, тривала за часом, і з неї вже можна витягувати подробиці.

Ось і виходить, якщо штучний інтелект поставити в умови природного, з'являться тривалі фази неспання, під час якого шляхом проб і помилок накопичується інформація, і після них фази сну, під час яких ця інформація якісно перетравлюється. Сам цей процес вийде тривалим і кропітким. У природному інтелекті такий механізм, одного разу з'явившись у процесі еволюції, швидко показав свою корисність і розмножився на наступні покоління. Штука хіба що й дуже складна у тому, щоб з'явиться під час еволюції.

Вони відчуватимуть біль

Інший варіант навчання, коли інформація про правильність дій недоступна. Нагадаю, при навчанні методом відпалу для перебудови рішення застосовуються випадкові зміни параметрів цілком по всьому рішенню. Сила таких змін (температура) починається з високої, і поступово зменшується, коли рішення сходить до кращим варіантом. Якщо зміни нас не влаштовують, сила змін (температура відпалу) збільшується у пошуках зручнішого варіанту.

Тому у процесі еволюції виробився механізм болю. Неправильна дія – і ми миттєво відчуваємо, як наші нейронні зв'язки пожирає жорстоке полум'я. Така струс не минає безслідно. Наслідки неправильної дії виявляються буквально випаленими у наших нейронних зв'язках. Так що ми уникаємо всіма силами повторення цих неправильних дій. Механізм простий, але ефективний.

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

На вищому рівні інтелекту "біль" виявлятиметься і щодо того, що "голова розколюється від ідей", "неможливо зібратися з думками" і т.п. Стан гарного рішення супроводжуватиметься чіткістю думки, гармонією та "душевною рівновагою".

Ансамблі правил

Уявімо, що в процесі еволюційного навчання, якась частина правил клонується так, що вони залишаються взаємопов'язаними з батьківським екземпляром. Наприклад, вони залишаються приєднані до тих самих входів і виходів, активуються практично одночасно. При цьому правила один від одного все-таки відрізняються, і подальша їхня еволюція може йти різними шляхами. Тепер зробимо те щоб при змінах ця частина правил залишалася переважно взаємопов'язаної, тобто. щоб виходи, виходи, активація та рішення, що видаються, багато в чому збігалися. У цьому правила ансамблю можуть брати участь у інших місцях, зокрема й у інших ансамблях.

Вийде, що рішення ансамбль виносить разом усіма своїми правилами. За рахунок колективної роботи рішення вийде якісніше (принаймні так і виходить для звичайних нейронних мереж). Але при цьому ансамбль матиме ще й якесь нове, якісно інше уявлення ситуації, зможе діяти далеко за межами вихідної ситуації, за рахунок того, що правила з ансамблю беруть участь в інших місцях (і ансамблях) програми (а це вже припущення, що стосується саме ансамблів, що беруть участь у програмі). Можна сказати, бачення ситуації буде більш високорівневим, більш узагальненим, більш розширеним і збагаченим досвідом інших ситуацій. Таким чином, у прикордонних чи нових ситуаціях ансамбль зможе генерувати (можна навіть сказати, фантазувати) нову реальність, що продовжує за змістом стару, ту, що він бачив під час навчання.

Тут починають потихеньку виявлятися такі речі як абстракції-категорії, асоціативне мислення. Починають виявлятися " важкі " логічні ланцюжки, які рахунок порядки вищого бачення ситуації можуть видавати " тонкі " логічні ланцюжка, близькі до формальної логіки і суворим алгоритмам.

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

Все це поки що гарні припущення, але, мабуть, йдеться саме в такому напрямку. Як саме такі ансамблі утворилися та підтримуються в мозку – поки що незрозуміло (але погодьтеся, еволюційно це виглядає досить просто). Як ансамблі підтримувати та вести у програмі – теж питання. Мабуть ніякої точної фіксації правил на ансамблі немає, все вирішується динамічно, шляхом поєднання правил, що мають сумісність під конкретну ситуацію, все за тими самими принципами конкуренції та взаємодії. При цьому правила та ансамблі так само динамічно зможуть шикуватися в ієрархію, проте ніякої постійної ієрархії не буде, не буде метарівнів і переходів між ними, не буде жодної чіткої формалізації з виділенням зв'язків система-підсистема. Докладніше про те, за рахунок чого це може утворитися, буде далі. І погодьтеся, з погляду природного перебігу речей, все виглядає досить просто.

І знову хвилі, частоти та голографія

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

Що у нас є, так це властивість природного нейрона накопичувати потенціал, і при перевищенні критичного порога розряджатися серією сигналів по своїх виходах (пам'ятаєте про частотні нейронні мережі в попередніх частинах?). Ці серії, своєю чергою, щоразу піднімають (чи знижують) потенціали нейронів, які приєднані до входів вихідного нейрона. Порогові потенціали, частота і тривалість розрядки - параметри, які, очевидно, налаштовуються в процесі навчання.

Ось і виходить, що не потрібен ні тактовий генератор, ні цикли та умовні переходи, ні глобальний стан та примусове розпаралелювання ситуації.

Колективи таких нейронів вже несуть у собі внутрішній стан, і складну ітеративну логіку, і умовну обробку.

Причому пачки нейронів можуть поєднуватися в альтернативні (паралельні) ланцюжки, кожен зі своїм баченням ситуації, і на виході, всі ці ланцюжки самі між собою конкурують за те, чиє рішення буде подано на вихід. І така обробка цілком піддається моделюванню на звичайних комп'ютерах. Інша річ, що спочатку вона, швидше за все, буде ненажерливішою до ресурсів, ніж модель інтелекту з примусовим розпаралелюванням, але в перспективі, менш регульована модель, здається, виявиться більш ефективною.

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

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

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

Асоціації, категорії, узагальнення та інша філософія

У розділі про ансамблі ми згадали, що для правил добре б брати участь у різних місцях програми, чому правила навчаться якісно узагальнювати досвід із абсолютно різнорідних ситуацій. А саме, вони будуть на шляху високорівневих абстрагування, таких як асоціативне мислення та категоризація. Наприклад, зможуть винести щось спільне з понять "біле" та "пухнасте" і застосувати це в ситуації "літає". Така обробка зробить мислення набагато потужнішим і дозволить у динаміці вибудовувати ансамблі правил під абсолютно різноманітні ситуації.

Щоб отримати такі властивості, ми штучно запровадили ансамблі та їх підтримку. Якими ще способами можна отримати властивості, що дозволяють правилу, будучи навченим під одні ситуації (поняття), брати участь і донавчатись у цілком відмінних ситуаціях (для інших понять, як у прикладі про біле/пухнасте/літає)?

Поки що вимальовується два варіанти.

Варіант перший, динамічне поєднання входів та виходів. Пам'ятаєте, спочатку ми поставили жорстку відповідність входів та виходів правил (нейронних мереж) з осередками глобального стану? Еволюційні зміни були при цьому налаштовані так, щоб щонайменше змінювати ці відповідності. У наступному варіанті, без глобального стану, входи та виходи різних правил-Мереж теж жорстко з'єднувалися один з одним.

Тепер дозволимо в процесі роботи та в процесі навчання входам та виходам змінювати положення один щодо одного. Виникає два питання. По-перше, як визначити, наскільки сумісні елементи одержаної комбінації, наскільки це з'єднання ефективно вирішує завдання? По-друге, як швидко підібрати сумісні/ефективні комбінації входів та виходів, адже комбінацій дуже багато?

Найпростіший варіант - кожному входу і виходу правила зіставити ознака-сумісність, яка змінюється еволюційно, і, можливо, є спосіб доналаштовувати цю сумісність більш точно, у процесі навчання, за результатами роботи правил. (Чи може сумісність виходів обчислюватися в процесі роботи правила? Чи це було б ефективно?) Для входів і виходів у зовнішнє середовище теж знадобиться набір сумісностей, який буде частиною загального набору. Під час роботи програми з'єднуватимуться правила лише з урахуванням сумісності входів-виходів. Завдання підбору такої сумісності нелегке в обчислювальному плані, але все-таки й не дуже важке. Можливо, у цьому доборі допоможуть алгоритми мереж Хопфілда, які вміють робити схожі речі.

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

Попередні варіанти підходять для реалізації штучного інтелекту, але такого комбінування входів та виходів у природному інтелекті, схоже, немає. Зате є карти ознак, див. про згорткові мережі та неокогнітрон у попередніх частинах. І такі карти, схоже, існують у природному інтелекті.

Сенс карт ознак такий. Є набір правил, є набір вхідних осередків. Кожне правило сканує вхідні осередки за допомогою рухомого вікна, і всі вічка з вікна потрапляють на вхід правила. Результат роботи правила записується в комірку карти ознак, що відповідає положенню вікна на вхідних комірках. У результаті кожному правилу вийде карта ознак, у якій місця найкращого спрацьовування правила матимуть найвищі значення. У наступному шарі всі карти ознак складають вхід для нового набору правил, які знову становлять карти ознак. Вчитися правила можуть зворотним розповсюдженням помилки. Як такі правила навчати у складі програми – питання відкрите.

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

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

Варіант другий, частотне поєднання входів та виходів. У цьому варіанті переставляти входи та виходи не треба. У частотних нейронних мережах (чи програмах, побудованих таких мережах) кожен нейрон є як найпростіший частотний фільтр, і найпростіший генератор частоти. Причому цей фільтр може бути налаштований на різні гармоніки одночасно (за рахунок чого ємність і можливості частотних мереж вище, ніж у звичайних мереж). Так само будь-яке поєднання нейронів є одночасно складним частотним фільтром і складним частотним генератором. (У нашому штучному інтелекті такий нейрон – еквівалент одиничного правила, представленого невеликою нейронною мережею).

Тому по одним і тим самим нейронам можуть на різних частотах можуть блукати сигнали, що відносяться до абсолютно різнорідних сутностей. Але оскільки різні частоти впливають одні й самі нейрони (поєднання нейронів), то різні частоти (і сутності, ними оброблювані) впливають друг на друга. Тому, якщо наш інтелект побудований на принципах частотної обробки сигналів (як згадувалося вище в розділі про частоти), то цей інтелект схоже вже має здатність до узагальнення різнорідних сутностей і до деякого філософського абстрагування. Хоча, може, є додаткові технічні рішення, які прискорять формування таких узагальнень у частотних мережах.

І трохи на закінчення. Такі способи перекомбінування входів і виходів дають не тільки високорівневі властивості, на кшталт асоціативного мислення і якісних узагальнень, але і більш прозові. Що буде, якщо в електричній схемі переплутати дроти? Швидше за все це буде фатально для схеми. А ось для мозку необов'язково. Проводилися досліди (на тваринах), коли мозок буквально різали на шматки та перемішували, після чого складали назад і відпускали тварину. Через деякий час тварина приходила в норму і жила далі. Корисна властивість, Щоправда?

Немає жодних метарівнів

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

У реальних системах завжди виявлялося, що хоч як добре продумувалися нижні рівні, у яких завжди накопичуються якісь проблеми, зміни, які можуть бути узгоджені з верхніми рівнями, зміни рано чи пізно ламають всю систему, вимагаючи капітальної перебудови всієї ієрархії. Вихід був таким - не зав'язуватись сильно на такі ієрархії, залишати свободу дій, щоб, якщо треба, можна було працювати в обхід формальної ієрархії. І це не є ознакою погано спроектованої системи, це реалії життя.

Звичайно, правильна система мінімізує бардак, на те вона й система. Але це не означає, що у такій системі повністю відсутні неформальні зв'язки. Хороша система, за всієї правильності, повинна нести елемент власного знищення. Елемент, який вступає в дію, коли система вже не зможе впоратися зі своїми завданнями, є елементом, який повністю перебудовує систему під нові реалії.

Так і в штучному інтелекті, схоже, немає місця ніяким логічним рівням та метапереходам (особливо з огляду на попередній розділ про асоціацію та узагальнення). Усі правила (вони ж нейрони в нашому розумінні) беруть одночасну участь у прийнятті рішень будь-яких рівнів. Правила-нейрони можуть динамічно вишиковуватися у різноманітні ансамблі, у різноманітні ієрархії. Але навіть при такому динамічному вибудовуванні у них не буде ієрархічної суворості, елемент з нижнього рівня може запросто вплинути на верхній рівень та так, що повністю його перебудує.

У кожному конкретному випадку застосування правил можна збудувати свою ієрархію. Але ця ієрархія не статична, як це відбувається за різних формалізації. В інтелекті все залежить від того, з якого боку потягнути, під яким кутом подивитися. Для кожного кута вишикується своя ієрархія, і таких "кутів зору" може бути дуже багато. Усередині інтелекту ніякої чіткої ієрархії, очевидно, немає (мається на увазі не "апаратний" рівень, що визначає, який відділ мозку за які органи відповідає).

Квантова генетика

Багато цікавого розказано про квантові обчислення та квантові властивості інтелекту. Деякі навіть вважають, що мозок може безпосередньо "смикати" квантові процеси, щоб подумати.

Коротко суть квантових обчислень зводиться до наступного. Вихідні дані наносяться на невелику кількість елементарних частинок. У процесі вирішення дані починають оброблятися одночасно величезною кількістю різних способів, причому ці способи один з одним спілкуються, дізнаються у когось рішення краще, у когось гірше, погані рішення послаблюються, хороші - посилюються.

Відбувається це рахунок того, що з запуску квантових обчислень кожна частка повністю " відчуває " стан інших частинок, що у обчисленні, причому відчуває миттєво, і істотних витрат енергії. При запуску рішення частки занурюються в "розмазаний" ("плутаний") стан, який неможливо дослідити із зовнішнього світу. У розмазаному стані у кожної частки немає чіткого фізичного стану, кожна частка знаходиться одночасно в кількох станах і може брати участь у кількох паралельних процесах (причому ці процеси "відчують" один одного). Причому чим більше частинок бере участь у рішенні, тим більше станів одночасно може мати та сама частка.

Якщо спробувати влізти в розмазаний стан і подивитися, що там усередині таке, то в кожний конкретний момент ми отримаємо конкретні фізичні стани частинок, без натяку на багато одночасних станів. Причому після такого втручання хід рішення буде повністю зруйнований, множинний стан не зможе бути відновлений. Тому те, що відбувається у проміжку між завданням вхідних даних та зняттям результату рішення – загадка. Виходить, що невеликий обсяг вхідних даних у процесі рішення породжує на багато порядків складніший внутрішній стан, який незрозуміло як еволюціонує, не піддається дослідженню, проте видає правильне рішення. Стан, знятий під час спроби дослідження розмазаного стану, має імовірнісний характер. При правильному складанні квантового алгоритму можна зробити так, щоб ймовірність зняття правильного рішення набагато перевищувала ймовірність зняття неправильного рішення (тобто рішення треба зняти хоча б кілька разів).

Здавалося б, таким чином можна отримати практично безкоштовно величезні обчислювальні потужності. Але є проблема – частки рішення мають бути повністю ізольовані від зовнішнього світу, інакше зовнішній світ збиватиме правильність ходу рішення (порушуватиме когерентність). Є думка, що повна ізоляція неможлива, оскільки (як свідчить квантова фізика) кожна частка, кожен квант, спочатку розмазані по всьому всесвіту і тісно переплетені з кожною іншою частинкою, що становить наш всесвіт. І, як наслідок такої думки, виходить, що квантові обчислення не занурюють частинки в стан, розмазаний по альтернативним всесвітом, а залучають інші, цілком конкретні частинки з нашого всесвіту для розпаралелювання обчислень. Щоправда, це все одно не скасовує труднощів щодо дослідження внутрішнього стану.

З цього випливає кілька цікавих висновків. Квантові обчислення на високих потужностях не зможуть забезпечити нас абсолютно істинними обчисленнями, але цілком придатні для правдоподібних рішень, наприклад у штучному інтелекті, як було описано вище. І ще один висновок, що тісно перетинається з попереднім - квантові обчислення не можуть забезпечити самопізнання, саморефлексії, оскільки є невід'ємною частиною всесвіту, і отже, не можуть пізнати самі себе і всесвіт загалом, тому що є її невід'ємною частиною. Чому власне і йдуть квантові невизначеності, при спробі виміру станів квантових частинок, як ми й зазначили в попередніх частинах. Адже неможливо повністю пізнати себе лише за допомогою самого себе. Квантова невизначеність - це практично прямий наслідок теореми Геделя, яка свідчить, що формальна система неспроможна з абсолютно істинною точністю пізнати себе.

Тепер повернемось до інтелекту. Багатьма дослідниками були правильно помічені подібності властивостей квантових обчислень та інтелектуальних процесів у людини. Найцікавіші нам властивості такі. Вхід та вихід рішень – досить простий набір станів. Ці прості стани занурюють мозок у набагато складніший стан, який неможливо дослідити ззовні. Спроба дослідити цей стан, або зняти рішення – знову видає набір простих станів, причому ці стани також імовірнісні і з більшою ймовірністю видають правильне рішення, ніж неправильне. Людині важко усвідомити цей свій внутрішній стан, на відміну від входу/виходу, зате це внутрішній стан, що називається "відчувається". Як і в квантових обчисленнях, завдання початкового стану та зняття рішення – досить трудомісткі процедури. Так і людині легко думати "в собі всередині", але щоб передати свої думки назовні, іншій людині - треба непогано постаратися.

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

Адже насправді, здавалося б, звідки в мозку, з його хвилями, частотами та нейронами може виникнути якась подоба генетичного алгоритму, з його хромосомами та альтернативними варіантами рішень? Виявляється, якщо подивитися з іншого боку, генетичний алгоритм - лише один із проявів більш загального класупроцесів.

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

Цілком можливо, що на стику квантових обчислень, генетичних алгоритмів та інших напрямів штучного інтелекту виникне нова теорія обчислень, яка дозволить робити більш потужні квантові комп'ютери, і дозволить, на основі суворого апарату квантової фізики, точніше пояснити процеси, що відбуваються в інтелекті. Адже те, чого ми поки що прийшли в розумінні інтелекту, нагадує анекдот "нутром чую, що 0.5 + 0.5 буде літр, але математично довести не можу", коли зробити можемо, але пояснити чому так - поки що ні.

Внутрішнє уявлення речей

Як відбувається уявлення зовнішніх речей у мозку? Може здатися, що мозок відтворює фізичну модель предметів і явищ, через що слідує маса неправильних висновків. Насправді, внутрішнє уявлення - це зовсім не те саме, що фізична модель. Внутрішня модель правдоподібна. Внутрішня модель формує аналог, який охоплює лише найважливіші нам властивості предмета, ті властивості, які у повсякденному досвіді. Таку внутрішню модель іноді називають "наївною фізикою". У межах повсякденного досвіду така модель дає нехай і неправильні, але цілком придатні на практиці результати. Але щойно ми виходимо межі повсякденного досвіду, така модель дає збій.

Колектив правил, що формують таку модель, може бути дуже далеким від реального фізичного уявлення. Чому внутрішнє уявлення несе на додачу безліч "фантастичних" властивостей справжніх предметів, внутрішнє уявлення починає "жити своїм життям". Наприклад, карикатури. Людина з легкістю розпізнає обличчя, намальоване на карикатурі, навчені люди можуть малювати карикатури. Але системи розпізнавання облич карикатури ставлять у глухий кут. І правильно, хоч у розпізнавальницях і правдоподібна модель, вона набагато ближча до фізичної, ніж людська.

Внутрішньому уявленню теж властивий перепад складнощів, описаний раніше. Полягає він у тому, що простіший предмет чи явище, породжує набагато складніше внутрішнє уявлення, яке є відповідальним за моделювання суті речей. Адже інтелект неспроможна безпосередньо моделювати фізику. Просте уявлення породжує "почуття" суті речей, коли відчуваєш чомусь так, але не можеш пояснити. Більш складне уявлення може витягувати уявлення речей до рівня розуміння, фантазування, до рівня свідомого мислення (приклад із карикатурами).

Привіт логіка

Що таке логіка та звідки береться найвища інтелектуальна діяльність?

Наш інтелект пройшов шлях від найпростіших реакцій "вхід-вихід" до поєднання величезної кількості конкуруючих процесів, які розкладають вхідну ситуацію в набагато складнішу внутрішню виставу.

У результаті, для деяких речей можуть утворитися комплекси правил величезної складності (набагато складніші за фізику вихідної речі), які і є внутрішнім уявленням цієї речі. Якого саме виду можуть бути ці правила і як вони можуть утворитися, описано вище. Але головне полягає в тому, що за рахунок такого перепаду складності між вихідним явищем та його описом стає можливим якісно інше уявлення цього явища, що дозволяє виводити нові знання про це явище з високим ступенем правдоподібності.

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

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

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

Наступне закономірне питання - а чи можна зрозуміти, що відбувається у процесі розуміння? І така сама закономірна відповідь - швидше за все так, але для цього буде потрібно таке уявлення процесів, що відбуваються в інтелекті, яке б на багато порядків перевищувало за складністю вихідні інтелектуальні процеси. Тобто щось про інтелект ми можемо дізнатися, щось можемо зробити, але повністю і якісно усвідомити роботу людського інтелекту ми не в змозі – банально не вистачить потужності мозку. Хоча закономірності ми можемо вивчити і використовувати, як зараз користуємося комп'ютерами, без повного усвідомлення процесів, що у них відбуваються. Неможливо уявити процеси, які у всіх мільйонах транзисторів, хоча цілком можна зрозуміти, як працюють логічні одиниці комп'ютерних схем і як поєднуються у вищі рівні. Схоже правильно і для інтелекту.

Зі сказаного вище стає зрозуміло, чому розуміння важко пояснити, і чому розуміння легко відчувати, чому можна викласти логічні побудови, супутні розуміння, і чому дуже важко відтворити всю ту основу, яка привела до самого розуміння. Про це буде цілий розділ трохи нижче. Звідси стає зрозумілим, що таке почуття, що таке відчуття стану, чому почуття та відчуття важко висловити, але легко відчути. Загалом, наслідків цікавих багато, кому цікаво – дивіться у напрямі квантових властивостей свідомості.

Інше питання полягає в тому, як саме виходить так, що ми усвідомлюємо самих себе, усвідомимо навколишній світ? Чи вийде таке усвідомлення у мислячих машин? Цей фундаментальний філософське питаннявипадає за рамки штучного інтелекту, але ми все ж таки спробуємо на нього відповісти в наступній частині.

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

Ці абстракції зобов'язані своїм народженням багаторазовому поєднанню величезної кількості внутрішніх, конфліктуючих і поєднуються процесів. Але на відміну від результатів взаємодії більшості внутрішніх процесів, для абстракцій результат носитиме не розмитий (широкий) характер, а буде збиратися як би в вістря, в одну або кілька чітких граней або піків.

Звісно, ​​абстракції породжені, зокрема, і багаторазовим спостереженням проявами їх реальних прототипів, і багаторазовими роздумами із залученням внутрішнього уявлення предметів. Причому багаторазовість цих спостережень і міркувань напевно вище, ніж в інших предметів, які не дають абстракцій. І характер правил, що дають внутрішнє уявлення абстракцій, напевно, носить більш упорядкований, більш пристосований до пікової гармонізації, вигляд.

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

Такі абстрактні ланцюжки житимуть за своїми законами, десь нагадуючи вихідні прототипи, десь від них віддаляючись.

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

Залишається нагадати, що в процесі логічних побудов мозок тільки "вдає" що він працює як тупий алгоритм, як примітивна машина логічного висновку. Насправді, процеси, задіяні в логічних побудовах, на величезні порядки складніше, ніж вихідні логічні побудови, і за рахунок такого стрибка складнощів інтелекту і вдається створювати нові логічні побудови і з високим ступенем точності судити про їхню істинність.

Так само мозок може і емулювати роботу комп'ютерів (машини Тьюринга), рахунок " важких " процесів, хоча у своїй здається, що мозок слід " тонким " алгоритмам (особливо якщо мозок натренований таку роботу).

І ще трошки про тонкі логічні побудови та складання алгоритмів. Непосвяченим може здатися, що при роздумах про математичні істини або при складанні комп'ютерних програм, просвітлений мудрець сідає в якусь подобу медитації, і за допомогою правильних міркувань приходить до правильних висновків або вигадує правильну програму. Насправді те, що відбувається, більше схоже на наступну схему.

  • Вигадав "щось", початкову версію (або навіть випадково згенерував).
  • Перевірив роботу цього "щось" за допомогою емуляції логічних міркувань, запам'ятав проблемні місця.
  • Спробував методом тику покращити проблемні місця (покрашив це "щось").
  • Перевірив покращену версію, і так далі.

Адже мозок вміє не так генерувати на ходу правильні логічні ланцюжки, скільки перевіряти роботу цих ланцюжків за допомогою емуляції логічних міркувань. Інша річ, що в мозку є величезна "бібліотека" шаблонів на різні ситуації, та плюс купа правдоподібних правил, як ці шаблони поєднувати один з одним. Застосовуючи ці правила та шаблони, з небагатьох спроб, вдається побудувати хороші логічні міркування та програми. У тому числі такі правила можуть включати діагностику роботи різних поєднань шаблонів, можуть і поповняться динамічно, замість того, щоб щоразу проганяти логічні побудови на всьому обсязі даних.

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

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

Стадія 1. Розчарування

Коли ми говоримо про створення хоча б простих ботів, очі наповнюються блиском, а в голові мелькають сотні ідей, що він має вміти робити. Однак, коли справа доходить до реалізації, виявляється, що ключем до розгадки реальної моделі поведінки є математика. Так-так, штучний інтелект набагато складніше написання прикладних програм - одних знань про проектування ПЗ вам не вистачить.

Математика - це той науковий плацдарм, на якому будуватиметься ваше подальше програмування. Без знання та розуміння цієї теорії всі задуми швидко розіб'ються про взаємодію з людиною, адже штучний розум насправді не більший, ніж набір формул.

Стадія 2. Прийняття

Коли пиха трохи збита студентською літературою, можна приступати до практики. Впадати на LISP або інші поки не варто - спочатку варто освоїтися з принципами проектування ІІ. Як для швидкого вивчення, так і подальшого розвитку чудово підійде Python - це мова, яка найчастіше використовується в наукових цілях, для неї ви знайдете безліч бібліотек, які полегшать вашу працю.

Стадія 3. Розвиток

Тепер переходимо безпосередньо до теорії ІІ. Їх умовно можна поділити на 3 категорії:

  • Слабкий ІІ – боти, яких ми бачимо в комп'ютерних іграх, або прості підручні помічники, як Siri. Вони або виконують вузькоспеціалізовані завдання або є незначним комплексом таких, а будь-яка непередбачуваність взаємодії ставить їх у глухий кут.
  • Сильний ІІ – це машини, інтелект яких можна порівняти з людським мозком. На сьогоднішній день немає реальних представників цього класу, але комп'ютери, як Watson дуже близькі до досягнення цієї мети.
  • Досконалі ІІ – майбутнє, машинний мозок, який перевершить наші можливості. Саме про небезпеку таких розробок попереджають Стівен Хокінг, Елон Маск та кінофраншиза «Термінатор».

Звичайно, починати слід з найпростіших роботів. Для цього згадайте стару-добру гру"Хрестики-нуліки" при використанні поля 3х3 і постарайтеся з'ясувати для себе основні алгоритми дій: ймовірність перемоги при безпомилкових діях, найбільш вдалі місця на полі для розташування фігури, необхідність зводити гру до нічиєї і так далі.

Кілька десятків партій та аналізуючи власні дії, ви напевно зможете виділити всі важливі аспекти та переписати їх у машинний код. Якщо ні, то продовжуйте думати, а це посилання тут лежить про всяк випадок.

До речі, якщо ви все-таки взялися за мову Python, створити досить простого бота можна, звернувшись до цього докладного мануалу. Для інших мов, таких як C++ або Java, вам також не важко знайти покрокові матеріали. Відчувши, що за створенням ІІ немає нічого надприродного, ви зможете сміливо закрити браузер і розпочати особисті експерименти.

Стадія 4. Азарт

Тепер, коли справа зрушила з мертвої точки, вам, напевно, хочеться створити щось серйозніше. У цьому вам допоможе низка наступних ресурсів:

Як ви зрозуміли навіть із назв, це API, які дозволять без зайвих витрат часу створити деяку подобу серйозного ІІ.

Стадія 5. Робота

Тепер же, коли ви вже цілком ясно уявляєте, як ІІ створювати і чим при цьому користуватися, настав час виводити свої знання на новий рівень. По-перше, для цього знадобиться вивчення дисципліни, яке зветься «Машинне навчання». По-друге, необхідно навчитися працювати з відповідними бібліотеками вибраної мови програмування. Для Python, що розглядається нами, це Scikit-learn, NLTK, SciPy, PyBrain і Numpy. По-третє, у розвитку нікуди не обійтися. Ну і найголовніше, ви тепер зможете читати літературу про ІІ з повним розумінням справи:

  • Artificial Intelligence for Games, Ян Міллінгтон;
  • Game Programming Patterns, Роберт Найсторм;
  • AI Algorithms, Data Structures, and Idioms in Prolog, Lisp, and Java, Джордж Люгер, Вільям Стбалфілд;
  • Computational Cognitive Neuroscience, Ренделл О'Рейлі, Юко Мунаката;
  • Artificial Intelligence: A Modern Approach, Стюарт Рассел, Пітер Норвіг.

І так, вся чи майже вся література з даної тематики представлена ​​іноземною мовою, тому якщо хочете займатися створенням ІІ професійно – необхідно підтягнути свою англійську до технічного рівня. Втім, це актуально для будь-якої сфери програмування, чи не так?