Защо не сравняваме пиксел по пиксел
Имаме матрицата (урок 21) и знаем как да намерим ръбовете ѝ (урок 22). Най-простата идея за разпознаване е: пазим по една „образцова“ снимка на всяка буква и сравняваме новата снимка с всяка от тях число по число. Където съвпадат най-много пиксели — това е отговорът.
Идеята се проваля още на първия тест. Ето буквата „I“ два пъти:
образец същата буква, изместена с една колона
0 255 0 0 0 0 0 255 0 0
0 255 0 0 0 0 0 255 0 0
0 255 0 0 0 0 0 255 0 0
0 255 0 0 0 0 0 255 0 0
0 255 0 0 0 0 0 255 0 0
съвпадащи пиксели: 15 от 25 — по-малко, отколкото при съвсем празен квадрат (20)Едно изместване, лек наклон, друг размер, друго осветление — и числата вече не съвпадат, макар за окото да е същата буква. Пикселите са прекалено „сурови“. Трябва ни нещо по-устойчиво.
Признаци вместо пиксели
Признак (feature)
Характеристика на изображението, която е по-устойчива от отделния пиксел: „има вертикален ръб“, „има ъгъл“, „има кръгло петно“, „има две тъмни точки една до друга“. Признакът не зависи от това дали буквата е с една колона наляво.
Ядрата от миналия урок са точно детектори на признаци: ядрото за вертикални контури „светва“ навсякъде, където има вертикален ръб — без значение в коя колона е. Мрежата за образи има десетки такива ядра в първия си слой и всяко търси нещо просто: ръб с определен наклон, преход от тъмно към светло, малко петно.
Йерархия на признаците
- Слой 1 гледа пикселите и намира ръбове и петна.
- Слой 2 гледа не пикселите, а картата на ръбовете и намира комбинации: ъгъл (два ръба, които се срещат), дъга, кръг.
- Следващите слоеве сглобяват комбинациите в части: око, ухо, колело, дръжка.
- Последният слой е обикновен класификатор от урок 19: получава вектор „колко от всяка част има“ и връща вероятност за всеки клас.
Пътят от изображение до отговор
Проследете целия път за една снимка на котка:
| Стъпка | Какво има | Колко числа |
|---|---|---|
| Камера | цветна снимка 224×224 | 224 × 224 × 3 ≈ 150 000 |
| Слой 1 (ядра) | карти на ръбове и петна | десетки карти |
| Слой 2–3 | ъгли, дъги, текстури | стотици карти, по-малки |
| Дълбоки слоеве | части: очи, уши, козина | хиляди признаци |
| Последен слой | вероятност за всеки клас | колкото са класовете |
| Отговор | най-голямата вероятност | „котка — 92%“ |
Увереност (confidence)
Числото, което моделът дава на избрания клас — например 92%. Не е „вярно на 92%“; означава само, че признаците приличат на тези от обучаващите снимки с етикет „котка“. Под определен праг на увереност отговорът трябва да се отхвърля.
Защо греши при нетипични изображения
Мрежата е учила върху снимки, каквито хората качват: центриран предмет, добра светлина, обичаен ъгъл. Признаците, които е открила, са признаците на тези снимки. Покажем ли ѝ нещо друго, признаците не се появяват или се появяват други — и отговорът се обърква.
- Друг ъгъл: чаша, снимана отгоре, е кръг с дръжка — признакът „висок цилиндър“ липсва.
- Осветление: в сянка ръбовете са слаби, а слой 1 търси именно ръбове; на силна светлина части от предмета „изгарят“ до бяло (урок 22).
- Фон: ако всички снимки на вълци в набора са в сняг, мрежата може да научи „сняг → вълк“ — по-лесен признак от самото животно. Куче в сняг тогава става „вълк“. Това е пристрастие в данните от урок 13, видяно отвътре.
- Частично закрит предмет: липсват части, а именно частите брои последният слой.
Какво трябва да запомниш
- Сравнението пиксел по пиксел се проваля при най-малкото изместване, наклон или смяна на светлината.
- Признакът е устойчива характеристика — ръб, ъгъл, петно, част — независима от точното място.
- Мрежата строи йерархия: пиксели → ръбове → комбинации → части → предмет; всеки слой гледа предишния.
- Признаците на всички слоеве са научени от данните, не програмирани.
- Увереността показва прилика с обучаващите снимки, не истинност; под праг отговорът се отхвърля.
- Грешките идват при нетипични снимки — друг ъгъл, светлина, фон — защото такива не е имало в данните.