딥 러닝 지식 인터뷰에서 가장 흔히 묻는 질문 중 하나는 다음과 같습니다. “ 왜 신경망을 훈련하기 위해 2차 비용 함수를 사용할 수 없나요? ". 이번 글에서는 이 질문에 대한 답을 다루겠습니다. 수학이 많이 포함되지만 미친 것은 아닙니다! 나는 일을 간단하고 정확하게 유지하겠습니다.
신경망 의 일반적인 아키텍처를 고려하는 것부터 시작해 보겠습니다.
"입력 레이어"를 구성하는 일련의 입력, "숨겨진 레이어"의 일련의 뉴런, 이진 분류 문제에 대한 "출력 레이어"를 구성하는 하나의 뉴런이 있습니다. 이 질문에서는 이진 분류기를 다루고 있으므로 네트워크에서 출력 값이 하나만 있다고 가정합니다.
이제 입력 레이어를 녹색으로, 출력 뉴런을 빨간색으로, 숨겨진 레이어의 뉴런 하나를 주황색으로 강조한 다음 그림을 보십시오. 모든 녹색에서 주황색까지 모든 입력이 주황색 뉴런에 연결되어 있음을 알 수 있습니다. 즉, 주황색 뉴런의 '활성화'는 입력 레이어의 모든 녹색 뉴런의 '집합'을 사용하여 발생합니다. 이 프로세스는 최종 빨간색 출력 뉴런에 도달할 때까지 모든 레이어의 모든 뉴런에 대해 복제됩니다.
주황색 뉴런을 빨간색 뉴런으로 대체하면, 즉 은닉층을 제거하고 빨간색 뉴런을 녹색 뉴런에 직접 연결하면 어떻게 될까요?
우리는 다음을 얻을 것입니다:
이 질문에 대해서는 앞서 언급한 '단순한 아키텍처'를 가정하고 그 결과를 전체 아키텍처로 일반화할 수도 있습니다.
이제 몇 가지 수학을 단계별로 소개하겠습니다.
위에서 볼 수 있는 것은 신경망의 기본 "가중치 업데이트" 방정식입니다. 학습 요소 및 하위 샘플링(최소 배치) 등과 같은 추가 하이퍼 매개변수를 제거했습니다. w_k는 가중치 벡터이고 가중치는 신경망 모델의 '매개변수'입니다. w_k는 열 벡터에 수집된 개별 가중치로 구성됩니다. 이러한 가중치는 모델에 대한 입력(즉, 아키텍처의 녹색 뉴런)과 연결됩니다. 비용 함수 C_i가 있습니다. 여기서 i = 1부터 n은 샘플의 데이터 인스턴스 수입니다. 비용 함수 C는 실제 출력 y와 신경망(빨간색 뉴런)의 출력 사이의 "오차"입니다. 각 데이터 인스턴스는 실제 출력과 비교하여 예측된 출력을 생성하므로 모든 데이터 인스턴스에는 비용이나 오류가 있습니다. 모델의 목적은 전체 데이터 세트에 대해 평균적으로 이 비용 함수를 최소화하는 것입니다. 그리고 우리가 알고 있듯이 최소화 단계에는 모델 매개변수(가중치)에 대한 미분을 취하는 작업이 포함됩니다. 우리는 벡터 w_k의 편도함수를 사용하여 이를 수행합니다. 이것이 의미하는 바는 비용 C가 w_1에서 w_q까지의 가중치의 표현/집계가 될 것이며 각 가중치 w를 차별화하여 벡터에 수집한다는 것입니다. 이를 음의 "그라디언트 벡터"라고 합니다. k번째 반복부터 (k+1)번째 반복까지 가중치 벡터를 업데이트하는 데 사용됩니다. 방법론은 확률적 경사하강법(Stochastic Gradient Descent)이지만 이 기사에서는 이를 생략하겠습니다.
간단히 말해서, 신경망은 모든 샘플에 대해 평균을 내고 w_k에 대해 계산된 음의 기울기 벡터를 통해 가중치를 업데이트하여 학습합니다. 이는 비용 함수를 최소화하는 데 도움이 되며 네트워크가 정확도를 학습하고 향상시키는 데 도움이 됩니다. 가중치 업데이트가 발생하지 않으면 음의 기울기가 0을 향해 이동하기 때문에 학습이 중단된다는 것은 명백합니다. 이것이 반드시 최소값에 도달했다는 의미는 아닙니다! 비용 함수는 매우 복잡하고 다차원 공간에서 최소값을 찾아야 하기 때문입니다. 따라서 기울기가 0이고 네트워크가 학습을 중단하는 국소 최솟값이 많이 있을 수 있습니다. 어쨌든, 우리는 이 문제에 대해 걱정할 필요가 없습니다.
다음 표현식을 살펴보겠습니다.
이 표현식은 z_i를 입력 x_ji의 가중 합계로 정의합니다. 이러한 입력은 우리 아키텍처의 녹색 뉴런입니다. 숨겨진 레이어가 없기 때문에 입력 x_ji와 가중치 w_j를 결합하고 바이어스 항을 추가하여 아키텍처의 녹색 뉴런에서 빨간색 뉴런까지 연결 화살표로 표시되는 z_i를 얻습니다. q개의 입력이 있으므로 x_j와 w_j가 있습니다. 여기서 j = 1 ~ q입니다.
그러나 우리는 z_i를 빨간색 뉴런에 전달하지 않습니다. 여기에 "활성화 기능"을 적용합니다. 이 활성화 함수는 신경망마다 다를 수 있습니다. 이 문제의 목적을 위해 활성화 함수가 "Sigmoid" 또는 "logistic"이라고 가정합니다. 여기서는 독자가 이 기능을 알고 있다고 가정하고 다음 단계로 넘어갈 것입니다.
다음은 주요 문제 설명입니다. 비용 함수(C)를 어떻게 정의합니까? 이진 분류의 경우 비용 함수가 "교차 엔트로피"라는 것은 잘 알려져 있지만 여기서 문제는 왜 "2차"가 될 수 없는가입니다.
두 비용 함수의 표현식을 정의해 보겠습니다.
2차 비용 함수 - 교차 엔트로피 비용 함수 -
2차 비용 함수는 간단하지만(실제 출력 y_i와 예측 출력 a_i 사이의 최소 제곱 최소화를 생각해 보세요) 교차 엔트로피 비용 함수에 대한 몇 가지 설명을 제공할 수 있습니다. 이는 회귀 모델의 음의 로그 가능성과 유사합니다. 대괄호 외부에는 음수 부호가 있는데 이는 비용을 양수로 유지하는 데 사용됩니다(a_i는 0과 1 사이에 있으므로 시그모이드의 출력이므로 대괄호 안의 항은 항상 음수가 됩니다). 또한 a_i가 y_i에 실제로 가까워지면 비용은 실제로 0에 가까워집니다. 이는 y_i = 1이고 a_i ~ 1일 때 ln(a_i)는 대략 0이 되기 때문입니다. 마찬가지로 y_i = 0이고 a_i ~ 0일 때 ln(1-a_i)는 대략 0이 됩니다. 따라서 이 함수는 다음을 유지합니다. 모델이 잘 예측할 때 비용은 양수이고 최소입니다. 그러나 2차 비용 함수에 대해서도 마찬가지입니다. 그러나 우리는 그것을 사용하지 않습니다. 왜? 설명이 나오네요
앞서 본 기본 가중치 업데이트 방정식으로 돌아가서 여기에 2차 비용 함수를 입력합니다. 우리는 다음을 얻습니다
이제 일을 단순하게 유지하기 위해 하나의 데이터 포인트, 즉 i=1과 n=1만 고려하겠습니다. 그리고 각 가중치 w_j에 대해 부분적으로 차별화합니다. 우리는 다음을 얻습니다:
i = 1이므로 다음을 기억하세요.
z의 값을 대체하면 다음을 얻습니다.
이는 네트워크의 가중치 업데이트를 담당하는 그래디언트 벡터가 2차 비용 함수를 사용할 때 시그모이드 함수의 파생물을 갖게 된다는 것입니다.
이제 시그모이드 함수의 도함수 동작을 살펴보겠습니다.
위의 플롯에서 시그모이드 함수의 기울기를 나타내는 도함수는 입력 z가 커지자마자 0에 가까워지는 것이 분명합니다! 이것은 무엇을 의미 하는가? 이는 활성화 입력 z가 클 때 그래디언트 벡터가 0이 된다는 것을 의미합니다. 따라서 가중치가 업데이트되지 않으므로 네트워크는 학습을 중지합니다. 이것이 우리가 최소값에 도달했다는 의미는 아니라는 점을 기억하십시오. 이는 우리가 바람직하지 않은 지점과 최소값에서 멀리 떨어져 있을 수 있는 함수 공간에 갇혀 있음을 의미합니다. 이것을 "학습 속도 저하"라고 합니다. 그러나 이는 교차 엔트로피 비용 함수에서는 발생하지 않습니다.
교차 엔트로피 비용 함수를 사용하여 동일한 대체를 수행하고 다음을 얻습니다.
흥미로운 점은 다음과 같은 용어입니다.
2차 비용에 대한 기울기에서도 발생합니다. 그러나 이를 단순화하기 위해 사용할 트릭이 있습니다. 시그모이드 함수의 기울기는 다음과 같이 표현될 수 있습니다.
이를 원래 표현식으로 대체하면 다음과 같은 결과를 얻습니다.
이는 네트워크의 가중치 업데이트를 담당하는 그래디언트 벡터로, 교차 엔트로피 비용 함수를 사용할 때 시그모이드 함수의 파생물이 없습니다 . 따라서 이 비용 함수를 사용하면 학습 속도가 느려지지 않습니다.
더 나은 모양을 위해 그라디언트를 다시 병치합니다.
이것은 우리의 원래 질문에 대한 답입니다. 학습 속도가 느려지므로 2차 비용 함수를 사용하지 않습니다.
위의 분석은 (한 뉴런의) 출력 레이어에서만 수행되었지만 일반 신경망에도 일반화할 수 있습니다!