신경망 : 어느 비용 함수를 사용해야합니까?


48

주로 신경망을 이용한 실험에 TensorFlow 를 사용하고 있습니다. 지금은 꽤 많은 실험 (XOR-Problem, MNIST, 일부 회귀 분석 등)을 수행했지만 전체적으로 초보자로 간주 될 수 있기 때문에 특정 문제에 대해 "정확한"비용 함수를 선택하는 데 어려움을 겪고 있습니다.

TensorFlow에 오기 전에 파이썬NumPy를 사용 하여 완전히 연결된 MLP와 일부 반복 네트워크를 코딩 했지만 간단한 제곱 오류와 간단한 그라디언트가 충분하지 않은 문제가있었습니다.

그러나 TensorFlow는 맞춤형 비용 함수 구축뿐만 아니라 많은 비용 함수 자체를 제공하므로 신경망의 비용 함수에 대한 자습서가 있는지 알고 싶습니다. (나는 이미 공식 TensorFlow 자습서의 절반과 같은 작업을 수행했지만 특정 비용 함수 또는 학습자가 특정 문제에 사용되는 이유를 설명 하지는 않습니다.

몇 가지 예를 들자면 :

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(y_output, y_train))

하나의 벡터의 합이 1이되도록 두 입력에 모두 softmax 함수를 적용한다고 생각합니다. 그러나 로짓과의 교차 엔트로피는 정확히 무엇입니까? 나는 그것이 값을 요약하고 교차 엔트로피를 계산한다고 생각했다. 출력을 정규화하고 합산하여 제곱 오류를 취하면 이것이 똑같지 않습니까? 또한 왜 이것이 MNIST (또는 훨씬 더 어려운 문제)에 사용됩니까? 10 또는 1000 클래스로 분류하려고 할 때 값을 합산하면 실제로 어떤 클래스가 출력인지에 대한 정보가 완전히 파괴되지 않습니까?

cost = tf.nn.l2_loss(vector)

이것은 무엇입니까? 나는 l2 손실이 거의 제곱 오차라고 생각했지만 TensorFlow의 API는 입력이 하나의 텐서라고 말합니다. 전혀 아이디어를 얻지 못합니까?!

게다가 나는 이것을 교차 엔트로피로 자주 보았습니다 .

cross_entropy = -tf.reduce_sum(y_train * tf.log(y_output))

... 그러나 왜 이것이 사용됩니까? 수학적으로 교차 엔트로피의 손실이 아닙니까?

-1/n * sum(y_train * log(y_output) + (1 - y_train) * log(1 - y_output))

(1 - y_train) * log(1 - y_output)대부분의 TensorFlow 예제에서 그 부분 은 어디에 있습니까 ? 빠지지 않습니까?


답변 : 이 질문은 매우 개방적이라는 것을 알고 있지만 모든 단일 문제 / 비용 기능이 자세히 나와있는 10 페이지를 기대하지는 않습니다. 어떤 비용 함수를 사용할 것인지 (일반적으로 또는 TensorFlow에서 나에게별로 중요하지 않음)에 대한 간단한 요약과이 주제에 대한 설명이 필요합니다. 초보자를위한 그리고 / 또는 일부 소스;)


1
좋은 질문. 사이트에 오신 것을 환영합니다 :)
Dawny33

2
일반적으로 MSE는 분류에 대한 회귀 및 교차 엔트로피에 사용됩니다. CFM (Classification Figure of Merit)은 햄프셔 (Hampshire)와 와이 벨 (Waibel)의 "시간 지연 신경망을 이용한 음소 인식 개선을위한 참신한 목적 함수"에서 소개되었습니다. 내가 정확하게 기억한다면 그들은 왜 그렇게 CFM을 설계했는지 설명합니다.
Martin Thoma

1
reduce_sum (y_train * tf.log (y_output))은 상당히 일반적인 "단순 사례"예제이기 때문에 많이 사용되는 것 같습니다. 각 배치의 오류를 합산합니다. 즉, batch_size가 두 배가되면 오류의 비용이 두 배가됩니다 (그라디언트의 크기). reduce_mean을 간단하게 변경하면 디버깅과 설정을 이해하는 것이 적어도 내 의견으로는 이해하기 쉽습니다.
신경 뉴

답변:


33

이 답변은 TensorFlow와 관련이없는 비용 함수 의 일반적인 측면에 있으며 대부분 질문의 "이 주제에 대한 설명"부분을 다룰 것입니다.

대부분의 예제 / 튜토리얼에서 사용 된 비용 함수는 다소 임의적이었습니다. 요점은 독자에게 비용 함수가 아닌 특정 방법을 소개하는 것이 었습니다. 도구에 익숙해지기 위해 튜토리얼을 따르는 것을 멈추지 않아야하지만 내 대답은 자신의 문제에 대한 비용 함수를 선택하는 방법에 도움이 될 것입니다.

교차 엔트로피, 로짓, L2 규범 또는 특정 사항에 대한 답변을 원하면 여러 가지 더 구체적인 질문을 게시하는 것이 좋습니다. 이를 통해 특정 지식을 가진 사람이 귀하의 질문을 볼 가능성이 높아집니다.


원하는 결과를 달성하기위한 적절한 비용 기능을 선택하는 것은 기계 학습 문제의 중요한 포인트입니다. 방법에서 원하는 것을 정확히 모르는 경우 기본 접근 방식 은 회귀 문제에 평균 제곱 오류 (Wikipedia) 를 사용하고 분류 문제에 대한 오류 백분율을 사용하는 것입니다. 그러나 방법에서 좋은 결과를 얻으 려면 good 을 정의하고 적절한 비용 함수 를 정의 해야 합니다. 이것은 도메인 지식 (데이터는 무엇인가, 달성하려고하는 것은 무엇이든)과 귀하가 사용할 수있는 툴에 대한 지식에서 비롯됩니다.

툴에 대한 지식이 거의 없으므로 TensorFlow에 이미 구현 된 비용 함수를 안내 할 수는 없지만 다른 비용 함수를 작성하고 평가하는 방법에 대한 예를 제공 할 수 있습니다.


비용 함수 간의 다양한 차이점을 설명하기 위해 각 샘플 에 대해 클래스 가 필요한 이진 분류 문제의 예를 사용합니다 .xnf(xn){0,1}

계산 속성으로 시작 ; "같은 것"을 측정하는 두 함수가 어떻게 다른 결과로 이어질 수 있을까요? 다음과 같은 간단한 비용 함수를 취하십시오. 오류율 당신이 경우 샘플, 예측 클래스이며, 진정한 클래스, 당신은 최소화하려면Nf(yn)yn

  • 1Nn{1 if f(xn)yn0 otherwise=nyn[1f(xn)]+[1yn]f(xn) .

이 비용 함수는 쉽게 해석 할 수 있다는 이점이 있습니다. 그러나 매끄럽지 않습니다. 두 개의 샘플 만있는 경우 "점프"기능은 0에서 0.5, 1로 조정됩니다.이 기능에서 그래디언트 디센트를 사용하려고하면 불일치가 발생합니다. 이를 피하는 한 가지 방법은 할당 확률을 사용하도록 비용 함수를 변경하는 것입니다. . 기능은p(yn=1|xn)

  • 1Nnynp(yn=0|xn)+(1yn)p(yn=1|xn) .

이 기능은 더 부드러 우며 경사 하강 방식으로 더 잘 작동합니다. '더 미세한'모델을 얻게됩니다. 그러나 다른 문제가 있습니다. 모호한 표본이있는 경우 보다 나은 것을 말할 수있는 충분한 정보가 없다고 . 그런 다음,이 비용 함수에 경사 하강을 사용하면이 확률을 가능한 한 많이 증가시켜 모델에 적합 할 수 있습니다.p(yn=1|xn)=0.5

이 기능의 또 다른 문제는 경우 동안 , 당신이 잘 될 것이 거의 확실한 경우,하지만 당신은 잘못입니다. 이 문제를 피하기 위해 확률 로그를 취할 수 있습니다 . 마찬가지로 및 , 다음 함수는 이전 단락에 설명 된 문제를 가지고 있지 않습니다p(yn=1|xn)=1yn=0logp(yn|xn)log(0)=log(1)=0

  • 1Nnynlogp(yn=0|xn)+(1yn)logp(yn=1|xn) .

이것은 같은 것 , 오류 비율 을 최적화하기 위해 다른 정의가 계산적으로 이해하기 쉬운 경우 다른 결과가 산출 될 수 있음을 설명해야합니다.

비용 함수 와 는 동일한 개념 을 측정 할 수 있지만 는 분석법이 보다 더 나은 결과를 이끌어 낼 수 있습니다 .ABAB


이제 다른 비용 함수가 다른 개념을 측정 할 수있는 방법을 살펴 보겠습니다. Google 검색에서와 같이 정보 검색의 맥락에서 (순위를 무시하는 경우) 반환 된 결과를

  • 관련성이없는 정보를 반환하지 않고 높은 정밀도를 가짐
  • 회수율 이 높고 최대한 관련성 높은 결과를 반환
  • 정밀도와 리콜 (Wikipedia)

알고리즘이 모든 것을 반환하면 가능한 모든 관련 결과를 반환하므로 리콜이 높지만 정밀도는 매우 낮습니다. 반면에 하나의 요소 만 반환 하면 가장 확실한 요소는 관련성이 높으며 정밀도는 높지만 리콜은 낮습니다.

이러한 알고리즘을 판단하기 위해 공통 비용 함수는 점수 (Wikipedia) 입니다. 일반적인 경우는 정밀도와 리콜에 동일한 가중치를 부여 하는 이지만 일반적인 경우 이며 를 조정 하여 얻을 수 있습니다.FF1Fββ

  • 을 사용하는 경우 더 높은 리콜β>1
  • 을 사용하면 정밀도가 높아집니다 .β<1

이러한 시나리오 에서 비용 함수를 선택하는 것은 알고리즘이 수행해야하는 트레이드 오프를 선택하는 것 입니다.

종종 제기되는 또 다른 예는 의학적 진단의 경우이며, 선호하는 것에 따라 더 많은 오탐 또는 오탐을 처벌하는 비용 함수를 선택할 수 있습니다.

  • 더 건강한 사람들은 병으로 분류됩니다 (그러나 우리는 건강한 사람들을 치료할 수 있습니다. 그들은 비용이 많이 들고 실제로 아프지 않으면 그들을 해칠 수 있습니다)
  • 더 많은 아픈 사람들이 건강하다고 분류됩니다 (그러나 치료없이 죽을 수도 있습니다)

결론적으로 비용 함수를 정의하는 것이 알고리즘의 목표를 정의하는 것입니다. 알고리즘은 도착하는 방법을 정의합니다.


참고 : 일부 비용 함수에는 목표를 달성하기위한 훌륭한 알고리즘 방법이 있습니다. 예를 들어 SVM (Wikipedia) 의 이중 문제를 해결하여 힌지 손실을 최소화하는 좋은 방법 이 있습니다 (Wikipedia)


10

교차 엔트로피에 대한 질문에 대답하기 위해 언급 한 내용이 모두 같은 것을 알 수 있습니다.

1n(y_trainlog(y_output)+(1y_train)log(1y_output))

이 0/1 스칼라이고 이 출력이 1 일 확률을 나타내는 스칼라 라고 가정하는 이진 교차 엔트로피 손실 입니다.y_trainy_output

언급 한 다른 방정식은 여러 클래스로 확장되는 일반적인 변형입니다.

-tf.reduce_sum(y_train * tf.log(y_output)) 글쓰기와 같은 것

ntrain_problog(out_prob)

여기서 합산은 여러 클래스에 걸쳐 있고 확률은 각 클래스에 대한 것입니다. 분명히 이진 경우에는 앞에서 언급 한 것과 똑같습니다. 는 상수로의 손실을 최소화하는 임의의 방식으로 기여하지 않는 기간은 생략한다.n


4

BLUF : 데이터 하위 집합 및 matplotlib을 사용한 반복적 인 시행 착오.

긴 답변 :

우리 팀은 그렇게 오래 전에 똑같은 질문으로 어려움을 겪고있었습니다. 여기에있는 모든 대답은 훌륭하지만, 나는 기계 학습에 익숙하지 않은 사람들을위한 시작점으로, 문맥에 대한 나의 "초보자의 대답"을 여러분과 나누고 싶었습니다.

알고리즘 및 데이터 세트의 특정 선택에 대해 부드럽고 볼록한 비용 함수를 목표로합니다. 이는 알고리즘이 가중치를 확실하고 효율적으로 조정하여 궁극적으로 해당 비용 함수의 전체 최소값에 도달 할 수 있기를 원하기 때문입니다. 비용 함수가 로컬 최대 값 및 최소값과 함께 "범프"하고 /하거나 전역 최소값이없는 경우 알고리즘이 수렴하기 어려울 수 있습니다. 그 무게는 어디에서나 뛰어 넘을 수 있으며, 궁극적으로 정확하고 일관된 예측을 제공하지 못합니다.

예를 들어, 선형 회귀를 사용하여 신장 (실수, 인치) 및 연령 (실수, 년)을 기준으로 누군가의 체중 (실수, 파운드)을 예측하는 경우 평균 제곱 오차 함수는 다음과 같습니다. 멋지고 부드럽고 볼록한 곡선. 알고리즘에는 수렴에 문제가 없습니다.

그러나 대신 지난 30 일 동안 기저귀를 구입했는지 여부와 지난 30 일 동안 맥주를 구입했는지에 따라 사람의 성별을 예측하는 것과 같이 이진 분류 문제에 로지스틱 회귀 알고리즘을 사용한다고 가정하십시오. 이 경우 평균 제곱 오차가 매끄러운 볼록한 표면을 제공하지 않을 수 있으며, 이는 훈련에 좋지 않을 수 있습니다. 그리고 당신은 그것을 실험에 의해 말할 것입니다.

MSE와 작고 간단한 데이터 샘플 또는이 실험을 위해 생성 한 모의 데이터를 사용하여 시험을 실행하여 시작할 수 있습니다. matplotlib (또는 선호하는 플로팅 솔루션)로 진행중인 작업을 시각화합니다. 결과 오차 곡선이 매끄럽고 볼록합니까? 추가 입력 변수로 다시 시도하십시오 ... 결과 표면이 여전히 부드럽고 볼록합니까? 이 실험을 통해 MSE가 문제 / 솔루션에 맞지 않지만 교차 엔트로피가 요구에 더 잘 맞는 매끄러운 볼록한 모양을 제공한다는 것을 알 수 있습니다. 따라서 더 큰 표본 데이터 세트로 시도해보고 가설이 여전히 유지되는지 확인할 수 있습니다. 만약 그렇다면, 당신은 전체 훈련 세트로 몇 번 시도해 볼 수 있고 그것이 어떻게 수행되는지 그리고 그것이 유사한 모델을 지속적으로 제공하는지 확인할 수 있습니다. 그렇지 않은 경우 다른 비용 함수를 선택하고 프로세스를 반복하십시오.

이 유형의 반복적 인 시행 착오 과정은 저와 저의 초보 데이터 과학자 팀에서 잘 작동 해 왔으며, 비용 함수 선택과 모델 최적화.

물론,이 시행 착오는 이미 많은 사람들에 의해 이루어 졌으므로, 우리는 대중의 지식을 활용하여 프로세스 초기에 좋은 비용 함수가 될 수있는 것에 대한 선택을 필터링 할 수 있습니다. 예를 들어, 크로스 엔트로피는 일반적으로 위의 예와 같이 로지스틱 회귀를 사용하는 이진 분류인지 또는 출력으로 softmax 레이어를 사용하는보다 복잡한 다중 레이블 분류인지에 따라 분류 문제에 적합한 선택입니다. MSE는 알려진 가능한 범주 세트 중에서 알려진 범주의 멤버십 가능성 대신 스칼라 예측을 찾는 선형 회귀 문제에 대한 첫 번째 선택이지만, 출력으로 softmax 레이어 대신 d는 활성화 기능없이 가중 된 입력과 바이어스의 가중 합계를 가질 수 있습니다.

이 답변이 지나치게 단순하고 명백하지 않은 다른 초보자에게 도움이되기를 바랍니다.


3

귀하의 질문을 재건

대부분의 TensorFlow 예제에서 (1-y_train) * log (1-y_output) 부분은 어디에 있습니까? 빠지지 않습니까?

답은 대부분의 출력 기능이 softmax라는 것입니다. 즉, 잘못된 경우 확률을 모두 줄일 필요는 없습니다. 올바른 확률을 높일 때 자동으로 줄어들 기 때문입니다.

예를 들어 :

최적화 전

y_output = [0.2, 0.2, 0.6]y_train = [0, 0, 1]

최적화 후

y_output = [0.15, 0.15, 0.7]y_train = [0, 0, 1]

여기서 우리는 단지 세 번째 항을 늘 렸지만 다른 모든 항은 자동으로 줄어드는 것을 관찰하십시오.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.