От един неврон към мрежа
В миналия час видяхте на екрана как един неврон никога не научава XOR. Един неврон е една права — и за много задачи правата не стига. Идеята, която спасява положението, е проста: ако подредим няколко неврона в слой и подадем изходите им на следващ слой, всеки следващ слой работи не върху суровите входове, а върху онова, което предишният е открил.
- Входен слой — по един „неврон“ за всеки признак на входа. Той не смята нищо, само подава числата.
- Скрити слоеве — един или повече слоя от истински неврони. „Скрити“, защото никой не вижда изходите им — те са само за вътрешна употреба.
- Изходен слой — по един неврон за всеки възможен отговор: един за „да/не“, десет за разпознаване на цифра.
Как два слоя решават XOR
Скритият слой построява нови признаци. За XOR стигат два неврона от урок 16: единият е ИЛИ (възбужда се при „поне един вход е 1“), другият е И („и двата са 1“). Изходният неврон гледа само тях: XOR е „ИЛИ, но не И“ — тегло +1 за ИЛИ и −1 за И.
| Вход | ИЛИ (скрит 1) | И (скрит 2) | z = ИЛИ − И | Изход |
|---|---|---|---|---|
| (0, 0) | 0 | 0 | 0 | 0 |
| (0, 1) | 1 | 0 | 1 | 1 |
| (1, 0) | 1 | 0 | 1 | 1 |
| (1, 1) | 1 | 1 | 0 | 0 |
Скрит признак
Стойността, която изчислява неврон от вътрешен слой. Тук ги нагласихме на ръка (ИЛИ и И), но при истинска мрежа никой не казва на неврона какво да представлява — признакът се появява в хода на обучението.
Дълбоко обучение: какво разпознава всеки слой
Дълбока мрежа
Мрежа с повече от един скрит слой. Оттам идва „дълбоко обучение“ (deep learning). Съвременните мрежи имат десетки и стотици слоеве.
Защо толкова много? Защото всеки слой надгражда предишния. При разпознаване на образи картината е горе-долу такава:
- Първият скрит слой гледа пиксели и открива ръбове — светло до тъмно, под различни ъгли.
- Следващите слоеве съчетават ръбове в части: ъгли, дъги, кръгчета, после око, ухо, колело.
- Последните слоеве съчетават части в обекти: лице, котка, автомобил.
Никой не е програмирал „търси ухо“. Изследователите откриват какво разпознава всеки слой едва след обучението, като гледат кои входове го възбуждат. Това е и слабото място: щом не знаем какво точно прави всеки неврон, трудно обясняваме защо мрежата е сгрешила.
Как се обучава мрежа: грешката се разпределя назад
При един неврон беше ясно: грешката е очакван − получен и поправяме неговите тегла. При мрежата грешката я виждаме само на изхода. Колко е виновно едно тегло дълбоко в първия скрит слой?
Отговорът се нарича обратно разпространение (backpropagation) и идеята му е в името:
- Подаваме примера напред през слоевете и получаваме изхода.
- Сравняваме го с етикета — това е грешката на изходния слой.
- Тръгваме назад: всеки неврон от предишния слой получава част от грешката според това колко е допринесъл за нея (по-голямо тегло към грешния изход — по-голяма „вина“).
- Продължаваме назад до първия скрит слой. Сега всеки неврон има своя грешка.
- Всяко тегло се поправя малко според своята грешка — както при перцептрона.
Речникът
- Архитектура — колко слоя, колко неврона във всеки, как са свързани. Избира се от човека.
- Параметри — всички тегла и отмествания. Намират се от обучението. Броят им е мярката, с която се сравняват моделите („7 милиарда параметъра“).
- Епоха — както при перцептрона: едно преминаване през всички примери.
Кога мрежата е излишна
За малка таблица с няколко десетки реда мрежа с хиляди тегла ще запомни примерите, без да обобщи. Там решаващото дърво от урок 6 е и по-точно, и обяснимо. Мрежите са незаменими там, където признаците не могат да се опишат от човек: изображения, звук, текст.
Какво трябва да запомниш
- Мрежата има входен, един или повече скрити и изходен слой; всяка връзка е едно тегло.
- Един неврон е права; скритият слой строи нови признаци, които правят задачата решима с права — така два слоя решават XOR.
- Дълбока е мрежа с повече от един скрит слой; всеки слой открива нещо по-сложно от предишния (ръбове → части → обекти).
- Скритите признаци не се задават от човек — появяват се при обучението; затова мрежата трудно се обяснява.
- При обучението грешката се измерва на изхода и се разпределя назад по слоевете; всяко тегло се поправя малко.