훈련 중 신경망 최적화는 먼저 모델의 현재 상태에 대한 오차를 추정한 후, 다음 평가의 오차를 줄이기 위해 오차를 표현할 수 있는 함수를 사용하여 가중치를 업데이트하는 것이 필요합니다. 이 함수를 손실 함수라고 합니다.
손실 함수의 선택은 신경망 모델이 예제에서 학습하는 특정 예측 모델링 문제(예: 분류 또는 회귀)와 관련이 있습니다. 이 기사에서는 다음을 포함하여 일반적으로 사용되는 몇 가지 손실 함수를 소개합니다.
주요 회귀 예측 모델 연속 값을 예측하는 데 사용됩니다. 따라서 우리는 scikit-learn의 make_regression() 함수를 사용하여 일부 시뮬레이션 데이터를 생성하고 이 데이터를 사용하여 회귀 모델을 구축할 것입니다.
우리는 20개의 입력 특성을 생성할 것입니다. 그 중 10개는 의미가 있지만 10개는 문제와 관련이 없습니다.
그리고 무작위로 1,000개의 예시를 생성합니다. 그리고 무작위 시드를 지정하면 코드를 실행할 때마다 동일한 1,000개의 예제가 생성됩니다.
실제 값 입력 및 출력 변수를 합리적인 범위로 확장하면 신경망의 성능이 향상되는 경우가 많습니다. 그래서 우리는 데이터를 표준화해야 합니다.
StandardScaler는 scikit-learn 라이브러리에서도 사용할 수 있습니다. 문제를 단순화하기 위해 모든 데이터를 훈련 및 테스트 세트로 분할하기 전에 크기를 조정합니다.
그런 다음 훈련 세트와 검증 세트를 동일하게 분할합니다.
다양한 손실 함수를 도입하기 위해 작은 MLP(다층 퍼셉트론) 모델을 개발하겠습니다.
문제 정의에 따르면 입력으로 20개의 특성이 있으며 이는 모델을 통과합니다. 예측하려면 실제 값이 필요하므로 출력 레이어에는 노드가 있습니다.
최적화를 위해 SGD를 사용하며 학습률은 0.01, 모멘텀은 0.9이며 둘 다 합리적인 기본값입니다. 훈련은 100 epoch 동안 수행되며, 테스트 세트는 각 단계가 끝날 때 평가되고 학습 곡선이 그려집니다.
모델이 완성된 후 손실 함수를 도입할 수 있습니다.
가장 일반적으로 사용되는 회귀 문제는 평균 제곱 오류 손실(MSE)입니다. 이는 대상 변수의 분포가 가우스인 경우 최대 우도 추론에서 선호되는 손실 함수입니다. 따라서 더 나은 이유가 있는 경우에만 다른 손실 함수로 변경해야 합니다.
Keras에서 모델을 컴파일할 때 손실 함수로 "mse" 또는 "mean_squared_error"를 지정하면 평균 제곱 오차 손실 함수가 사용됩니다.
아래 코드는 위 회귀 문제의 완전한 예입니다.
예제를 실행하는 첫 번째 단계에서는 모델의 학습 및 테스트 데이터 세트의 평균 제곱 오차가 인쇄됩니다. 소수점 3자리가 유지되므로 0.000
으로 표시됩니다. 아래 그림에서 볼 수 있듯이 모델은 매우 빠르게 수렴되고 훈련 및 테스트 성능은 변경되지 않은 것으로 나타났습니다. 모델의 성능 및 수렴 속성에 따라 평균 제곱 오차는 회귀 문제에 적합한 선택입니다.
다양한 범위의 값을 갖는 회귀 문제에서는 큰 값을 예측할 때 모델에 평균 제곱 오차만큼 페널티를 주는 것이 바람직하지 않을 수 있습니다. 따라서 평균 제곱 오차는 먼저 각 예측 값의 자연 로그를 계산하여 계산할 수 있습니다. 이러한 손실을 MSLE 또는 평균 제곱 로그 오류라고 합니다.
예측값에 큰 차이가 있을 경우 페널티 효과를 완화하는 효과가 있습니다. 모델이 규모가 조정되지 않은 수량을 직접 예측할 때 이는 더 적절한 손실 측정이 될 수 있습니다.
keras의 손실 함수로 "mean_squared_logarithmic_error" 사용
아래 예는 MSLE 손실 함수를 사용한 전체 코드입니다.
모델의 MSE는 훈련 데이터 세트와 테스트 데이터 세트 모두에서 약간 더 나쁩니다. 이는 목표 변수의 분포가 표준 가우스 분포이기 때문입니다. 이는 우리의 손실 함수가 이 문제에 적합하지 않을 수 있음을 의미합니다.
아래 그림은 각 훈련 epoch의 비교를 보여줍니다. MSE는 잘 수렴하지만 epoch 20부터 변화할 때마다 감소하다가 증가하기 시작하므로 MSE가 과적합될 수 있습니다.
회귀 문제에 따라 대상 변수의 분포는 주로 가우스 분포일 수 있지만, 평균에서 멀리 떨어진 크거나 작은 값과 같은 이상치가 포함될 수 있습니다.
이 경우 평균 절대 오차 또는 MAE 손실은 이상값에 더 강력하므로 적합한 손실 함수입니다. 실제 값과 예측 값 간의 절대 차이를 고려하여 평균으로 계산됩니다.
"mean_absolute_error" 손실 함수를 사용하여
MAE를 사용한 전체 코드입니다
결과는 다음과 같습니다
아래 그림에서 볼 수 있듯이 MAE는 수렴하지만 울퉁불퉁 한 과정이 있습니다. 또한 MAE는 목표 변수가 큰 이상값이 없는 가우스 함수이기 때문에 이 경우에는 그다지 적합하지 않습니다.
이진 분류 문제는 예측 모델링 문제의 두 레이블 중 하나입니다. 이 문제는 첫 번째 또는 두 번째 클래스의 값을 0 또는 1로 예측하는 것으로 정의되며, 일반적으로 클래스 값 1에 속할 확률을 예측하는 것으로 구현됩니다.
또한 sklearn을 사용하여 데이터를 생성합니다. 여기서는 2차원 평면과 두 개의 동심원이 있는 문제를 사용합니다. 외부 원의 점은 클래스 0에 속하고 내부 원의 점은 클래스 1에 속합니다. . 학습을 더욱 어렵게 만들기 위해 샘플에 통계적 노이즈도 추가합니다. 표본 크기는 1000이고 통계적 잡음은 10% 추가되었습니다.
데이터 세트의 산점도는 우리가 모델링하는 문제를 이해하는 데 도움이 될 수 있습니다. 아래 나열된 것은 완전한 예입니다.
산점도는 다음과 같으며, 입력 변수는 점의 위치를 결정하고 색상은 클래스 값입니다. 0은 파란색이고 1은 주황색입니다.
여기에는 여전히 훈련용 절반과 테스트용 절반이 있습니다.
SGD 최적화를 사용하여 간단한 MLP 모델
을 정의합니다. 학습률은 0.01, 추진력은 0.99입니다.
모델은 200회의 피팅을 위해 훈련되었으며 모델의 성능은 손실과 정확도 측면에서 평가됩니다.
BCE는 이진 분류 문제를 해결하는 데 사용되는 기본 손실 함수입니다. 최대 우도 추론 프레임워크에서는 손실 함수를 선택합니다. 유형 1 예측의 경우 교차 엔트로피는 실제 확률 분포와 예측 확률 분포 간의 평균 차이를 요약하는 점수를 계산합니다.
Keras 모델을 컴파일할 때 Binary_crossentropy를 손실 함수로 지정할 수 있습니다.
클래스 1의 확률을 예측하려면 출력 레이어에 노드와 '시그모이드' 활성화가 포함되어야 합니다.
전체 코드는 다음과 같습니다.
모델은 테스트 데이터 세트에서 83%의 정확도와 85%의 정확도로 문제를 비교적 잘 학습했습니다. 점수 간에 어느 정도 겹치는 부분이 있는데, 이는 모델이 과대적합도 과소적합도 아님을 나타냅니다.
아래 사진처럼 훈련효과가 아주 좋습니다. 확률 분포 간의 오류가 연속적이므로 손실 플롯은 매끄러워지는 반면 정확도 선 플롯은 범프를 표시합니다. 훈련 및 테스트 세트의 예는 올바른지 또는 잘못된 것으로만 예측할 수 있고 덜 세부적인 정보를 제공할 수 있기 때문입니다.
지원 벡터 머신(SVM) 모델은 이진 분류 문제를 해결하기 위해 교차 엔트로피 대신 Hinge 손실 함수를 사용합니다.
목표 값은 이진 분류에 사용하기 위한 [-1, 1] 집합에 있습니다. 실제 클래스 값과 예측 클래스 값의 부호가 다른 경우 Hinge에서는 더 큰 오류가 발생합니다. 이진 분류 문제에서는 교차 엔트로피보다 더 나은 경우도 있습니다.
첫 번째 단계로 대상 변수의 값을 {-1, 1} 집합으로 수정해야 합니다.
케라스에서는 '힌지'라고 합니다.
네트워크의 출력 계층에서 tanh 활성화 함수의 단일 노드를 사용하여 -1과 1 사이의 단일 값을 출력해야 합니다.
전체 코드는 다음과 같습니다.
교차 엔트로피보다 약간 나쁜 성능, 훈련 및 테스트 세트의 정확도가 80% 미만입니다.
아래 그림에서 볼 수 있듯이 모델은 수렴하였고, 분류 정확도 그래프에서도 역시 수렴한 것을 알 수 있습니다.
이 문제에는 BCE가 더 낫다는 것을 알 수 있습니다. 여기서 가능한 이유는 노이즈 포인트가 있다는 것입니다
위 내용은 딥러닝 신경망 훈련에 일반적으로 사용되는 5가지 손실 함수의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!