Домашнє завдання

Нейрон і перцептрон

Усі три рівні працюють на тій самій дошці оголошень, що й у практиці. Код генерації таблиці бери з першої частини зошита без змін — інакше числа не збігатимуться. Функцію навчити_перцептрон теж бери з практики: писати її заново не треба.


рівень 1Рівень 1 — База

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

  1. Запусти навчити_перцептрон на тих самих 569 оголошеннях із чотирьох різних стартів: [0, 0], [1, 1], [-1, 1] і [5, -5], зсув усюди 0.
  2. Для кожного випиши: скільки епох знадобилось, скільки виправлень було в першій епосі, які кінцеві ваги.
  3. Для кожного набору кінцевих ваг порахуй, під яким кутом стоїть межа: відношення -w1 / w2 — це нахил прямої довідкова = k · ціна.

Зроблено, якщо: є таблиця з чотирьох рядків, у якій остання епоха всюди має нуль виправлень, кінцеві ваги різні, а нахили -w1 / w2 всі лежать між 1.7 і 2.3 — тобто прямі різні, але всі проходять у тому самому вузькому проміжку між класами.


рівень 2Рівень 2 — Плюс

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

  1. Візьми ті самі 569 оголошень і посунь клас приманок ближче до чесних: заміни ціну кожної приманки на ціна + доля * (0.56 * довідкова - ціна), де доля пробігає значення 0.0, 0.2, 0.4, 0.6, 0.8, 0.95. При доля = 0 дані не змінились, при доля = 0.95 приманки майже впритул до чесних, але ще з правильного боку.
  2. Для кожного значення доля навчи перцептрон із нульових ваг і запиши, скільки виправлень він зробив усього (сума по всіх епохах) до зупинки.
  3. Один прогін дуже шумний: кількість виправлень залежить від порядку, у якому трапляються приклади. Тому для кожної доля зроби 20 прогонів із різним перемішуванням рядків (rng.permutation) і бери середнє.
  4. Побудуй графік: по горизонталі доля, по вертикалі середня кількість виправлень. Вісь y зроби логарифмічною — інакше остання точка розчавить решту.

Зроблено, якщо: є графік із шести точок, на якому середня кількість виправлень зростає з наближенням класів і при доля = 0.95 перевищує значення при доля = 0 щонайменше в сто разів, і два-три речення про те, чому дані лишаються роздільними при будь-якій доля < 1, а робота правила при цьому росте на порядки. Окремо назви, чому одного прогону тут замало.


рівень 3Рівень 3 — Виклик

У розділі 8 лекції ми зібрали XOR із трьох нейронів, виписавши ваги руками. Зроби те саме для дошки оголошень — і теж руками.

Задача: побудувати з трьох нейронів зі сходинкою класифікатор, який ловить обидва види приманок — і занижені, і завищені ціни, — на повних 1 100 оголошеннях (X_усі, y_усі з практики). Одна пряма з цим не впорається, бо шахрайство лежить по обидва боки від чесних оголошень; смуга з двох прямих — упорається.

  1. Підбери два нейрони прихованого шару так, щоб h1 спрацьовував на «ціна помітно нижча за довідкову», а h2 — на «ціна помітно вища за довідкову».
  2. Вихідний нейрон має реалізувати АБО над h1 і h2 — випиши його ваги й зсув.
  3. Порахуй точність усієї конструкції на 1 100 оголошеннях і порівняй із трьома числами: точністю моделі «усе чесне», точністю LogisticRegression із практики і точністю одного перцептрона, навченого правилом Розенблата на тих самих даних.

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


Підказки