Точността в извадката в сравнение с точността извън извадката е фундаментална концепция в дълбокото обучение и разбирането на разликата между тези две показатели е от централно значение за изграждането, оценяването и внедряването на модели на невронни мрежи, използващи Python и PyTorch. Тази тема е пряко свързана с основната цел на машинното обучение и дълбокото обучение: да се разработят модели, които се обобщават добре към нови, невидими данни, а не просто запомнят модели, присъстващи в обучителните данни.
Дефиниции и контекст
Точност в извадката отнася се до производителността на модела върху данните, използвани за неговото напасване или обучение. Този набор от данни е известен като обучителен набор. За разлика от това, точност извън извадката измерва производителността на модела върху данни, които не са били използвани по време на фазата на обучение. Тези данни се извличат от същото разпределение като данните за обучение, но се използват специално за тестване на способността на модела да се обобщава към нови данни. На практика точността извън извадката се оценява с помощта на валидационни набори и тестови набори.
Разграничението е важно поради централен риск в дълбокото обучение: *пренапасване*. Пренапасването възниква, когато моделът изучава не само основните модели, но и шума или особеностите на обучителните данни. В резултат на това, макар че моделът може да постигне изключително висока точност в извадката, той често не успява да се представи добре с нови данни извън извадката.
Теоретични основи: Обобщение
Крайната цел на предсказуемото моделиране не е да се представя добре с данните за обучение, а точно да се предскаже резултатът за нови, невиждани случаи. Това свойство е известно като *генерализация*. Способността за обобщение е това, което прави модела за дълбоко обучение ценен в реални приложения.
Модел с висока точност в извадката, но ниска точност извън извадката, не се счита за ефективен. Такъв модел вероятно е прекалено точно съобразен с данните за обучение (пренастройка), улавяйки шум и фалшиви модели, които не се обобщават. Обратно, модел с подобна точност в извадката и извън извадката се нарича добре обобщаващ. Постигането на баланс между недостатъчно напасване (твърде просто, лоша производителност навсякъде) и пренапасване (твърде сложно, лоша производителност извън извадката) е централно предизвикателство в дълбокото обучение.
Практическа илюстрация в PyTorch
Да предположим, че в PyTorch е създаден класификатор на изображения, който прави разлика между котки и кучета. Наборът от данни се състои от 10,000 8,000 етикетирани изображения, разделени на 2,000 изображения за обучение и XNUMX за тестване.
- Ако моделът постигне 98% точност на обучаващия набор, но само 65% на тестовия набор, това несъответствие предполага свръхобучение. Невронната мрежа се е научила да идентифицира сложни детайли в обучителните изображения, които не се обобщават за тестовите изображения. В тази ситуация точността в извадката не е показателна за реалната производителност.
- Ако моделът постигне 90% точност на обучаващия набор и 88% на тестовия набор, тази малка разлика показва, че моделът е научил общи характеристики, отнасящи се и за двата набора. Точността извън извадката предоставя надеждна оценка за това как моделът ще се представи с нови данни при внедряването.
Причини и откриване на свръхнапасване
Няколко фактора допринасят за ниската точност извън извадката спрямо точността в извадката:
- Сложност на моделаДълбоките невронни мрежи с много параметри имат огромен капацитет за попълване на сложни набори от данни, включително запаметяване на случаен шум. Ако мрежата е твърде голяма спрямо набора от данни, е вероятно пренареждане.
- Недостатъчно данниКогато наборът от данни е малък, мрежата може да научи специфични за набора от данни модели, които не са валидни в по-общ план.
- Липса на регулацияТехники като намаляване на теглото, отпадане и увеличаване на данните са предназначени да предотвратят пренареждането чрез ограничаване на модела или увеличаване на ефективния размер на обучителните данни.
Откриването на свръхнапасване е лесно: по време на обучението се следи точността както на обучението, така и на валидирането. Голяма разлика, с висока точност на обучение и ниска точност на валидиране/тестиране, е отличителен белег на свръхнапасване.
Методи за подобряване на точността извън извадката
Могат да се използват редица стратегии за намаляване на разликата между точността в извадката и извън извадката:
1. Регулиране:
Добавянето на наказателни членове към функцията за загуба (напр. регуларизация на L1 или L2) обезкуражава прекалено сложните модели. В PyTorch това може да се реализира чрез включване на разпадане на теглото в оптимизатора.
2. Отпадане:
Случайното задаване на нула на подмножество от активации по време на обучение помага за предотвратяване на коадаптацията на невроните, принуждавайки мрежата да учи по-стабилни функции.
3. Увеличаване на данните:
За данни за изображения, произволното изрязване, обръщане, завъртане и трептене на цветовете изкуствено увеличават набора от данни и излагат модела на по-широко разнообразие от входни модели.
4. Ранно спиране:
Мониторингът на точността на валидирането и спирането на обучението, когато то спре да се подобрява, предотвратява модела да продължи да се съобразява с данните за обучение за сметка на обобщението.
5. Кръстосано валидиране:
Разделянето на данните на няколко части и обучението на множество модели осигурява по-надеждна оценка на производителността извън извадката, особено когато данните са оскъдни.
Компромисът между отклонение и дисперсия
Разликата между точността в извадката и извън извадката е тясно свързана с компромиса между отклонението и дисперсията. Високата дисперсия означава, че моделът е твърде опростен (недостатъчно напасване), което води до лоша производителност навсякъде. Високата дисперсия означава, че моделът е твърде сложен, нарушава шума в данните за обучение и се представя лошо извън извадката.
- Ниско отклонение, висока дисперсияВисока точност на обучение, ниска точност на теста.
- Висока пристрастност, ниска дисперсияНиска точност и в двата набора от данни.
Идеалният сценарий е да се намери баланс, при който точността както в извадката, така и извън нея е висока и сходна.
Роля при избора и оценката на модела
При разработването на модели за дълбоко обучение, разчитането единствено на точността в извадката води до подвеждащи заключения относно предсказващата сила на модела. Точността извън извадката е предпочитаният показател за избор на модел, настройване на хиперпараметри и сравнение между модели.
Например, когато се използва PyTorch за проектиране на конволюционна невронна мрежа (CNN) за разпознаване на цифри, може да се експериментира с различни архитектури, скорости на обучение или схеми за регуляризация. Избира се моделът, който дава най-висока точност на тестване или валидиране, а не този с най-висока точност на обучение.
Казус: Класификация по CIFAR-10
Помислете за обучение на PyTorch модел върху набора от данни CIFAR-10, стандартен бенчмарк за класификация на изображения. Наборът от данни се състои от 60,000 10 изображения в 50,000 класа, като 10,000 XNUMX изображения са за обучение и XNUMX XNUMX за тестване.
– Нерегуляризирана дълбока CNN може да постигне 99% точност на обучаващия набор, но само 70% на тестовия набор.
– Прилагайки отпадане и допълване на данните, моделът може да постигне 95% точност на обучение, но 85% върху тестовия набор.
Въпреки че точността в извадката е по-ниска във втория сценарий, точността извън извадката е значително по-висока, което показва по-добро обобщение и по-полезен модел.
Специфични за PyTorch практики
В PyTorch, обучението и оценяването на моделите обикновено се обработват чрез две отделни фази:
- Фаза на обучениеМоделът е зададен на `model.train()`, градиентите се изчисляват и параметрите се актуализират.
- Етап на оценкаМоделът е зададен на `model.eval()` и точността се изчислява върху валидационния или тестовия набор. Важно е да се отбележи, че слоеве като dropout и batch нормализация се държат различно по време на оценката.
Това разделяне гарантира, че точността в извадката (измерена по време на обучението) и точността извън извадката (измерена по време на оценката) не се смесват.
Значение в реалните приложения
В практическите приложения, данните, с които се сблъсква даден модел, никога не са абсолютно същите като данните за обучение. Независимо дали става въпрос за прогнозиране на медицински резултати, препоръчване на продукти или откриване на обекти в изображения, способността за добра работа с нови данни е жизненоважна.
Модел, който се представя добре само в извадката, често е безполезен. Например, медицински диагностичен инструмент с висока точност в извадката, но ниска точност извън извадката, може да доведе до погрешна диагноза при прилагането му, с потенциално тежки последици.
Количествени показатели и отчитане
Въпреки че точността е често срещан показател, особено за задачи за балансирана класификация, подобни съображения важат и за други показатели за ефективност, като например прецизност, изчерпаемост, F1-оценка и площ под кривата (AUC). Във всички случаи фокусът трябва да бъде върху показателите извън извадката (валидация/тест) при отчитане и сравняване на модели.
Пример: Имплементация на код в PyTorch
По-долу е дадена основна илюстрация на това как да се следи точността както в извадката, така и извън нея в работен процес на PyTorch:
python
# Training loop
for epoch in range(num_epochs):
model.train()
correct_train = 0
total_train = 0
for inputs, labels in train_loader:
# Forward pass, backward pass, optimizer step
...
# Compute training accuracy
_, predicted = torch.max(outputs.data, 1)
total_train += labels.size(0)
correct_train += (predicted == labels).sum().item()
train_accuracy = 100 * correct_train/total_train
# Validation phase
model.eval()
correct_val = 0
total_val = 0
with torch.no_grad():
for inputs, labels in val_loader:
outputs = model(inputs)
_, predicted = torch.max(outputs.data, 1)
total_val += labels.size(0)
correct_val += (predicted == labels).sum().item()
val_accuracy = 100 * correct_val/total_val
print(f'Epoch {epoch}, Training Accuracy: {train_accuracy:.2f}%, Validation Accuracy: {val_accuracy:.2f}%')
Този подход позволява на практикуващите визуално да проследяват еволюцията на двата показателя и да откриват свръхнапасване рано.
Предизвикателства и нюанси
- Промяна в разпределението на данните: Точността извън извадката е значима само ако данните за обучение и тестване са извлечени от едно и също разпределение. Ако средата за внедряване се различава значително от данните за обучение (явление, известно като изместване на разпределението), дори високата точност на теста може да не гарантира добра производителност в реалния свят.
- Небалансирани набори от данни: В случаите, когато класовете са небалансирани, само по себе си точността може да не отрази адекватно производителността на модела. Трябва да се разгледат алтернативни показатели, но разграничението между производителност в извадката и извън извадката остава уместно.
- Хиперпараметрична настройка: Хиперпараметри като скорост на обучение, размер на партидата и сила на регуларизация често се избират въз основа на показатели извън извадката, за да се избегне пренапасване с обучителния набор.
Разбирането на разликата между точността в извадката и точността извън извадката е от основно значение за всеки, който изучава дълбоко обучение с Python и PyTorch. Тази концепция:
– Подчертава централната цел на прогнозното моделиране: обобщение.
– Илюстрира опасностите от преобучение и ограниченията на разчитането единствено на точността на обучението.
– Насочва правилното използване на техники за регуляризация и процедури за избор на модел.
– Осигурява информация за дизайна на експериментите и интерпретацията на резултатите.
– Полага основите за по-напреднали теми, като например трансферно обучение, адаптация на домейни и оценка на неопределеността.
Солидното разбиране на това разграничение води до по-надеждни, интерпретируеми и приложими модели и следователно е критичен аспект на практическото образование и практика в областта на дълбокото обучение.
Други скорошни въпроси и отговори относно EITC/AI/DLPP Дълбоко обучение с Python и PyTorch:
- Какво е един горещ вектор?
- Дали „to()“ е функция, използвана в PyTorch за изпращане на невронна мрежа към процесор, който създава определена невронна мрежа на определено устройство?
- Броят на изходите в последния слой в класифицираща невронна мрежа ще съответства ли на броя на класовете?
- Може ли конволюционна невронна мрежа да разпознае цветни изображения, без да добавя друго измерение?
- В класификационна невронна мрежа, в която броят на изходите в последния слой съответства на броя на класовете, трябва ли последният слой да има същия брой неврони?
- Каква е функцията, използвана в PyTorch за изпращане на невронна мрежа към процесор, който ще създаде определена невронна мрежа на определено устройство?
- Може ли функцията за активиране да бъде реализирана само от стъпкова функция (резултат с 0 или 1)?
- Функцията за активиране работи ли върху входните или изходните данни на даден слой?
- Възможно ли е да присвоите конкретни слоеве на конкретни графични процесори в PyTorch?
- PyTorch прилага ли вграден метод за изравняване на данните и следователно не изисква ръчни решения?
Вижте още въпроси и отговори в EITC/AI/DLPP Задълбочено обучение с Python и PyTorch

