Актуальні теми
#
Bonk Eco continues to show strength amid $USELESS rally
#
Pump.fun to raise $1B token sale, traders speculating on airdrop
#
Boop.Fun leading the way with a new launchpad on Solana.
Ви проходите співбесіду на посаду інженера машинного навчання в Tesla.
Інтерв'юер: Нам потрібно розгорнути нейронну мережу на периферійному обладнанні автомобіля, але вона не поміщається в пам'яті. Як би ви з цим впоралися?
Ви: Я використаю дистиляцію знань для навчання меншої моделі.
Інтерв'ю закінчено.
Ось що ви пропустили:
Дистиляція знань потребує тижнів обчислень, бо по суті ви навчаєте нову модель.
Але рішення вже знаходиться у вашій навченій мережі.
Більшість нейронів — це мертвий тягар — вони споживають пам'ять, але майже не сприяють прогнозам.
Давайте подивимось, як їх ідентифікувати!
Ось кроки:
Крок 1) Тренуйте нейронну мережу як зазвичай.
Крок 2) Пропустіть валідацію через навчену мережу і для кожного нейрона в прихованих шарах обчисліть:
- Середня активація
- Дисперсія активацій (якщо активації можуть бути -ve)
Перевірте це👇

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

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

Далі ми визначаємо два списки з трьома елементами:
- Один буде зберігати засіб активацій
- Ще буде зберігати std dev активацій
Ми передаємо набір валідації через нашу модель, щоб обчислити цю статистику для кожного прихованого шару.
Перевірте це 👇

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

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

У цій таблиці порівнюється точність і зменшення розміру обрізаної моделі за кількома пороговими значеннями порівняно з оригінальною моделлю.
При середньому = 0,1 і std-dev=0,4:
- Точність моделі падає на 0,08%.
- Розмір моделі зменшується на 62%.
Це величезне скорочення.
Перевірте це 👇

Ось ще один цікавий результат.
При середньому=0,5 і std-dev=1:
- Точність моделі падає на 0,5%.
- Розмір моделі зменшується на 74%.
Таким чином, по суті, ми отримуємо майже аналогічні показники для 1/4 параметрів.
Перевірте це 👇

Звичайно, є компроміс між точністю та розміром. У міру зменшення розміру його точність падає (див. відео).
Але в більшості випадків точність – не єдиний показник, який ми оптимізуємо.
Натомість ключовими факторами є кілька операційних показників, таких як ефективність, пам'ять тощо.
392
Найкращі
Рейтинг
Вибране
