Indholdsfortegnelse:
Video: Annoncørbetalt indhold: Kelli kæmper med angst efter psykisk vold 2025
I betragtning af den neurale netværksarkitektur kan du forestille dig, hvor nemt algoritmen kan lære næsten alt fra data, især hvis du har tilføjet for mange lag. Faktisk gør algoritmen så godt, at dets forudsigelser ofte påvirkes af en høj estimatvariant kaldet overfitting. Overfitting får det neurale netværk til at lære hver eneste detalje i træningseksemplerne, hvilket gør det muligt at replikere dem i forudsigelsesfasen. Men bortset fra træningssættet vil det ikke altid forudsige noget andet.
Forstå overfitting problemet
Når du bruger et neuralt netværk til et reelt problem, skal du tage nogle forsigtighedsforanstaltninger på en meget strengere måde, end du gør med andre algoritmer. Neurale netværk er frailer og mere tilbøjelige til relevante fejl end andre maskinindlæringsløsninger.
For det første deler du dine data omhyggeligt til træning, validering og testsæt. Før algoritmen lærer af data, skal du evaluere godheden af dine parametre: arkitektur (antallet af lag og noder i dem); aktiveringsfunktioner læringsparameter; og antallet af iterationer. Arkitekturen giver især gode muligheder for at skabe kraftige prædiktive modeller med stor risiko for overfitting. Læringsparameteren styrer, hvor hurtigt et netværk lærer af data, men det kan ikke være tilstrækkeligt til at forhindre overfitting af træningsdataene.
Du har to mulige løsninger på dette problem:
- Den første løsning er regularisering som i lineær og logistisk regression. Du kan opsummere alle forbindelseskoefficienter, kvadreret eller i absolut værdi, for at straffe modeller med for mange koefficienter med høje værdier (opnået ved L2-regulering) eller med værdier, der er forskellige fra nul (opnået ved L1-regulering).
- Den anden løsning er også effektiv, fordi den styrer, når overfitting sker. Den kaldes tidligt stop og fungerer ved at tjekke omkostningsfunktionen på valideringssætet, som algoritmen lærer fra træningssættet.
Du kan ikke være klar over, hvornår din model starter overfitting. Omkostningsfunktionen, der beregnes ved hjælp af træningssættet, forbedres, da optimering skrider frem. Men så snart du begynder at optage støj fra dataene og stoppe med at lære generelle regler, kan du tjekke omkostningsfunktionen på en ude af prøven (valideringsprøven). På et tidspunkt vil du bemærke, at det holder op med at forbedre og begynder at blive forværret, hvilket betyder at din model har nået sin læringsgrænse.
Åbning af den sorte boks i neurale netværk
Den bedste måde at lære at opbygge et neuralt netværk på er at opbygge en. Python tilbyder et væld af mulige implementeringer til neurale netværk og dyb læring. Python har biblioteker som Theano, som tillader komplekse beregninger på abstrakt niveau og mere praktiske pakker som Lasagne, som giver dig mulighed for at opbygge neurale netværk, selv om det stadig kræver nogle abstraktioner. Af denne grund behøver du wrappere, som nolearn, som er kompatibel med scikit-lær eller Keras, som også kan pakke TensorFlow-biblioteket ud af Google, der har potentiale til at erstatte Theano som et softwarebibliotek til neural beregning.
R giver biblioteker, der er mindre komplicerede og mere tilgængelige, såsom nnet, AMORE og neuralnet. Disse korte eksempler i R viser, hvordan man træner både et klassificeringsnetværk (på Iris-datasættet) og et regressionsnetværk (på Boston-datasættet). Fra og med klassifikationen læser følgende kode datasættet og opdeles i træning og testsæt:
bibliotek (neuralnet)
mål <- model. matrix (~ Species, # 1, data = iris)
colnames (target) <- c ("setosa", "versicolor", "virginica")
sæt. frø (101)
indeks <- prøve (1: nrow (iris), 100)
train_predictors <- iris [indeks, 1: 4]
test_predictors <- iris [-index, 1: 4]
Da neurale netværk er afhængige af gradientafstamning, skal du standardisere eller normalisere inputene. Normalisering er bedre, så minimumet er nul og maksimum er en for hver funktion. Du lærer selvfølgelig, hvordan man foretager den numeriske konvertering kun ved hjælp af træningssættet for at undgå enhver chance for at bruge information fra testen uden for prøven.
min_vektor <- apply (train_predictors, 2, min)
range_vector <- apply (train_predictors, 2, max) -
anvend (train_predictors, 2, min)
train_scaled <- cbind
test_scaled <- cbind (skala (test_predictors,
min_vector, range_vector),
mål [-index,]) < sammendrag (train_scaled)
Når træningssættet er klar, kan du træne modellen for at gætte tre binære variabler, hvor hver af dem repræsenterer en klasse. Udgangen er en værdi for hver klasse proportional med sandsynligheden for at være den rigtige klasse. Du vælger en forudsigelse ved at tage den højeste værdi. Du kan også visualisere netværket ved at bruge det interne plot og dermed se den neurale netværksarkitektur og de tildelte vægte.
indstillet. frø (102)
nn_iris <- neuralnet (setosa + versicolor + virginica ~
Sepal. Længde + Sepal. Bredde
+ Petal. Længde + Petal. Bredde,
data = train_scaled, hidden = c (2),
lineær. Output = F)
plot (nn_iris)
forudsigelser <- beregne (nn_iris, test_scaled [1: 4])
y_predicted <- apply Resultat, 1, hvilket. max)
y_true <- apply (test_scaled [5: 7], 1, hvilket. max)
confusion_matrix <- table (y_true, y_predicted)
nøjagtighed <- sum diag (confusion_matrix)) /
sum (forvirring_matrix)
print (confusion_matrix)
print (indsæt ("Nøjagtighed:", nøjagtighed))
Du kan tegne et trænet neuralt netværk.
Følgende eksempel viser hvordan man kan forudsige husværdier i Boston ved hjælp af Boston-datasættet. Fremgangsmåden er den samme som i den foregående klassifikation, men her har du en enkelt udgangsenhed. Koden tegner også testsætets forventede resultater mod de reelle værdier for at verificere modelens gode pasform.
no_examples <- nrow (Boston)
sæt. frø (101)
indeks <- prøve (1: no_examples, 400)
tog <- boston [indeks,]
test <- boston [-index,]
min_vektor <- apply, 2, min)
range_vector <- apply (tog, 2, max) - apply (tog, 2, min)
scaled_train <- skala (tog, min_vector, range_vector)
scaled_test <- skala test, min_vector, range_vector)
formel = pasta ("medv ~", indsæt (funktioner [1: 13],
collapse = 'n'))
nn_boston <- neuralnet = scaled_train,
skjult = c (5, 3), lineær. output = T)
forudsigelser <- compute (nn_boston, scaled_test [1: 13])
forudsagt_værdier <- (forudsigelser $ netto. resultat
interval_vector [14]) + min_vector [14]
RMSE <- sqrt (middelværdi ((test [14] - forudsagt_valider) ^ 2))
udskrive (indsæt ("RMSE: RMSE))
plot (test [14], forudsagte_værdier, cex = 1. 5)
ablin (0, 1, lwd = 1)