> 백엔드 개발 > 파이썬 튜토리얼 > 신경망 최적화

신경망 최적화

DDD
풀어 주다: 2024-10-13 06:15:02
원래의
970명이 탐색했습니다.

La semaine dernière, j'ai publié un article sur la façon de construire des réseaux de neurones simples, en particulier des perceptrons multicouches. Cet article approfondira les spécificités des réseaux de neurones pour expliquer comment nous pouvons maximiser les performances d'un réseau de neurones en modifiant ses configurations.

Combien de temps faut-il former votre modèle

Lors de la formation d'un modèle, vous pourriez penser que si vous entraînez suffisamment votre modèle, celui-ci deviendra parfait. Cela est peut-être vrai, mais cela ne vaut que pour l'ensemble de données sur lequel il a été formé. En fait, si vous lui fournissez un autre ensemble de données dont les valeurs sont différentes, le modèle pourrait produire des prédictions complètement incorrectes.

Pour mieux comprendre cela, disons que vous vous entraînez chaque jour pour votre examen de conduite en conduisant en ligne droite sans bouger le volant. (S'il vous plaît, ne faites pas cela.) Bien que vous obteniez probablement de très bons résultats sur la piste d'accélération, si on vous demandait de tourner à gauche lors de l'examen lui-même, vous pourriez finir par vous transformer en panneau STOP à la place.

Ce phénomène est appelé surapprentissage. Votre modèle peut apprendre tous les aspects et modèles des données sur lesquelles il est formé, mais s'il apprend un modèle qui adhère trop étroitement à l'ensemble de données d'entraînement, alors lorsqu'il reçoit un nouvel ensemble de données, votre modèle fonctionnera mal. Dans le même temps, si vous n’entraînez pas suffisamment votre modèle, celui-ci ne sera pas en mesure de reconnaître correctement les modèles d’autres ensembles de données. Dans ce cas, vous seriez sous-ajusté.

Optimizing Your Neural Networks


Un exemple de surapprentissage. La perte de validation, représentée par la ligne orange augmente progressivement tandis que la perte d'entraînement, représentée par la ligne bleue, diminue.

Dans l'exemple ci-dessus, une excellente position pour arrêter l'entraînement de votre modèle serait la bonne lorsque la perte de validation atteint son minimum. Il est possible de le faire avec arrêt précoce, qui arrête l'entraînement une fois qu'il n'y a pas d'amélioration de la perte de validation après un nombre arbitraire de cycles d'entraînement (époques).

L'entraînement de votre modèle consiste à trouver un équilibre entre le surajustement et le sous-ajustement tout en utilisant un arrêt précoce si nécessaire. C'est pourquoi votre ensemble de données d'entraînement doit être aussi représentatif que possible de votre population globale afin que votre modèle puisse faire des prédictions plus précises sur les données qu'il n'a pas vues.

Fonctions de perte

L'une des configurations d'entraînement les plus importantes pouvant être modifiées est peut-être la fonction de perte, qui est "l'inexactitude" entre les prédictions de votre modèle et leurs valeurs réelles. L'« imprécision » peut être représentée mathématiquement de nombreuses manières différentes, l'une des plus courantes étant l'erreur quadratique moyenne (MSE) :

MSE=i=1n(y나는ˉy나는)2ntext{MSE} = frac{sum_{i=1}^n (바{y_i} - y_i)^2}{n} MSE= ni=1 n(yiˉyi)2

wo yiˉbar{y_i} yichˉ ist die Vorhersage des Modells und yiy_i yi ist der wahre Wert. Es gibt eine ähnliche Variante namens mittlerer absoluter Fehler (MAE)

MAE=i=1ny나는ˉy나는ntext{MAE} = frac{sum_{i=1}^n |bar{y_i} - y_i|}{n} MAE= ni=1 nyiˉyi

Quelle est la différence entre ces deux-là et lequel est le meilleur ? La vraie réponse est que cela dépend de divers facteurs. Considérons un exemple simple de régression linéaire bidimensionnelle.

Dans de nombreux cas, il peut y avoir des points de données qui constituent des valeurs aberrantes, des points éloignés des autres points de données. En termes de régression linéaire, cela signifie qu'il y a quelques points sur le xyxy xy -avions qui sont loin des autres. Si vous vous souvenez de vos cours de statistiques, ce sont des points comme ceux-ci qui peuvent affecter de manière significative la droite de régression linéaire calculée.

Optimizing Your Neural Networks
Un graphique simple avec des points sur (1, 1), (2, 2), (3, 3) et (4, 4)

Si vous vouliez penser à une ligne qui pourrait traverser les quatre points, alors y=xy = x y=x serait un excellent choix car cette ligne passerait par tous les points.

Optimizing Your Neural Networks
Un graphique simple avec des points sur (1, 1), (2, 2), (3, 3) et (4, 4) et la droite y=xy = x y=x en passant par ça

Cependant, disons que je décide d'ajouter un autre point à (5,1) (5, 1) (5,1) . Maintenant, quelle devrait être la droite de régression ? Eh bien, il s'avère que c'est complètement différent : y=0,2x 1,6y = 0,2x 1,6 y=0,2x 1,6

Optimizing Your Neural Networks


Un graphique simple avec des points sur (1, 1), (2, 2), (3, 3), (4, 4) et (5,1 ) avec une ligne de régression linéaire qui le traverse.

Compte tenu des points de données précédents, la ligne s'attendrait à ce que la valeur de yy y quand x=5x = 5 x=5 est 5, mais en raison de la valeur aberrante et de son MSE, la ligne de régression est « tirée vers le bas » de manière significative.

Ce n'est qu'un exemple simple, mais cela pose une question à laquelle vous, en tant que développeur d'apprentissage automatique, devez vous arrêter et réfléchir : Dans quelle mesure mon modèle doit-il être sensible aux valeurs aberrantes ? Si vous voulez que votre modèle pour être plus sensible aux valeurs aberrantes, vous choisirez alors une métrique comme MSE, car dans ce cas, les erreurs impliquant des valeurs aberrantes sont plus prononcées en raison de la mise au carré et votre modèle s'ajustera pour minimiser cela. Sinon, vous choisiriez une métrique comme MAE, qui ne se soucie pas autant des valeurs aberrantes.

옵티마이저

이전 게시물에서는 역전파, 경사하강법의 개념과 이들이 모델 손실을 최소화하는 방법에 대해서도 논의했습니다. 그라디언트는 가장 큰 변화의 방향을 가리키는 벡터입니다. 경사하강법 알고리즘은 이 벡터를 계산하고 정확히 반대 방향으로 이동하여 결국 최소값에 도달합니다.

대부분의 최적화 프로그램에는 일반적으로 다음과 같이 표시되는 특정 학습률이 있습니다. α알파 α 그들이 고수하는 것. 본질적으로 이는 기울기를 계산할 때마다 알고리즘이 최소값을 향해 이동하는 정도를 나타냅니다. 학습률을 너무 크게 설정하지 않도록 주의하세요! 최소값을 반복적으로 건너뛸 수 있는 큰 단계로 인해 알고리즘이 최소값에 도달하지 못할 수도 있습니다.

Optimizing Your Neural Networks
[Tensorflow의 신경망 놀이터](https://playground.tensorflow.org)에서는 학습률을 너무 크게 설정하면 어떤 일이 발생할 수 있는지 보여줍니다. 테스트 손실과 훈련 손실이 모두 `NaN`인 것을 확인하세요.

경사하강법으로 돌아가면 손실을 최소화하는 데 효과적이지만 손실 함수가 전체 데이터세트에 대해 계산되므로 훈련 프로세스가 크게 느려질 수 있습니다. 더 효율적이지만 각각의 단점이 있는 경사하강법에 대한 여러 가지 대안이 있습니다.

확률적 경사하강법

표준 경사하강법의 가장 인기 있는 대안 중 하나는 확률적 경사하강법(SGD)이라는 변형입니다. 경사하강법과 마찬가지로 SGD에도 고정된 학습률이 있습니다. 그러나 SGD는 경사 하강과 같은 전체 데이터 세트를 실행하는 대신 무작위로 선택된 작은 샘플을 사용하고 대신 샘플을 기반으로 신경망의 가중치를 업데이트합니다. 결국 매개변수 값은 손실 함수를 대략적으로(정확하지는 않지만) 최소화하는 지점으로 수렴됩니다. 이는 항상 정확한 최소값에 도달하지 않기 때문에 SGD의 단점 중 하나입니다. 또한 경사하강법과 마찬가지로 설정한 학습률에 계속 민감합니다.

아담 옵티마이저

Adam이라는 이름은 적응 모멘트 추정에서 따왔습니다. 기본적으로 SGD의 두 가지 변형을 결합하여 각 훈련 반복 중에 업데이트되는 빈도에 따라 각 입력 매개변수의 학습 속도를 조정합니다(적응형 학습 속도). 동시에 과거 기울기 계산을 이동 평균으로 추적하여 업데이트를 원활하게 합니다(모멘텀). 하지만 모멘텀 특성으로 인해 다른 알고리즘보다 수렴하는 데 시간이 더 오래 걸릴 수 있습니다.

모든 것을 하나로 합치기

이제 예를 들어보겠습니다!

PyTorch를 사용하여 간단한 선형 관계를 학습하는 신경망을 만드는 예제 연습을 Google Colab에서 만들었습니다.

Python이 처음이더라도 걱정하지 마세요! 각 섹션에서 무슨 일이 일어나는지 설명하는 몇 가지 설명을 포함시켰습니다.

반사

여기서 신경망 최적화에 대한 모든 내용을 다룰 수는 없지만, 최소한 자신의 모델을 훈련하는 동안 활용할 수 있는 가장 중요한 개념 몇 가지만 다루고 싶었습니다. 이번 주에 뭔가를 배우셨기를 바라며 읽어주셔서 감사합니다!

위 내용은 신경망 최적화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿