Едно правило за всички данни
Алгоритъмът не вижда котка, не чува дума и не чете изречение. Той получава редица от числа и връща число. Всичко останало — изображения, звук, текст, видео — минава първо през превод към числа.
Вектор на признаците
Редицата числа, която описва един пример. Дължината ѝ е броят признаци, а всяко число е стойността на един от тях.
Изображение
Черно-бяла снимка 28×28 (какъвто е наборът с ръкописни цифри) дава 784 числа. Цветна снимка има по три числа на пиксел — червено, зелено, синьо, — така че 224×224 дава над 150 000 числа. Оттам идва и нуждата от сериозни изчисления.
Какво се губи при навързването
Когато навържем редовете, съседството по вертикала изчезва: пиксел и този точно под него се озовават на 28 позиции разстояние. Затова за изображения се използват мрежи, които работят направо върху двумерната решетка.
Звук
Микрофонът мери въздушното налягане 44 100 пъти в секунда. Една секунда звук е 44 100 числа. Обикновено те се превръщат в спектрограма — картина, в която хоризонтално е времето, вертикално са честотите, а яркостта е силата. Така задачата за звук се превръща в задача за изображение.
Текст
Най-наивният превод: за всяка дума от речника — една позиция; в изречението слагаме 1 там, където думата присъства, и 0 навсякъде другаде. Това се нарича торба с думи.
речник: [днес, утре, контролно, спам, кликни]
"утре имаме контролно" → [0, 1, 1, 0, 0]
"кликни за спам" → [0, 0, 0, 1, 1]Работи изненадващо добре за спам филтри и се проваля навсякъде, където е важен редът или смисълът: „кучето ухапа човека“ и „човекът ухапа кучето“ дават един и същ вектор. Затова в урок 20 ще видим по-добър превод — вектори на думите, при които близките по смисъл думи получават близки числа.
Разстояние между примери
Щом всеки пример е точка в пространство, между два примера има разстояние. Смята се точно както в часа по математика, само че с повече от две координати:
d(A, B) = √((a₁ − b₁)² + (a₂ − b₂)² + … + (aₙ − bₙ)²)Това е цялата тайна на много алгоритми: близките точки са сходни примери. Урок 13 стъпва изцяло върху нея.
Затова мащабът има значение
Ако единият признак е в диапазона 0–255, а другият — 0–1, първият определя разстоянието почти изцяло. Нормализирането не е козметика, а условие алгоритъмът изобщо да работи.
Python за хора, които знаят C#
От следващия урок пишем код. Ето разликите, които ще ви трябват днес:
| C# | Python | |
|---|---|---|
| Блокове | { } | отстъп (4 интервала) |
| Променлива | int n = 5; | n = 5 |
| Метод | int F(int x) { … } | def f(x): |
| Списък | int[] a = {1, 2}; | a = [1, 2] |
| Цикъл | foreach (var x in a) | for x in a: |
| Печат | Console.WriteLine(x); | print(x) |
Трите неща, които изненадват
- Няма точка и запетая и няма фигурни скоби — отстъпът е синтаксис. Сбъркан отстъп е грешка, не грозен код.
- Типовете не се пишат, но съществуват: списък от числа не се събира с текст.
- Индексирането е като в C# — от 0, — но има и отрицателни индекси:
a[-1]е последният елемент.