Я видалив 74% нейронів з нейронної мережі. Він знизив точність лише на 0,50%. Ось розбивка (з кодом):
У тренованої нейронної мережі завжди є нейрони, які не роблять істотного впливу на продуктивність. Але вони все одно споживають пам'ять. Їх можна видалити без істотного порушення точності. Давайте подивимося, як їх визначити!
Ось кроки: Крок 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 параметрів. Перевірте це 👇
Звичайно, є компроміс між точністю та розміром. У міру зменшення розміру його точність падає (див. відео). Але в більшості випадків точність – не єдиний показник, який ми оптимізуємо. Натомість ключовими факторами є кілька операційних показників, таких як ефективність, пам'ять тощо.
48,61K