Скільки інформації передається в нейронних мережах. Ч.1

Osaulenko V.M.
10 min readNov 6, 2020

--

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

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

Далі розберемо передачу інформацій в деяких основних випадках.

Випадок 1. Перекодування.

Почнемо з одного нейрона, скільки він передає інформації? Беремо просту модель з першої задачі, де нейрон це просто функція, яка має параметри (w, t) і видає 0 або 1.

На вхід подається бінарний вектор x розміром N, це може бути зображення, текст, будь-які дані або активація іншої нейронної мережі. Всього є 2^N таких векторів, і всіх їх ми зобразимо на поверхні (2D). Кожна точка поверхні відповідає якомусь вектору, який насправді знаходиться в N-мірному просторі.

По суті, нейрон розбиває цю поверхню на дві частини: вектори, які його активують (у=1) та не активують (у=0).

З першої задачі ми взнали, що один нейрон перебираючи свої зв’язки може реалізувати близько N2^N функцій. Кожна функція це окреме розбиття поверхні.

Якщо всі вхідні вектори x рівноймовірні, тоді нейрон на вхід отримує N біт інформації (можна порахувати через ентропію, див. попередню статтю). І якщо нейрон підбере свої параметри так, щоб розбити поверхню навпіл, то він буде активуватися 50% раз. Це те ж саме, що й з ймовірністю 0.5 і тому передасть 1 біт інформації. Це його максимум. На вхід отримав N біт, а передав тільки 1біт й інформація втратилася. Інформація може втратитися ще більше, якщо розіб’є поверхню не порівну (наприклад, активується всього 10% раз, ентропія H(0.1)=0.47 біт).

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

Разом вони можуть передати 2 біт, вже краще. Додаємо ще нейрони з випадковими зв’язками.

Кожен раз вхідна область розбивається якось по-новому. На графіку показано як при цьому змінюється кількість інформації (H(Y)), що передає нейронна мережа. Чим більше нейронів (N_y), тим все ближче вони наближаються до повної передачі N біт.

Щоб передати всю інформацію потрібно значно більше нейронів ніж розмір вектору (N_y>N). Чому так? Бо кожний новий нейрон не обов’язоково розбиває поверхню на вдічі більше шматків. В нейрона просто не вистачає хороших функцій(серед N2^N) кожен раз розбивати навпіл. Щоб отримати вдвічі більше шматків, і відовідно передати на один біт більше інформації треба додавати багато нейронів за раз.

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

Випадок 2. Стиснення

Чи можна передати дані з меншою кількістю нейронів ніж N? Формально, якщо можуть бути всі 2^N вхідних векторів, то ні. Будуть обов’язково втрати. Ну й нехай:)Більшість кодеків, такі як jpeg чи mp3, а також біологічні нейронні мережі зберігають дані не ідеально. Деякі речі можна викинути.

Припустимо нейронна мережа може активуватися M різними способами (M набагато менше за 2^N). Це як ніби на вхідну область X розкидали M точок, які визначають області, що активують нейронну мережу однаково. Нижче червоним показано таку область. Справа можливі стани нейронної мережі Y. Всі точки з червоної сходяться в одну.

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

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

Представимо вхідну область тепер в 1D, але домалюємо зверху розподіл ймовірності (показує з якою ймовірністю p(x) зустрічається вектор x).

Щоб передати максимум інформації потрібно розбити на області однакової площі (показано різними кольорами).

Це як коли падає дощ, то у всіх відрах буде однакова кількість води. Але якщо десь локально падає більше, то там у відрі буде більше води. Щоб у всіх було однаково, треба деякі відра збільшити або зменшити (діаметр). Розмір відра це відрізки, що вийшли на горизонтальній прямій зверху.

Максимум інформації означає, що всі M станів нейронної мережі рівноймовірні (“однакова кількість води у відрах”). Тоді нейрони стискують N біт в log2(M) біт. Але все одно, будуть втрати. Якщо два вектори x1 та x2 попадуть в одну область, тоді й закодуються однаково (y1 та y1), і ми їх вже не розрізняємо.

Але яка нам різниця! Ці х1 та х2 дуже схожі і рідкісні, це як дві сусідні ноти чи два схожих відтінка кольору. Краса біологічних нейронних мереж в тому, що вони можуть адаптуватися до зміни розподілу ймовірності даних (нейропластичність). В музиканта і художника х1 та х2 не такі вже й рідкісні. Нейронні мережі перенавчаються, щоб розбивати вхідні дані вже по іншому, щоб х1 та х2 попали в різні області. Як таке навчання відбувається ще до кінця не ясно.

Випадок 3. Асоціативна пам’ять

В першому випадку, інформація передається максимально, якщо нейронна мережа активується щільно(в середньому 50% нейронів активні). Щоб зробити розрідженою (2–10% активні), треба додавати більше нейронів. Навіщо витрачати ще нейрони, інформація ж і так передалася? Тому що далі інформація зв’язується з іншою. І для найкращого зв’язування потрібна розріджена активація.

Зв’язати — означає зробити так, щоб коли на вході є вектор x він видобував заданий вектор у. Так в нас створюються асоціації, де вектори це активність нейронної мережі, які кодують щось зі світу (лимон (x)— кислий(y)).

Ось стандартний приклад моделі асоціативної пам’яті. Потрібно створити асоціації між R парами векторів x та y (R — “кількість спогадів”).

Нейрони в мережі Y створюють зв’язки (w) з X, і активуються у вигляді функції (y*=f(x, w)). Задача — підібрати зв’язки так, щоб ця активація у* була найбільш схожою до бажаної y. Тобто у це те, що хочемо записати, а у* те, що отримуємо від мережі. Схожість між y та y* оцінюють по різному, або беруть відстань між векторами, або рахують взаємну інформацію. Останнє цікавіше, показує скільки біт передалося.

Так ось, властивість моделі асоціативної пам’яті, що чим більше записуєш, тим гірше зберігається (схоже як в студентів на сесії:). На анімації нижче нейрони з двох шарів з’єднуються зв’язками. Графік показує скільки інформації зберігається в залежності від того скільки ми записуємо. З часом, ми записуємо нові спогади (зв’язки між новими x та у), але y* вже дуже сильно відрізняється від у. Це тому, що кількість зв’язків між нейронами стає дуже великою і нейрони Y роблять помилки, видобувають неправильні асоціації.

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

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

Випадок 4. Класифікація.

Задача класифікації дуже схожа на асоціацію. Так само дається набір векторів (x) і вказується з якими значеннями вони пов’язаються (y). Тільки тут x це дані (наприклад, зображення кота), а у це клас(мітка “кіт”) до якого відноситься зображення.

Розглянемо знову найпростіший випадок з одним бінарним нейроном (бінарна класифікація, тобто є всього два класи). Як ми вже бачили, він розбиває вхідний простір на дві області (y=0 та y=1) .

Нейрон може розбити близько N2^N способами ( нагадую, це експресивність нейрона, кількість функцій, що він реалізує). Всього можливих функцій (способів розбити дані) є набагато більше: (2^N)^N.

Уявімо, що є якась функція f, яка генерує всі можливі пари x,y, які треба зв’язати (тобто y = f(x) для всіх x,y). Так ось, суть класифікації, знайти таку функцію f* серед наявних N2^N, яка була б найбільш схожою до заданої f (яку вибрали серед (2^N)^N.

Але біда, ми не знаємо як виглядає функція f! Бо для цього нам треба було б показати всі 2^N дані (x,y). Тому треба підібрати схожу функцію f* по даних, що в нас є. І чим більше даних для класифікації, тим точніше можна визначити шукану функцію f. Тому й великі компанії, типу гугла чи фейсбук, мають хороші сервіси рекомендацій, бо в них багато даних!

Також, бажано, щоб набір функцій серед яких ми вибираємо f* був би побільший. На мал. нижче чорним показано всі функції ((2^N)^N), синім — ті, з яких вибираємо (N2^N). Як бачимо, може не повезти, і все одно, f* буде далеко від f.

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

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

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

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

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

Для простоти візьмемо один прихований шар (H) і міряємо інформацію між ним та вхідним шаром I(X,H), та між ним та вихідним I(H, Y).

Це буде два числа, які ми зобразимо у вигляді точки на графіку нижче. Зробимо один етап навчання мережі (змінюємо зв’язки так, щоб f* стала більш схожою до f), переміряємо інформацію I(X,H) та I(H, Y) і зобразимо ще одну точку. Якщо так робити багато раз, то вийде як показано нижче.

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

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

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

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

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

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

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

--

--

Osaulenko V.M.
Osaulenko V.M.

Written by Osaulenko V.M.

Дослідник. Веду блог “Територія штучного інтелекту”.

No responses yet